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_VENDOR_ID_CISCO,0,CW_STATE_DISCOVERY,CW_MSG_DISCOVERY_REQUEST, CW_CISCO_RAD_NAME,
|
||||||
cw_in_wtp_name,0 },
|
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_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_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_FRAME_TUNNEL_MODE},
|
||||||
{ 0,0,CW_STATE_DISCOVERY,CW_MSG_DISCOVERY_REQUEST, CW_ELEM_WTP_MAC_TYPE},
|
{ 0,0,CW_STATE_DISCOVERY,CW_MSG_DISCOVERY_REQUEST, CW_ELEM_WTP_MAC_TYPE},
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
{ 0,0,0}
|
{ 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_strmsg(id) cw_strlist_get_str(capwap_strings_msg,id)
|
||||||
#define cw_strstate(id) cw_strlist_get_str(capwap_strings_state,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);
|
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_NONE=0,
|
||||||
CW_ITEM_DISCOVERY_TYPE,
|
CW_ITEM_DISCOVERY_TYPE,
|
||||||
CW_ITEM_WTP_NAME
|
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);
|
af = cw_actionlist_get(conn->msgtr,&as);
|
||||||
|
|
||||||
if (!af) {
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user