Morre VM stuff...
FossilOrigin-Name: 70d234975ad74061e733f7df43912369c406662c45736ca81135c3b8a5ea6991
This commit is contained in:
parent
474763a3eb
commit
b63692f46e
@ -135,12 +135,13 @@ cw_action_t discovery_actions[] = {
|
||||
{ CW_VENDOR_ID_CISCO,0,CW_STATE_DISCOVERY,CW_MSG_DISCOVERY_REQUEST, CW_CISCO_RAD_NAME,
|
||||
cw_in_wtp_name,0 },
|
||||
|
||||
|
||||
/*
|
||||
{ 0,0,CW_STATE_DISCOVERY,CW_MSG_DISCOVERY_REQUEST, CW_ELEM_WTP_BOARD_DATA},
|
||||
{ 0,0,CW_STATE_DISCOVERY,CW_MSG_DISCOVERY_REQUEST, CW_ELEM_WTP_DESCRIPTOR},
|
||||
{ 0,0,CW_STATE_DISCOVERY,CW_MSG_DISCOVERY_REQUEST, CW_ELEM_WTP_FRAME_TUNNEL_MODE},
|
||||
{ 0,0,CW_STATE_DISCOVERY,CW_MSG_DISCOVERY_REQUEST, CW_ELEM_WTP_MAC_TYPE},
|
||||
|
||||
*/
|
||||
|
||||
{ 0,0,0}
|
||||
};
|
||||
|
@ -717,6 +717,7 @@ extern struct cw_strlist capwap_strings_vendor[];
|
||||
|
||||
#define cw_strmsg(id) cw_strlist_get_str(capwap_strings_msg,id)
|
||||
#define cw_strstate(id) cw_strlist_get_str(capwap_strings_state,id)
|
||||
#define cw_strvendor(id) cw_strlist_get_str(cawpap_strings_vendor,id)
|
||||
|
||||
|
||||
int cw_process_msg(struct conn * conn,uint8_t * rawmsg,int len);
|
||||
|
@ -3,6 +3,11 @@ enum capwap_items {
|
||||
CW_ITEM_NONE=0,
|
||||
CW_ITEM_DISCOVERY_TYPE,
|
||||
CW_ITEM_WTP_NAME
|
||||
|
||||
CW_ITEM_WTP_BOARD_VENDOR,
|
||||
CW_ITEM_WTP_BOARD_MODELNO,
|
||||
CW_ITEM_WTP_BOARD_MACADDRESS,
|
||||
CW_ITEM_WTP_BOARD_ID,
|
||||
CW_ITEM_WTP_BOARD_REVISISON,
|
||||
CW_ITEM_WTP_BOARD_SERIALNO
|
||||
|
||||
};
|
||||
|
69
src/capwap/capwap_strings_elem.c
Normal file
69
src/capwap/capwap_strings_elem.c
Normal file
@ -0,0 +1,69 @@
|
||||
|
||||
|
||||
struct cw_strlist capwap_strings_elem[] = {
|
||||
|
||||
CW_ELEM_AC_DESCRIPTOR,"AC Descriptor",
|
||||
CW_ELEM_AC_IPV4_LIST,"AC IPv4 List",
|
||||
CW_ELEM_AC_IPV6_LIST,"AC IPv6 List",
|
||||
CW_ELEM_AC_NAME,"AC Name",
|
||||
CW_ELEM_AC_NAME_WITH_PRIORITY,"AC Name with Priority",
|
||||
CW_ELEM_AC_NAME_WITH_INDEX,"AC Name width Index",
|
||||
CW_ELEM_AC_TIMESTAMP,"AC Timestamp",
|
||||
CW_ELEM_ADD_MAC_ACL_ENTRY,"Add MAC ACL Entry",
|
||||
CW_ELEM_ADD_STATION,"Add Station",
|
||||
CW_ELEM_RESERVED_9,"Reserved 9",
|
||||
CW_ELEM_CONTROL_IPV4_ADDRESS,"Control IPv4 Address",
|
||||
CWMSGELEM_CONTROL_IPV6_ADDRESS,"Controll IPv6 Address",
|
||||
CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS 30
|
||||
CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS 50
|
||||
CW_ELEM_CAPWAP_TIMERS 12
|
||||
CW_ELEM_CAPWAP_TRANSPORT_PROTOCOL 51 /* not in draft 7 */
|
||||
CW_ELEM_DATA_TRANSFER_DATA 13
|
||||
CW_ELEM_DATA_TRANSFER_MODE 14
|
||||
CW_ELEM_DECRYPTION_ERROR_REPORT 15
|
||||
CW_ELEM_DECRYPTION_ERROR_REPORT_PERIOD 16
|
||||
CW_ELEM_DELETE_MAC_ACL_ENTRY 17
|
||||
CW_ELEM_DELETE_STATION 18
|
||||
CW_ELEM_RESEERVED_19 19
|
||||
CW_ELEM_DISCOVERY_TYPE 20
|
||||
CW_ELEM_DUPLICATE_IPV4_ADDRESS 21
|
||||
CW_ELEM_DUPLICATE_IPV6_ADRESS 22
|
||||
CWMSGELEM_ECN_SUPPORT 53
|
||||
CW_ELEM_IDLE_TIMEOUT 23
|
||||
CW_ELEM_IMAGE_DATA 24
|
||||
CW_ELEM_IMAGE_IDENTIFIER 25
|
||||
CW_ELEM_IMAGE_INFORMATION 26
|
||||
CW_ELEM_INITIATE_DOWNLOAD 27
|
||||
CWMSGELEM_LOCATION_DATA 28
|
||||
CWMSGELEM_MAXIMUM_MESSAGE_LENGTH 29
|
||||
CWMSGELEM_MTU_DISCOVERY_PADDING 52
|
||||
CWMSGELEM_RADIO_ADMINISTRATIVE_STATE 31
|
||||
CW_ELEM_RADIO_OPERATIONAL_STATE 32
|
||||
CW_ELEM_RESULT_CODE 33
|
||||
CW_ELEM_RETURNED_MESSAGE_ELEMENT 34
|
||||
CW_ELEM_SESSION_ID 35
|
||||
CW_ELEM_STATISTICS_TIMER 36
|
||||
CW_ELEM_VENDOR_SPECIFIC_PAYLOAD 37
|
||||
CW_ELEM_WTP_BOARD_DATA 38
|
||||
CW_ELEM_WTP_DESCRIPTOR 39
|
||||
CW_ELEM_WTP_FALLBACK 40
|
||||
CW_ELEM_WTP_FRAME_TUNNEL_MODE 41
|
||||
CW_ELEM_RESERVED_42 42
|
||||
CW_ELEM_RESERVED_43 43
|
||||
CW_ELEM_WTP_MAC_TYPE 44
|
||||
CW_ELEM_WTP_NAME 45
|
||||
CW_ELEM_RESERVED_46 46
|
||||
CW_ELEM_WTP_RADIO_STATISTICS 47
|
||||
CWMSGELEM_WTP_REBOOT_STATISTICS 48
|
||||
CW_ELEM_WTP_STATIC_IP_ADDRESS_INFORMATION 49
|
||||
CW_ELEM_WTP_STATIC_IP_ADDR_INFO 49
|
||||
|
||||
|
||||
/* Cisco's CAPWAP definitions (CAPWAP draft 7) */
|
||||
CW_ELEM_WTP_IPV4_IP_ADDRESS 42
|
||||
CW_ELEM_WTP_IPV6_IP_ADDRESS 43
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
71
src/capwap/cw_in_wtp_board_data.c
Normal file
71
src/capwap/cw_in_wtp_board_data.c
Normal file
@ -0,0 +1,71 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#include "wtpinfo.h"
|
||||
|
||||
#include "capwap.h"
|
||||
|
||||
#include "cw_util.h"
|
||||
#include "cw_log.h"
|
||||
|
||||
|
||||
|
||||
static void wtpinfo_readsubelems_wtp_board_data(struct wtpinfo * wtpinfo,uint8_t * msgelem,int len)
|
||||
{
|
||||
int i=0;
|
||||
uint32_t val;
|
||||
do {
|
||||
val = ntohl(*((uint32_t*)(msgelem+i)));
|
||||
int subtype= (val>>16)&0xffff;
|
||||
int sublen = val&0xffff;
|
||||
i+=4;
|
||||
if (sublen+i>len){
|
||||
cw_dbg(DBG_ELEM,"WTP Board data sub-element too long, type=%d,len=%d",subtype,sublen);
|
||||
return;
|
||||
}
|
||||
|
||||
cw_dbg(DBG_ELEM,"Reading WTP board data sub-element, type=%d, len=%d",subtype,sublen);
|
||||
|
||||
switch(subtype){
|
||||
case CWBOARDDATA_MODELNO:
|
||||
bstr_replace(&wtpinfo->model_no,bstr_create(msgelem+i,sublen));
|
||||
break;
|
||||
case CWBOARDDATA_SERIALNO:
|
||||
bstr_replace(&wtpinfo->serial_no,bstr_create(msgelem+i,sublen));
|
||||
break;
|
||||
case CWBOARDDATA_MACADDRESS:
|
||||
wtpinfo->macaddress=realloc(wtpinfo->macaddress,sublen);
|
||||
memcpy(wtpinfo->macaddress,msgelem+i,sublen);
|
||||
wtpinfo->macaddress_len=sublen;
|
||||
break;
|
||||
case CWBOARDDATA_BOARDID:
|
||||
bstr_replace(&wtpinfo->board_id,bstr_create(msgelem+i,sublen));
|
||||
break;
|
||||
case CWBOARDDATA_REVISION:
|
||||
bstr_replace(&wtpinfo->board_revision,bstr_create(msgelem+i,sublen));
|
||||
default:
|
||||
break;
|
||||
}
|
||||
i+=sublen;
|
||||
|
||||
}while(i<len);
|
||||
}
|
||||
|
||||
|
||||
|
||||
int cw_in_wtp_board_data(struct conn *conn,struct cw_action * a,uint8_t *data,int len)
|
||||
{
|
||||
if (len<4){
|
||||
cw_dbg(DBG_ELEM_ERR,"Discarding WTP_BOARD_DATA msgelem, wrong size, type=%d, len=%d\n",type,len);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
wtpinfo->vendor_id = ntohl(*((uint32_t*)msgelem));
|
||||
wtpinfo_readsubelems_wtp_board_data(wtpinfo,msgelem+4,len-4);
|
||||
*/
|
||||
return 1;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ int cw_process_msg(struct conn * conn,uint8_t * rawmsg,int len)
|
||||
af = cw_actionlist_get(conn->msgtr,&as);
|
||||
|
||||
if (!af) {
|
||||
printf("Wrong Elem: %d, %d\n",as.elem_id,elem_len);
|
||||
cw_dbg(DBG_ELEM_ERR,"Element %d not aallowed in msg %d (%s)",as.elem_id,as.msg_id,cw_strmsg(as.msg_id));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user