From 8ea83c9548f0e100ba56619e461b896e81295c02 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 15 Sep 2015 14:15:59 -0400 Subject: [PATCH] netif code hooked up --- netcon/Intercept.h | 3 +- netcon/LWIPStack.hpp | 30 ++++++--- netcon/NetconEthernetTap.cpp | 120 +++++++++++++++++++++++++++-------- netcon/NetconEthernetTap.hpp | 78 +++++++++++++++++++++-- netcon/liblwip.so | Bin 224696 -> 213704 bytes osdep/Arp.cpp | 2 +- 6 files changed, 192 insertions(+), 41 deletions(-) diff --git a/netcon/Intercept.h b/netcon/Intercept.h index 5c154e6e1..7a8864aae 100755 --- a/netcon/Intercept.h +++ b/netcon/Intercept.h @@ -176,6 +176,7 @@ struct shutdown_st /* LWIP error beautification */ +/* const char *lwiperror(int n) { switch(n) @@ -216,6 +217,6 @@ const char *lwiperror(int n) return "UNKNOWN_RET_VAL"; } } - +*/ #endif diff --git a/netcon/LWIPStack.hpp b/netcon/LWIPStack.hpp index 14edd1d55..38bb8547f 100644 --- a/netcon/LWIPStack.hpp +++ b/netcon/LWIPStack.hpp @@ -29,6 +29,7 @@ #include "lwip/mem.h" #include "lwip/pbuf.h" #include "lwip/ip_addr.h" +#include "lwip/netif.h" /* #include "lwip/timers.h" @@ -78,9 +79,6 @@ typedef ip_addr ip_addr_t; #define TCP_LISTEN_SIG struct tcp_pcb * pcb #define TCP_LISTEN_WITH_BACKLOG_SIG struct tcp_pcb * pcb, u8_t backlog #define TCP_BIND_SIG struct tcp_pcb * pcb, struct ip_addr * ipaddr, u16_t port -//#define NETIF_SET_DEFAULT_SIG struct netif *netif -//#define NETIF_ADD_SIG struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input -//#define NETIF_SET_UP_SIG struct netif *netif //#define TAPIF_INIT_SIG struct netif *netif //#define TAPIF_INPUT_SIG LWIPStack* ls, struct netif *netif #define PBUF_FREE_SIG struct pbuf *p @@ -91,6 +89,13 @@ typedef ip_addr ip_addr_t; #define ETHARP_OUTPUT_SIG struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr #define ETHERNET_INPUT_SIG struct pbuf *p, struct netif *netif +#define TCP_INPUT_SIG struct pbuf *p, struct netif *inp +#define IP_INPUT_SIG struct pbuf *p, struct netif *inp + +#define NETIF_SET_DEFAULT_SIG struct netif *netif +#define NETIF_ADD_SIG struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input +#define NETIF_SET_UP_SIG struct netif *netif + class LWIPStack{ @@ -116,9 +121,6 @@ public: struct tcp_pcb * (*tcp_listen)(TCP_LISTEN_SIG); struct tcp_pcb * (*tcp_listen_with_backlog)(TCP_LISTEN_WITH_BACKLOG_SIG); err_t (*tcp_bind)(TCP_BIND_SIG); - //void (*netif_set_default)(NETIF_SET_DEFAULT_SIG); - //struct netif* (*netif_add)(NETIF_ADD_SIG); - //void (*netif_set_up)(NETIF_SET_UP_SIG); void (*etharp_tmr)(void); void (*tcp_tmr)(void); //err_t (*tapif_init)(TAPIF_INIT_SIG); @@ -130,6 +132,12 @@ public: char* (*ipaddr_ntoa)(IPADDR_NTOA_SIG); err_t (*etharp_output)(ETHARP_OUTPUT_SIG); err_t (*ethernet_input)(ETHERNET_INPUT_SIG); + void (*tcp_input)(TCP_INPUT_SIG); + err_t (*ip_input)(IP_INPUT_SIG); + + void (*netif_set_default)(NETIF_SET_DEFAULT_SIG); + struct netif * (*netif_add)(NETIF_ADD_SIG); + void (*netif_set_up)(NETIF_SET_UP_SIG); @@ -158,9 +166,6 @@ public: tcp_listen = (struct tcp_pcb*(*)(TCP_LISTEN_SIG))dlsym(libref, "tcp_listen"); tcp_listen_with_backlog = (struct tcp_pcb*(*)(TCP_LISTEN_WITH_BACKLOG_SIG))dlsym(libref, "tcp_listen_with_backlog"); tcp_bind = (err_t(*)(TCP_BIND_SIG))dlsym(libref, "tcp_bind"); - //netif_set_default = (void(*)(NETIF_SET_DEFAULT_SIG))dlsym(libref, "netif_set_default"); - //netif_add = (struct netif*(*)(NETIF_ADD_SIG))dlsym(libref, "netif_add"); - //netif_set_up = (void(*)(NETIF_SET_UP_SIG))dlsym(libref, "netif_set_up"); etharp_tmr = (void(*)(void))dlsym(libref, "etharp_tmr"); tcp_tmr = (void(*)(void))dlsym(libref, "tcp_tmr"); //tapif_init = (err_t(*)(TAPIF_INIT_SIG))dlsym(libref, "tapif_init"); @@ -172,6 +177,13 @@ public: ipaddr_ntoa = (char*(*)(IPADDR_NTOA_SIG))dlsym(libref, "ipaddr_ntoa"); etharp_output = (err_t(*)(ETHARP_OUTPUT_SIG))dlsym(libref, "etharp_output"); ethernet_input = (err_t(*)(ETHERNET_INPUT_SIG))dlsym(libref, "ethernet_input"); + + tcp_input = (void(*)(TCP_INPUT_SIG))dlsym(libref, "tcp_input"); + ip_input = (err_t(*)(IP_INPUT_SIG))dlsym(libref, "ip_input"); + + netif_set_default = (void(*)(NETIF_SET_DEFAULT_SIG))dlsym(libref, "netif_set_default"); + netif_add = (struct netif*(*)(NETIF_ADD_SIG))dlsym(libref, "netif_add"); + netif_set_up = (void(*)(NETIF_SET_UP_SIG))dlsym(libref, "netif_set_up"); } }; diff --git a/netcon/NetconEthernetTap.cpp b/netcon/NetconEthernetTap.cpp index e7e38939e..ecfca72d0 100644 --- a/netcon/NetconEthernetTap.cpp +++ b/netcon/NetconEthernetTap.cpp @@ -34,7 +34,6 @@ #include "NetconEthernetTap.hpp" #include "../node/Utils.hpp" -#include "../node/Node.hpp" // for //TRACE #include "../osdep/OSUtils.hpp" #include "../osdep/Phy.hpp" @@ -43,6 +42,7 @@ #include "lwip/ip.h" #include "lwip/ip_addr.h" #include "lwip/ip_frag.h" +#include "lwip/tcp.h" #include "LWIPStack.hpp" #include "NetconService.hpp" @@ -53,6 +53,7 @@ namespace ZeroTier { + NetconEthernetTap::NetconEthernetTap( const char *homePath, const MAC &mac, @@ -120,7 +121,7 @@ bool NetconEthernetTap::addIp(const InetAddress &ip) } // TODO: alloc IP in LWIP - //netif_set_addr(netif, ipaddr, netmask, gw); + fprintf(stderr, "ASSIGNING IP = %s\n", ip.toIpString().c_str()); } return true; // TODO: what is exapected? } @@ -152,7 +153,6 @@ std::vector NetconEthernetTap::ips() const void NetconEthernetTap::put(const MAC &from,const MAC &to,unsigned int etherType,const void *data,unsigned int len) { - fprintf(stderr, "put\n"); if (!_enabled) return; @@ -164,30 +164,48 @@ void NetconEthernetTap::put(const MAC &from,const MAC &to,unsigned int etherType Mutex::Lock _l2(_arp_m); _arp.processIncomingArp(data,len,arpReplyBuf,arpReplyLen,arpReplyDest); if (arpReplyLen > 0) + fprintf(stderr, "ARP reply generated\n"); _handler(_arg,_nwid,_mac,from,ZT_ETHERTYPE_ARP,0,arpReplyBuf,arpReplyLen); - } else if (etherType == ZT_ETHERTYPE_IPV4) { - - // Pass IPV4 packets to LWIP + } + else if (etherType == ZT_ETHERTYPE_IPV4) { + // Copy data into a pbuf chain struct pbuf *p, *q; - u16_t len; - char *bufptr; + //u16_t len; + char buf[1514]; + char *bufptr; - // allocate a pbuf chain of pbufs from the pool - p = lwipstack->pbuf_alloc(PBUF_RAW, len, PBUF_POOL); + // We allocate a pbuf chain of pbufs from the pool. + p = lwipstack->pbuf_alloc(PBUF_RAW, len, PBUF_POOL); - if(p != NULL) { - // We iterate over the pbuf chain until we have read the entire packet into the pbuf. - bufptr = (char*)data; + if(p != NULL) { + /* We iterate over the pbuf chain until we have read the entire + packet into the pbuf. */ + bufptr = &buf[0]; for(q = p; q != NULL; q = q->next) { - // read data into(q->payload, q->len); - memcpy(q->payload, bufptr, q->len); - bufptr += q->len; - } - // acknowledge that packet has been read(); - } else { - fprintf(stderr, "packet dropped\n"); - } + /* Read enough bytes to fill this pbuf in the chain. The + available data in the pbuf is given by the q->len + variable. */ + /* read data into(q->payload, q->len); */ + memcpy(q->payload, bufptr, q->len); + bufptr += q->len; + } + /* acknowledge that packet has been read(); */ + } else { + /* drop packet(); */ + } + + // Assemble ethernet header and call netif->output + struct eth_hdr *ethhdr; + ethhdr = (struct eth_hdr *)p->payload; + from.copyTo(ethhdr->src.addr, 6); + _mac.copyTo(ethhdr->dest.addr, 6); + ethhdr->type = ZT_ETHERTYPE_IPV4; + + if(interface.input(p, &interface) != ERR_OK) + { + fprintf(stderr, "IP error (netif->input)\n"); + } } } @@ -285,19 +303,36 @@ void NetconEthernetTap::closeConnection(NetconConnection *conn) } +/*------------------------------------------------------------------------------ +------------------------ low-level Interface functions ------------------------- +------------------------------------------------------------------------------*/ + + void NetconEthernetTap::threadMain() throw() { fprintf(stderr, "starting threadMain()\n"); + static ip_addr_t ipaddr, netmask, gw; char ip_str[16] = {0}, nm_str[16] = {0}, gw_str[16] = {0}; - IP4_ADDR(&gw, 192,168,0,1); - IP4_ADDR(&netmask, 255,255,255,0); - IP4_ADDR(&ipaddr, 192,168,0,2); + + if(_ips.size() == 0) { + fprintf(stderr, "no IP assigned. Exiting.\n"); + exit(0); + } + + IP4_ADDR(&gw,0,0,0,0); + ipaddr.addr = *((u32_t *)_ips[0].rawIpData()); + netmask.addr = *((u32_t *)_ips[0].netmask().rawIpData()); + strncpy(ip_str, lwipstack->ipaddr_ntoa(&ipaddr), sizeof(ip_str)); strncpy(nm_str, lwipstack->ipaddr_ntoa(&netmask), sizeof(nm_str)); strncpy(gw_str, lwipstack->ipaddr_ntoa(&gw), sizeof(gw_str)); + fprintf(stderr, "ip_str = %s\n", ip_str); + fprintf(stderr, "nm_str = %s\n", nm_str); + fprintf(stderr, "gw_str = %s\n", gw_str); + unsigned long tcp_time = ARP_TMR_INTERVAL / 5000; unsigned long etharp_time = IP_TMR_INTERVAL / 1000; unsigned long prev_tcp_time = 0; @@ -307,6 +342,37 @@ void NetconEthernetTap::threadMain() unsigned long since_etharp; struct timeval tv; + /* set up the faux-netif for LWIP's sake */ + fprintf(stderr, "netif_add\n"); + lwipstack->netif_add(&interface,&ipaddr, &netmask, &gw, NULL, tapif_init, lwipstack->ethernet_input); + + + fprintf(stderr, "initializing interface\n"); + struct tapif *tapif; + tapif = (struct tapif *)mem_malloc(sizeof(struct tapif)); + if (!tapif) { + //return ERR_MEM; + } + //interface.state = tapif; + interface.state = this; + interface.name[0] = 't'; + interface.name[1] = 'p'; + interface.output = lwipstack->etharp_output; + interface.linkoutput = low_level_output; + interface.mtu = 1500; + /* hardware address length */ + interface.hwaddr_len = 6; + tapif->ethaddr = (struct eth_addr *)&(interface.hwaddr[0]); + interface.flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_IGMP; + low_level_init(&interface); + + fprintf(stderr, "netif_set_default\n"); + lwipstack->netif_set_default(&interface); + fprintf(stderr, "netif_set_up\n"); + lwipstack->netif_set_up(&interface); + fprintf(stderr, "complete\n"); + + while (_run) { gettimeofday(&tv, NULL); curr_time = (unsigned long)(tv.tv_sec) * 1000 + (unsigned long)(tv.tv_usec) / 1000; @@ -325,7 +391,8 @@ void NetconEthernetTap::threadMain() lwipstack->etharp_tmr(); } fprintf(stderr, "_run\n"); - _phy.poll(min_time / 1000); // conversion from usec to millisec, TODO: double check + _phy.poll(100); // conversion from usec to millisec, TODO: double check + } // TODO: cleanup -- destroy LWIP state, kill any clients, unload .so, etc. } @@ -704,7 +771,7 @@ void NetconEthernetTap::handle_connect(NetconClient *client, struct connect_st* // that's it! // - Most instances of a retval for a connect() should happen // in the nc_connect() and nc_err() callbacks! - fprintf(stderr, "failed to connect: %s\n", lwiperror(err)); + //fprintf(stderr, "failed to connect: %s\n", lwiperror(err)); send_return_value(client, err); } // Everything seems to be ok, but we don't have enough info to retval @@ -717,6 +784,7 @@ void NetconEthernetTap::handle_connect(NetconClient *client, struct connect_st* void NetconEthernetTap::handle_write(NetconConnection *c) { + fprintf(stderr, "handle_write"); if(c) { int sndbuf = c->pcb->snd_buf; float avail = (float)sndbuf; diff --git a/netcon/NetconEthernetTap.hpp b/netcon/NetconEthernetTap.hpp index c1c667aab..f48f9e804 100644 --- a/netcon/NetconEthernetTap.hpp +++ b/netcon/NetconEthernetTap.hpp @@ -48,6 +48,14 @@ #include "NetconService.hpp" #include "NetconUtilities.hpp" +#include "netif/etharp.h" + +struct tapif { + struct eth_addr *ethaddr; + /* Add whatever per-interface state that is needed here. */ + int fd; +}; + namespace ZeroTier { class NetconEthernetTap; @@ -86,6 +94,9 @@ public: throw(); LWIPStack *lwipstack; + uint64_t _nwid; + void (*_handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *,unsigned int); + void *_arg; private: @@ -136,9 +147,6 @@ private: return conn_addr; } - void (*_handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *,unsigned int); - void *_arg; - // Client helpers NetconConnection *getConnectionByThisFD(int fd); NetconConnection *getConnectionByPCB(struct tcp_pcb *pcb); @@ -146,12 +154,14 @@ private: void closeClient(NetconClient *client); void closeConnection(NetconConnection *conn); + Phy _phy; PhySocket *_unixListenSocket; std::vector clients; + netif interface; + - uint64_t _nwid; MAC _mac; Thread _thread; std::string _homePath; @@ -171,6 +181,66 @@ private: volatile bool _run; }; + +/*------------------------------------------------------------------------------ +------------------------ low-level Interface functions ------------------------- +------------------------------------------------------------------------------*/ + + static void low_level_init(struct netif *netif) + { + } + + static err_t tapif_init(struct netif *netif) + { + return ERR_OK; + } + + static err_t low_level_output(struct netif *netif, struct pbuf *p) + { + struct pbuf *q; + char buf[1514]; + char *bufptr; + //struct tapif *tapif; + int tot_len = 0; + + //tapif = (struct tapif *)netif->state; + ZeroTier::NetconEthernetTap *tap = (ZeroTier::NetconEthernetTap*)netif->state; + + #if 0 + if(((double)rand()/(double)RAND_MAX) < 0.2) { + printf("drop output\n"); + return ERR_OK; + } + #endif + /* initiate transfer(); */ + + bufptr = &buf[0]; + + for(q = p; q != NULL; q = q->next) { + /* Send the data from the pbuf to the interface, one pbuf at a + time. The size of the data in each pbuf is kept in the ->len + variable. */ + /* send data from(q->payload, q->len); */ + memcpy(bufptr, q->payload, q->len); + bufptr += q->len; + tot_len += q->len; + } + + // signal that packet should be sent(); + // Split ethernet header and feed into handler + struct eth_hdr *ethhdr; + ethhdr = (struct eth_hdr *)p->payload; + + ZeroTier::MAC src_mac; + ZeroTier::MAC dest_mac; + + src_mac.setTo(ethhdr->src.addr, 6); + dest_mac.setTo(ethhdr->dest.addr, 6); + + tap->_handler(tap->_arg,tap->_nwid,src_mac,dest_mac,ZT_ETHERTYPE_IPV4,0,buf,p->tot_len); + return ERR_OK; + } + } // namespace ZeroTier #endif // ZT_ENABLE_NETCON diff --git a/netcon/liblwip.so b/netcon/liblwip.so index 18c04c3dbab7e6d441d653e86ee99f77befb5ba2..75b8f0a00be1f1b5793a2e3c51484429d9fa1f9b 100755 GIT binary patch delta 57638 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
PUlJx-GZ*pZ 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%0DvcS6^sVzD(``wz#B)0W#OVzUjdvLdV)Md&P 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 delta 70867 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

gXCDhvNp&uV<UL8jYua ztpK`Wq~kDfyK&2-a)w+|!4^? z2jJvn0?hy%bY)6MiN>eiR{19tF<#O5i~m+YsIJr(8sGeziH|To)(RfY@MuHkSM9*- ziDfDkT>gcbe2p*rM;REd?X1%{UYtn?w{@piO~w<&iw`@9;^l_B;fNI2{NFIbmdo7n z`i+S+?cuLj+ENQ-=)1)l#!f2bi1ncmx*Vq?PUCaql%)BcFyNgu-b(M$-)lsdg!=Cr$yp)H4G_4ut_w|vaZEMu+>vI%th0#kI&rMVK0Y&f>QOP&f{ntw4 ze<-|*Q7cvXYkq?dOb5<_RKT7tO0uC=sHE|lk1N2ccMW-|D*7W?v#ozRby1I^_8M;< zsfszFh%p3sI0{-*Zs9mu%Uc^nvUKsez^NHC^v5mCuV{leNy+11am-bcnOb4GHng*| z0vx*Fr!<~gO#uzGe5uCqPNRto)A&w}ufL}NdVzwDy(X^Gc+7phs!h00YS|YTDm+xP zzt?z;8w#kY@tYd|QlG^1iQV{HfUcSmX5xnIQOy>?YRS&k&>=0f zY=5V!kNG81sCCqM?kQ!1-shpC7jSCep1OgpaXLiHJ04JS=Ksn-a;(Pp|Eh3nyiZcN z+o%_<3jRp(jmNdZ)ISwqew`M{#TqaFRiu>~|N5emrcwOV|zf*bhTg^zmW#S4$ zhxDyx6TMDq*?iJKNCt(`-{mSQy$L->Zsr$5RSD z@fEG}ag5Z?HP?9QJQFq&^fc(A@$z338U&miIaY3UJxa^l_2TcEGG`Ph+-YH$)$W((D7IDo5RJ#^_KH_*BN})FuI5um zC_C14s;BXLqZE!6ws|zwcC3#SPSAKKQ$BLI(O(B4?Upe_D?B(;Nv3EYF!pHNx*s!N7jsDC+qArO&iKqMCepB8*S2Ej z1ueh$XXRFJZHNBn9LDo#yjn~tYuAO#%s>aWxD?w{vFh}FB>xgtq+j&;u zZo_;f0N@hMcma%XIJDH-mZR}?+R&v13dqvfwfTg{aTHOc2#z&C}Pn6G$i>J`ew@|jnn5(2*=I?sy|*4 z)Qqn+;{@FY!;z=)>l!crTo_hNL*+MrL~H!tzbXTbw4FHM6p5@4OV|y)er~80hU=x4 z?rNi@#=T!8)rNX#e8>$2Sj(FMgqt%g+e$q&4JqpP^m5~2p0;tSy|Q8cD>@{XXgsT< z!b=q~p0_Nzw`hs-Uln^><1MZ#m9|>*kj6LbDY91MUjZl2tZz|S0qQ#~AE_@MtpIpa z$)nHo%@He-^GMYXaB6A1{!!%#y=Oy5BaLV35&yg%U@bMSKJSY1pHuS2 zgJ4h%T9<3v5n7>+9+5>_ew@bl>mX8F<5M)gM~^s%o`TP4{72oQ=0E00htdn0@yB&# zAzmALMdR!Bz?h@)9U8xWK><4S8wUtC2h3?JRpUo3d%25}wLyx){YP^ZYU1&NwtjnWT8Xq-R;hBmUX&RrXtNp0PA5^&8u)dXRe!d^f!CIl4 z9$~e#!g!6B|EA~^jeDY057*c7b2VQ66Anu?Uc+o|)I#5sHD1t+#k##KYeTPUJm|av z?rHo@jSoAgfGrw7pz#$06kx4WKi0VQapZdB@5A`}N;B$ZD21mLF)nL-Y7JF0^Zy5c z_p8P`j#PqEwfvtNpO{R5Q#}pFBm6PL`!q`pd?aQ)i6mA_A4@$0*39%&dU|ha zxA2LW&)Nc>X{v{_WT~0;^c0Wd(%Xc4pVw)FWtW=T`tVBTzj97X>(QrIm#$+{l2Vdd z$i^wQ^HIgq@tm_DfMLkY7PcrE*WC8Co&JZkyowY)hLD*ZAXauD)%GNdR1fk3ILm7# z#LIClZ4V^;e?OKjd!wbTIggomp_?Y^5;1T;0RR>#iwcOm^ z)>K%}3h}k{%k6C~BdlkH7R`_iI-oS`5uru#E%xypP@46K(4zQPr>~iKJ5`#sG~E#* zuMuuOA_U8#J*&xv9f4a<2rZfzB*z1fu$~ZF^rGC{5nfx*&G1>m%N=bkh4o0_ir3qcWW&zLpL<>9TR$krQ$G4X zDqpFkd<}VCuZg_e+18QwNRkO%Y#pPEn%d0vJ5WnCV-1kCa!MClBauv7*l;+asbAy% EAH%s!CjbBd diff --git a/osdep/Arp.cpp b/osdep/Arp.cpp index f71dfb54f..2ca00f0db 100644 --- a/osdep/Arp.cpp +++ b/osdep/Arp.cpp @@ -65,7 +65,7 @@ uint32_t Arp::processIncomingArp(const void *arp,unsigned int len,void *response responseLen = 0; responseDest.zero(); - if (len > 28) { + if (len >= 28) { if (!memcmp(arp,ARP_REQUEST_HEADER,8)) { // Respond to ARP requests for locally-known IPs _ArpEntry *targetEntry = _cache.get(reinterpret_cast(arp)[6]);