Uses msgset.write_header and header_len again.

This commit is contained in:
2022-07-29 12:11:19 +02:00
parent 51416668c4
commit 7dab041047
13 changed files with 87 additions and 63 deletions

View File

@ -826,6 +826,19 @@ static cw_StateMachineState_t statemachine_states[]={
{0,0,0}
};
static int write_header(struct cw_ElemHandler * handler, uint8_t * dst, int len)
{
if (handler->vendor)
return len + cw_put_elem_vendor_hdr(dst, handler->vendor, handler->id, len);
return len + cw_put_elem_hdr(dst, handler->id, len);
}
static int header_len(struct cw_ElemHandler * handler)
{
return handler->vendor ? 10 : 4;
}
struct cw_MsgSet * capwap_register_msg_set(struct cw_MsgSet * set, int mode){
@ -843,6 +856,9 @@ struct cw_MsgSet * capwap_register_msg_set(struct cw_MsgSet * set, int mode){
mavl_insert_ptr(set->types_tree,CW_TYPE_DWORD);
mavl_insert_ptr(set->types_tree,CW_TYPE_WORD);
set->write_header = write_header;
set->header_len = header_len;
cw_dbg(DBG_INFO,"CAPWAP: Done register messages");
return set;
}

View File

@ -297,9 +297,9 @@ int cisco_out_ap_regulatory_domain(struct cw_ElemHandler * eh,
}
}
start = cw_header_len(eh);
start = params->msgset->header_len(eh);
len = cw_ktv_write_struct(params->local_cfg,NULL,type,key,ob+start);
ob += cw_write_header(eh,ob,len);
ob += params->msgset->write_header(eh,ob,len);
idx++;
@ -1869,8 +1869,11 @@ static struct cw_ElemDef change_state_event_request_elements[] ={
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_ADD_WLAN, 1, CW_IGNORE},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_OPER_STATE_DETAIL_CAUSE, 1, CW_IGNORE},
{0, 0, CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE, 1, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_HARDWARE_INFO, 1, 0},
{0,0,0,0,0}
};

View File

@ -26,6 +26,31 @@ static struct cw_Mod * capwap_mod = NULL;
static struct cw_Mod * capwap80211_mod = NULL;
static int write_header(struct cw_ElemHandler * handler, uint8_t * dst, int len)
{
if (handler->proto == 0){
if (handler->vendor)
return len + cw_put_elem_vendor_hdr(dst, handler->vendor, handler->id, len);
return len + cw_put_elem_hdr(dst, handler->id, len);
}
/* put the lwap elem header */
lw_set_dword(dst + 10, handler->vendor);
lw_set_word(dst + 14, handler->id);
return len + 6 + cw_put_elem_vendor_hdr(dst, handler->vendor,
CISCO_ELEM_SPAM_VENDOR_SPECIFIC, len+6);
}
static int header_len(struct cw_ElemHandler * handler)
{
if (handler->proto==0)
return handler->vendor ? 10 : 4;
return 16;
}
static struct cw_MsgSet * register_messages(struct cw_MsgSet *set, int mode)
{
cw_dbg(DBG_INFO,"CISCO: Register messages");
@ -35,6 +60,8 @@ static struct cw_MsgSet * register_messages(struct cw_MsgSet *set, int mode)
capwap_mod->register_messages(set, CW_MOD_MODE_CAPWAP);
capwap80211_mod->register_messages(set, CW_MOD_MODE_BINDINGS);
cisco_register_msg_set(set,CW_MOD_MODE_CAPWAP);
set->write_header = write_header;
set->header_len = header_len;
/* cw_dbg(DBG_MOD,"Cisco: loading cisco message set");*/
@ -193,31 +220,6 @@ static struct cw_Mod capwap_ac = {
};
*/
static int write_header(struct cw_ElemHandler * handler, uint8_t * dst, int len)
{
if (handler->proto == 0){
if (handler->vendor)
return len + cw_put_elem_vendor_hdr(dst, handler->vendor, handler->id, len);
return len + cw_put_elem_hdr(dst, handler->id, len);
}
/* put the lwap elem header */
lw_set_dword(dst + 10, handler->vendor);
lw_set_word(dst + 14, handler->id);
return len + 6 + cw_put_elem_vendor_hdr(dst, handler->vendor,
CISCO_ELEM_SPAM_VENDOR_SPECIFIC, len+6);
}
static int header_len(struct cw_ElemHandler * handler)
{
if (handler->proto==0)
return handler->vendor ? 10 : 4;
return 16;
}
int static setup_cfg(struct conn * conn)
{