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
|
||||||
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
|
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|
|
| RegDomainCope1|
|
||||||
+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+
|
||||||
@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
128. Cisco Rest Button State
|
128. Cisco Reset Button State
|
||||||
|
|
||||||
The state of the reset button
|
The state of the reset button
|
||||||
|
|
||||||
@ -88,11 +88,22 @@
|
|||||||
Length: 4
|
Length: 4
|
||||||
|
|
||||||
|
|
||||||
|
208. Cisco MWAR Type
|
||||||
|
|
||||||
|
0
|
||||||
|
0 1 2 3 4 5 6 7
|
||||||
|
+-+-+-+-+-+-+-+-+
|
||||||
|
| MWAR Type |
|
||||||
|
+-+-+-+-+-+-+-+-+
|
||||||
|
|
||||||
|
01 Primary?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LWAPP
|
LWAPP
|
||||||
=====
|
=====
|
||||||
|
|
||||||
73. Cisco PAth MTU
|
73. Cisco Path MTU
|
||||||
|
|
||||||
0 1 2 3
|
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
|
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 */
|
/* first of all check preamble */
|
||||||
int preamble = CWTH_GET_PREAMBLE(buffer);
|
int preamble = cw_get_hdr_preamble(buffer);
|
||||||
|
|
||||||
#ifdef WITH_DTLS
|
#ifdef WITH_DTLS
|
||||||
if (preamble != CAPWAP_PACKET_PREAMBLE && preamble != CAPWAP_DTLS_PACKET_PREAMBLE){
|
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,
|
wtpman->wtpinfo.name,wtpman->wtpinfo.location,
|
||||||
sock_addr2str(&wtpman->conn->addr));
|
sock_addr2str(&wtpman->conn->addr));
|
||||||
|
|
||||||
|
//exit(0);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -684,7 +684,7 @@ static void wtpman_run(void *arg)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
do {
|
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);
|
cwrmsg = conn_wait_for_request(wtpman->conn, cfg_status_msgs, timer);
|
||||||
|
|
||||||
if (!cwrmsg){
|
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;
|
uint8_t * data;
|
||||||
|
/*
|
||||||
lw_foreach_msgelem(data,msgdata,msglen){
|
lw_foreach_msgelem(data,msgdata,msglen){
|
||||||
int eltype = LWMSGELEM_GET_TYPE(data);
|
int eltype = LWMSGELEM_GET_TYPE(data);
|
||||||
int ellen = LWMSGELEM_GET_LEN(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);
|
printf ("ELEM TYPE: %d, LEN: %d\n",eltype,ellen);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
char wi[4096];
|
char wi[4096];
|
||||||
wtpinfo_print(wi,&wtpman->wtpinfo);
|
wtpinfo_print(wi,&wtpman->wtpinfo);
|
||||||
|
@ -56,9 +56,22 @@ UTILOBJS= \
|
|||||||
cw_util.o \
|
cw_util.o \
|
||||||
cw_format_version.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\
|
# cw_tohex.o\
|
||||||
#capwap_parse_ctrlhdr.o \
|
#capwap_parse_ctrlhdr.o \
|
||||||
|
|
||||||
|
|
||||||
CAPWAPOBJS= \
|
CAPWAPOBJS= \
|
||||||
cwmsg_init.o \
|
cwmsg_init.o \
|
||||||
cwmsg_init_echo_request.o \
|
cwmsg_init_echo_request.o \
|
||||||
@ -134,9 +147,7 @@ CAPWAPOBJS= \
|
|||||||
cw_readelem_wtp_reboot_statistics.o\
|
cw_readelem_wtp_reboot_statistics.o\
|
||||||
cwmsg_addelem_vendor_cisco_ap_timesync.o \
|
cwmsg_addelem_vendor_cisco_ap_timesync.o \
|
||||||
cwmsg_addelem_vendor_cisco_mwar_addr.o \
|
cwmsg_addelem_vendor_cisco_mwar_addr.o \
|
||||||
lw_checksum.o \
|
|
||||||
lw_readelem_wtp_board_data.o \
|
lw_readelem_wtp_board_data.o \
|
||||||
lw_readelem_wtp_name.o
|
|
||||||
|
|
||||||
#cwmsg_addelem_session_id.o
|
#cwmsg_addelem_session_id.o
|
||||||
# process_msgelems_discovery_request.o \
|
# process_msgelems_discovery_request.o \
|
||||||
@ -188,6 +199,7 @@ CONNOBJS= conn_create.o \
|
|||||||
conn_get_message.o \
|
conn_get_message.o \
|
||||||
conn_get_response.o \
|
conn_get_response.o \
|
||||||
conn_prepare_configuration_update_request.o \
|
conn_prepare_configuration_update_request.o \
|
||||||
|
cw_prepare_configuration_status_request.o \
|
||||||
conn_prepare_request.o \
|
conn_prepare_request.o \
|
||||||
conn_prepare_image_data_request.o \
|
conn_prepare_image_data_request.o \
|
||||||
conn_send_request.o \
|
conn_send_request.o \
|
||||||
@ -204,7 +216,11 @@ BSTROBJS= bstr_create.o \
|
|||||||
|
|
||||||
FRAGOBJS=fragman.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);
|
O:=$(OBJS);
|
||||||
|
|
||||||
OBJS:=$(patsubst %.o,$(ARCH)/%.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)
|
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;
|
return 0;
|
||||||
|
|
||||||
if (len<12)
|
if (len<12)
|
||||||
|
@ -31,29 +31,27 @@
|
|||||||
#define CWVENDOR_CISCO_MWAR_ADDR 2
|
#define CWVENDOR_CISCO_MWAR_ADDR 2
|
||||||
#define CWVENDOR_CISCO_RAD 3
|
#define CWVENDOR_CISCO_RAD 3
|
||||||
#define CWVENDOR_CISCO_RAD_SLOT 4
|
#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_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 CWVENDER_CISCO_AP_MODE_AND_TYPE 54
|
||||||
|
|
||||||
#define CWVENDOR_CISCO_AP_IP_ADDR 83
|
#define CWVENDOR_CISCO_AP_IP_ADDR 83
|
||||||
|
|
||||||
#define CWVENDOR_CISCO_SPAM_VENDOR_SPECIFIC 104
|
#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_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_PRE_STD_SWITCH_CONFIG 137
|
||||||
#define CWVENDOR_CISCO_AP_POWER_INJECTOR_CONFIG 138
|
#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 CW_CISCO_BOARD_DATA_OPTIONS 207
|
||||||
|
#define CW_CISCO_MWAR_TYPE 208
|
||||||
|
|
||||||
#define CWVENDOR_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)
|
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;
|
return;
|
||||||
|
|
||||||
|
printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Header printer\n");
|
||||||
|
|
||||||
/* print the header */
|
/* print the header */
|
||||||
char hdr[200];
|
char hdr[200];
|
||||||
hdr_print(hdr,packet,len);
|
hdr_print(hdr,packet,len);
|
||||||
|
|
||||||
|
|
||||||
if (!cw_dbg_is_level(DBG_CW_PKT_DMP)){
|
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;
|
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:",
|
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
|
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)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("Debug packet **************************************************************************\n");
|
||||||
|
cw_dbg_packet(conn,packet,len);
|
||||||
|
|
||||||
|
|
||||||
int hlen = 4*((val >> 19) & 0x1f);
|
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)
|
if (f==NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
cw_dbg_packet(conn,f+4,*(uint32_t*)f);
|
||||||
|
|
||||||
if (!cwrmsg_init_ctrlhdr(conn,&cwrmsg,f+4,*(uint32_t*)f)){
|
if (!cwrmsg_init_ctrlhdr(conn,&cwrmsg,f+4,*(uint32_t*)f)){
|
||||||
free(f);
|
free(f);
|
||||||
return;
|
return;
|
||||||
|
@ -32,6 +32,9 @@ int cw_foreach_msgelem(uint8_t * msgelems, int len,
|
|||||||
int elen;
|
int elen;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
do {
|
do {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
val = ntohl(*(uint32_t *) (msgelems + i));
|
val = ntohl(*(uint32_t *) (msgelems + i));
|
||||||
type = (val >> 16) & 0xFFFF;
|
type = (val >> 16) & 0xFFFF;
|
||||||
elen = val & 0xffff;
|
elen = val & 0xffff;
|
||||||
@ -44,8 +47,10 @@ printf("Bumm %d %d\n",i+elen+4,len);
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
callback(arg, type, msgelems + i + 4, elen);
|
callback(arg, type, msgelems + i + 4, elen);
|
||||||
i += elen + 4;
|
i += elen + 4;
|
||||||
|
printf("left = %d\n",len-i);
|
||||||
|
|
||||||
} while (i < len);
|
} while (i < len);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -265,7 +265,7 @@ void cw_dbg_msgelem_(int msg, int msgelem, const uint8_t * msgbuf, int len)
|
|||||||
|
|
||||||
const char *elemname;
|
const char *elemname;
|
||||||
char vendorname[256];
|
char vendorname[256];
|
||||||
if (msgelem == CWMSGELEM_VENDOR_SPECIFIC_PAYLOAD) {
|
if (msgelem == CW_ELEM_VENDOR_SPECIFIC_PAYLOAD) {
|
||||||
int vendor = ntohl(*((uint32_t *) msgbuf));
|
int vendor = ntohl(*((uint32_t *) msgbuf));
|
||||||
int type = ntohs(*((uint16_t *) (msgbuf + 4)));
|
int type = ntohs(*((uint16_t *) (msgbuf + 4)));
|
||||||
sprintf(vendorname, "%s/%s/%d",
|
sprintf(vendorname, "%s/%s/%d",
|
||||||
|
@ -31,6 +31,7 @@ struct cw_dbg_cfgstrs cw_dbg_cfgstrs[] = {
|
|||||||
{"rfc",DBG_CW_RFC},
|
{"rfc",DBG_CW_RFC},
|
||||||
{"pkt_in",DBG_CW_PKT_IN},
|
{"pkt_in",DBG_CW_PKT_IN},
|
||||||
{"pkt_out",DBG_CW_PKT_OUT},
|
{"pkt_out",DBG_CW_PKT_OUT},
|
||||||
|
{"pkt_dtl",DBG_CW_PKT_DTL},
|
||||||
{"pkt",(DBG_CW_PKT_IN | DBG_CW_PKT_OUT)},
|
{"pkt",(DBG_CW_PKT_IN | DBG_CW_PKT_OUT)},
|
||||||
{"pkt_dmp",DBG_CW_PKT_DMP},
|
{"pkt_dmp",DBG_CW_PKT_DMP},
|
||||||
{"pkt_err",DBG_CW_PKT_ERR},
|
{"pkt_err",DBG_CW_PKT_ERR},
|
||||||
|
@ -24,14 +24,14 @@
|
|||||||
const char * cw_msgelemtostr(int elem)
|
const char * cw_msgelemtostr(int elem)
|
||||||
{
|
{
|
||||||
switch (elem){
|
switch (elem){
|
||||||
case CWMSGELEM_AC_DESCRIPTOR:
|
case CW_ELEM_AC_DESCRIPTOR:
|
||||||
return "ac descriptor";
|
return "AC descriptor";
|
||||||
|
|
||||||
/* AC IPv4 List 2
|
/* AC IPv4 List 2
|
||||||
AC IPv6 List 3
|
AC IPv6 List 3
|
||||||
*/
|
*/
|
||||||
case CWMSGELEM_AC_NAME:
|
case CW_ELEM_AC_NAME:
|
||||||
return "ac name";
|
return "AC name";
|
||||||
/*
|
/*
|
||||||
AC Name with Priority 5
|
AC Name with Priority 5
|
||||||
AC Timestamp 6
|
AC Timestamp 6
|
||||||
@ -40,14 +40,14 @@ const char * cw_msgelemtostr(int elem)
|
|||||||
Reserved 9
|
Reserved 9
|
||||||
*/
|
*/
|
||||||
case CWMSGELEM_CONTROL_IPV4_ADDRESS:
|
case CWMSGELEM_CONTROL_IPV4_ADDRESS:
|
||||||
return "ctrl ipv4 addr";
|
return "Ctrl IPv4 addr";
|
||||||
case CWMSGELEM_CONTROL_IPV6_ADDRESS:
|
case CWMSGELEM_CONTROL_IPV6_ADDRESS:
|
||||||
return "ctrl ipv6 addr";
|
return "ctrl IPv6 addr";
|
||||||
|
|
||||||
case CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS:
|
case CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS:
|
||||||
return "capwap local ipv4 addr";
|
return "CAPWAP local IPv4 addr";
|
||||||
case CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS:
|
case CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS:
|
||||||
return "capwap local ipv6 addr";
|
return "CAPWAP local IPv6 addr";
|
||||||
/* CAPWAP Timers 12
|
/* CAPWAP Timers 12
|
||||||
CAPWAP Transport Protocol 51
|
CAPWAP Transport Protocol 51
|
||||||
Data Transfer Data 13
|
Data Transfer Data 13
|
||||||
@ -65,7 +65,7 @@ const char * cw_msgelemtostr(int elem)
|
|||||||
Duplicate IPv6 Address 22
|
Duplicate IPv6 Address 22
|
||||||
*/
|
*/
|
||||||
case CWMSGELEM_ECN_SUPPORT:
|
case CWMSGELEM_ECN_SUPPORT:
|
||||||
return "ecn support";
|
return "ECN support";
|
||||||
/* Idle Timeout 23
|
/* Idle Timeout 23
|
||||||
*/
|
*/
|
||||||
case CWMSGELEM_IMAGE_DATA:
|
case CWMSGELEM_IMAGE_DATA:
|
||||||
@ -99,18 +99,18 @@ const char * cw_msgelemtostr(int elem)
|
|||||||
|
|
||||||
/* Returned Message Element 34
|
/* Returned Message Element 34
|
||||||
*/
|
*/
|
||||||
case CWMSGELEM_SESSION_ID:
|
case CW_ELEM_SESSION_ID:
|
||||||
return "session id";
|
return "session id";
|
||||||
|
|
||||||
case CWMSGELEM_STATISTICS_TIMER:
|
case CWMSGELEM_STATISTICS_TIMER:
|
||||||
return "statistics timer";
|
return "Statistics Timer";
|
||||||
|
|
||||||
case CWMSGELEM_VENDOR_SPECIFIC_PAYLOAD:
|
case CW_ELEM_VENDOR_SPECIFIC_PAYLOAD:
|
||||||
return "vendor specific payload";
|
return "Vendor Specific Payload";
|
||||||
|
|
||||||
|
|
||||||
case CWMSGELEM_WTP_BOARD_DATA:
|
case CWMSGELEM_WTP_BOARD_DATA:
|
||||||
return "wtp board data";
|
return "WTP Board Data";
|
||||||
|
|
||||||
case CWMSGELEM_WTP_DESCRIPTOR:
|
case CWMSGELEM_WTP_DESCRIPTOR:
|
||||||
return "wtp descriptor";
|
return "wtp descriptor";
|
||||||
@ -122,8 +122,8 @@ const char * cw_msgelemtostr(int elem)
|
|||||||
/* case CWMSGELEM_RESERVED_1:
|
/* case CWMSGELEM_RESERVED_1:
|
||||||
return "reserved (42)";
|
return "reserved (42)";
|
||||||
*/
|
*/
|
||||||
case CWMSGELEM_WTP_IPV4_IP_ADDR:
|
case CW_ELEM_WTP_IPV4_IP_ADDRESS:
|
||||||
return "WTP IPv4 IP address";
|
return "WTP IPv4 IP Address";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Reserved 43
|
Reserved 43
|
||||||
|
@ -22,10 +22,10 @@ const char * cw_msgtostr(int type)
|
|||||||
{
|
{
|
||||||
switch(type){
|
switch(type){
|
||||||
case CWMSG_DISCOVERY_REQUEST:
|
case CWMSG_DISCOVERY_REQUEST:
|
||||||
return "discovery request";
|
return "Discovery Request";
|
||||||
|
|
||||||
case CWMSG_DISCOVERY_RESPONSE:
|
case CWMSG_DISCOVERY_RESPONSE:
|
||||||
return "discovery response";
|
return "Discovery Response";
|
||||||
|
|
||||||
case CWMSG_JOIN_REQUEST:
|
case CWMSG_JOIN_REQUEST:
|
||||||
return "join request";
|
return "join request";
|
||||||
@ -33,11 +33,11 @@ const char * cw_msgtostr(int type)
|
|||||||
case CWMSG_JOIN_RESPONSE:
|
case CWMSG_JOIN_RESPONSE:
|
||||||
return "join response";
|
return "join response";
|
||||||
|
|
||||||
case CWMSG_CONFIGURATION_STATUS_REQUEST:
|
case CW_MSG_CONFIGURATION_STATUS_REQUEST:
|
||||||
return "configuration status request";
|
return "Configuration Status Request";
|
||||||
|
|
||||||
case CWMSG_CONFIGURATION_STATUS_RESPONSE:
|
case CW_MSG_CONFIGURATION_STATUS_RESPONSE:
|
||||||
return "configuration status response";
|
return "Configuration Status Response";
|
||||||
|
|
||||||
case CWMSG_CONFIGURATION_UPDATE_REQUEST:
|
case CWMSG_CONFIGURATION_UPDATE_REQUEST:
|
||||||
return "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)
|
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;
|
return 0;
|
||||||
|
|
||||||
if (len<12)
|
if (len<12)
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
int cw_readelem_ac_name(uint8_t **dst, int type,uint8_t *msgelem, int len)
|
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;
|
return 0;
|
||||||
|
|
||||||
if (len > 512 ) {
|
if (len > 512 ) {
|
||||||
|
@ -9,7 +9,7 @@ int cw_readelem_capwap_local_ip_addr(struct sockaddr * local_ip, int type, uint8
|
|||||||
{
|
{
|
||||||
switch (type){
|
switch (type){
|
||||||
case CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS:
|
case CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS:
|
||||||
case CWMSGELEM_WTP_IPV4_IP_ADDR:
|
case CW_ELEM_WTP_IPV4_IP_ADDRESS:
|
||||||
{
|
{
|
||||||
if (len!=4)
|
if (len!=4)
|
||||||
return -1;
|
return -1;
|
||||||
@ -24,7 +24,7 @@ int cw_readelem_capwap_local_ip_addr(struct sockaddr * local_ip, int type, uint8
|
|||||||
}
|
}
|
||||||
#ifdef WITH_IPV6
|
#ifdef WITH_IPV6
|
||||||
case CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS:
|
case CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS:
|
||||||
case CWMSGELEM_WTP_IPV6_IP_ADDR:
|
case CW_ELEM_WTP_IPV6_IP_ADDRESS:
|
||||||
{
|
{
|
||||||
if (len!=16)
|
if (len!=16)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -15,7 +15,7 @@ int cw_readelem_cisco_payload(void *data,int msgtype,int elem_id,uint8_t *msgele
|
|||||||
|
|
||||||
|
|
||||||
switch (msgtype) {
|
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))
|
if (lw_readelem_wtp_board_data((struct wtpinfo*)data,elem_id,msgelem,len))
|
||||||
return 1;
|
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)
|
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;
|
return 0;
|
||||||
|
|
||||||
if (len < 6){
|
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:
|
case CW_VENDOR_ID_CISCO:
|
||||||
return cw_readelem_cisco_payload(data,msgtype,elem_id,msgelem+6,elem_len);
|
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)
|
#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)))
|
#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);
|
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
|
#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;
|
uint32_t ntpt = t+(uint32_t)2398291200LL;
|
||||||
uint8_t c[4];
|
uint8_t c[4];
|
||||||
*((uint32_t*)c)= htonl(ntpt);
|
*((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 "cwmsg.h"
|
||||||
#include "conn.h"
|
#include "conn.h"
|
||||||
|
|
||||||
|
#include "sock.h" //Tube
|
||||||
|
|
||||||
void cwmsg_addelem_cw_local_ip_addr(struct cwmsg *msg, struct conn * conn)
|
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);
|
getsockname (conn->sock,(struct sockaddr *)&a,&alen);
|
||||||
|
|
||||||
int cw_mode = msg->capwap_mode;
|
int cw_mode = msg->capwap_mode;
|
||||||
|
cw_mode = CWMODE_CISCO;
|
||||||
|
|
||||||
|
|
||||||
switch (((struct sockaddr*)&a)->sa_family){
|
switch (((struct sockaddr*)&a)->sa_family){
|
||||||
case AF_INET:
|
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;
|
struct sockaddr_in * sain = (struct sockaddr_in*)&a;
|
||||||
int id;
|
int id;
|
||||||
if (cw_mode == CWMODE_CISCO)
|
if (cw_mode == CWMODE_CISCO)
|
||||||
id = CWMSGELEM_WTP_IPV4_IP_ADDR;
|
id = CW_ELEM_WTP_IPV4_IP_ADDRESS;
|
||||||
else
|
else
|
||||||
id = CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS;
|
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);
|
cwmsg_addelem(msg,id,(uint8_t*)&sain->sin_addr,4);
|
||||||
break;
|
break;
|
||||||
@ -56,7 +61,7 @@ void cwmsg_addelem_cw_local_ip_addr(struct cwmsg *msg, struct conn * conn)
|
|||||||
{
|
{
|
||||||
int id;
|
int id;
|
||||||
if (cw_mode == CWMODE_CISCO)
|
if (cw_mode == CWMODE_CISCO)
|
||||||
id = CWMSGELEM_WTP_IPV6_IP_ADDR;
|
id = CW_ELEM_WTP_IPV6_IP_ADDRESS;
|
||||||
else
|
else
|
||||||
id = CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS;
|
id = CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS;
|
||||||
struct sockaddr_in6 * sain = (struct sockaddr_in6*)&a;
|
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));
|
//time_t t = htonl(time(NULL));
|
||||||
uint32_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));
|
(uint8_t *) & t, sizeof(t));
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "conn.h"
|
#include "conn.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "sock.h"
|
||||||
|
|
||||||
void cwmsg_addelem_vendor_cisco_mwar_addr(struct cwmsg *msg, struct conn *conn)
|
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){
|
switch (((struct sockaddr*)&conn->addr)->sa_family){
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
{
|
{
|
||||||
data[0]=0;
|
data[0]=1; /* mwar type */
|
||||||
data[5]=0;
|
data[5]=0;
|
||||||
data[6]=0;
|
data[6]=0;
|
||||||
|
|
||||||
|
printf("Adding mwar addr %s\n",sock_addr2str(&conn->addr));
|
||||||
|
|
||||||
struct sockaddr_in * sain = (struct sockaddr_in*)&conn->addr;
|
struct sockaddr_in * sain = (struct sockaddr_in*)&conn->addr;
|
||||||
memcpy(data+1,(uint8_t*)&sain->sin_addr,4);
|
memcpy(data+1,(uint8_t*)&sain->sin_addr,4);
|
||||||
cwmsg_addelem_vendor_specific_payload(msg, CW_VENDOR_ID_CISCO,
|
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);
|
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);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,8 @@ void cwmsg_init(struct cwmsg * cwmsg, uint8_t *buffer, int type, int seqnum, str
|
|||||||
if (hlen%4){
|
if (hlen%4){
|
||||||
int n = hlen;
|
int n = hlen;
|
||||||
hlen = (hlen>>2)*4+4;
|
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)
|
static int readelem(void * eparm,int type,uint8_t* msgelem,int len)
|
||||||
{
|
{
|
||||||
struct eparm * e = (struct eparm*)eparm;
|
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 */
|
/* mandatory elements */
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ static int readelem(void * eparm,int type,uint8_t* msgelem,int len)
|
|||||||
/* non-mantatory elements */
|
/* non-mantatory elements */
|
||||||
|
|
||||||
if (cw_readelem_vendor_specific_payload
|
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;
|
return 1;
|
||||||
|
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ foundX:
|
|||||||
void cwread_configuration_status_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len)
|
void cwread_configuration_status_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len)
|
||||||
{
|
{
|
||||||
int mand[] = {
|
int mand[] = {
|
||||||
CWMSGELEM_AC_NAME,
|
CW_ELEM_AC_NAME,
|
||||||
CWMSGELEM_WTP_REBOOT_STATISTICS,
|
CWMSGELEM_WTP_REBOOT_STATISTICS,
|
||||||
CWMSGELEM_RADIO_ADMINISTRATIVE_STATE,
|
CWMSGELEM_RADIO_ADMINISTRATIVE_STATE,
|
||||||
CWMSGELEM_STATISTICS_TIMER,
|
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)
|
void cwread_discovery_response(struct ac_info * acinfo, uint8_t * msg, int len)
|
||||||
{
|
{
|
||||||
int mand[] = {
|
int mand[] = {
|
||||||
CWMSGELEM_AC_DESCRIPTOR,
|
CW_ELEM_AC_DESCRIPTOR,
|
||||||
CWMSGELEM_AC_NAME,
|
CW_ELEM_AC_NAME,
|
||||||
XCWMSGELEM_CAPWAP_CONTROL_IP_ADDRESS,
|
XCWMSGELEM_CAPWAP_CONTROL_IP_ADDRESS,
|
||||||
XCWMSGELEM_CAPWAP_RADIO_INFO,
|
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)
|
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;
|
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);
|
cwmsg_addelem_capwap_timers(cwmsg,120,15);
|
||||||
/*
|
/*
|
||||||
|
@ -35,7 +35,7 @@ int cwsend_discovery_request(struct conn *conn, struct radioinfo *radioinfo,
|
|||||||
struct cwmsg cwmsg;
|
struct cwmsg cwmsg;
|
||||||
|
|
||||||
cwmsg_init(&cwmsg, buffer, CWMSG_DISCOVERY_REQUEST, conn_get_next_seqnum(conn),
|
cwmsg_init(&cwmsg, buffer, CWMSG_DISCOVERY_REQUEST, conn_get_next_seqnum(conn),
|
||||||
NULL /*radioinfo */ );
|
radioinfo );
|
||||||
cwmsg.capwap_mode = conn->capwap_mode;
|
cwmsg.capwap_mode = conn->capwap_mode;
|
||||||
|
|
||||||
|
|
||||||
@ -67,6 +67,12 @@ int cwsend_discovery_request(struct conn *conn, struct radioinfo *radioinfo,
|
|||||||
switch (cwmsg.capwap_mode) {
|
switch (cwmsg.capwap_mode) {
|
||||||
case CWMODE_CISCO:
|
case CWMODE_CISCO:
|
||||||
cwmsg_addelem_vendor_cisco_rad_name(&cwmsg, (uint8_t *) wtpinfo->name);
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
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_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));
|
strlen((char *) acinfo->ac_name));
|
||||||
|
|
||||||
cwmsg_addelem_wtp_radio_infos(cwmsg, acinfo->radioinfos);
|
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) {
|
switch (cwmsg->capwap_mode) {
|
||||||
case CWMODE_CISCO:
|
case CWMODE_CISCO:
|
||||||
case CWMODE_CIPWAP:
|
case CWMODE_CIPWAP:
|
||||||
|
{
|
||||||
cwmsg_addelem_vendor_cisco_ap_timesync(cwmsg);
|
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;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -21,17 +21,30 @@
|
|||||||
#include "capwap.h"
|
#include "capwap.h"
|
||||||
#include "capwap_cisco.h"
|
#include "capwap_cisco.h"
|
||||||
|
|
||||||
|
#include "lwapp_cisco.h"
|
||||||
|
|
||||||
#include "conn.h"
|
#include "conn.h"
|
||||||
#include "cwmsg.h"
|
#include "cwmsg.h"
|
||||||
|
|
||||||
|
#include "sock.h"
|
||||||
|
|
||||||
|
#include "acinfo.h" //Tube
|
||||||
|
|
||||||
|
|
||||||
int cwsend_join_request(struct conn *conn, struct radioinfo *radioinfo, struct wtpinfo *wtpinfo)
|
int cwsend_join_request(struct conn *conn, struct radioinfo *radioinfo, struct wtpinfo *wtpinfo)
|
||||||
{
|
{
|
||||||
uint8_t buffer[CWMSG_MAX_SIZE];
|
uint8_t buffer[CWMSG_MAX_SIZE];
|
||||||
struct cwmsg cwmsg;
|
struct cwmsg cwmsg;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//radioinfo->rmac=0;
|
||||||
|
|
||||||
cwmsg_init(&cwmsg, buffer, CWMSG_JOIN_REQUEST, conn_get_next_seqnum(conn), radioinfo);
|
cwmsg_init(&cwmsg, buffer, CWMSG_JOIN_REQUEST, conn_get_next_seqnum(conn), radioinfo);
|
||||||
cwmsg.capwap_mode = conn->capwap_mode;
|
cwmsg.capwap_mode = conn->capwap_mode;
|
||||||
|
|
||||||
|
// printf("Rad info rmac %s\n",sock_hwaddr2str(bstr_data(radioinfo->rmac),bstr_len(radioinfo->rmac)));
|
||||||
|
|
||||||
/* Mandatory elements */
|
/* Mandatory elements */
|
||||||
|
|
||||||
/* location data */
|
/* location data */
|
||||||
@ -57,20 +70,38 @@ int cwsend_join_request(struct conn *conn, struct radioinfo *radioinfo, struct w
|
|||||||
/* WTP MAC type */
|
/* WTP MAC type */
|
||||||
cwmsg_addelem(&cwmsg, CWMSGELEM_WTP_MAC_TYPE, &wtpinfo->mac_type, sizeof(uint8_t));
|
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) {
|
switch (conn->capwap_mode) {
|
||||||
case CWMODE_CISCO:
|
case CWMODE_CISCO:
|
||||||
cwmsg_addelem_vendor_cisco_mwar_addr(&cwmsg,conn);
|
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,
|
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"));
|
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;
|
break;
|
||||||
@ -80,15 +111,38 @@ int cwsend_join_request(struct conn *conn, struct radioinfo *radioinfo, struct w
|
|||||||
sizeof(uint8_t));
|
sizeof(uint8_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* local ip address */
|
/* WTP radio information elements */
|
||||||
cwmsg_addelem_cw_local_ip_addr(&cwmsg, conn);
|
cwmsg_addelem_wtp_radio_infos(&cwmsg, wtpinfo->radioinfo);
|
||||||
|
|
||||||
|
|
||||||
/* Non-mandatory elements */
|
/* Non-mandatory elements */
|
||||||
|
|
||||||
/* maximum message length */
|
switch (conn->capwap_mode) {
|
||||||
uint16_t l = htons(wtpinfo->max_msg_len);
|
case CWMODE_CISCO:
|
||||||
cwmsg_addelem(&cwmsg, CWMSGELEM_MAXIMUM_MESSAGE_LENGTH, (uint8_t *) & l, sizeof(l));
|
{
|
||||||
|
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);
|
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_result_code(cwmsg, rc);
|
||||||
|
|
||||||
cwmsg_addelem_ac_descriptor(cwmsg, acinfo,wtpinfo);
|
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(cwmsg, CWMSGELEM_ECN_SUPPORT, &acinfo->ecn_support, sizeof(uint8_t));
|
||||||
cwmsg_addelem_ctrl_ip_addrs(cwmsg, acinfo);
|
cwmsg_addelem_ctrl_ip_addrs(cwmsg, acinfo);
|
||||||
// cwmsg_addelem_cw_local_ip_addr(cwmsg,conn);
|
// cwmsg_addelem_cw_local_ip_addr(cwmsg,conn);
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#include "gnutls/dtls.h"
|
||||||
|
|
||||||
#include "dtls.h"
|
#include "dtls.h"
|
||||||
#include "dtls_gnutls.h"
|
#include "dtls_gnutls.h"
|
||||||
|
|
||||||
#include "conn.h"
|
#include "conn.h"
|
||||||
#include "cw_log.h"
|
#include "cw_log.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int dtls_gnutls_connect(struct conn *conn)
|
int dtls_gnutls_connect(struct conn *conn)
|
||||||
{
|
{
|
||||||
struct dtls_gnutls_data * d;
|
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_dh_set_prime_bits(d->session, 512);
|
||||||
gnutls_handshake_set_timeout(d->session,GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT);
|
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;
|
int rc;
|
||||||
do {
|
do {
|
||||||
rc = gnutls_handshake(d->session);
|
rc = gnutls_handshake(d->session);
|
||||||
|
@ -21,14 +21,14 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "capwap.h"
|
#include "capwap.h"
|
||||||
|
#include "sock.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int hdr_print(char *str, uint8_t *packet, int len)
|
int hdr_print(char *str, uint8_t *packet, int len)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
printf("The readl header printer\n");
|
||||||
|
|
||||||
char *s = str;
|
char *s = str;
|
||||||
|
|
||||||
@ -38,7 +38,8 @@ int hdr_print(char *str, uint8_t *packet, int len)
|
|||||||
return s-str;
|
return s-str;
|
||||||
}
|
}
|
||||||
|
|
||||||
int preamble = CWTH_GET_PREAMBLE(packet);
|
int preamble = cw_get_hdr_preamble(packet); //CWTH_GET_PREAMBLE(packet);
|
||||||
|
|
||||||
if (preamble==01){
|
if (preamble==01){
|
||||||
s+=sprintf(s,"\tEncrypted data.");
|
s+=sprintf(s,"\tEncrypted data.");
|
||||||
return s-str;
|
return s-str;
|
||||||
@ -57,21 +58,29 @@ int hdr_print(char *str, uint8_t *packet, int len)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int hlen = CWTH_GET_HLEN(packet);
|
int hlen = cw_get_hdr_hlen(packet); //CWTH_GET_HLEN(packet);
|
||||||
int rid = CWTH_GET_RID(packet);
|
|
||||||
int wbid = CWTH_GET_WBID(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,"\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",
|
s+=sprintf(s," Flags: (T=%d,F=%d,L=%d,W=%d,M=%d,K=%d)\n",
|
||||||
CWTH_GET_FLAG_T(packet),
|
cw_get_hdr_flag_t(packet),
|
||||||
CWTH_GET_FLAG_F(packet),
|
cw_get_hdr_flag_f(packet),
|
||||||
CWTH_GET_FLAG_L(packet),
|
cw_get_hdr_flag_l(packet),
|
||||||
CWTH_GET_FLAG_W(packet),
|
cw_get_hdr_flag_w(packet),
|
||||||
CWTH_GET_FLAG_M(packet),
|
cw_get_hdr_flag_m(packet),
|
||||||
CWTH_GET_FLAG_K(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){
|
if (len < 8){
|
||||||
@ -79,13 +88,13 @@ int hdr_print(char *str, uint8_t *packet, int len)
|
|||||||
return s-str;
|
return s-str;
|
||||||
}
|
}
|
||||||
|
|
||||||
int frag_id = CWTH_GET_FRAGID(packet);
|
int frag_id = cw_get_hdr_fragid(packet);
|
||||||
int frag_offs = CWTH_GET_FRAGOFFSET(packet);
|
int frag_offs = cw_get_hdr_fragoffset(packet);
|
||||||
s+=sprintf(s,"\tFrag Id: %d, Frag Offs:: %d\n",frag_id,frag_offs);
|
s+=sprintf(s,"\tFrag Id: %d, Frag Offs:: %d\n",frag_id,frag_offs);
|
||||||
|
|
||||||
|
|
||||||
int bhlen = 4*hlen;
|
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 ...");
|
s+=sprintf(s,"\tFragment data ...");
|
||||||
return s-str;
|
return s-str;
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,20 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
*@file
|
||||||
|
*@brief Implements lw_checksum.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "lwapp.h"
|
#include "lwapp.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate the 16-bit checksum for LWAPP image data message
|
* Calculate the 16-bit checksum for LWAPP image data message
|
||||||
* elements with opcode 3 - also used by Cisco in CAPWAP
|
* 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)
|
uint16_t lw_checksum(uint8_t * d, int len)
|
||||||
{
|
{
|
||||||
int32_t sum = 0;
|
int32_t sum = 0;
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
int lw_readelem_wtp_board_data(struct wtpinfo *wtpinfo, int type, uint8_t *msgelem, int len)
|
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;
|
return 0;
|
||||||
|
|
||||||
if ( len != 46 ) {
|
if ( len != 46 ) {
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
int lw_readelem_wtp_name(uint8_t ** dst, int type, uint8_t * msgelem, int len)
|
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;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
|
@ -67,11 +67,13 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define LWMSG_DISCOVERY_REQUEST 1
|
#define LWMSG_DISCOVERY_REQUEST 1
|
||||||
#define LWMSG_DISCOVERY_RESPONSE 2
|
#define LWMSG_DISCOVERY_RESPONSE 2
|
||||||
|
|
||||||
/* Join Request 3
|
#define LW_MSG_JOIN_REQUEST 3
|
||||||
Join Response 4
|
#define LW_MSG_JOIN_RESPONSE 4
|
||||||
|
|
||||||
|
/*
|
||||||
Join ACK 5
|
Join ACK 5
|
||||||
Join Confirm 6
|
Join Confirm 6
|
||||||
Unused 7-9
|
Unused 7-9
|
||||||
@ -99,17 +101,44 @@
|
|||||||
|
|
||||||
/* LWAPP message elements */
|
/* LWAPP message elements */
|
||||||
|
|
||||||
#define LWMSGELEM_WTP_DESCRIPTOR 3
|
#define LW_ELEM_AC_ADDRESS 2
|
||||||
#define LWMSGELEM_WTP_NAME 5
|
#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 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 */
|
/* function proto types */
|
||||||
|
|
||||||
@ -120,4 +149,5 @@ extern int lw_readelem_wtp_name(bstr_t * dst, int type, uint8_t * msgelem, int l
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -66,7 +66,7 @@ struct wtpinfo{
|
|||||||
|
|
||||||
|
|
||||||
bstr_t session_id;
|
bstr_t session_id;
|
||||||
// int session_id_len;
|
|
||||||
|
|
||||||
struct radioinfo radioinfo[31];
|
struct radioinfo radioinfo[31];
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
int wtpinfo_lwreadelem_wtp_descriptor(struct wtpinfo * wtpinfo, int type, uint8_t *msgelem, int len)
|
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;
|
return 0;
|
||||||
|
|
||||||
/* if (len!=16)
|
/* if (len!=16)
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
int wtpinfo_readelem_session_id(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len)
|
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;
|
return 0;
|
||||||
|
|
||||||
wtpinfo->session_id = bstr_create(msgelem,len);
|
wtpinfo->session_id = bstr_create(msgelem,len);
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
|
#include "capwap/conn.h"
|
||||||
|
#include "wtp_interface.h"
|
||||||
|
|
||||||
int configure()
|
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;
|
ACIP * ip = (ACIP*)d;
|
||||||
char str[100];
|
char str[100];
|
||||||
sock_addrtostr((struct sockaddr*)&ip->ip,str,100);
|
sock_addrtostr((struct sockaddr*)&ip->ip,str,100);
|
||||||
// printf("ACIP: %s\n",str);
|
printf("ACIP: %s\n",str);
|
||||||
// printf("CTR: %i\n",ip->wtp_count);
|
printf("CTR: %i\n",ip->wtp_count);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct ac_info wtp_acinfo;
|
||||||
|
|
||||||
|
|
||||||
static int msg_cb(void *priv,struct cwrmsg * cwrmsg)
|
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;
|
struct ac_info * acinfo = &wtp_acinfo;
|
||||||
memset(&acinfo,0,sizeof(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];
|
char ai [4096];
|
||||||
acinfo_print(ai,&acinfo);
|
acinfo_print(ai,acinfo);
|
||||||
printf("AC INFO\n%s",ai);
|
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);
|
printf("ACL COUNT: %i\n",acinfo.aciplist->count);
|
||||||
*/
|
*/
|
||||||
aciplist_foreach(acinfo.aciplist,acprint,0);
|
aciplist_foreach(acinfo->aciplist,acprint,0);
|
||||||
|
|
||||||
// responses++;
|
// responses++;
|
||||||
//
|
//
|
||||||
@ -300,7 +301,6 @@ ACIPLIST * do_discovery(const char *acaddr)
|
|||||||
discovery_count++;
|
discovery_count++;
|
||||||
|
|
||||||
|
|
||||||
/* create socket */
|
|
||||||
int sockfd;
|
int sockfd;
|
||||||
int opt;
|
int opt;
|
||||||
sockfd=socket(res->ai_family,SOCK_DGRAM,0);
|
sockfd=socket(res->ai_family,SOCK_DGRAM,0);
|
||||||
@ -324,17 +324,20 @@ ACIPLIST * do_discovery(const char *acaddr)
|
|||||||
|
|
||||||
do_discover_conn(conn,&di);
|
do_discover_conn(conn,&di);
|
||||||
|
|
||||||
close(sockfd);
|
|
||||||
|
|
||||||
if ( di.aciplist->count != 0)
|
if ( di.aciplist->count != 0){
|
||||||
|
set_sock(sockfd);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(sockfd);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
freeaddrinfo(res0);
|
freeaddrinfo(res0);
|
||||||
|
|
||||||
if (di.aciplist->count){
|
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;
|
return di.aciplist;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -62,19 +62,23 @@ for(int i=0; i<10; i++){
|
|||||||
// }while(cwrmsg==0);
|
// }while(cwrmsg==0);
|
||||||
|
|
||||||
|
|
||||||
|
if(!cwrmsg) {
|
||||||
printf("SEQQQQS %d %d\n",cwrmsg->seqnum,conn->seqnum);
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("SEQS %d %d\n",cwrmsg->type,conn->seqnum);
|
||||||
|
|
||||||
// cw_log_debug0("Received message %i",cwrmsg->seqnum);
|
// cw_log_debug0("Received message %i",cwrmsg->seqnum);
|
||||||
|
|
||||||
if (cwrmsg->type != CWMSG_JOIN_RESPONSE || cwrmsg->seqnum != conn->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;
|
struct ac_info acinfo;
|
||||||
memset(&acinfo,0,sizeof(acinfo));
|
memset(&acinfo,0,sizeof(acinfo));
|
||||||
|
|
||||||
|
acinfo.result_code=99;
|
||||||
|
|
||||||
cwread_join_response(&acinfo,cwrmsg->msgelems,cwrmsg->msgelems_len);
|
cwread_join_response(&acinfo,cwrmsg->msgelems,cwrmsg->msgelems_len);
|
||||||
|
|
||||||
@ -91,7 +95,9 @@ int join(struct sockaddr *sa)
|
|||||||
int sockfd;
|
int sockfd;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
sockfd = socket(AF_INET,SOCK_DGRAM,0);
|
// sockfd = socket(AF_INET,SOCK_DGRAM,0);
|
||||||
|
|
||||||
|
sockfd = get_sock();
|
||||||
if (sockfd==-1){
|
if (sockfd==-1){
|
||||||
cw_log(LOG_ERR,"Can't create socket: %s\n",strerror(errno));
|
cw_log(LOG_ERR,"Can't create socket: %s\n",strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
@ -111,6 +117,7 @@ int join(struct sockaddr *sa)
|
|||||||
struct conn * conn = get_conn();
|
struct conn * conn = get_conn();
|
||||||
|
|
||||||
conn->capwap_mode = CWMODE_CISCO;
|
conn->capwap_mode = CWMODE_CISCO;
|
||||||
|
conn->seqnum=-1;
|
||||||
|
|
||||||
|
|
||||||
conn->sock=sockfd;
|
conn->sock=sockfd;
|
||||||
|
@ -99,11 +99,10 @@ printf("Back from conn send req\n");
|
|||||||
if (rc==0){
|
if (rc==0){
|
||||||
|
|
||||||
printf("Error !\n");
|
printf("Error !\n");
|
||||||
exit(0);
|
|
||||||
|
|
||||||
dtls_shutdown(conn);
|
// dtls_shutdown(conn);
|
||||||
// cw_log_debug1("Connection lost, no echo response");
|
// cw_log_debug1("Connection lost, no echo response");
|
||||||
return 0;
|
// return 0;
|
||||||
}
|
}
|
||||||
echo_interval_timer=time(NULL);
|
echo_interval_timer=time(NULL);
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ char * default_ac_list[] = {
|
|||||||
// "192.168.0.255",
|
// "192.168.0.255",
|
||||||
"255.255.255.255",
|
"255.255.255.255",
|
||||||
// "224.0.1.140",
|
// "224.0.1.140",
|
||||||
// "192.168.0.12"
|
//"192.168.0.77"
|
||||||
};
|
};
|
||||||
|
|
||||||
int wtpconf_ac_list()
|
int wtpconf_ac_list()
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "capwap/acinfo.h"
|
#include "capwap/acinfo.h"
|
||||||
#include "capwap/conn.h"
|
#include "capwap/conn.h"
|
||||||
#include "capwap/capwap_80211.h"
|
#include "capwap/capwap_80211.h"
|
||||||
|
#include "capwap/cw_log.h"
|
||||||
|
|
||||||
#include "wtp_conf.h"
|
#include "wtp_conf.h"
|
||||||
#include "wtp_interface.h"
|
#include "wtp_interface.h"
|
||||||
@ -30,6 +31,8 @@ struct wtpinfo * get_wtpinfo()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wtpinfo->radios_in_use=2;
|
||||||
|
|
||||||
wtpinfo->encryption_cap=1;
|
wtpinfo->encryption_cap=1;
|
||||||
|
|
||||||
wtpinfo->serial_no=conf_serial_no;
|
wtpinfo->serial_no=conf_serial_no;
|
||||||
@ -56,17 +59,22 @@ struct wtpinfo * get_wtpinfo()
|
|||||||
wtpinfo->macaddress=conf_macaddress;
|
wtpinfo->macaddress=conf_macaddress;
|
||||||
wtpinfo->macaddress_len=conf_macaddress_len;
|
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 = malloc(8);
|
||||||
// wtpinfo->session_id_len = cw_rand(wtpinfo->session_id,8);
|
// wtpinfo->session_id_len = cw_rand(wtpinfo->session_id,8);
|
||||||
|
|
||||||
uint8_t sessid[4];
|
uint8_t sessid[4];
|
||||||
int sidl = cw_rand(sessid,4);
|
memset(sessid,0,4);
|
||||||
wtpinfo->session_id = bstr_create(sessid,sidl);
|
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;
|
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;
|
static struct conn * conn=0;
|
||||||
struct conn * get_conn()
|
struct conn * get_conn()
|
||||||
{
|
{
|
||||||
|
@ -81,10 +81,17 @@ int do_connect(void *priv,void *data)
|
|||||||
if (!rc)
|
if (!rc)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
printf("Sleep after oin\n");
|
||||||
rc = configure();
|
sleep(5);
|
||||||
|
printf("Go conf\n");
|
||||||
|
|
||||||
|
|
||||||
|
// rc = join(&ip->ip);
|
||||||
|
// if (!rc)
|
||||||
|
// return 1;
|
||||||
|
|
||||||
|
rc = configure();
|
||||||
|
|
||||||
run (get_conn());
|
run (get_conn());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1218,11 +1218,13 @@ int wtpdrv_get_radioinfo(int rid,struct radioinfo * radioinfo)
|
|||||||
|
|
||||||
radioinfo->rid=rid;
|
radioinfo->rid=rid;
|
||||||
//uint8_t rm[8]="12345600";
|
//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->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];
|
struct wpa_driver_ops * drv = wpa_drivers[0];
|
||||||
|
Loading…
Reference in New Issue
Block a user