diff --git a/src/cw/acpriolist.h b/src/cw/acpriolist.h index 2a8f0ffe..6cf740ed 100644 --- a/src/cw/acpriolist.h +++ b/src/cw/acpriolist.h @@ -3,11 +3,22 @@ #include "mavl.h" #include "mbag.h" -//#include "mavl.h" +/** + * Used to store AC Name With Priority elements. + */ struct cw_acprio{ + /** + * AC Name + */ char *name; + /** + * IP of AC + */ struct sockaddr_storage * addr; + /** + * Priority + */ uint8_t prio; }; diff --git a/src/cw/capwap_items.c b/src/cw/capwap_items.c index ed1f917f..561895ed 100644 --- a/src/cw/capwap_items.c +++ b/src/cw/capwap_items.c @@ -109,6 +109,7 @@ struct cw_itemdef capwap_itemdefs[] = { {CW_ITEM_CAPWAP_TIMERS,CW_ITEM_NONE,MBAG_WORD}, {CW_ITEM_AC_NAME_WITH_PRIORITY,CW_ITEM_ANY,MBAG_STR}, +{CW_ITEM_AC_NAME,CW_ITEM_NONE,MBAG_STR}, {CW_ITEM_AP_MODE_AND_TYPE,CW_ITEM_NONE,MBAG_WORD}, diff --git a/src/mod/capwap/capwap_actions_wtp.c b/src/mod/capwap/capwap_actions_wtp.c index adeba7df..dc886aa2 100644 --- a/src/mod/capwap/capwap_actions_wtp.c +++ b/src/mod/capwap/capwap_actions_wtp.c @@ -8,7 +8,76 @@ static cw_action_in_t actions_in[] = { + /* Message Discovery Response */ + { + .capwap_state = CW_STATE_DISCOVERY, + .msg_id = CW_MSG_DISCOVERY_RESPONSE, + .end = cw_in_check_disc_resp + } + , + /* AC Descriptor - Discovery Response */ + { + .capwap_state = CW_STATE_DISCOVERY, + .msg_id = CW_MSG_DISCOVERY_RESPONSE, + .elem_id = CW_ELEM_AC_DESCRIPTOR, + .item_id = CW_ITEM_AC_DESCRIPTOR, + .start = cw_in_ac_descriptor, + .min_len = 12, + .max_len = 8192, + .mand = 1 + } + , + + /* AC Name - Discovery Response */ + { + .capwap_state = CW_STATE_DISCOVERY, + .msg_id = CW_MSG_DISCOVERY_RESPONSE, + .elem_id = CW_ELEM_AC_NAME, + .item_id = CW_ITEM_AC_NAME, + .start = cw_in_generic2, + .min_len = 1, + .max_len = 512, + .mand = 1 + } + , + + /* CAPWAP Control IPv4 Address - Discovery Response*/ + { + .capwap_state = CW_STATE_DISCOVERY, + .msg_id = CW_MSG_DISCOVERY_RESPONSE, + .elem_id = CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS, + .item_id = CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST, + .start = cw_in_capwap_control_ipv4_address, + .min_len = 6, + .max_len = 6, + .mand = 1 + } + + , + + /* CAPWAP Control IPv6 Address - Discovery Response*/ + { + .capwap_state = CW_STATE_DISCOVERY, + .msg_id = CW_MSG_DISCOVERY_RESPONSE, + .elem_id = CW_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS, + .item_id = CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST, + .start = cw_in_capwap_control_ipv4_address, // Change to v6 handler + .min_len = 6, + .max_len = 6, + .mand = 1 + } + , + + /* Vendor Specific Payload - Discovery Response*/ + { + .capwap_state = CW_STATE_DISCOVERY, + .msg_id = CW_MSG_DISCOVERY_REQUEST, + .elem_id = CW_ELEM_VENDOR_SPECIFIC_PAYLOAD, + .start = cw_in_vendor_specific_payload + } + , + diff --git a/src/wtp/discovery.c b/src/wtp/discovery.c index 7c34200a..180cf609 100644 --- a/src/wtp/discovery.c +++ b/src/wtp/discovery.c @@ -44,6 +44,13 @@ cw_aciplist_t cw_select_ac(struct conn *conn, mbag_t dis) { + /* create a list for results */ + cw_aciplist_t resultlist=cw_aciplist_create(); + if (!resultlist) + return NULL; + if (dis) + return resultlist; + cw_aciplist_t aciplist = cw_aciplist_create(); if (!aciplist) { @@ -61,7 +68,6 @@ cw_aciplist_t cw_select_ac(struct conn *conn, mbag_t dis) // if (priolist ) priolist=cw_acpriolist_create(); - cw_aciplist_t resultlist=cw_aciplist_create(); DEFINE_AVLITER(i, dis); diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index 5e72d9ae..63a07c81 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -145,9 +145,9 @@ mavl_destroy(b); conn->base_rmac = get_base_rmac(); conn->capwap_mode = CW_MODE_CAPWAP; - conn->capwap_mode = CW_MODE_CISCO; + //conn->capwap_mode = CW_MODE_CISCO; - the_conn->strict_capwap = 0; + the_conn->strict_capwap = 1; conn->config = mbag_create();