diff --git a/actube.workspace b/actube.workspace index d976dd40..a1ba30eb 100644 --- a/actube.workspace +++ b/actube.workspace @@ -3,9 +3,9 @@ - + - + diff --git a/src/cw/capwap.h b/src/cw/capwap.h index e7e5865c..4a7fafb7 100644 --- a/src/cw/capwap.h +++ b/src/cw/capwap.h @@ -249,10 +249,10 @@ * about the WTP */ #define CAPWAP_ELEM_WTP_DESCRIPTOR 39 #define CW_ELEM_WTP_FALLBACK 40 -#define CW_ELEM_WTP_FRAME_TUNNEL_MODE 41 +#define CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE 41 #define CW_ELEM_RESERVED_42 42 #define CW_ELEM_RESERVED_43 43 -#define CW_ELEM_WTP_MAC_TYPE 44 +#define CAPWAP_ELEM_WTP_MAC_TYPE 44 #define CW_ELEM_WTP_NAME 45 #define CW_ELEM_RESERVED_46 46 #define CW_ELEM_WTP_RADIO_STATISTICS 47 diff --git a/src/cw/capwap_strings_elem.c b/src/cw/capwap_strings_elem.c index b405b5eb..81395291 100644 --- a/src/cw/capwap_strings_elem.c +++ b/src/cw/capwap_strings_elem.c @@ -47,10 +47,10 @@ struct cw_strlist_elem capwap_strings_elem[] = { {CAPWAP_ELEM_WTP_BOARD_DATA, "WTP Board Data"}, {CAPWAP_ELEM_WTP_DESCRIPTOR, "WTP Descriptor"}, {CW_ELEM_WTP_FALLBACK, "WTP Fallback"}, - {CW_ELEM_WTP_FRAME_TUNNEL_MODE, "WTP Frame Tunnel Mode"}, + {CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE, "WTP Frame Tunnel Mode"}, {CW_ELEM_RESERVED_42, "Reserved 42"}, {CW_ELEM_RESERVED_43, "Reserved 43"}, - {CW_ELEM_WTP_MAC_TYPE, "WTP MAC Type"}, + {CAPWAP_ELEM_WTP_MAC_TYPE, "WTP MAC Type"}, {CW_ELEM_WTP_NAME, "WTP Name"}, {CW_ELEM_RESERVED_46, "Reserved 46"}, {CW_ELEM_WTP_RADIO_STATISTICS, "WTP Radio Statistics"}, diff --git a/src/cw/message_set.c b/src/cw/message_set.c index f268a09c..a30906b4 100644 --- a/src/cw/message_set.c +++ b/src/cw/message_set.c @@ -4,12 +4,13 @@ #include "message_set.h" -struct message_search_elem{ - cw_messagedef_t *message; +typedef struct { + int type; + const char * name; + int * states; mavl_t elements_tree; mlist_t elements_list; -}; - +}message2_t; static inline int cmp_cw_message_element(const void *elem1, const void *elem2){ cw_message_element_t * e1 = (cw_message_element_t*)elem1; @@ -30,31 +31,10 @@ static inline int cmp_cw_message_element(const void *elem1, const void *elem2){ static inline int msg_cmp(const void *elem1, const void *elem2) { -/* struct cw_action_in *e1 = (struct cw_action_in *) elem1; - struct cw_action_in *e2 = (struct cw_action_in *) elem2; - int r; - - r = e1->capwap_state - e2->capwap_state; - if (r != 0) - return r; - - r = e1->msg_id - e2->msg_id; - if (r != 0) - return r; - - r = e1->elem_id - e2->elem_id; - if (r != 0) - return r; - - r = e1->vendor_id - e2->vendor_id; - if (r != 0) - return r; - - r = e1->proto - e2->proto; - if (r != 0) - return r; -*/ - return 0; + message2_t * e1 = (message2_t*)elem1; + message2_t * e2 = (message2_t*)elem2; + + return e1->type - e2->type; } @@ -98,21 +78,23 @@ cw_message_set_t * cw_message_set_create(){ void cw_message_set_add(cw_message_set_t * set, - cw_message_t * messages, - cw_message_element_t * elements[]){ + cw_message_t messages[], + cw_message_element_t elements[]){ - cw_message_element_t ** e; + cw_message_element_t * e; for (e=elements; e->id!=0; e++){ - - // mavl_add(set->all_elems, e); - - printf("Add: %d %d %d %s\n", - e->proto, - e->vendor, - e->id, - e->name - ); - - + mavl_replace(set->all_elems, e); } + + cw_message_t * m; + for (m=messages; m->type !=0; m++){ + printf("MESS: %d %s",m->type, m->name); + } + } + +cw_message_element_t * cw_message_set_find_element( + cw_message_set_t * set, + cw_message_element_t * element){ + return mavl_find(set->all_elems,element); +} \ No newline at end of file diff --git a/src/cw/message_set.h b/src/cw/message_set.h index 06479b75..7651d84a 100644 --- a/src/cw/message_set.h +++ b/src/cw/message_set.h @@ -6,6 +6,6 @@ extern void cw_message_set_destroy(cw_message_set_t * set); extern cw_message_set_t * cw_message_set_create(); extern void cw_message_set_add(cw_message_set_t * set, - cw_message_t * messages, - cw_message_element_t * elements[]); + cw_message_t messages[], + cw_message_element_t elements[]); #endif \ No newline at end of file diff --git a/src/mod/capwap/capwap_actions_ac.c b/src/mod/capwap/capwap_actions_ac.c index cb211cdf..76f4ea8f 100644 --- a/src/mod/capwap/capwap_actions_ac.c +++ b/src/mod/capwap/capwap_actions_ac.c @@ -53,7 +53,7 @@ static cw_message_element_t elements[] = { } , { - .id = CW_ELEM_WTP_FRAME_TUNNEL_MODE, + .id = CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE, .name = "WTP Frame Tunnel Mode", // .start = cw_in_generic2, // .item_id = CW_ITEM_WTP_FRAME_TUNNEL_MODE, @@ -61,6 +61,34 @@ static cw_message_element_t elements[] = { .max_len = 1 } , + { + + .id = CAPWAP_ELEM_WTP_MAC_TYPE, + .name = "WTP Mac Type", +// .start = cw_in_generic2, +// .item_id = CW_ITEM_WTP_MAC_TYPE, + + .min_len = 1, + .max_len = 1 + }, + /* MTU Discovery Padding */ + { + .id = CW_ELEM_MTU_DISCOVERY_PADDING, + .name = "MTU Discovery Padding" +// .start = cw_in_mtu_discovery_padding, + } + , + { + + .id = CW_ELEM_VENDOR_SPECIFIC_PAYLOAD, + .name = "Vendor Specific Payload", +// .start = cw_in_vendor_specific_payload, + .min_len=7 + } + , + + + {.id=0} }; @@ -68,17 +96,22 @@ static cw_message_t messages[] = { /* Discovery Request Message*/ { + .name = "Discovery Request", .type = CAPWAP_MSG_DISCOVERY_REQUEST, .states = (int[]){CAPWAP_STATE_DISCOVERY,0}, .elements = (cw_messagedef_t[]){ {0,0,CAPWAP_ELEM_DISCOVERY_TYPE,1}, {0,0,CAPWAP_ELEM_WTP_BOARD_DATA,1}, {0,0,CAPWAP_ELEM_WTP_DESCRIPTOR,1}, - {0,0,CW_ELEM_WTP_FRAME_TUNNEL_MODE,1}, + {0,0,CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE,1}, + {0,0,CAPWAP_ELEM_WTP_MAC_TYPE,1}, + {0,0,CW_ELEM_MTU_DISCOVERY_PADDING,0}, + {0,0,CW_ELEM_VENDOR_SPECIFIC_PAYLOAD,0} } } }; + void test_sets(){ cw_message_set_t * set = cw_message_set_create(); @@ -87,7 +120,24 @@ void test_sets(){ return; } - cw_message_set_add(set,messages,&elements); + cw_message_set_add(set,messages,elements); + + cw_message_element_t el, *result; + memset(&el,0,sizeof(el)); + el.id=CAPWAP_ELEM_DISCOVERY_TYPE; + + result = mavl_find(set->all_elems,&el); + + if (result!=NULL){ + printf("Found: %d %s\n", + result->id, + result->name + ); + } + else{ + printf("not found\n"); + } + } @@ -156,7 +206,7 @@ static cw_action_in_t actions_in[] = { { .capwap_state = CAPWAP_STATE_DISCOVERY, .msg_id = CAPWAP_MSG_DISCOVERY_REQUEST, - .elem_id = CW_ELEM_WTP_FRAME_TUNNEL_MODE, + .elem_id = CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE, .start = cw_in_generic2, .item_id = CW_ITEM_WTP_FRAME_TUNNEL_MODE, .mand = 1, @@ -169,7 +219,7 @@ static cw_action_in_t actions_in[] = { { .capwap_state = CAPWAP_STATE_DISCOVERY, .msg_id = CAPWAP_MSG_DISCOVERY_REQUEST, - .elem_id = CW_ELEM_WTP_MAC_TYPE, + .elem_id = CAPWAP_ELEM_WTP_MAC_TYPE, .start = cw_in_generic2, .item_id = CW_ITEM_WTP_MAC_TYPE, .mand = 1, @@ -178,6 +228,8 @@ static cw_action_in_t actions_in[] = { } , + + /* MTU Discovery Padding */ { .capwap_state = CAPWAP_STATE_DISCOVERY, @@ -186,7 +238,7 @@ static cw_action_in_t actions_in[] = { .start = cw_in_mtu_discovery_padding, } , - +// TODO: Add them /* Vendor Specific Payload */ { .capwap_state = CAPWAP_STATE_DISCOVERY, @@ -273,7 +325,7 @@ static cw_action_in_t actions_in[] = { { .capwap_state = CW_STATE_JOIN, .msg_id = CAPWAP_MSG_JOIN_REQUEST, - .elem_id = CW_ELEM_WTP_FRAME_TUNNEL_MODE, + .elem_id = CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE, .start = cw_in_generic2, .item_id = CW_ITEM_WTP_FRAME_TUNNEL_MODE, .mand = 1, @@ -286,7 +338,7 @@ static cw_action_in_t actions_in[] = { { .capwap_state = CW_STATE_JOIN, .msg_id = CAPWAP_MSG_JOIN_REQUEST, - .elem_id = CW_ELEM_WTP_MAC_TYPE, + .elem_id = CAPWAP_ELEM_WTP_MAC_TYPE, .start = cw_in_generic2, .item_id = CW_ITEM_WTP_MAC_TYPE, .mand = 1, diff --git a/src/mod/capwap/capwap_actions_wtp.c b/src/mod/capwap/capwap_actions_wtp.c index c017e6c6..c1ea0f7d 100644 --- a/src/mod/capwap/capwap_actions_wtp.c +++ b/src/mod/capwap/capwap_actions_wtp.c @@ -485,7 +485,7 @@ static cw_action_out_t actions_out[] = { /* WTP Frame TunnelMode - Discovery Request */ { .msg_id = CAPWAP_MSG_DISCOVERY_REQUEST, - .elem_id = CW_ELEM_WTP_FRAME_TUNNEL_MODE, + .elem_id = CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE, .item_id = CW_ITEM_WTP_FRAME_TUNNEL_MODE, .out = cw_out_generic, .get = cw_out_get_local, @@ -496,7 +496,7 @@ static cw_action_out_t actions_out[] = { /* WTP Mac Type - Discovery Request */ { .msg_id = CAPWAP_MSG_DISCOVERY_REQUEST, - .elem_id = CW_ELEM_WTP_MAC_TYPE, + .elem_id = CAPWAP_ELEM_WTP_MAC_TYPE, .item_id = CW_ITEM_WTP_MAC_TYPE, .out = cw_out_generic, .get = cw_out_get_local, @@ -566,7 +566,7 @@ static cw_action_out_t actions_out[] = { /* WTP Frame Tunnel Mode - Join Request */ { .msg_id = CAPWAP_MSG_JOIN_REQUEST, - .elem_id = CW_ELEM_WTP_FRAME_TUNNEL_MODE, + .elem_id = CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE, .item_id = CW_ITEM_WTP_FRAME_TUNNEL_MODE, .out = cw_out_generic, .get = cw_out_get_local, @@ -578,7 +578,7 @@ static cw_action_out_t actions_out[] = { /* WTP MAC Type - Join Request */ { .msg_id = CAPWAP_MSG_JOIN_REQUEST, - .elem_id = CW_ELEM_WTP_MAC_TYPE, + .elem_id = CAPWAP_ELEM_WTP_MAC_TYPE, .item_id = CW_ITEM_WTP_MAC_TYPE, .out = cw_out_generic, .get = cw_out_get_local,