From b6e4bc5f7bb8f2d8725e3e2cf0970160b92e4d22 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 2 Nov 2014 06:34:17 +0000 Subject: [PATCH] Working on wtp drv ... FossilOrigin-Name: 5e20f5b02d50b5ddc1e44f6af9e1b3925d324fc3be724550ffe202b02180e166 --- src/Config.mak | 2 +- src/WtpConfig.mak | 2 + src/capwap/Makefile | 2 + src/wtp/wtpdrv.c | 112 +++++++++++++++++++++++++++++++++++++------- 4 files changed, 101 insertions(+), 17 deletions(-) diff --git a/src/Config.mak b/src/Config.mak index 013b4a37..4a7bf354 100644 --- a/src/Config.mak +++ b/src/Config.mak @@ -9,7 +9,7 @@ USE_CONTRIB_OPENSSL=1 CONF_LIBRARY=UCI USE_CONTRIB_UCI=0 -#CC=clang +CC=clang #CC=mips-openwrt-linux-uclibc-gcc diff --git a/src/WtpConfig.mak b/src/WtpConfig.mak index e27e9215..495cf493 100644 --- a/src/WtpConfig.mak +++ b/src/WtpConfig.mak @@ -1,5 +1,7 @@ # +CC=clang + CFLAGS += -I/usr/include/libnl3 CFLAGS += -I../contrib/uci LDFLAGS += -L../contrib/uci/build diff --git a/src/capwap/Makefile b/src/capwap/Makefile index 14194bad..bebb6bb7 100644 --- a/src/capwap/Makefile +++ b/src/capwap/Makefile @@ -1,3 +1,5 @@ +include ../Config.mak + ifndef CC CC=gcc endif diff --git a/src/wtp/wtpdrv.c b/src/wtp/wtpdrv.c index 0c123c47..15f47554 100644 --- a/src/wtp/wtpdrv.c +++ b/src/wtp/wtpdrv.c @@ -8,6 +8,7 @@ #include "capwap/cw_log.h" #include "capwap/radioinfo.h" +#include "capwap/sock.h" int wpa_printf() { @@ -43,6 +44,8 @@ typedef __le16 le16 #include +#include + #include "dot11.h" //#include "ieee802_11_defs.h" @@ -61,6 +64,15 @@ struct rd { static struct rd rd; +struct wiphydata { + + +}; + + +static struct wiphydata * wiphydata[31]; + + int interface_up(const char * ifname) { @@ -68,7 +80,6 @@ int interface_up(const char * ifname) struct ifreq ifr; sockfd = socket(AF_INET, SOCK_DGRAM, 0); - if (sockfd < 0) return 0; @@ -81,6 +92,31 @@ int interface_up(const char * ifname) } +int get_ifhwaddr(const char *ifname, uint8_t *addr) +{ + struct ifreq ifr; + + int sockfd = socket(AF_INET, SOCK_DGRAM, 0); + if (sockfd < 0) + return 0; + + + memset(&ifr, 0, sizeof(ifr)); + strcpy(ifr.ifr_name, ifname); //, IFNAMSIZ); + if (ioctl(sockfd, SIOCGIFHWADDR, &ifr)) { + return -1; + } + + if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) { + return -1; + } + memcpy(addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN); + return 0; +} + + + + struct hostapd_freq_params { int mode; int freq; @@ -234,10 +270,17 @@ static int add_interface_data(struct nlattr* msgattribs[NL80211_ATTR_MAX+1]) uint8_t * d = nla_data( msgattribs[NL80211_ATTR_MAC] ); memcpy (rd.mac,d,6); + + printf("Mac is: %s\n", sock_hwaddr2str(rd.mac,6)); } + if (msgattribs[NL80211_ATTR_IFNAME]){ + printf("IFNAME = %s\n",(uint8_t*)nla_data(msgattribs[NL80211_ATTR_IFNAME])); + } + + return 1; } @@ -470,7 +513,7 @@ static int xnlCallback(struct nl_msg *msg, void *arg) int make_if() { - const char * ifname = "www"; + const char * ifname = "wtpdrv7"; /* allocate a message */ struct nl_msg *msg = nlmsg_alloc(); @@ -492,7 +535,10 @@ int make_if() int nlr = nl_recvmsgs_default(sk); printf("Make IF NLR = %d\n", nlr); - interface_up(ifname); + cw_log(LOG_ERR,"Fatal: Make if %d - %s",nlr,nl_geterror(nlr)); + + +// interface_up(ifname); nla_put_failure: @@ -501,12 +547,20 @@ int make_if() } -void start_ap(struct nl_sock *sk) +int start_ap(struct nl_sock *sk) { + + + + + + + + /* allocate a message */ struct nl_msg *msg = nlmsg_alloc(); if (!msg) - return; + return 0; @@ -545,13 +599,23 @@ void start_ap(struct nl_sock *sk) NLA_PUT(msg, NL80211_ATTR_BEACON_HEAD, hs, head); - tail = head+hs; +printf("Put message 1\n"); + + tail = (uint8_t*)(head)+hs; uint8_t * pos = tail; +printf("Put message 1 posss\n"); const char *ssid = "HelloWorld"; - *pos++ = WLAN_EID_SSID; - *pos++ = strlen(ssid); + *pos = WLAN_EID_SSID; + pos++; + + *pos = strlen(ssid); + pos++; + +printf ("Memcpy %d %d %d\n",(void*)pos,(void*)head,(void*)pos-(void*)head); memcpy(pos,ssid,strlen(ssid)); +printf ("Memcoy done\n"); + pos+=strlen(ssid); int tl = pos-tail; @@ -656,6 +720,8 @@ int init() int init_radios() { + memset (wiphydata,0,sizeof(wiphydata)); + struct nl_msg *msg = nlmsg_alloc(); if (!msg){ cw_log(LOG_ERR,"Fatal: No memory while initializing radios"); @@ -674,21 +740,35 @@ int init_radios() } - struct nl_cb bl_cb; +// struct nl_cb bl_cb; rc = nl_recvmsgs_default(sk); printf("IR RC: %d %s\n",rc,nl_geterror(rc)); - - } -void gr() +int gr() { + init_radios(); + return 0; + + + + + uint8_t buf[64]; + + get_ifhwaddr("tabbe",buf); + + + printf ("HWADDR: %s\n",sock_hwaddr2str(buf,6)); + return 0; + + if (!init()) - return; + return 0; + init_radios(); @@ -696,10 +776,10 @@ void gr() start_ap(sk); sleep(1000); -return; +return 0; - return; + return 0 ; @@ -714,7 +794,7 @@ return; - return; + return 0 ; int ret;