diff --git a/actube.workspace b/actube.workspace index e0162c79..b8870938 100644 --- a/actube.workspace +++ b/actube.workspace @@ -3,9 +3,9 @@ - + - + diff --git a/libcw.project b/libcw.project index abe48ee1..bf601779 100644 --- a/libcw.project +++ b/libcw.project @@ -299,6 +299,7 @@ + diff --git a/mod_capwap.project b/mod_capwap.project index 09c568d8..94872f52 100644 --- a/mod_capwap.project +++ b/mod_capwap.project @@ -21,6 +21,7 @@ + diff --git a/src/ac/ac_main.c b/src/ac/ac_main.c index 50f739b1..e93b7b79 100644 --- a/src/ac/ac_main.c +++ b/src/ac/ac_main.c @@ -229,15 +229,10 @@ int main (int argc, char *argv[]) actube_global_cfg = global_cfg; cw_dbg_opt_level=0xffffffff; - cw_dbg(DBG_INFO,"Hello world\n"); + cw_dbg(DBG_INFO,"Hello world"); + cw_dbg_ktv_dump(global_cfg,DBG_INFO,NULL,"CFG:",NULL); - printf("Dumped\n"); - exit(0); - - - - cw_log_name = "AC-Tube"; diff --git a/src/cw/cw_ktv_readline.c b/src/cw/cw_ktv_readline.c index 19fb90d3..89735511 100644 --- a/src/cw/cw_ktv_readline.c +++ b/src/cw/cw_ktv_readline.c @@ -74,7 +74,7 @@ static int read_key (FILE *f, char *key, int max_len, struct parser * p) n=0; while(c!=EOF && nip); - d+=cw_put_word(d,acip->index); - - int fam = sock_addrfamily(&acip->ip); - int elem_id=-1; - switch (fam) { - case AF_INET: - elem_id = CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS; - break; - case AF_INET6: - elem_id = CW_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS; - break; - default: - cw_log(LOG_ERR,"Unknown adress family %d",fam); - break; - } - - if (elem_id ==-1) - return 0; - - d+=cw_put_elem_hdr(dst,elem_id,d-dst-4); -// return 0; -// *dptr = d-4; - - - return d-4-dst; - -// return 1; -} - -/* -int cw_out_capwap_control_ip_addr_list(struct conn *conn,struct cw_action_out *a,uint8_t *dst) -{ - struct mbag_item * item = mbag_get(conn->local,a->item_id); - - if ( !item ) { - cw_log(LOG_ERR, "Can't send CAPWAP Local IPv4/IPv6 Address, not found"); - return 0; - } - - - cw_aciplist_t aciplist = (cw_aciplist_t) mbag_item_get_data_ptr(item); - - - uint8_t *d = dst; - - MAVLITER_DEFINE(i,aciplist); - mavliter_foreach(&i){ - struct cw_acip * acip = mavliter_get(&i); - - d+=put_ip(d,acip); - - } - - -// cw_aciplist_foreach(aciplist, put_ip, &d); - - mbag_item_release_data_ptr(item,aciplist); - return d-dst; -} - -*/ \ No newline at end of file diff --git a/src/cw/ktv.h b/src/cw/ktv.h index d0230238..9f9c28e1 100644 --- a/src/cw/ktv.h +++ b/src/cw/ktv.h @@ -113,6 +113,9 @@ int cw_ktv_read_file(FILE * file, mavl_t ktv, mavl_t types); cw_KTV_t * cw_ktv_get(mavl_t ktv, const char *key, const cw_Type_t * type); uint8_t cw_ktv_get_byte(mavl_t ktv,const char *key, uint8_t def); uint16_t cw_ktv_get_word(mavl_t ktv,const char *key, uint16_t def); + +cw_KTV_t * cw_ktv_idx_get(mavl_t ktv, const char *key, int idx, const cw_Type_t * type); + extern const cw_Type_t * cw_ktv_std_types[]; #define CW_KTV_STD_TYPES cw_ktv_std_types diff --git a/src/mod/capwap/Makefile b/src/mod/capwap/Makefile index 4a5e46c3..2bdf0a2e 100644 --- a/src/mod/capwap/Makefile +++ b/src/mod/capwap/Makefile @@ -14,7 +14,8 @@ OBJS=\ capwap_out_ac_ip_list.o \ capwap_in_session_id.o \ capwap_in_vendor_specific_payload.o \ - capwap_in_mtu_discovery_padding.o + capwap_in_mtu_discovery_padding.o \ + capwap_out_capwap_control_ip_address.o LIBDIR := ../../../lib diff --git a/src/mod/capwap/capwap_actions_ac.c b/src/mod/capwap/capwap_actions_ac.c index 09f65d5c..ef8edbb8 100644 --- a/src/mod/capwap/capwap_actions_ac.c +++ b/src/mod/capwap/capwap_actions_ac.c @@ -132,6 +132,29 @@ static struct cw_ElemHandler handlers[] = { } , + { + "CAPWAP Control IPv4 Address", /* name */ + CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS, /* Element ID */ + 0,0, /* Vendor / Proto */ + 0,0, /* min/max length */ + CW_TYPE_BSTR16, /* type */ + "capwap-control-ip-address", /* Key */ + NULL, /* get */ + capwap_out_capwap_control_ip_address /* put */ + }, + + { + "CAPWAP Control IPv6 Address", /* name */ + CW_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS, /* Element ID */ + 0,0, /* Vendor / Proto */ + 0,0, /* min/max length */ + CW_TYPE_BSTR16, /* type */ + "capwap-control-ip-address", /* Key */ + NULL, /* get */ + capwap_out_capwap_control_ip_address /* put */ + } + + , {0,0,0,0,0,0,0,0} @@ -156,8 +179,8 @@ static int discovery_response_states[] = {CAPWAP_STATE_DISCOVERY,0}; static struct cw_ElemDef discovery_response_elements[] ={ {0,0,CAPWAP_ELEM_AC_DESCRIPTOR, 1, 0}, {0,0,CAPWAP_ELEM_AC_NAME, 1, 0}, - {0,0,CAPWAP_ELEM_AC_IPV4_LIST, 1, 0}, - {0,0,CAPWAP_ELEM_AC_IPV6_LIST, 1, 0}, + {0,0,CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS, 1, 0}, + {0,0,CW_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS, 1, 0}, {0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE}, {0,0,0,0,0} diff --git a/src/mod/capwap/mod_capwap.h b/src/mod/capwap/mod_capwap.h index 76c4e9ca..6904fb6a 100644 --- a/src/mod/capwap/mod_capwap.h +++ b/src/mod/capwap/mod_capwap.h @@ -20,7 +20,8 @@ int capwap_out_wtp_descriptor(struct cw_ElemHandler * eh, int capwap_out_ac_descriptor(struct cw_ElemHandler * eh, struct cw_ElemHandlerParams * params, uint8_t * dst); - +int capwap_out_capwap_control_ip_address(struct cw_ElemHandler * eh, + struct cw_ElemHandlerParams * params, uint8_t * dst);