Working on Cisoc support.
FossilOrigin-Name: 3b605a558b58d0288e1ee3c60277c74967b120fcb500e3458b3b7c7d71903bae
This commit is contained in:
parent
ccd226aeba
commit
69d5462211
@ -44,7 +44,7 @@
|
||||
0 1 2 3
|
||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
| Board ID | regDomainSet | RegDomainSlot | RegDomainCode |
|
||||
| Band ID | regDomainSet | RegDomainSlot | RegDomainCode |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
| RegDomainCope1|
|
||||
+-+-+-+-+-+-+-+-+
|
||||
@ -54,7 +54,7 @@
|
||||
|
||||
|
||||
|
||||
128. Cisco Rest Button State
|
||||
128. Cisco Reset Button State
|
||||
|
||||
The state of the reset button
|
||||
|
||||
@ -88,11 +88,22 @@
|
||||
Length: 4
|
||||
|
||||
|
||||
208. Cisco MWAR Type
|
||||
|
||||
0
|
||||
0 1 2 3 4 5 6 7
|
||||
+-+-+-+-+-+-+-+-+
|
||||
| MWAR Type |
|
||||
+-+-+-+-+-+-+-+-+
|
||||
|
||||
01 Primary?
|
||||
|
||||
|
||||
|
||||
LWAPP
|
||||
=====
|
||||
|
||||
73. Cisco PAth MTU
|
||||
73. Cisco Path MTU
|
||||
|
||||
0 1 2 3
|
||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||
|
@ -222,7 +222,7 @@ void process_cw_ctrl_packet(int index,struct sockaddr * addr, uint8_t * buffer,
|
||||
|
||||
|
||||
/* first of all check preamble */
|
||||
int preamble = CWTH_GET_PREAMBLE(buffer);
|
||||
int preamble = cw_get_hdr_preamble(buffer);
|
||||
|
||||
#ifdef WITH_DTLS
|
||||
if (preamble != CAPWAP_PACKET_PREAMBLE && preamble != CAPWAP_DTLS_PACKET_PREAMBLE){
|
||||
|
@ -604,7 +604,7 @@ printf("Slept befor join resp\n");
|
||||
wtpman->wtpinfo.name,wtpman->wtpinfo.location,
|
||||
sock_addr2str(&wtpman->conn->addr));
|
||||
|
||||
|
||||
//exit(0);
|
||||
return 1;
|
||||
|
||||
}
|
||||
@ -684,7 +684,7 @@ static void wtpman_run(void *arg)
|
||||
*/
|
||||
|
||||
do {
|
||||
int cfg_status_msgs[] = { CWMSG_IMAGE_DATA_REQUEST, CWMSG_CONFIGURATION_STATUS_REQUEST, -1 };
|
||||
int cfg_status_msgs[] = { CWMSG_IMAGE_DATA_REQUEST, CW_MSG_CONFIGURATION_STATUS_REQUEST, -1 };
|
||||
cwrmsg = conn_wait_for_request(wtpman->conn, cfg_status_msgs, timer);
|
||||
|
||||
if (!cwrmsg){
|
||||
@ -704,7 +704,7 @@ static void wtpman_run(void *arg)
|
||||
|
||||
}
|
||||
|
||||
} while (cwrmsg->type != CWMSG_CONFIGURATION_STATUS_REQUEST);
|
||||
} while (cwrmsg->type != CW_MSG_CONFIGURATION_STATUS_REQUEST);
|
||||
|
||||
|
||||
|
||||
@ -995,7 +995,7 @@ void wtpman_lw_addpacket(struct wtpman *wtpman, uint8_t *packet, int len)
|
||||
*/
|
||||
|
||||
uint8_t * data;
|
||||
|
||||
/*
|
||||
lw_foreach_msgelem(data,msgdata,msglen){
|
||||
int eltype = LWMSGELEM_GET_TYPE(data);
|
||||
int ellen = LWMSGELEM_GET_LEN(data);
|
||||
@ -1006,7 +1006,7 @@ void wtpman_lw_addpacket(struct wtpman *wtpman, uint8_t *packet, int len)
|
||||
printf ("ELEM TYPE: %d, LEN: %d\n",eltype,ellen);
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
char wi[4096];
|
||||
wtpinfo_print(wi,&wtpman->wtpinfo);
|
||||
|
@ -56,9 +56,22 @@ UTILOBJS= \
|
||||
cw_util.o \
|
||||
cw_format_version.o
|
||||
|
||||
|
||||
|
||||
# LWAPP objs
|
||||
LWAPPOBJS = \
|
||||
lw_checksum.o \
|
||||
lw_readelem_wtp_name.o \
|
||||
|
||||
# LWAPP cisco vendor specific objs
|
||||
LWAPPCISCOOBJS = \
|
||||
lw_addelem.o
|
||||
|
||||
|
||||
# cw_tohex.o\
|
||||
#capwap_parse_ctrlhdr.o \
|
||||
|
||||
|
||||
CAPWAPOBJS= \
|
||||
cwmsg_init.o \
|
||||
cwmsg_init_echo_request.o \
|
||||
@ -134,9 +147,7 @@ CAPWAPOBJS= \
|
||||
cw_readelem_wtp_reboot_statistics.o\
|
||||
cwmsg_addelem_vendor_cisco_ap_timesync.o \
|
||||
cwmsg_addelem_vendor_cisco_mwar_addr.o \
|
||||
lw_checksum.o \
|
||||
lw_readelem_wtp_board_data.o \
|
||||
lw_readelem_wtp_name.o
|
||||
|
||||
#cwmsg_addelem_session_id.o
|
||||
# process_msgelems_discovery_request.o \
|
||||
@ -188,6 +199,7 @@ CONNOBJS= conn_create.o \
|
||||
conn_get_message.o \
|
||||
conn_get_response.o \
|
||||
conn_prepare_configuration_update_request.o \
|
||||
cw_prepare_configuration_status_request.o \
|
||||
conn_prepare_request.o \
|
||||
conn_prepare_image_data_request.o \
|
||||
conn_send_request.o \
|
||||
@ -204,7 +216,11 @@ BSTROBJS= bstr_create.o \
|
||||
|
||||
FRAGOBJS=fragman.o
|
||||
|
||||
OBJS=$(CONNOBJS) $(FRAGOBJS) $(SOCKOBJS) $(CAPWAPOBJS) $(WTPINFOOBJS) $(LOGOBJS) $(UTILOBJS) $(DTLSOBJS) $(BSTROBJS)
|
||||
OBJS=$(CONNOBJS) $(FRAGOBJS) $(SOCKOBJS) $(CAPWAPOBJS) $(WTPINFOOBJS) \
|
||||
$(LOGOBJS) $(UTILOBJS) $(DTLSOBJS) $(BSTROBJS) \
|
||||
$(LWAPPOBJS) \
|
||||
$(LWAPPCISCOOBJS)
|
||||
|
||||
O:=$(OBJS);
|
||||
|
||||
OBJS:=$(patsubst %.o,$(ARCH)/%.o,$(OBJS))
|
||||
|
@ -43,7 +43,7 @@ int acinfo_readelem_ac_name(struct ac_info * acinfo,int type, uint8_t *msgelem,
|
||||
|
||||
int acinfo_readelem_ac_descriptor(struct ac_info * acinfo,int type, uint8_t *msgelem, int len)
|
||||
{
|
||||
if (type != CWMSGELEM_AC_DESCRIPTOR)
|
||||
if (type != CW_ELEM_AC_DESCRIPTOR)
|
||||
return 0;
|
||||
|
||||
if (len<12)
|
||||
|
@ -31,29 +31,27 @@
|
||||
#define CWVENDOR_CISCO_MWAR_ADDR 2
|
||||
#define CWVENDOR_CISCO_RAD 3
|
||||
#define CWVENDOR_CISCO_RAD_SLOT 4
|
||||
#define CWVENDOR_CISCO_RAD_NAME LWMSGELEM_WTP_NAME /* 5 */
|
||||
#define CWVENDOR_CISCO_RAD_NAME LW_ELEM_WTP_NAME /* 5 */
|
||||
#define CWVENDOR_CISCO_MWAR 6
|
||||
|
||||
#define CWVENDOR_CISCO_BOARD DATA LWMSGELEM_WTP_BOARD_DATA /* 50 */
|
||||
#define CWVENDOR_CISCO_BOARD DATA LW_ELEM_WTP_BOARD_DATA /* 50 */
|
||||
#define CWVENDER_CISCO_AP_MODE_AND_TYPE 54
|
||||
|
||||
#define CWVENDOR_CISCO_AP_IP_ADDR 83
|
||||
|
||||
#define CWVENDOR_CISCO_SPAM_VENDOR_SPECIFIC 104
|
||||
|
||||
#define CWVENDOR_CISCO_AP_GROUP_NAME 123
|
||||
#define CW_CISCO_AP_GROUP_NAME 123
|
||||
#define CWVENDOR_CISCO_AP_LED_STATE_CONFIG 125
|
||||
#define CWVENDOR_CISCO_AP_REGULATORY_DOMAIN 126
|
||||
#define CW_ELEM_CISCO_AP_REGULATORY_DOMAIN 126
|
||||
|
||||
#define CWVENDOR_CISCO_AP_PRE_STD_SWITCH_CONFIG 137
|
||||
#define CWVENDOR_CISCO_AP_POWER_INJECTOR_CONFIG 138
|
||||
|
||||
#define CWVENDOR_CISCO_AP_TIMESYNC 151
|
||||
#define CW_CISCO_AP_TIMESYNC 151
|
||||
|
||||
#define CWVENDOR_CISCO_BOARD_DATA_OPTIONS 207
|
||||
|
||||
|
||||
#define CWVENDOR_CISCO_MWAR_TYPE 208
|
||||
#define CW_CISCO_BOARD_DATA_OPTIONS 207
|
||||
#define CW_CISCO_MWAR_TYPE 208
|
||||
|
||||
|
||||
|
||||
|
@ -127,20 +127,24 @@ static int process_message(struct conn * conn,struct cwrmsg *cwrmsg,int (*cb)(vo
|
||||
|
||||
static void cw_dbg_packet(struct conn * conn, uint8_t * packet, int len)
|
||||
{
|
||||
if (!cw_dbg_is_level(DBG_CW_PKT_OUT))
|
||||
if (!cw_dbg_is_level(DBG_CW_PKT_IN))
|
||||
return;
|
||||
|
||||
printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Header printer\n");
|
||||
|
||||
/* print the header */
|
||||
char hdr[200];
|
||||
hdr_print(hdr,packet,len);
|
||||
|
||||
|
||||
if (!cw_dbg_is_level(DBG_CW_PKT_DMP)){
|
||||
cw_dbg(DBG_CW_PKT_OUT,"Processing capwap packet from %s, len=%d\n%s",sock_addr2str(&conn->addr),len,hdr);
|
||||
printf("the dumpi dumper\n");
|
||||
cw_dbg(DBG_CW_PKT_IN,"Processing capwap packet from %s, len=%d\n%s",sock_addr2str(&conn->addr),len,hdr);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
printf("The super dumper\n");
|
||||
cw_dbg_dmp(DBG_CW_PKT_DMP,packet,len,"Processing packet from %s, len=%d\n%s\n\tDump:",
|
||||
sock_addr2str(&conn->addr),len,hdr
|
||||
);
|
||||
@ -156,7 +160,6 @@ static void cw_dbg_packet(struct conn * conn, uint8_t * packet, int len)
|
||||
void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)(void*,struct cwrmsg*),void *cbarg)
|
||||
{
|
||||
|
||||
cw_dbg_packet(conn,packet,len);
|
||||
|
||||
|
||||
|
||||
@ -183,6 +186,10 @@ void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)(
|
||||
return;
|
||||
}
|
||||
|
||||
printf("Debug packet **************************************************************************\n");
|
||||
cw_dbg_packet(conn,packet,len);
|
||||
|
||||
|
||||
int hlen = 4*((val >> 19) & 0x1f);
|
||||
|
||||
|
||||
@ -220,6 +227,8 @@ void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)(
|
||||
if (f==NULL)
|
||||
return;
|
||||
|
||||
cw_dbg_packet(conn,f+4,*(uint32_t*)f);
|
||||
|
||||
if (!cwrmsg_init_ctrlhdr(conn,&cwrmsg,f+4,*(uint32_t*)f)){
|
||||
free(f);
|
||||
return;
|
||||
|
@ -32,6 +32,9 @@ int cw_foreach_msgelem(uint8_t * msgelems, int len,
|
||||
int elen;
|
||||
int i = 0;
|
||||
do {
|
||||
|
||||
|
||||
|
||||
val = ntohl(*(uint32_t *) (msgelems + i));
|
||||
type = (val >> 16) & 0xFFFF;
|
||||
elen = val & 0xffff;
|
||||
@ -44,8 +47,10 @@ printf("Bumm %d %d\n",i+elen+4,len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
callback(arg, type, msgelems + i + 4, elen);
|
||||
i += elen + 4;
|
||||
printf("left = %d\n",len-i);
|
||||
|
||||
} while (i < len);
|
||||
return 1;
|
||||
|
@ -265,7 +265,7 @@ void cw_dbg_msgelem_(int msg, int msgelem, const uint8_t * msgbuf, int len)
|
||||
|
||||
const char *elemname;
|
||||
char vendorname[256];
|
||||
if (msgelem == CWMSGELEM_VENDOR_SPECIFIC_PAYLOAD) {
|
||||
if (msgelem == CW_ELEM_VENDOR_SPECIFIC_PAYLOAD) {
|
||||
int vendor = ntohl(*((uint32_t *) msgbuf));
|
||||
int type = ntohs(*((uint16_t *) (msgbuf + 4)));
|
||||
sprintf(vendorname, "%s/%s/%d",
|
||||
|
@ -31,6 +31,7 @@ struct cw_dbg_cfgstrs cw_dbg_cfgstrs[] = {
|
||||
{"rfc",DBG_CW_RFC},
|
||||
{"pkt_in",DBG_CW_PKT_IN},
|
||||
{"pkt_out",DBG_CW_PKT_OUT},
|
||||
{"pkt_dtl",DBG_CW_PKT_DTL},
|
||||
{"pkt",(DBG_CW_PKT_IN | DBG_CW_PKT_OUT)},
|
||||
{"pkt_dmp",DBG_CW_PKT_DMP},
|
||||
{"pkt_err",DBG_CW_PKT_ERR},
|
||||
|
@ -24,14 +24,14 @@
|
||||
const char * cw_msgelemtostr(int elem)
|
||||
{
|
||||
switch (elem){
|
||||
case CWMSGELEM_AC_DESCRIPTOR:
|
||||
return "ac descriptor";
|
||||
case CW_ELEM_AC_DESCRIPTOR:
|
||||
return "AC descriptor";
|
||||
|
||||
/* AC IPv4 List 2
|
||||
AC IPv6 List 3
|
||||
*/
|
||||
case CWMSGELEM_AC_NAME:
|
||||
return "ac name";
|
||||
case CW_ELEM_AC_NAME:
|
||||
return "AC name";
|
||||
/*
|
||||
AC Name with Priority 5
|
||||
AC Timestamp 6
|
||||
@ -40,14 +40,14 @@ const char * cw_msgelemtostr(int elem)
|
||||
Reserved 9
|
||||
*/
|
||||
case CWMSGELEM_CONTROL_IPV4_ADDRESS:
|
||||
return "ctrl ipv4 addr";
|
||||
return "Ctrl IPv4 addr";
|
||||
case CWMSGELEM_CONTROL_IPV6_ADDRESS:
|
||||
return "ctrl ipv6 addr";
|
||||
return "ctrl IPv6 addr";
|
||||
|
||||
case CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS:
|
||||
return "capwap local ipv4 addr";
|
||||
return "CAPWAP local IPv4 addr";
|
||||
case CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS:
|
||||
return "capwap local ipv6 addr";
|
||||
return "CAPWAP local IPv6 addr";
|
||||
/* CAPWAP Timers 12
|
||||
CAPWAP Transport Protocol 51
|
||||
Data Transfer Data 13
|
||||
@ -65,7 +65,7 @@ const char * cw_msgelemtostr(int elem)
|
||||
Duplicate IPv6 Address 22
|
||||
*/
|
||||
case CWMSGELEM_ECN_SUPPORT:
|
||||
return "ecn support";
|
||||
return "ECN support";
|
||||
/* Idle Timeout 23
|
||||
*/
|
||||
case CWMSGELEM_IMAGE_DATA:
|
||||
@ -99,18 +99,18 @@ const char * cw_msgelemtostr(int elem)
|
||||
|
||||
/* Returned Message Element 34
|
||||
*/
|
||||
case CWMSGELEM_SESSION_ID:
|
||||
case CW_ELEM_SESSION_ID:
|
||||
return "session id";
|
||||
|
||||
case CWMSGELEM_STATISTICS_TIMER:
|
||||
return "statistics timer";
|
||||
return "Statistics Timer";
|
||||
|
||||
case CWMSGELEM_VENDOR_SPECIFIC_PAYLOAD:
|
||||
return "vendor specific payload";
|
||||
case CW_ELEM_VENDOR_SPECIFIC_PAYLOAD:
|
||||
return "Vendor Specific Payload";
|
||||
|
||||
|
||||
case CWMSGELEM_WTP_BOARD_DATA:
|
||||
return "wtp board data";
|
||||
return "WTP Board Data";
|
||||
|
||||
case CWMSGELEM_WTP_DESCRIPTOR:
|
||||
return "wtp descriptor";
|
||||
@ -122,8 +122,8 @@ const char * cw_msgelemtostr(int elem)
|
||||
/* case CWMSGELEM_RESERVED_1:
|
||||
return "reserved (42)";
|
||||
*/
|
||||
case CWMSGELEM_WTP_IPV4_IP_ADDR:
|
||||
return "WTP IPv4 IP address";
|
||||
case CW_ELEM_WTP_IPV4_IP_ADDRESS:
|
||||
return "WTP IPv4 IP Address";
|
||||
|
||||
/*
|
||||
Reserved 43
|
||||
|
@ -22,10 +22,10 @@ const char * cw_msgtostr(int type)
|
||||
{
|
||||
switch(type){
|
||||
case CWMSG_DISCOVERY_REQUEST:
|
||||
return "discovery request";
|
||||
return "Discovery Request";
|
||||
|
||||
case CWMSG_DISCOVERY_RESPONSE:
|
||||
return "discovery response";
|
||||
return "Discovery Response";
|
||||
|
||||
case CWMSG_JOIN_REQUEST:
|
||||
return "join request";
|
||||
@ -33,11 +33,11 @@ const char * cw_msgtostr(int type)
|
||||
case CWMSG_JOIN_RESPONSE:
|
||||
return "join response";
|
||||
|
||||
case CWMSG_CONFIGURATION_STATUS_REQUEST:
|
||||
return "configuration status request";
|
||||
case CW_MSG_CONFIGURATION_STATUS_REQUEST:
|
||||
return "Configuration Status Request";
|
||||
|
||||
case CWMSG_CONFIGURATION_STATUS_RESPONSE:
|
||||
return "configuration status response";
|
||||
case CW_MSG_CONFIGURATION_STATUS_RESPONSE:
|
||||
return "Configuration Status Response";
|
||||
|
||||
case CWMSG_CONFIGURATION_UPDATE_REQUEST:
|
||||
return "configuration update request";
|
||||
|
@ -77,7 +77,7 @@ static int read_subelem(struct ac_info* acinfo,int subtype,uint8_t *elem, int le
|
||||
*/
|
||||
int cw_readelem_ac_descriptor(struct ac_info * acinfo,int type, uint8_t *msgelem, int len)
|
||||
{
|
||||
if (type != CWMSGELEM_AC_DESCRIPTOR)
|
||||
if (type != CW_ELEM_AC_DESCRIPTOR)
|
||||
return 0;
|
||||
|
||||
if (len<12)
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
int cw_readelem_ac_name(uint8_t **dst, int type,uint8_t *msgelem, int len)
|
||||
{
|
||||
if (type != CWMSGELEM_AC_NAME)
|
||||
if (type != CW_ELEM_AC_NAME)
|
||||
return 0;
|
||||
|
||||
if (len > 512 ) {
|
||||
|
@ -9,7 +9,7 @@ int cw_readelem_capwap_local_ip_addr(struct sockaddr * local_ip, int type, uint8
|
||||
{
|
||||
switch (type){
|
||||
case CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS:
|
||||
case CWMSGELEM_WTP_IPV4_IP_ADDR:
|
||||
case CW_ELEM_WTP_IPV4_IP_ADDRESS:
|
||||
{
|
||||
if (len!=4)
|
||||
return -1;
|
||||
@ -24,7 +24,7 @@ int cw_readelem_capwap_local_ip_addr(struct sockaddr * local_ip, int type, uint8
|
||||
}
|
||||
#ifdef WITH_IPV6
|
||||
case CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS:
|
||||
case CWMSGELEM_WTP_IPV6_IP_ADDR:
|
||||
case CW_ELEM_WTP_IPV6_IP_ADDRESS:
|
||||
{
|
||||
if (len!=16)
|
||||
return -1;
|
||||
|
@ -15,7 +15,7 @@ int cw_readelem_cisco_payload(void *data,int msgtype,int elem_id,uint8_t *msgele
|
||||
|
||||
|
||||
switch (msgtype) {
|
||||
case CWMSG_CONFIGURATION_STATUS_REQUEST:
|
||||
case CW_MSG_CONFIGURATION_STATUS_REQUEST:
|
||||
{
|
||||
if (lw_readelem_wtp_board_data((struct wtpinfo*)data,elem_id,msgelem,len))
|
||||
return 1;
|
||||
@ -47,7 +47,7 @@ int cw_readelem_cisco_payload(void *data,int msgtype,int elem_id,uint8_t *msgele
|
||||
|
||||
int cw_readelem_vendor_specific_payload(void * data,int msgtype,int elemtype,uint8_t *msgelem, int len)
|
||||
{
|
||||
if (elemtype != CWMSGELEM_VENDOR_SPECIFIC_PAYLOAD)
|
||||
if (elemtype != CW_ELEM_VENDOR_SPECIFIC_PAYLOAD)
|
||||
return 0;
|
||||
|
||||
if (len < 6){
|
||||
@ -64,6 +64,8 @@ int cw_readelem_vendor_specific_payload(void * data,int msgtype,int elemtype,uin
|
||||
|
||||
case CW_VENDOR_ID_CISCO:
|
||||
return cw_readelem_cisco_payload(data,msgtype,elem_id,msgelem+6,elem_len);
|
||||
default:
|
||||
cw_dbg(DBG_ERR,"Can't read vendor specific payload. Vendor ID %d",vendor_id);
|
||||
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ extern int cw_rand(uint8_t*dst, int len);
|
||||
#define cw_timer_timeout(t) (time(NULL)>t ? 1 : 0)
|
||||
|
||||
|
||||
/** Generic macroto to isolate bits from a dword */
|
||||
/** Generic macro to isolate bits from a dword */
|
||||
#define cw_get_dword_bits(src,start,len) ((~(0xFFFFFFFF<<len)) & (src >> (32 - start - len)))
|
||||
|
||||
|
||||
|
@ -41,7 +41,5 @@ extern void cwmsg_addelem_radio_operational_state(struct cwmsg * cwmsg, struct r
|
||||
|
||||
extern void cwmsg_addelem_vendor_cisco_mwar_addr(struct cwmsg *msg, struct conn *conn);
|
||||
|
||||
#define cwmsg_addelem_session_id(msg,session_id) \
|
||||
cwmsg_addelem(msg,CWMSGELEM_SESSION_ID,bstr_data(session_id),bstr_len(session_id));
|
||||
|
||||
#endif
|
||||
|
@ -87,6 +87,6 @@ void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo,struc
|
||||
|
||||
}
|
||||
|
||||
cwmsg_addelem(msg,CWMSGELEM_AC_DESCRIPTOR,acd,len);
|
||||
cwmsg_addelem(msg,CW_ELEM_AC_DESCRIPTOR,acd,len);
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,6 @@ void cwmsg_addelem_ac_timestamp(struct cwmsg *msg)
|
||||
uint32_t ntpt = t+(uint32_t)2398291200LL;
|
||||
uint8_t c[4];
|
||||
*((uint32_t*)c)= htonl(ntpt);
|
||||
cwmsg_addelem(msg,CWMSGELEM_AC_TIMESTAMP,c,4);
|
||||
cwmsg_addelem(msg,CW_ELEM_AC_TIMESTAMP,c,4);
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "cwmsg.h"
|
||||
#include "conn.h"
|
||||
|
||||
#include "sock.h" //Tube
|
||||
|
||||
void cwmsg_addelem_cw_local_ip_addr(struct cwmsg *msg, struct conn * conn)
|
||||
{
|
||||
@ -36,6 +37,8 @@ void cwmsg_addelem_cw_local_ip_addr(struct cwmsg *msg, struct conn * conn)
|
||||
getsockname (conn->sock,(struct sockaddr *)&a,&alen);
|
||||
|
||||
int cw_mode = msg->capwap_mode;
|
||||
cw_mode = CWMODE_CISCO;
|
||||
|
||||
|
||||
switch (((struct sockaddr*)&a)->sa_family){
|
||||
case AF_INET:
|
||||
@ -43,9 +46,11 @@ void cwmsg_addelem_cw_local_ip_addr(struct cwmsg *msg, struct conn * conn)
|
||||
struct sockaddr_in * sain = (struct sockaddr_in*)&a;
|
||||
int id;
|
||||
if (cw_mode == CWMODE_CISCO)
|
||||
id = CWMSGELEM_WTP_IPV4_IP_ADDR;
|
||||
id = CW_ELEM_WTP_IPV4_IP_ADDRESS;
|
||||
else
|
||||
id = CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS;
|
||||
|
||||
printf("Sending local ip %s\n",sock_addr2str(sain));
|
||||
|
||||
cwmsg_addelem(msg,id,(uint8_t*)&sain->sin_addr,4);
|
||||
break;
|
||||
@ -56,7 +61,7 @@ void cwmsg_addelem_cw_local_ip_addr(struct cwmsg *msg, struct conn * conn)
|
||||
{
|
||||
int id;
|
||||
if (cw_mode == CWMODE_CISCO)
|
||||
id = CWMSGELEM_WTP_IPV6_IP_ADDR;
|
||||
id = CW_ELEM_WTP_IPV6_IP_ADDRESS;
|
||||
else
|
||||
id = CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS;
|
||||
struct sockaddr_in6 * sain = (struct sockaddr_in6*)&a;
|
||||
|
@ -25,6 +25,6 @@ void cwmsg_addelem_vendor_cisco_ap_timesync(struct cwmsg *cwmsg)
|
||||
{
|
||||
//time_t t = htonl(time(NULL));
|
||||
uint32_t t = htonl(time(NULL));
|
||||
cwmsg_addelem_vendor_specific_payload(cwmsg, CW_VENDOR_ID_CISCO, CWVENDOR_CISCO_AP_TIMESYNC,
|
||||
cwmsg_addelem_vendor_specific_payload(cwmsg, CW_VENDOR_ID_CISCO, CW_CISCO_AP_TIMESYNC,
|
||||
(uint8_t *) & t, sizeof(t));
|
||||
}
|
||||
|
@ -12,7 +12,7 @@
|
||||
#include "conn.h"
|
||||
|
||||
|
||||
|
||||
#include "sock.h"
|
||||
|
||||
void cwmsg_addelem_vendor_cisco_mwar_addr(struct cwmsg *msg, struct conn *conn)
|
||||
{
|
||||
@ -21,10 +21,12 @@ void cwmsg_addelem_vendor_cisco_mwar_addr(struct cwmsg *msg, struct conn *conn)
|
||||
switch (((struct sockaddr*)&conn->addr)->sa_family){
|
||||
case AF_INET:
|
||||
{
|
||||
data[0]=0;
|
||||
data[0]=1; /* mwar type */
|
||||
data[5]=0;
|
||||
data[6]=0;
|
||||
|
||||
printf("Adding mwar addr %s\n",sock_addr2str(&conn->addr));
|
||||
|
||||
struct sockaddr_in * sain = (struct sockaddr_in*)&conn->addr;
|
||||
memcpy(data+1,(uint8_t*)&sain->sin_addr,4);
|
||||
cwmsg_addelem_vendor_specific_payload(msg, CW_VENDOR_ID_CISCO,
|
||||
|
@ -36,7 +36,7 @@ void cwmsg_addelem_vendor_specific_payload(struct cwmsg *msg,int vendor_id, int
|
||||
memcpy(buffer+6,payload,len);
|
||||
|
||||
|
||||
cwmsg_addelem(msg,CWMSGELEM_VENDOR_SPECIFIC_PAYLOAD,buffer,len+6);
|
||||
cwmsg_addelem(msg,CW_ELEM_VENDOR_SPECIFIC_PAYLOAD,buffer,len+6);
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,8 @@ void cwmsg_init(struct cwmsg * cwmsg, uint8_t *buffer, int type, int seqnum, str
|
||||
if (hlen%4){
|
||||
int n = hlen;
|
||||
hlen = (hlen>>2)*4+4;
|
||||
memset(buffer+n,0,hlen-n);
|
||||
memset(buffer+n,0,hlen-n);
|
||||
*(buffer+n)=0xc0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -36,7 +36,7 @@ struct eparm{
|
||||
static int readelem(void * eparm,int type,uint8_t* msgelem,int len)
|
||||
{
|
||||
struct eparm * e = (struct eparm*)eparm;
|
||||
cw_dbg_msgelem(CWMSG_CONFIGURATION_STATUS_REQUEST, type, msgelem,len);
|
||||
cw_dbg_msgelem(CW_MSG_CONFIGURATION_STATUS_REQUEST, type, msgelem,len);
|
||||
|
||||
/* mandatory elements */
|
||||
|
||||
@ -59,7 +59,7 @@ static int readelem(void * eparm,int type,uint8_t* msgelem,int len)
|
||||
/* non-mantatory elements */
|
||||
|
||||
if (cw_readelem_vendor_specific_payload
|
||||
(e->wtpinfo, CWMSG_CONFIGURATION_STATUS_REQUEST, type, msgelem, len))
|
||||
(e->wtpinfo, CW_MSG_CONFIGURATION_STATUS_REQUEST, type, msgelem, len))
|
||||
return 1;
|
||||
|
||||
|
||||
@ -73,7 +73,7 @@ foundX:
|
||||
void cwread_configuration_status_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len)
|
||||
{
|
||||
int mand[] = {
|
||||
CWMSGELEM_AC_NAME,
|
||||
CW_ELEM_AC_NAME,
|
||||
CWMSGELEM_WTP_REBOOT_STATISTICS,
|
||||
CWMSGELEM_RADIO_ADMINISTRATIVE_STATE,
|
||||
CWMSGELEM_STATISTICS_TIMER,
|
||||
|
@ -68,8 +68,8 @@ static int acinfo_readelem_discovery_resp(void * eparm,int type,uint8_t* msgelem
|
||||
void cwread_discovery_response(struct ac_info * acinfo, uint8_t * msg, int len)
|
||||
{
|
||||
int mand[] = {
|
||||
CWMSGELEM_AC_DESCRIPTOR,
|
||||
CWMSGELEM_AC_NAME,
|
||||
CW_ELEM_AC_DESCRIPTOR,
|
||||
CW_ELEM_AC_NAME,
|
||||
XCWMSGELEM_CAPWAP_CONTROL_IP_ADDRESS,
|
||||
XCWMSGELEM_CAPWAP_RADIO_INFO,
|
||||
|
||||
|
@ -14,7 +14,7 @@ void cwmsg_addelem_capwap_timers(struct cwmsg *msg,int discovery,int echo_reques
|
||||
void cwsend_conf_status_response(struct conn * conn,int seqnum, int rc, struct radioinfo * radioinfo, struct ac_info * acinfo, struct wtpinfo * wtpinfo)
|
||||
{
|
||||
struct cwmsg * cwmsg = &conn->resp_msg;
|
||||
cwmsg_init(cwmsg,conn->resp_buffer,CWMSG_CONFIGURATION_STATUS_RESPONSE,seqnum,NULL);
|
||||
cwmsg_init(cwmsg,conn->resp_buffer,CW_MSG_CONFIGURATION_STATUS_RESPONSE,seqnum,NULL);
|
||||
|
||||
cwmsg_addelem_capwap_timers(cwmsg,120,15);
|
||||
/*
|
||||
|
@ -35,7 +35,7 @@ int cwsend_discovery_request(struct conn *conn, struct radioinfo *radioinfo,
|
||||
struct cwmsg cwmsg;
|
||||
|
||||
cwmsg_init(&cwmsg, buffer, CWMSG_DISCOVERY_REQUEST, conn_get_next_seqnum(conn),
|
||||
NULL /*radioinfo */ );
|
||||
radioinfo );
|
||||
cwmsg.capwap_mode = conn->capwap_mode;
|
||||
|
||||
|
||||
@ -67,6 +67,12 @@ int cwsend_discovery_request(struct conn *conn, struct radioinfo *radioinfo,
|
||||
switch (cwmsg.capwap_mode) {
|
||||
case CWMODE_CISCO:
|
||||
cwmsg_addelem_vendor_cisco_rad_name(&cwmsg, (uint8_t *) wtpinfo->name);
|
||||
|
||||
uint8_t data207[4] = {1,1,0,1};
|
||||
cwmsg_addelem_vendor_specific_payload(&cwmsg,CW_VENDOR_ID_CISCO,
|
||||
CW_CISCO_BOARD_DATA_OPTIONS,data207,4);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -41,7 +41,7 @@ void cwsend_discovery_response(struct conn *conn, int seqnum, struct radioinfo *
|
||||
|
||||
|
||||
cwmsg_addelem_ac_descriptor(cwmsg, acinfo,wtpinfo);
|
||||
cwmsg_addelem(cwmsg, CWMSGELEM_AC_NAME, (uint8_t *) acinfo->ac_name,
|
||||
cwmsg_addelem(cwmsg, CW_ELEM_AC_NAME, (uint8_t *) acinfo->ac_name,
|
||||
strlen((char *) acinfo->ac_name));
|
||||
|
||||
cwmsg_addelem_wtp_radio_infos(cwmsg, acinfo->radioinfos);
|
||||
@ -52,8 +52,12 @@ void cwsend_discovery_response(struct conn *conn, int seqnum, struct radioinfo *
|
||||
switch (cwmsg->capwap_mode) {
|
||||
case CWMODE_CISCO:
|
||||
case CWMODE_CIPWAP:
|
||||
{
|
||||
cwmsg_addelem_vendor_cisco_ap_timesync(cwmsg);
|
||||
uint8_t mwtype=1;
|
||||
cwmsg_addelem_vendor_s_payload(cwmsg,CW_VENDOR_ID_CISCO,CW_CISCO_MWAR_TYPE,&mwtype,1);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
|
||||
|
@ -21,17 +21,30 @@
|
||||
#include "capwap.h"
|
||||
#include "capwap_cisco.h"
|
||||
|
||||
#include "lwapp_cisco.h"
|
||||
|
||||
#include "conn.h"
|
||||
#include "cwmsg.h"
|
||||
|
||||
#include "sock.h"
|
||||
|
||||
#include "acinfo.h" //Tube
|
||||
|
||||
|
||||
int cwsend_join_request(struct conn *conn, struct radioinfo *radioinfo, struct wtpinfo *wtpinfo)
|
||||
{
|
||||
uint8_t buffer[CWMSG_MAX_SIZE];
|
||||
struct cwmsg cwmsg;
|
||||
|
||||
|
||||
|
||||
//radioinfo->rmac=0;
|
||||
|
||||
cwmsg_init(&cwmsg, buffer, CWMSG_JOIN_REQUEST, conn_get_next_seqnum(conn), radioinfo);
|
||||
cwmsg.capwap_mode = conn->capwap_mode;
|
||||
|
||||
// printf("Rad info rmac %s\n",sock_hwaddr2str(bstr_data(radioinfo->rmac),bstr_len(radioinfo->rmac)));
|
||||
|
||||
/* Mandatory elements */
|
||||
|
||||
/* location data */
|
||||
@ -57,20 +70,38 @@ int cwsend_join_request(struct conn *conn, struct radioinfo *radioinfo, struct w
|
||||
/* WTP MAC type */
|
||||
cwmsg_addelem(&cwmsg, CWMSGELEM_WTP_MAC_TYPE, &wtpinfo->mac_type, sizeof(uint8_t));
|
||||
|
||||
/* WTP radio information elements */
|
||||
cwmsg_addelem_wtp_radio_infos(&cwmsg, wtpinfo->radioinfo);
|
||||
|
||||
/* local ip address */
|
||||
cwmsg_addelem_cw_local_ip_addr(&cwmsg, conn);
|
||||
|
||||
/* maximum message length */
|
||||
uint16_t l = htons(wtpinfo->max_msg_len);
|
||||
cwmsg_addelem(&cwmsg, CWMSGELEM_MAXIMUM_MESSAGE_LENGTH, (uint8_t *) & l, sizeof(l));
|
||||
|
||||
|
||||
|
||||
|
||||
switch (conn->capwap_mode) {
|
||||
case CWMODE_CISCO:
|
||||
cwmsg_addelem_vendor_cisco_mwar_addr(&cwmsg,conn);
|
||||
|
||||
uint8_t data207[4] = {11,77,30,31};
|
||||
uint8_t data207[4] = {1,1,0,1};
|
||||
|
||||
cwmsg_addelem_vendor_specific_payload(&cwmsg,CW_VENDOR_ID_CISCO,
|
||||
CWVENDOR_CISCO_BOARD_DATA_OPTIONS,data207,4);
|
||||
CW_CISCO_BOARD_DATA_OPTIONS,data207,4);
|
||||
|
||||
cwmsg_addelem_vendor_specific_payload(&cwmsg,CW_VENDOR_ID_CISCO,
|
||||
|
||||
|
||||
// cwmsg_ae(cw_addelem_vendor_specific_payload(&cwmsg,CW_VENDOR_ID_CISCO,
|
||||
// CWVENDOR_CISCO_BOARD_DATA_OPTIONS,data207,4);
|
||||
|
||||
/* cwmsg_addelem_vendor_specific_payload(&cwmsg,CW_VENDOR_ID_CISCO,
|
||||
CWVENDOR_CISCO_AP_GROUP_NAME,(uint8_t*)"Tobias",strlen("Tobias"));
|
||||
*/
|
||||
|
||||
|
||||
cwmsg_addelem_vendor_s_payload(&cwmsg, CW_VENDOR_ID_CISCO,
|
||||
CW_CISCO_AP_GROUP_NAME,(uint8_t *)"default-group",strlen("default-group"));
|
||||
|
||||
|
||||
break;
|
||||
@ -80,15 +111,38 @@ int cwsend_join_request(struct conn *conn, struct radioinfo *radioinfo, struct w
|
||||
sizeof(uint8_t));
|
||||
}
|
||||
|
||||
/* local ip address */
|
||||
cwmsg_addelem_cw_local_ip_addr(&cwmsg, conn);
|
||||
/* WTP radio information elements */
|
||||
cwmsg_addelem_wtp_radio_infos(&cwmsg, wtpinfo->radioinfo);
|
||||
|
||||
|
||||
/* Non-mandatory elements */
|
||||
|
||||
/* maximum message length */
|
||||
uint16_t l = htons(wtpinfo->max_msg_len);
|
||||
cwmsg_addelem(&cwmsg, CWMSGELEM_MAXIMUM_MESSAGE_LENGTH, (uint8_t *) & l, sizeof(l));
|
||||
switch (conn->capwap_mode) {
|
||||
case CWMODE_CISCO:
|
||||
{
|
||||
uint8_t mtu[2048];
|
||||
int l = lw_put_cisco_path_mtu(mtu,1485,1101);
|
||||
|
||||
printf("Len = %d\n",l);
|
||||
|
||||
// cwmsg_addelem_vendor_specific_payload(&cwmsg,LW_VENDOR_CISCO,
|
||||
// LW_ELEM_VENDOR_SPECIFIC,mtu,l);
|
||||
|
||||
|
||||
// (&cwmsg)->pos+=4;
|
||||
struct ac_info acinfo;
|
||||
extern struct ac_info wtp_acinfo;
|
||||
|
||||
// memset(&acinfo,0,sizeof(struct ac_info));
|
||||
// cwmsg_addelem_ac_descriptor(&cwmsg,&wtp_acinfo,wtpinfo);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
printf("MTU %d\n",conn->mtu);
|
||||
return conn_send_cwmsg(conn, &cwmsg);
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ void cwsend_join_response(struct conn *conn, int seqnum, int rc, struct radioinf
|
||||
cwmsg_addelem_result_code(cwmsg, rc);
|
||||
|
||||
cwmsg_addelem_ac_descriptor(cwmsg, acinfo,wtpinfo);
|
||||
cwmsg_addelem(cwmsg, CWMSGELEM_AC_NAME, acinfo->ac_name, strlen((char *) acinfo->ac_name));
|
||||
cwmsg_addelem(cwmsg, CW_ELEM_AC_NAME, acinfo->ac_name, strlen((char *) acinfo->ac_name));
|
||||
cwmsg_addelem(cwmsg, CWMSGELEM_ECN_SUPPORT, &acinfo->ecn_support, sizeof(uint8_t));
|
||||
cwmsg_addelem_ctrl_ip_addrs(cwmsg, acinfo);
|
||||
// cwmsg_addelem_cw_local_ip_addr(cwmsg,conn);
|
||||
|
@ -1,10 +1,15 @@
|
||||
|
||||
|
||||
#include "gnutls/dtls.h"
|
||||
|
||||
#include "dtls.h"
|
||||
#include "dtls_gnutls.h"
|
||||
|
||||
#include "conn.h"
|
||||
#include "cw_log.h"
|
||||
|
||||
|
||||
|
||||
int dtls_gnutls_connect(struct conn *conn)
|
||||
{
|
||||
struct dtls_gnutls_data * d;
|
||||
@ -13,6 +18,9 @@ int dtls_gnutls_connect(struct conn *conn)
|
||||
// gnutls_dh_set_prime_bits(d->session, 512);
|
||||
gnutls_handshake_set_timeout(d->session,GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT);
|
||||
|
||||
gnutls_dtls_set_data_mtu(d->session,1500);
|
||||
gnutls_dtls_set_mtu(d->session,1500);
|
||||
|
||||
int rc;
|
||||
do {
|
||||
rc = gnutls_handshake(d->session);
|
||||
|
@ -21,14 +21,14 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include "capwap.h"
|
||||
|
||||
#include "sock.h"
|
||||
|
||||
|
||||
|
||||
int hdr_print(char *str, uint8_t *packet, int len)
|
||||
{
|
||||
|
||||
|
||||
printf("The readl header printer\n");
|
||||
|
||||
char *s = str;
|
||||
|
||||
@ -38,7 +38,8 @@ int hdr_print(char *str, uint8_t *packet, int len)
|
||||
return s-str;
|
||||
}
|
||||
|
||||
int preamble = CWTH_GET_PREAMBLE(packet);
|
||||
int preamble = cw_get_hdr_preamble(packet); //CWTH_GET_PREAMBLE(packet);
|
||||
|
||||
if (preamble==01){
|
||||
s+=sprintf(s,"\tEncrypted data.");
|
||||
return s-str;
|
||||
@ -57,21 +58,29 @@ int hdr_print(char *str, uint8_t *packet, int len)
|
||||
|
||||
|
||||
|
||||
int hlen = CWTH_GET_HLEN(packet);
|
||||
int rid = CWTH_GET_RID(packet);
|
||||
int wbid = CWTH_GET_WBID(packet);
|
||||
int hlen = cw_get_hdr_hlen(packet); //CWTH_GET_HLEN(packet);
|
||||
|
||||
int rid = cw_get_hdr_rid(packet);
|
||||
int wbid = cw_get_hdr_wbid(packet);
|
||||
|
||||
s+=sprintf(s,"\tHLEN: %d, RID: %02X, WBID %02X",hlen,rid,wbid);
|
||||
|
||||
|
||||
|
||||
s+=sprintf(s," Flags: (T=%d,F=%d,L=%d,W=%d,M=%d,K=%d)\n",
|
||||
CWTH_GET_FLAG_T(packet),
|
||||
CWTH_GET_FLAG_F(packet),
|
||||
CWTH_GET_FLAG_L(packet),
|
||||
CWTH_GET_FLAG_W(packet),
|
||||
CWTH_GET_FLAG_M(packet),
|
||||
CWTH_GET_FLAG_K(packet)
|
||||
cw_get_hdr_flag_t(packet),
|
||||
cw_get_hdr_flag_f(packet),
|
||||
cw_get_hdr_flag_l(packet),
|
||||
cw_get_hdr_flag_w(packet),
|
||||
cw_get_hdr_flag_m(packet),
|
||||
cw_get_hdr_flag_k(packet)
|
||||
);
|
||||
if (cw_get_hdr_flag_m(packet)){
|
||||
uint8_t * rmac = cw_get_hdr_rmac(packet);
|
||||
s+=sprintf(s,"\tRadio MAC: %s\n",sock_hwaddr2str(bstr_data(rmac),
|
||||
bstr_len(rmac)));
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (len < 8){
|
||||
@ -79,13 +88,13 @@ int hdr_print(char *str, uint8_t *packet, int len)
|
||||
return s-str;
|
||||
}
|
||||
|
||||
int frag_id = CWTH_GET_FRAGID(packet);
|
||||
int frag_offs = CWTH_GET_FRAGOFFSET(packet);
|
||||
int frag_id = cw_get_hdr_fragid(packet);
|
||||
int frag_offs = cw_get_hdr_fragoffset(packet);
|
||||
s+=sprintf(s,"\tFrag Id: %d, Frag Offs:: %d\n",frag_id,frag_offs);
|
||||
|
||||
|
||||
int bhlen = 4*hlen;
|
||||
if (CWTH_GET_FLAG_F(packet) && frag_offs!=0){
|
||||
if (cw_get_hdr_flag_f(packet) && frag_offs!=0){
|
||||
s+=sprintf(s,"\tFragment data ...");
|
||||
return s-str;
|
||||
}
|
||||
|
@ -16,13 +16,20 @@
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
*@file
|
||||
*@brief Implements lw_checksum.
|
||||
*/
|
||||
|
||||
#include "lwapp.h"
|
||||
|
||||
/**
|
||||
* Calculate the 16-bit checksum for LWAPP image data message
|
||||
* elements with opcode 3 - also used by Cisco in CAPWAP
|
||||
* @param d pointer to data to calulate the checksum for
|
||||
* @param len length of data
|
||||
* @return the calculated checksum.
|
||||
*/
|
||||
|
||||
uint16_t lw_checksum(uint8_t * d, int len)
|
||||
{
|
||||
int32_t sum = 0;
|
||||
|
@ -22,7 +22,7 @@
|
||||
*/
|
||||
int lw_readelem_wtp_board_data(struct wtpinfo *wtpinfo, int type, uint8_t *msgelem, int len)
|
||||
{
|
||||
if (type != LWMSGELEM_WTP_BOARD_DATA)
|
||||
if (type != LW_ELEM_WTP_BOARD_DATA)
|
||||
return 0;
|
||||
|
||||
if ( len != 46 ) {
|
||||
|
@ -37,7 +37,7 @@
|
||||
*/
|
||||
int lw_readelem_wtp_name(uint8_t ** dst, int type, uint8_t * msgelem, int len)
|
||||
{
|
||||
if (type != LWMSGELEM_WTP_NAME)
|
||||
if (type != LW_ELEM_WTP_NAME)
|
||||
return 0;
|
||||
|
||||
|
||||
|
@ -67,11 +67,13 @@
|
||||
|
||||
|
||||
|
||||
#define LWMSG_DISCOVERY_REQUEST 1
|
||||
#define LWMSG_DISCOVERY_RESPONSE 2
|
||||
#define LWMSG_DISCOVERY_REQUEST 1
|
||||
#define LWMSG_DISCOVERY_RESPONSE 2
|
||||
|
||||
/* Join Request 3
|
||||
Join Response 4
|
||||
#define LW_MSG_JOIN_REQUEST 3
|
||||
#define LW_MSG_JOIN_RESPONSE 4
|
||||
|
||||
/*
|
||||
Join ACK 5
|
||||
Join Confirm 6
|
||||
Unused 7-9
|
||||
@ -99,17 +101,44 @@
|
||||
|
||||
/* LWAPP message elements */
|
||||
|
||||
#define LWMSGELEM_WTP_DESCRIPTOR 3
|
||||
#define LWMSGELEM_WTP_NAME 5
|
||||
#define LW_ELEM_AC_ADDRESS 2
|
||||
#define LW_ELEM_WTP_DESCRIPTOR 3
|
||||
#define LW_ELEM_WTP_NAME 5
|
||||
#define LW_ELEM_AC_DESCRIPTOR 6
|
||||
|
||||
#define LW_ELEM_AC_NAME 31
|
||||
|
||||
#define LWMSGELEM_SUPPORTED_RATES 16
|
||||
#define LW_ELEM_TEST 18
|
||||
|
||||
#define LWMSGELEM_WTP_BOARD_DATA 50
|
||||
#define LW_ELEM_WTP_BOARD_DATA 50
|
||||
|
||||
#define LW_ELEM_VENDOR_SPECIFIC 104
|
||||
|
||||
|
||||
/* useful macros and inline functions */
|
||||
|
||||
#define lw_foreach_elem(d,msg,len) for(d=msg; d<msg+len; d=d+3+LWMSGELEM_GET_LEN(d))
|
||||
|
||||
static inline int lw_put_dword(uint8_t *dst, uint32_t dw){
|
||||
*((uint32_t*)(dst)) = htonl(dw);
|
||||
return 4;
|
||||
}
|
||||
|
||||
static inline int lw_put_word(uint8_t *dst, uint16_t w){
|
||||
*((uint16_t*)(dst)) = htons(w);
|
||||
return 2;
|
||||
}
|
||||
|
||||
static inline int lw_put_elem_hdr(uint8_t *dst,uint8_t type,uint16_t len)
|
||||
{
|
||||
*dst=type;
|
||||
*((uint16_t*)(dst+1)) = htons(len);
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
/* useful macros */
|
||||
|
||||
#define lw_foreach_msgelem(d,msg,len) for(d=msg; d<msg+len; d=d+3+LWMSGELEM_GET_LEN(d))
|
||||
|
||||
/* function proto types */
|
||||
|
||||
@ -120,4 +149,5 @@ extern int lw_readelem_wtp_name(bstr_t * dst, int type, uint8_t * msgelem, int l
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -66,7 +66,7 @@ struct wtpinfo{
|
||||
|
||||
|
||||
bstr_t session_id;
|
||||
// int session_id_len;
|
||||
|
||||
|
||||
struct radioinfo radioinfo[31];
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
int wtpinfo_lwreadelem_wtp_descriptor(struct wtpinfo * wtpinfo, int type, uint8_t *msgelem, int len)
|
||||
{
|
||||
if (type != LWMSGELEM_WTP_DESCRIPTOR)
|
||||
if (type != LW_ELEM_WTP_DESCRIPTOR)
|
||||
return 0;
|
||||
|
||||
/* if (len!=16)
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
int wtpinfo_readelem_session_id(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len)
|
||||
{
|
||||
if (type != CWMSGELEM_SESSION_ID)
|
||||
if (type != CW_ELEM_SESSION_ID)
|
||||
return 0;
|
||||
|
||||
wtpinfo->session_id = bstr_create(msgelem,len);
|
||||
|
@ -1,7 +1,13 @@
|
||||
#include "capwap/conn.h"
|
||||
#include "wtp_interface.h"
|
||||
|
||||
int configure()
|
||||
{
|
||||
struct conn * conn = get_conn();
|
||||
struct wtpinfo * wtpinfo = get_wtpinfo();
|
||||
|
||||
cw_prepare_configuration_status_request(conn,wtpinfo);
|
||||
conn_send_request(conn);
|
||||
|
||||
}
|
||||
|
||||
|
@ -50,12 +50,13 @@ static int acprint(void *p,void*d) //,int ctr)
|
||||
ACIP * ip = (ACIP*)d;
|
||||
char str[100];
|
||||
sock_addrtostr((struct sockaddr*)&ip->ip,str,100);
|
||||
// printf("ACIP: %s\n",str);
|
||||
// printf("CTR: %i\n",ip->wtp_count);
|
||||
printf("ACIP: %s\n",str);
|
||||
printf("CTR: %i\n",ip->wtp_count);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
struct ac_info wtp_acinfo;
|
||||
|
||||
|
||||
static int msg_cb(void *priv,struct cwrmsg * cwrmsg)
|
||||
@ -75,22 +76,22 @@ static int msg_cb(void *priv,struct cwrmsg * cwrmsg)
|
||||
*/
|
||||
|
||||
|
||||
struct ac_info acinfo;
|
||||
memset(&acinfo,0,sizeof(acinfo));
|
||||
struct ac_info * acinfo = &wtp_acinfo;
|
||||
memset(acinfo,0,sizeof(struct ac_info));
|
||||
|
||||
acinfo.aciplist = di->aciplist;
|
||||
acinfo->aciplist = di->aciplist;
|
||||
|
||||
|
||||
|
||||
|
||||
cwread_discovery_response(&acinfo,cwrmsg->msgelems,cwrmsg->msgelems_len);
|
||||
cwread_discovery_response(acinfo,cwrmsg->msgelems,cwrmsg->msgelems_len);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
char ai [4096];
|
||||
acinfo_print(ai,&acinfo);
|
||||
acinfo_print(ai,acinfo);
|
||||
printf("AC INFO\n%s",ai);
|
||||
|
||||
|
||||
@ -111,7 +112,7 @@ static int msg_cb(void *priv,struct cwrmsg * cwrmsg)
|
||||
|
||||
printf("ACL COUNT: %i\n",acinfo.aciplist->count);
|
||||
*/
|
||||
aciplist_foreach(acinfo.aciplist,acprint,0);
|
||||
aciplist_foreach(acinfo->aciplist,acprint,0);
|
||||
|
||||
// responses++;
|
||||
//
|
||||
@ -300,7 +301,6 @@ ACIPLIST * do_discovery(const char *acaddr)
|
||||
discovery_count++;
|
||||
|
||||
|
||||
/* create socket */
|
||||
int sockfd;
|
||||
int opt;
|
||||
sockfd=socket(res->ai_family,SOCK_DGRAM,0);
|
||||
@ -324,17 +324,20 @@ ACIPLIST * do_discovery(const char *acaddr)
|
||||
|
||||
do_discover_conn(conn,&di);
|
||||
|
||||
close(sockfd);
|
||||
|
||||
if ( di.aciplist->count != 0)
|
||||
if ( di.aciplist->count != 0){
|
||||
set_sock(sockfd);
|
||||
break;
|
||||
}
|
||||
|
||||
close(sockfd);
|
||||
|
||||
}
|
||||
|
||||
freeaddrinfo(res0);
|
||||
|
||||
if (di.aciplist->count){
|
||||
// cw_log_debug2("Discover responses received: %i\n",di.response_count);
|
||||
cw_dbg(DBG_CW_INFO,"Discovery responses received: %i\n",di.response_count);
|
||||
return di.aciplist;
|
||||
|
||||
}
|
||||
|
@ -62,19 +62,23 @@ for(int i=0; i<10; i++){
|
||||
// }while(cwrmsg==0);
|
||||
|
||||
|
||||
|
||||
printf("SEQQQQS %d %d\n",cwrmsg->seqnum,conn->seqnum);
|
||||
if(!cwrmsg) {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
printf("SEQS %d %d\n",cwrmsg->type,conn->seqnum);
|
||||
|
||||
// cw_log_debug0("Received message %i",cwrmsg->seqnum);
|
||||
|
||||
if (cwrmsg->type != CWMSG_JOIN_RESPONSE || cwrmsg->seqnum != conn->seqnum){
|
||||
printf("Wrong messagei %d %d\n",cwrmsg->seqnum,conn->seqnum);
|
||||
printf("Wrong message %d %d\n",cwrmsg->type,conn->seqnum);
|
||||
|
||||
}
|
||||
|
||||
struct ac_info acinfo;
|
||||
memset(&acinfo,0,sizeof(acinfo));
|
||||
|
||||
acinfo.result_code=99;
|
||||
|
||||
cwread_join_response(&acinfo,cwrmsg->msgelems,cwrmsg->msgelems_len);
|
||||
|
||||
@ -91,7 +95,9 @@ int join(struct sockaddr *sa)
|
||||
int sockfd;
|
||||
int rc;
|
||||
|
||||
sockfd = socket(AF_INET,SOCK_DGRAM,0);
|
||||
// sockfd = socket(AF_INET,SOCK_DGRAM,0);
|
||||
|
||||
sockfd = get_sock();
|
||||
if (sockfd==-1){
|
||||
cw_log(LOG_ERR,"Can't create socket: %s\n",strerror(errno));
|
||||
return -1;
|
||||
@ -111,6 +117,7 @@ int join(struct sockaddr *sa)
|
||||
struct conn * conn = get_conn();
|
||||
|
||||
conn->capwap_mode = CWMODE_CISCO;
|
||||
conn->seqnum=-1;
|
||||
|
||||
|
||||
conn->sock=sockfd;
|
||||
|
@ -99,11 +99,10 @@ printf("Back from conn send req\n");
|
||||
if (rc==0){
|
||||
|
||||
printf("Error !\n");
|
||||
exit(0);
|
||||
|
||||
dtls_shutdown(conn);
|
||||
// dtls_shutdown(conn);
|
||||
// cw_log_debug1("Connection lost, no echo response");
|
||||
return 0;
|
||||
// return 0;
|
||||
}
|
||||
echo_interval_timer=time(NULL);
|
||||
}
|
||||
|
@ -148,7 +148,7 @@ char * default_ac_list[] = {
|
||||
// "192.168.0.255",
|
||||
"255.255.255.255",
|
||||
// "224.0.1.140",
|
||||
// "192.168.0.12"
|
||||
//"192.168.0.77"
|
||||
};
|
||||
|
||||
int wtpconf_ac_list()
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "capwap/acinfo.h"
|
||||
#include "capwap/conn.h"
|
||||
#include "capwap/capwap_80211.h"
|
||||
#include "capwap/cw_log.h"
|
||||
|
||||
#include "wtp_conf.h"
|
||||
#include "wtp_interface.h"
|
||||
@ -30,6 +31,8 @@ struct wtpinfo * get_wtpinfo()
|
||||
|
||||
}
|
||||
|
||||
wtpinfo->radios_in_use=2;
|
||||
|
||||
wtpinfo->encryption_cap=1;
|
||||
|
||||
wtpinfo->serial_no=conf_serial_no;
|
||||
@ -56,17 +59,22 @@ struct wtpinfo * get_wtpinfo()
|
||||
wtpinfo->macaddress=conf_macaddress;
|
||||
wtpinfo->macaddress_len=conf_macaddress_len;
|
||||
|
||||
wtpinfo->mac_type=0;
|
||||
|
||||
wtpinfo->max_msg_len=14000;
|
||||
|
||||
wtpinfo->mac_type=1;
|
||||
|
||||
|
||||
// wtpinfo->session_id = malloc(8);
|
||||
// wtpinfo->session_id_len = cw_rand(wtpinfo->session_id,8);
|
||||
|
||||
uint8_t sessid[4];
|
||||
int sidl = cw_rand(sessid,4);
|
||||
wtpinfo->session_id = bstr_create(sessid,sidl);
|
||||
memset(sessid,0,4);
|
||||
int sidl = cw_rand(sessid+2,2);
|
||||
|
||||
wtpinfo->session_id = bstr_create(sessid,4);
|
||||
|
||||
wtpinfo->frame_tunnel_mode=1;
|
||||
wtpinfo->frame_tunnel_mode=4;
|
||||
return wtpinfo;
|
||||
}
|
||||
|
||||
@ -86,6 +94,22 @@ ACIPLIST * order_aciplist(ACIPLIST *aciplistin)
|
||||
}
|
||||
|
||||
|
||||
static int sockfd = -1;
|
||||
int get_sock()
|
||||
{
|
||||
return sockfd;
|
||||
|
||||
}
|
||||
|
||||
|
||||
int set_sock(int sock)
|
||||
{
|
||||
sockfd = sock;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static struct conn * conn=0;
|
||||
struct conn * get_conn()
|
||||
{
|
||||
|
@ -81,10 +81,17 @@ int do_connect(void *priv,void *data)
|
||||
if (!rc)
|
||||
return 1;
|
||||
|
||||
|
||||
rc = configure();
|
||||
printf("Sleep after oin\n");
|
||||
sleep(5);
|
||||
printf("Go conf\n");
|
||||
|
||||
|
||||
// rc = join(&ip->ip);
|
||||
// if (!rc)
|
||||
// return 1;
|
||||
|
||||
rc = configure();
|
||||
|
||||
run (get_conn());
|
||||
return 0;
|
||||
}
|
||||
|
@ -1218,11 +1218,13 @@ int wtpdrv_get_radioinfo(int rid,struct radioinfo * radioinfo)
|
||||
|
||||
radioinfo->rid=rid;
|
||||
//uint8_t rm[8]="12345600";
|
||||
uint8_t rm[8]={0x00,0x19,0xdb,0xe0,0x93,0x27};
|
||||
|
||||
// uint8_t rm[8]={0x00,0x19,0xdb,0xe0,0x93,0x27};
|
||||
// uint8_t rm[8]={0x00,0x3a,0x99,0x02,0xfa,0xc0};
|
||||
uint8_t rm[8]={0x68,0x67,0x65,0x64,0x63,0x62};
|
||||
|
||||
radioinfo->rmac = bstr_create(rm,6);
|
||||
|
||||
radioinfo->type|=CW_80211_RADIO_TYPE_B; //CWRADIO_TYPE_N;
|
||||
radioinfo->type|=rid+1; //CW_80211_RADIO_TYPE_B; //CWRADIO_TYPE_N;
|
||||
|
||||
/*
|
||||
struct wpa_driver_ops * drv = wpa_drivers[0];
|
||||
|
Loading…
Reference in New Issue
Block a user