]> rtime.felk.cvut.cz Git - frescor/fwp.git/commitdiff
Added aegnt table
authorMartin Molnar <molnar@sum.(none)>
Thu, 6 Mar 2008 17:22:26 +0000 (18:22 +0100)
committerMartin Molnar <molnar@sum.(none)>
Thu, 6 Mar 2008 17:22:26 +0000 (18:22 +0100)
fwp/lib/fwp_msgb.h
fwp/mngt/Makefile.omk
fwp/mngt/fwp_admctrl.h
fwp/mngt/fwp_agent_table.c [new file with mode: 0644]
fwp/mngt/fwp_agent_table.h [new file with mode: 0644]
fwp/mngt/fwp_contract_table.c [new file with mode: 0644]
fwp/mngt/fwp_contract_table.h [moved from fwp/mngt/fwp_contractbl.h with 65% similarity]
fwp/mngt/fwp_contractbl.c [deleted file]
fwp/mngt/fwp_mngr.c
fwp/mngt/fwp_mngt.h

index fee0ced89e4f8702c28fcd4c928216d433450b24..0666958fdc2ffbc7378ae9ba1da84c405c2182d3 100644 (file)
 
 #define ADDRLEN_MAX 30
 
+typedef
 struct fwp_sockaddr{
        char            addr[ADDRLEN_MAX];
        socklen_t       addrlen;
-};
+} fwp_sockaddr_t;
 
 struct fwp_msgb {
        size_t                  buf_size;
@@ -23,7 +24,7 @@ struct fwp_msgb {
        unsigned char           *tail;          /**< msg data end*/
        struct fwp_sockaddr     *peer;          /**< peer address*/
        /*int flags;  MSG_DONTWAIT for async*/
-};
+} fwp_msgb_t;
 
 struct fwp_msgb* fwp_msgb_alloc(size_t buf_size);
 void fwp_msgb_free(struct fwp_msgb* msgb);
index 1ccba768aca3141df0dfd0bc88597b12beeb7ccc..7ad123c1b0ef566db2abf3017c1df192d730be75 100644 (file)
@@ -2,7 +2,7 @@ bin_PROGRAMS = fwpagent fwpmngr
 
 CFLAGS = -Wall -D_REENTRANT -g
 fwpagent_SOURCES+= fwp_agent.c fwp_forwardtbl.c
-fwpmngr_SOURCES+= fwp_mngr.c fwp_forwardtbl.c fwp_contractbl.c fwp_admctrl.c
+fwpmngr_SOURCES+= fwp_mngr.c fwp_forwardtbl.c fwp_contract_table.c fwp_admctrl.c
 #fwpmngr_SOURCES+= admtest_stupid.c
 #fwpmngr_SOURCES+= admtest_utilization.c
 
index 632565314cd5eea32be356c40a6036bae512c2a9..2088b67b03001490bbd9105b53f5cb00de2418b8 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef _FWP_ADMCTRL_H
 #define _FWP_ADMCTRL_H
 
-#include "fwp_contractbl.h"
+#include "fwp_contract_table.h"
 
 typedef void (*fwp_admctrl_test_t)(fwp_contract_data_t *contdata);
 
diff --git a/fwp/mngt/fwp_agent_table.c b/fwp/mngt/fwp_agent_table.c
new file mode 100644 (file)
index 0000000..db04f80
--- /dev/null
@@ -0,0 +1,39 @@
+#include "fwp_agent_table.h"
+
+GAVL_CUST_NODE_INT_DEC(_fwp_agent_table, fwp_agent_table_t, fwp_agent_data_t,
+               unsigned int, agent_tree, tree_node, addr, gavl_cmp_int);
+
+GAVL_CUST_NODE_INT_IMP(_fwp_agent_table, fwp_agent_table_t, fwp_agent_data_t, 
+                       unsigned int, agent_tree, tree_node, label, gavl_cmp_int);
+
+void fwp_agent_table_init(struct fwp_agent_table *tbl)
+{
+       _fwp_agent_table_init_root_field(tbl);
+       tbl->nr_agents = 0;
+}
+
+int fwp_agent_table_insert(fwp_agent_table_t *tbl, 
+                               fwp_agent_data_t *agdata)
+{
+       /* obtain fwp ctable mutex */
+       _fwp_agent_table_insert(tbl, agdata);
+       tbl->nr_agents++;
+       /* release fwp_contract_table mutex */  
+}
+
+fwp_agent_data_t* fwp_agent_table_find(fwp_agent_table_t *tbl, 
+                                               unsigned int id)
+{
+       return _fwp_agent_table_find(tbl, &id);
+}
+
+int fwp_agent_table_delete(fwp_agent_table_t *tbl, 
+                               fwp_agent_data_t *agdata)
+{
+       int rv;
+
+       rv = _fwp_agent_table_delete(tbl, agdata); 
+       tbl->nr_agents--;
+       
+       return rv;
+}
diff --git a/fwp/mngt/fwp_agent_table.h b/fwp/mngt/fwp_agent_table.h
new file mode 100644 (file)
index 0000000..9315e11
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef _FWP_AGENT_TABLE_H
+#define _FWP_AGENT_TABLE_H
+
+typedef
+struct fwp_agent_data {
+       int                     addr;
+       fwp_sockaddr            peer;
+       gavl_node_t             *contract_tree; 
+
+       gavl_node_t             tree_node;
+} fwp_agent_data_t;
+
+typedef
+struct fwp_agent_table {
+       unsigned int                    nr_agent;
+       /*pthread_mutex_t               lock; */
+       /*gavl_cust_root_field_t        root;*/
+       gavl_node_t                     *agent_tree;
+} fwp_agent_table_t;
+
+void fwp_agent_table_init(fwp_agent_table_t *tbl);
+int fwp_agent_table_insert(fwp_agent_table_t *tbl, 
+                               fwp_agent_data_t *contdata);
+fwp_agent_data_t* 
+fwp_agent_table_find(fwp_agent_table_t *tbl, unsigned int id);
+
+int fwp_agent_table_delete(fwp_agent_table_t *tbl,
+                               fwp_agent_data_t *contdata);
+
+#endif /*_FWP_AGENT_TABLE_H*/
diff --git a/fwp/mngt/fwp_contract_table.c b/fwp/mngt/fwp_contract_table.c
new file mode 100644 (file)
index 0000000..2120990
--- /dev/null
@@ -0,0 +1,46 @@
+#include "fwp_contract_table.h"
+
+GAVL_CUST_NODE_INT_DEC(_fwp_contract_table, fwp_contract_table_t, fwp_contract_data_t,
+               unsigned int, cont_tree, tree_node, label, gavl_cmp_int);
+
+GAVL_CUST_NODE_INT_IMP(_fwp_contract_table, fwp_contract_table_t, fwp_contract_data_t, 
+                       unsigned int, contract_tree, tree_node, label, gavl_cmp_int);
+
+void fwp_contract_table_init(struct fwp_contract_table *tbl)
+{
+       tbl->id_counter = 0;
+       _fwp_contract_table_init_root_field(tbl);
+       tbl->nr_contracts = 0;
+}
+
+int fwp_contract_table_insert(fwp_contract_table_t *tbl, 
+                         fwp_contract_data_t *contdata)
+{
+       unsigned int id = tbl->id_counter++;
+        
+       /* obtain fwp ctable mutex */
+       /* find free contract */
+       contdata->label = id;
+       _fwp_contract_table_insert(tbl, contdata);
+       tbl->nr_contracts++;
+       /* release fwp_contract_table mutex */  
+       
+       return id;
+}
+
+fwp_contract_data_t* fwp_contract_table_find(fwp_contract_table_t *tbl, unsigned int id)
+{
+       return _fwp_contract_table_find(tbl, &id);
+}
+
+int fwp_contract_table_delete(fwp_contract_table_t *tbl,
+                         fwp_contract_data_t *contdata)
+{
+       int rv;
+
+       rv = _fwp_contract_table_delete(tbl, contdata); 
+       tbl->nr_contracts--;
+       
+       return rv;
+}
+
similarity index 65%
rename from fwp/mngt/fwp_contractbl.h
rename to fwp/mngt/fwp_contract_table.h
index 7427e53ede034437a672f24c94739e5479e9e926..f686fd1d1ec529c11f4569513ce921e022b7abd8 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef _FWP_CONTRACTBL_H
-#define _FWP_CONTRACTBL_H
+#ifndef _FWP_CONTRACT_TABLE_H
+#define _FWP_CONTRACT_TABLE_H
 
 #include "fwp_conf.h"
 #include "fwp_contract.h"
@@ -44,40 +44,34 @@ struct fwp_contract_data {
  *
  */
 typedef
-struct fwp_contractlist {
+struct fwp_contract_list {
        ul_list_head_t                  head;
-} fwp_contractlist_t;
+} fwp_contract_list_t;
 
-UL_LIST_CUST_DEC(fwp_contractlist, fwp_contractlist_t, fwp_contract_data_t,
+UL_LIST_CUST_DEC(fwp_contract_list, fwp_contract_list_t, fwp_contract_data_t,
                 head, list_node);
 
-
 /**
  * Table of contract_data structures
  *
  */
 typedef 
-struct fwp_contractbl {
-       /*struct fwp_contract_data      entry[FWP_CONTRACT_MAX];*/
-       unsigned int                    nr_contract;
+struct fwp_contract_table {
+       unsigned int                    nr_contracts;
        /*pthread_mutex_t               lock; */
        /*gavl_cust_root_field_t        root;*/
        unsigned int                    id_counter;
        /*ul_list_head_t                cont_list;*/
        gavl_node_t                     *cont_tree;
-} fwp_contractbl_t;
-
-GAVL_CUST_NODE_INT_DEC(_fwp_contractbl, fwp_contractbl_t, fwp_contract_data_t,
-               unsigned int, cont_tree, tree_node, label, gavl_cmp_int);
-
+} fwp_contract_table_t;
 
-void fwp_contractbl_init(fwp_contractbl_t *tbl);
-int fwp_contractbl_insert(fwp_contractbl_t *tbl, 
+void fwp_contract_table_init(fwp_contract_table_t *tbl);
+int fwp_contract_table_insert(fwp_contract_table_t *tbl, 
                                fwp_contract_data_t *contdata);
 fwp_contract_data_t* 
-fwp_contractbl_find(fwp_contractbl_t *tbl, unsigned int id);
+fwp_contract_table_find(fwp_contract_table_t *tbl, unsigned int id);
 
-int fwp_contractbl_delete(fwp_contractbl_t *tbl,
+int fwp_contract_table_delete(fwp_contract_table_t *tbl,
                          fwp_contract_data_t *contdata);
 
-#endif /* _FWP_CONTRACTBL_H */ 
+#endif /* _FWP_CONTRACT_TABLE_H */ 
diff --git a/fwp/mngt/fwp_contractbl.c b/fwp/mngt/fwp_contractbl.c
deleted file mode 100644 (file)
index 2d02d14..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "fwp_contractbl.h"
-
-GAVL_CUST_NODE_INT_IMP(_fwp_contractbl, fwp_contractbl_t, fwp_contract_data_t, 
-                       unsigned int, cont_tree, tree_node, label, gavl_cmp_int);
-
-void fwp_contractbl_init(struct fwp_contractbl *tbl)
-{
-/*     unsigned int i;
-       
-       for (i = 0; i < FWP_CONTRACT_MAX; i++)
-               contractbl->entry[i].status = FWP_CONT_INVALID;*/
-       
-       tbl->id_counter = 0;
-       _fwp_contractbl_init_root_field(tbl);
-       tbl->nr_contract = 0;
-}
-
-int fwp_contractbl_insert(fwp_contractbl_t *tbl, 
-                         fwp_contract_data_t *contdata)
-{
-       unsigned int id = tbl->id_counter++;
-        
-       /* obtain fwp ctable mutex */
-       /* find free contract */
-       contdata->label = id;
-       _fwp_contractbl_insert(tbl, contdata);
-       tbl->nr_contract++;
-       /* release fwp_contractbl mutex */      
-       
-       return id;
-}
-
-fwp_contract_data_t* fwp_contractbl_find(fwp_contractbl_t *tbl, unsigned int id)
-{
-       return _fwp_contractbl_find(tbl, &id);
-}
-
-int fwp_contractbl_delete(fwp_contractbl_t *tbl,
-                         fwp_contract_data_t *contdata)
-{
-       int rv;
-
-       rv = _fwp_contractbl_delete(tbl, contdata); 
-       tbl->nr_contract--;
-       
-       return rv;
-}
-
index 641b76d44c6b7dc39b84af381db7f25cbac5cdc1..a3996f7afb103aa40a364a4ec69b3931f9c52dd4 100644 (file)
@@ -1,6 +1,6 @@
 //#include "admtest.h"
 #include "fwp_mngt.h"
-#include "fwp_contractbl.h"
+#include "fwp_contract_table.h"
 #include "fwp_admctrl.h"
 
 //static struct sockaddr_un fwp_laddr;         /**< FWP local address */
@@ -17,8 +17,11 @@ struct fwp_sockaddr  peer;
 struct fwp_vres_params service_vparams;                
 unsigned int           service_vres_id;        /**< id of service vres */
 
+/* Agent table */
+fwp_agent_table_t      agent_table;            /**< agent table*/
+
 /* Contract table */
-fwp_contractbl_t       contractbl;             /**< contract table*/
+fwp_contract_table_t   contractbl;             /**< contract table*/
 
 /* List of requested contracts */
 /*fwp_contractlist_t   contractlist_req;*/
@@ -181,29 +184,52 @@ int fwp_mngr_contnegt_response(unsigned int hid, fwp_contract_data_t *contdata)
        return 0;
 }
 
+void fwp_mngr_contract_insert(fwp_sockaddr_t *agent_addr, 
+                               fwp_contract_data_t *contdata)
+{
+       unsigned int addr;
+       struct sockaddr_in *addr_in;
+       fwp_agent_data_t *agdata;       
+
+       addr_in = (struct sockaddr_in*) agent_addr->addr;
+       addr = addr_in.sin_addr; 
+       agdata = fwp_agent_table_find(&agent_table, &addr);
+       if (!agdata) {
+               /* Alloc new agent data */
+               agdata = (fwp_agent_data_t*)malloc(sizeof(fwp_agent_data_t));
+               agdata->addr = addr;
+               memcpy(agdata->peer, agent_addr, sizeof(fwp_sockaddr));
+               fwp_contract_table_init(agdata->contract_tree);
+               fwp_agent_table_insert(agent_table, &agdata);
+       }
+       fwp_contract_table_insert(agdata->contract_tree);  
+}
+
 void fwp_mngr_msg_handler(struct fwp_msgb *msgb)
 {
        unsigned int code, hid;
+       fwp_sockaddr_t  sockaddr;
 
        fwp_msg_header_inflate(msgb->data, &code, &hid);
        fwp_msgb_pull(msgb, sizeof(struct fwp_msg_header));
        FWP_DEBUG("code = %d , hid = %d\n", code, hid);
-                       
+       memcpy(&fwp_sockaddr, msgb->peer, sizeof(fwp_scokaddr_t));
+
        switch  (code) {
                case  FWP_CONTNEGT_REQ: 
                        FWP_DEBUG("Negotiation Request received\n");    
                        fwp_mngr_contnegt_request(msgb);        
                        
                        FWP_DEBUG("Executing admission control test\n");
-                       fwp_admctrl_test(cont_req);
+                       fwp_admctrl_test(contract_req);
                        
                        /* right now simply add to contract table if negotiated */
                        if (cont_req->status == FWP_CONT_NEGOTIATED) {
-                               fwp_contractbl_insert(&contractbl, cont_req);
+                               fwp_mngr_contract_insert(&msgb->peer, &contract_req);
                        }
 
                        FWP_DEBUG("Preparing NEGT_RES msg\n");
-                       fwp_mngr_contnegt_response(hid, cont_req);      
+                       fwp_mngr_contnegt_response(hid, contract_req);  
                        break;
                default:
                        printf("Invalid message\n.");
index 13692e485f4c705f34f4ac51dd4214c4cf3ed6ab..648f238c9dc26834510061c8195a32587c1e31ac 100644 (file)
@@ -15,7 +15,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "fwp_contractbl.h"
+#include "fwp_contract_table.h"
 #include "fwp_msg.h"
 #include "fwp_vres.h"
 #include "fwp_util.h"