diff --git a/src/ac/Makefile b/src/ac/Makefile index 682cdd83..b3525c08 100644 --- a/src/ac/Makefile +++ b/src/ac/Makefile @@ -11,7 +11,7 @@ ifndef ARCH endif LDFLAGS+=-g -D_REENTRANT -L/usr/local/lib -L../capwap/$(ARCH) -CFLAGS += -Wall -g -O0 -D_REENTRANT -DIPV6 -I/usr/local/include -I../capwap +CFLAGS += -Wall -g -O3 -D_REENTRANT -DIPV6 -I/usr/local/include -I../capwap LIBS+=-lcapwap diff --git a/src/ac/conf.c b/src/ac/conf.c index 0b12ef7c..aa638fc5 100644 --- a/src/ac/conf.c +++ b/src/ac/conf.c @@ -318,8 +318,6 @@ static int init_listen_addrs() } - - if (ifa->ifa_addr->sa_family==AF_INET && conf_ipv4){ sock_addrtostr(ifa->ifa_addr,str,100); *strchr(str,':')=0; diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index 631aaee0..98169bb1 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -369,6 +369,13 @@ static void wtpman_run_discovery(void *arg) cwread_discovery_request(&wtpman->wtpinfo,cwrmsg->msgelems,cwrmsg->msgelems_len); + + printf("RMAC-LEN:%d\n",cwrmsg->rmac[0]); + +printf("HW: %s\n",sock_hwaddr2str(bstr_data(cwrmsg->rmac),bstr_len(cwrmsg->rmac))); + + + conn_detect_capwap(wtpman->conn,&wtpman->wtpinfo); char wtpinfostr[8192]; @@ -379,6 +386,8 @@ static void wtpman_run_discovery(void *arg) struct radioinfo radioinfo; radioinfo.rid = cwrmsg->rid; + radioinfo.rmac = 0; //&cwrmsg->rmac; + // memcpy(radioinfo.rmac, cwrmsg->rmac,8); // radioinfo.rmac[0]=0; @@ -530,6 +539,8 @@ static int wtpman_join(void *arg,time_t timer) return 0; } + + process_join_request(&wtpman->wtpinfo,cwrmsg->msgelems,cwrmsg->msgelems_len); conn_detect_capwap(wtpman->conn,&wtpman->wtpinfo); diff --git a/src/capwap/Makefile b/src/capwap/Makefile index c3b361c4..3056c141 100644 --- a/src/capwap/Makefile +++ b/src/capwap/Makefile @@ -196,8 +196,8 @@ O:=$(OBJS); OBJS:=$(patsubst %.o,$(ARCH)/%.o,$(OBJS)) -#CFLAGS = -Wall -g -O3 -D_REENTRANT -DWITH_IPV6 -CFLAGS = -Wall -g -O0 -D_REENTRANT -DWITH_IPV6 -DWITH_RMAC_SUPPORT +CFLAGS = -Wall -g -O3 -D_REENTRANT -DWITH_IPV6 -DWITH_RMAC_SUPPORT +#CFLAGS = -Wall -g -O0 -D_REENTRANT -DWITH_IPV6 -DWITH_RMAC_SUPPORT CFLAGS += $(GNUTLS_CFLAGS) \ -DWITH_CW_LOG \ diff --git a/src/capwap/cwmsg_addelem_ac_descriptor.c b/src/capwap/cwmsg_addelem_ac_descriptor.c index e18bb9a1..d8051478 100644 --- a/src/capwap/cwmsg_addelem_ac_descriptor.c +++ b/src/capwap/cwmsg_addelem_ac_descriptor.c @@ -19,7 +19,6 @@ #include #include "capwap.h" - void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo) { uint8_t buffer[12+2048]; @@ -27,14 +26,11 @@ void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo) *((uint32_t*)(acd))=htonl((acinfo->stations<<16) | (acinfo->limit)); *((uint32_t*)(acd+4))=htonl((acinfo->active_wtps<<16) | acinfo->max_wtps); - -//printf("(((((((((((((((((((((((((((((((((((((((((((((((((((((((( %d\n",acinfo->dtls_policy); *((uint32_t*)(acd+8))=htonl((acinfo->security<<24) | (acinfo->rmac<<16) | acinfo->dtls_policy ); int len = 12; int sublen; -//goto u; sublen = 4; @@ -44,14 +40,14 @@ void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo) len+=4; *(acd+len)=5; len++; *(acd+len)=0; len++; - *(acd+len)=19; len++; - *(acd+len)=2; len++; + *(acd+len)=72; len++; + *(acd+len)=71; len++; *(acd+len)=5; len++; *(acd+len)=6; len++; *(acd+len)=7; len++; *(acd+len)=8; len++; -/* + *((uint32_t*)(acd+len))=htonl(CW_VENDOR_ID_CISCO); len+=4; *((uint32_t*)(acd+len))=htonl((1<<16)|sublen); @@ -65,18 +61,17 @@ void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo) *(acd+len)=7; len++; *(acd+len)=8; len++; -*/ + goto b; -//u: /* software version subelement */ *((uint32_t*)(acd+len))=htonl(CW_VENDOR_ID_CISCO); len+=4; sublen=strlen((const char*)acinfo->software_version); - *((uint32_t*)(acd+len))=htonl((5<<16)|sublen); + *((uint32_t*)(acd+len))=htonl((1<<16)|sublen); len+=4; memcpy(acd+len,acinfo->software_version,sublen); len+=sublen; diff --git a/src/capwap/cwmsg_addelem_vendor_cisco_ap_timesync.c b/src/capwap/cwmsg_addelem_vendor_cisco_ap_timesync.c index d15a8be0..73c6ef53 100644 --- a/src/capwap/cwmsg_addelem_vendor_cisco_ap_timesync.c +++ b/src/capwap/cwmsg_addelem_vendor_cisco_ap_timesync.c @@ -21,8 +21,10 @@ #include "capwap_cisco.h" -void cwmsg_addelem_vendor_cisco_ap_timesync(struct cwmsg * cwmsg) +void cwmsg_addelem_vendor_cisco_ap_timesync(struct cwmsg *cwmsg) { - time_t t = htonl(time(NULL)); - cwmsg_addelem_vendor_specific_payload(cwmsg,CW_VENDOR_ID_CISCO,CWVENDOR_CISCO_AP_TIMESYNC,(uint8_t*)&t,sizeof(t)); + //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, + (uint8_t *) & t, sizeof(t)); } diff --git a/src/capwap/cwmsg_addelem_wtp_radio_infos.c b/src/capwap/cwmsg_addelem_wtp_radio_infos.c index 78a905e6..a8f77990 100644 --- a/src/capwap/cwmsg_addelem_wtp_radio_infos.c +++ b/src/capwap/cwmsg_addelem_wtp_radio_infos.c @@ -35,7 +35,7 @@ void cwmsg_addelem_wtp_radio_info(struct cwmsg * msg,struct radioinfo *radioinfo void cwmsg_addelem_wtp_radio_infos(struct cwmsg * msg,struct radioinfo * radioinfos) { int i; - for (i=0; i<2; i++) + for (i=1; i<=4; i++) { // if (radioinfos[i].rid!=0) cwmsg_addelem_wtp_radio_info(msg,&radioinfos[i]); diff --git a/src/capwap/cwmsg_init.c b/src/capwap/cwmsg_init.c index 7f8ed654..91adf7b6 100644 --- a/src/capwap/cwmsg_init.c +++ b/src/capwap/cwmsg_init.c @@ -22,6 +22,8 @@ #include "capwap.h" #include "cwmsg.h" +#include "sock.h" //Tube + void cwmsg_init(struct cwmsg * cwmsg, uint8_t *buffer, int type, int seqnum, struct radioinfo * radioinfo) { int hlen=8; @@ -39,12 +41,16 @@ void cwmsg_init(struct cwmsg * cwmsg, uint8_t *buffer, int type, int seqnum, str *(buffer+8)=rmaclen; memcpy(buffer+9,bstr_data(radioinfo->rmac),rmaclen); cwmsg->flags=CWTH_FLAGS_M; + rmaclen++; } } - hlen+=rmaclen+1; - if (hlen%4) + hlen+=rmaclen; + if (hlen%4){ + int n = hlen; hlen = (hlen>>2)*4+4; + memset(buffer+n,0,hlen-n); + } cwmsg->ctrlhdr=cwmsg->trnsprthdr+hlen; diff --git a/src/capwap/cwsend_discovery_response.c b/src/capwap/cwsend_discovery_response.c index fc32820c..f928e258 100644 --- a/src/capwap/cwsend_discovery_response.c +++ b/src/capwap/cwsend_discovery_response.c @@ -45,9 +45,9 @@ void cwsend_discovery_response(struct conn * conn,int seqnum, struct radioinfo * /* Send Cisco-specific message elements if needed */ - if (conn->capwap_mode == CWMODE_CISCO){ - cwmsg_addelem_vendor_cisco_ap_timesync(cwmsg); - } +// if (conn->capwap_mode == CWMODE_CISCO){ + // cwmsg_addelem_vendor_cisco_ap_timesync(cwmsg); +// } diff --git a/src/wtp/discovery.c b/src/wtp/discovery.c index 90e4a123..4f9d27bb 100644 --- a/src/wtp/discovery.c +++ b/src/wtp/discovery.c @@ -80,12 +80,24 @@ static int msg_cb(void *priv,struct cwrmsg * cwrmsg) acinfo.aciplist = di->aciplist; + + + cwread_discovery_response(&acinfo,cwrmsg->msgelems,cwrmsg->msgelems_len); + + + + char ai [4096]; acinfo_print(ai,&acinfo); printf("AC INFO\n%s",ai); + +printf("CWRHW: %s\n",sock_hwaddr2str(bstr_data(cwrmsg->rmac),bstr_len(cwrmsg->rmac))); +exit(0); + + /* printf("AC NAME %s\n",acinfo.ac_name); printf("AC Software version %s\n",acinfo.software_version);