diff --git a/libcw.project b/libcw.project index be77301b..7622096c 100644 --- a/libcw.project +++ b/libcw.project @@ -263,6 +263,7 @@ + diff --git a/src/cw/cw.h b/src/cw/cw.h index d144c465..126374ef 100644 --- a/src/cw/cw.h +++ b/src/cw/cw.h @@ -381,6 +381,9 @@ int cw_in_generic(struct conn * conn, struct cw_ElemHandler * handler, int cw_in_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params, uint8_t * elem_data, int elem_len); +int cw_in_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params, + uint8_t * elem_data, int elem_len); + int cw_out_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params , uint8_t * dst); diff --git a/src/cw/cw_in_generic_struct.c b/src/cw/cw_in_generic_struct.c new file mode 100644 index 00000000..8a6d8565 --- /dev/null +++ b/src/cw/cw_in_generic_struct.c @@ -0,0 +1,25 @@ + +#include "capwap.h" +#include "msgset.h" +#include "ktv.h" +#include "log.h" + +int cw_in_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params, + uint8_t * elem_data, int elem_len) +{ + /*cw_KTV_t * result;*/ + + if (!handler->type){ + cw_log(LOG_ERR,"Can't handle element: %s, no type defined",handler->name); + return CAPWAP_RESULT_UNRECOGNIZED_MESSAGE_ELEMENT; + } + +/* result = cw_ktv_add(params->conn->remote_cfg, handler->key, + handler->type, elem_data,elem_len); +*/ + cw_ktv_read_struct(params->conn->remote_cfg,handler->type,handler->key,elem_data,elem_len); + + /*params->elem=result;*/ + + return CAPWAP_RESULT_SUCCESS; +} diff --git a/src/cw/cw_ktv_read_struct.c b/src/cw/cw_ktv_read_struct.c index 468555ad..f3658752 100644 --- a/src/cw/cw_ktv_read_struct.c +++ b/src/cw/cw_ktv_read_struct.c @@ -1,7 +1,7 @@ #include "ktv.h" #include "dbg.h" -int cw_ktv_read_struct(mavl_t ktv,cw_KTVStruct_t * stru, const char *pkey, +int cw_ktv_read_struct(mavl_t ktv,const cw_KTVStruct_t * stru, const char *pkey, uint8_t * data, int len) { char key[CW_KTV_MAX_KEY_LEN]; diff --git a/src/cw/cw_read_descriptor_subelems.c b/src/cw/cw_read_descriptor_subelems.c index c2627cac..bfd89e03 100644 --- a/src/cw/cw_read_descriptor_subelems.c +++ b/src/cw/cw_read_descriptor_subelems.c @@ -45,8 +45,6 @@ int cw_read_descriptor_subelems(mavl_t cfg, const char * parent_key, /* search sub-element */ for (i = 0; elems[i].maxlen; i++) { - printf("subcmp: %d %d\n",elems[i].type,subtype); - if (elems[i].type == subtype /* && elems[i].vendor_id==vendor_id*/) break; } diff --git a/src/cw/ktv.h b/src/cw/ktv.h index 9c07d3f5..c59a7c4c 100644 --- a/src/cw/ktv.h +++ b/src/cw/ktv.h @@ -88,7 +88,7 @@ struct cw_KTVStruct { int position; }; typedef struct cw_KTVStruct cw_KTVStruct_t; -int cw_ktv_read_struct(mavl_t ktv,cw_KTVStruct_t * stru, const char *pkey, +int cw_ktv_read_struct(mavl_t ktv,const cw_KTVStruct_t * stru, const char *pkey, uint8_t * data, int len); extern const struct cw_Type cw_type_byte; diff --git a/src/mod/cisco/capwap_cisco.h b/src/mod/cisco/capwap_cisco.h index ac2095e3..f488141c 100644 --- a/src/mod/cisco/capwap_cisco.h +++ b/src/mod/cisco/capwap_cisco.h @@ -96,7 +96,7 @@ #define CW_CISCO_AP_BACKUP_SOFTWARE_VERSION 183 #define CW_CISCO_BOARD_DATA_OPTIONS 207 -#define CW_CISCO_MWAR_TYPE 208 +#define CISCO_ELEM_MWAR_TYPE 208 #define CW_CISCO_80211_ASSOC_LIMIT 213 #define CW_CISCO_TLV_PAYLOAD 215 #define CW_CISCO_AP_LOG_FACILITY 224 diff --git a/src/mod/cisco/cisco_actions_ac.c b/src/mod/cisco/cisco_actions_ac.c index e2876ee4..b7d89535 100644 --- a/src/mod/cisco/cisco_actions_ac.c +++ b/src/mod/cisco/cisco_actions_ac.c @@ -44,7 +44,8 @@ static cw_KTVStruct_t ap_time_sync[] = { {CW_TYPE_DWORD, "timestamp", 4,-1}, - {CW_TYPE_BYTE, "type", 1,-1} + {CW_TYPE_BYTE, "type", 1,-1}, + {NULL,NULL,0,0} }; static struct cw_ElemHandler handlers[] = { @@ -99,11 +100,23 @@ static struct cw_ElemHandler handlers[] = { 5,5, /* min/max length */ ap_time_sync, /* type */ "cisco/ap-timesync", /* Key */ - NULL, /* handler */ + cw_in_generic_struct, /* handler */ NULL /* put */ } , - + + { + "MWAR Type", /* name */ + CISCO_ELEM_MWAR_TYPE, /* Element ID */ + CW_VENDOR_ID_CISCO,0, /* Vendor / Proto */ + 1,1, /* min/max length */ + CW_TYPE_BYTE, /* type */ + "cisco/mwar-type", /* Key */ + cw_in_generic, /* handler */ + cw_out_generic /* put */ + } + , + {0,0,0,0,0,0,0,0} }; @@ -111,8 +124,8 @@ static struct cw_ElemHandler handlers[] = { static int discovery_request_states[] = {CAPWAP_STATE_DISCOVERY,0}; static struct cw_ElemDef discovery_request_elements[] ={ - {0,0, CAPWAP_ELEM_WTP_DESCRIPTOR, 1, 0}, - {0,0, CAPWAP_ELEM_WTP_BOARD_DATA, 0, 0}, +/* {0,0, CAPWAP_ELEM_WTP_DESCRIPTOR, 1, 0},*/ + {0,0, CAPWAP_ELEM_WTP_BOARD_DATA, 0, 0}, {0,CW_VENDOR_ID_CISCO, CW_CISCO_RAD_NAME, 1, 0}, {0,CW_VENDOR_ID_CISCO, CW_CISCO_BOARD_DATA_OPTIONS, 0, 0}, {0,0,0,00} @@ -122,6 +135,7 @@ static struct cw_ElemDef discovery_request_elements[] ={ static int discovery_response_states[] = {CAPWAP_STATE_DISCOVERY,0}; static struct cw_ElemDef discovery_response_elements[] ={ {0,CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_TIMESYNC, 1, 0}, + {0,CW_VENDOR_ID_CISCO, CISCO_ELEM_MWAR_TYPE, 0, 0}, {0,0,0,00} };