support adjustments for LWIP 2.0.0

This commit is contained in:
Joseph Henry
2016-09-14 16:48:02 -07:00
parent 7a6ed30200
commit 32c369fd77
8 changed files with 36 additions and 33 deletions

View File

@@ -56,8 +56,8 @@ COREFILES=$(LWIPDIR)/core/mem.c $(LWIPDIR)/core/memp.c $(LWIPDIR)/core/netif.c \
$(LWIPDIR)/core/pbuf.c $(LWIPDIR)/core/raw.c $(LWIPDIR)/core/stats.c \ $(LWIPDIR)/core/pbuf.c $(LWIPDIR)/core/raw.c $(LWIPDIR)/core/stats.c \
$(LWIPDIR)/core/sys.c $(LWIPDIR)/core/tcp.c $(LWIPDIR)/core/tcp_in.c \ $(LWIPDIR)/core/sys.c $(LWIPDIR)/core/tcp.c $(LWIPDIR)/core/tcp_in.c \
$(LWIPDIR)/core/tcp_out.c $(LWIPDIR)/core/udp.c \ $(LWIPDIR)/core/tcp_out.c $(LWIPDIR)/core/udp.c \
# $(LWIPDIR)/core/dhcp.c \
$(LWIPDIR)/core/init.c $(LWIPDIR)/core/timers.c $(LWIPDIR)/core/def.c $(LWIPDIR)/core/init.c $(LWIPDIR)/core/timers.c $(LWIPDIR)/core/def.c
CORE4FILES=$(wildcard $(LWIPDIR)/core/ipv4/*.c) $(LWIPDIR)/core/ipv4/inet.c \ CORE4FILES=$(wildcard $(LWIPDIR)/core/ipv4/*.c) $(LWIPDIR)/core/ipv4/inet.c \
$(LWIPDIR)/core/ipv4/inet_chksum.c $(LWIPDIR)/core/ipv4/inet_chksum.c

View File

@@ -24,8 +24,8 @@ ONE_CLI = $(BUILD)/$(ONE_CLI_NAME)
ONE_IDTOOL = $(BUILD)/$(ONE_IDTOOL_NAME) ONE_IDTOOL = $(BUILD)/$(ONE_IDTOOL_NAME)
LWIP_LIB = $(BUILD)/$(LWIP_LIB_NAME) LWIP_LIB = $(BUILD)/$(LWIP_LIB_NAME)
# #
LWIP_2_DIR = ext/lwip_2.0.0 LWIP_2_DIR = ext/lwip200
LWIP_1_DIR = ext/lwip_1.4.1 LWIP_1_DIR = ext/lwip141
LWIP_BASE_DIR = ext/lwip LWIP_BASE_DIR = ext/lwip
# Automagically pick clang or gcc, with preference for clang # Automagically pick clang or gcc, with preference for clang
@@ -92,7 +92,6 @@ ifeq ($(LWIP_VERSION_2),1)
INCLUDES+=-I$(LWIP_2_DIR)/src/include/ipv4 INCLUDES+=-I$(LWIP_2_DIR)/src/include/ipv4
INCLUDES+=-I$(LWIP_2_DIR)/src/include/ipv6 INCLUDES+=-I$(LWIP_2_DIR)/src/include/ipv6
else else
CXXFLAGS+=-DLWIP_VERSION_1
INCLUDES+=-I$(LWIP_1_DIR)/src/include INCLUDES+=-I$(LWIP_1_DIR)/src/include
INCLUDES+=-I$(LWIP_1_DIR)/src/include/ipv4 INCLUDES+=-I$(LWIP_1_DIR)/src/include/ipv4
INCLUDES+=-I$(LWIP_1_DIR)/src/include/ipv6 INCLUDES+=-I$(LWIP_1_DIR)/src/include/ipv6
@@ -123,13 +122,13 @@ remove_only_intermediates:
# --- EXTERNAL LIBRARIES --- # --- EXTERNAL LIBRARIES ---
lwip: lwip:
ifeq ($(LWIP_VERSION_2),1) ifeq ($(LWIP_VERSION_2),1)
mv ext/lwip_2.0.0 ext/lwip mv ext/lwip200 ext/lwip
-make -f make-liblwip200.mk $(LWIP_FLAGS) -make -f make-liblwip200.mk $(LWIP_FLAGS)
mv ext/lwip ext/lwip_2.0.0 mv ext/lwip ext/lwip200
else else
mv ext/lwip_1.4.1 ext/lwip mv ext/lwip141 ext/lwip
-make -f make-liblwip141.mk $(LWIP_FLAGS) -make -f make-liblwip141.mk $(LWIP_FLAGS)
mv ext/lwip ext/lwip_1.4.1 mv ext/lwip ext/lwip141
endif endif
@@ -153,7 +152,6 @@ linux_intercept:
# Build only the SDK service # Build only the SDK service
linux_sdk_service: lwip $(OBJS) linux_sdk_service: lwip $(OBJS)
rm -rf .depend
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(DEFS) $(INCLUDES) -DSDK -DZT_ONE_NO_ROOT_CHECK -o $(SDK_SERVICE) $(OBJS) $(ZT1)/service/OneService.cpp src/SDK_EthernetTap.cpp src/SDK_Proxy.cpp $(ZT1)/one.cpp -x c src/SDK_RPC.c $(LDLIBS) -ldl $(CXX) $(CXXFLAGS) $(LDFLAGS) $(DEFS) $(INCLUDES) -DSDK -DZT_ONE_NO_ROOT_CHECK -o $(SDK_SERVICE) $(OBJS) $(ZT1)/service/OneService.cpp src/SDK_EthernetTap.cpp src/SDK_Proxy.cpp $(ZT1)/one.cpp -x c src/SDK_RPC.c $(LDLIBS) -ldl
ln -sf $(SDK_SERVICE_NAME) $(BUILD)/zerotier-cli ln -sf $(SDK_SERVICE_NAME) $(BUILD)/zerotier-cli
ln -sf $(SDK_SERVICE_NAME) $(BUILD)/zerotier-idtool ln -sf $(SDK_SERVICE_NAME) $(BUILD)/zerotier-idtool
@@ -270,13 +268,15 @@ clean_android:
-cd $(INT)/android/example_app; ./gradlew clean -cd $(INT)/android/example_app; ./gradlew clean
clean_basic: clean_basic:
-rm -rf .depend
-rm -rf $(BUILD)/* -rm -rf $(BUILD)/*
-rm -rf $(INT)/Unity3D/Assets/Plugins/* -rm -rf $(INT)/Unity3D/Assets/Plugins/*
-rm -rf zerotier-cli zerotier-idtool -rm -rf zerotier-cli zerotier-idtool
-find . -type f \( -name $(ONE_SERVICE_NAME) -o -name $(SDK_SERVICE_NAME) \) -delete -find . -type f \( -name $(ONE_SERVICE_NAME) -o -name $(SDK_SERVICE_NAME) \) -delete
-find . -type f \( -name '*.o' -o -name '*.so' -o -name '*.o.d' -o -name '*.out' -o -name '*.log' -o -name '*.dSYM' \) -delete -find . -type f \( -name '*.o' -o -name '*.so' -o -name '*.o.d' -o -name '*.out' -o -name '*.log' -o -name '*.dSYM' \) -delete
clean_thorough: clean_basic
-rm -rf .depend
clean: clean_basic clean_android clean: clean_basic clean_android
clean_for_production: clean_for_production:

View File

@@ -267,7 +267,7 @@ clean_android:
-cd $(INT)/android/example_app; ./gradlew clean -cd $(INT)/android/example_app; ./gradlew clean
clean_basic: clean_basic:
-rm -rf .depend #-rm -rf .depend
-rm -rf $(BUILD)/* -rm -rf $(BUILD)/*
-rm -rf $(INT)/Unity3D/Assets/Plugins/* -rm -rf $(INT)/Unity3D/Assets/Plugins/*
-rm -rf zerotier-cli zerotier-idtool -rm -rf zerotier-cli zerotier-idtool

View File

@@ -45,14 +45,13 @@
#include "SDK_LWIPStack.hpp" #include "SDK_LWIPStack.hpp"
// LWIP // LWIP
#if defined(LWIP_VERSION_2) #if defined(LWIP_VERSION_2) // 2.0.0+
//#define LWIPDIR "ext/lwip_2.0.0"
#include "lwip/priv/tcp_priv.h" #include "lwip/priv/tcp_priv.h"
#elif defined (LWIP_VERSION_1) #else // 1.4.1
//#define LWIPDIR "ext/lwip_1.4.1"
#include "lwip/tcp_impl.h" #include "lwip/tcp_impl.h"
#include "lwip/ip_frag.h" #include "lwip/ip_frag.h"
#endif #endif
#include "netif/etharp.h" #include "netif/etharp.h"
#include "lwip/api.h" #include "lwip/api.h"
#include "lwip/ip.h" #include "lwip/ip.h"
@@ -66,8 +65,6 @@
#include "lwip/udp.h" #include "lwip/udp.h"
#include "lwip/tcp.h" #include "lwip/tcp.h"
#include "SDK.h" #include "SDK.h"
#include "SDK_Debug.h" #include "SDK_Debug.h"
@@ -367,7 +364,7 @@ void NetconEthernetTap::threadMain()
(void*)&(_Connections[i]->sock)); (void*)&(_Connections[i]->sock));
} }
if((n < 0 && errno != EAGAIN) || (n == 0 && errno == EAGAIN)) { if((n < 0 && errno != EAGAIN) || (n == 0 && errno == EAGAIN)) {
DEBUG_INFO(" closing sock (%x)", (void*)_Connections[i]->sock); //DEBUG_INFO(" closing sock (%x)", (void*)_Connections[i]->sock);
closeConnection(_Connections[i]->sock); closeConnection(_Connections[i]->sock);
} else if (n > 0) { } else if (n > 0) {
DEBUG_INFO(" data read during connection check (%ld bytes)", n); DEBUG_INFO(" data read during connection check (%ld bytes)", n);
@@ -412,7 +409,7 @@ Connection *NetconEthernetTap::getConnection(PhySocket *sock)
void NetconEthernetTap::closeConnection(PhySocket *sock) void NetconEthernetTap::closeConnection(PhySocket *sock)
{ {
DEBUG_EXTRA("sock=%x", sock); DEBUG_EXTRA("sock=%p", (void*)sock);
Mutex::Lock _l(_close_m); Mutex::Lock _l(_close_m);
// Here we assume _tcpconns_m is already locked by caller // Here we assume _tcpconns_m is already locked by caller
if(!sock) { if(!sock) {
@@ -499,16 +496,16 @@ void NetconEthernetTap::processReceivedData(PhySocket *sock,void **uptr,bool lwi
d[1] = (ip >> 8) & 0xFF; d[1] = (ip >> 8) & 0xFF;
d[2] = (ip >> 16) & 0xFF; d[2] = (ip >> 16) & 0xFF;
d[3] = (ip >> 24) & 0xFF; d[3] = (ip >> 24) & 0xFF;
DEBUG_TRANS("UDP RX <--- :: {TX: %.3f%%, RX: %d, sock=%x} :: payload = %d bytes (src_addr=%d.%d.%d.%d:%d)", DEBUG_TRANS("UDP RX <--- :: {TX: %.3f%%, RX: %d, sock=%p} :: payload = %d bytes (src_addr=%d.%d.%d.%d:%d)",
(float)conn->txsz / max, conn->rxsz/* / max*/, conn->sock, payload_sz, d[0],d[1],d[2],d[3], port); (float)conn->txsz / max, conn->rxsz/* / max*/, (void*)conn->sock, payload_sz, d[0],d[1],d[2],d[3], port);
#endif #endif
} }
// STREAM // STREAM
//DEBUG_INFO("phyOnUnixWritable(): tid = %d\n", pthread_mach_thread_np(pthread_self())); //DEBUG_INFO("phyOnUnixWritable(): tid = %d\n", pthread_mach_thread_np(pthread_self()));
if(conn->type==SOCK_STREAM) { // Only acknolwedge receipt of TCP packets if(conn->type==SOCK_STREAM) { // Only acknolwedge receipt of TCP packets
lwipstack->__tcp_recved(conn->TCP_pcb, n); lwipstack->__tcp_recved(conn->TCP_pcb, n);
DEBUG_TRANS("TCP RX <--- :: {TX: %.3f%%, RX: %.3f%%, sock=%x} :: %ld bytes", DEBUG_TRANS("TCP RX <--- :: {TX: %.3f%%, RX: %.3f%%, sock=%p} :: %ld bytes",
(float)conn->txsz / max, (float)conn->rxsz / max, conn->sock, n); (float)conn->txsz / max, (float)conn->rxsz / max, (void*)conn->sock, n);
} }
} else { } else {
DEBUG_EXTRA(" errno = %d, rxsz = %d", errno, conn->rxsz); DEBUG_EXTRA(" errno = %d, rxsz = %d", errno, conn->rxsz);
@@ -527,7 +524,6 @@ void NetconEthernetTap::processReceivedData(PhySocket *sock,void **uptr,bool lwi
void NetconEthernetTap::phyOnUnixWritable(PhySocket *sock,void **uptr,bool lwip_invoked) void NetconEthernetTap::phyOnUnixWritable(PhySocket *sock,void **uptr,bool lwip_invoked)
{ {
//DEBUG_EXTRA(" phyOnUnixWritable(sock=%p): lwip_invoked = %d\n", (void*)&sock, lwip_invoked);
processReceivedData(sock,uptr,lwip_invoked); processReceivedData(sock,uptr,lwip_invoked);
} }
@@ -587,7 +583,7 @@ void NetconEthernetTap::phyOnUnixData(PhySocket *sock, void **uptr, void *data,
// Find job // Find job
sockdata = jobmap[CANARY_num]; sockdata = jobmap[CANARY_num];
if(!sockdata.first) { if(!sockdata.first) {
DEBUG_ERROR(" unable to locate job entry for %llu, sock=%p", CANARY_num, (void*)&sock); DEBUG_ERROR(" unable to locate job entry for %lu, sock=%p", CANARY_num, (void*)&sock);
return; return;
} else } else
foundJob = true; foundJob = true;
@@ -797,6 +793,8 @@ void NetconEthernetTap::nc_udp_recved(void * arg, struct udp_pcb * upcb, struct
addr_in->sin_port = port; addr_in->sin_port = port;
#endif #endif
// TODO: Finish address treatment
Mutex::Lock _l2(l->tap->_rx_buf_m); Mutex::Lock _l2(l->tap->_rx_buf_m);
// Cycle through pbufs and write them to the RX buffer // Cycle through pbufs and write them to the RX buffer
// The RX "buffer" will be emptied via phyOnUnixWritable() // The RX "buffer" will be emptied via phyOnUnixWritable()
@@ -1439,8 +1437,8 @@ void NetconEthernetTap::handleWrite(Connection *conn)
d[1] = (ip >> 8) & 0xFF; d[1] = (ip >> 8) & 0xFF;
d[2] = (ip >> 16) & 0xFF; d[2] = (ip >> 16) & 0xFF;
d[3] = (ip >> 24) & 0xFF; d[3] = (ip >> 24) & 0xFF;
DEBUG_TRANS("UDP TX ---> :: {TX: ------, RX: ------, sock=%x} :: %d bytes (dest_addr=%d.%d.%d.%d:%d)", DEBUG_TRANS("UDP TX ---> :: {TX: ------, RX: ------, sock=%p} :: %d bytes (dest_addr=%d.%d.%d.%d:%d)",
conn->sock, udp_trans_len, d[0], d[1], d[2], d[3], port); (void*)conn->sock, udp_trans_len, d[0], d[1], d[2], d[3], port);
#endif #endif
} }
lwipstack->__pbuf_free(pb); lwipstack->__pbuf_free(pb);

View File

@@ -33,9 +33,13 @@
#include "lwip/ip_addr.h" #include "lwip/ip_addr.h"
#include "lwip/netif.h" #include "lwip/netif.h"
#include "lwip/init.h" #include "lwip/init.h"
//#include "lwip/tcp_impl.h"
#include "lwip/udp.h" #include "lwip/udp.h"
#if defined(LWIP_VERSION_2) // 2.0.0
#else // 1.4.1
#include "lwip/tcp_impl.h"
#endif
#include <stdio.h> #include <stdio.h>
#include <dlfcn.h> #include <dlfcn.h>
@@ -52,9 +56,9 @@ struct tcp_pcb;
#define LWIP_HTONS_SIG u16_t x #define LWIP_HTONS_SIG u16_t x
#define LWIP_NTOHS_SIG u16_t x #define LWIP_NTOHS_SIG u16_t x
#define IPADDR_NTOA_SIG const ip_addr_t *addr #define IPADDR_NTOA_SIG const ip_addr_t *addr
#if defined(LWIP_VERSION_2) #if defined(LWIP_VERSION_2) // 2.0.0+
#define ETHARP_OUTPUT_SIG struct netif *netif, struct pbuf *q, const ip_addr_t *ipaddr #define ETHARP_OUTPUT_SIG struct netif *netif, struct pbuf *q, const ip_addr_t *ipaddr
#elif defined (LWIP_VERSION_1) #else // 1.4.1
#define ETHARP_OUTPUT_SIG struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr #define ETHARP_OUTPUT_SIG struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr
#endif #endif
#define ETHERNET_INPUT_SIG struct pbuf *p, struct netif *netif #define ETHERNET_INPUT_SIG struct pbuf *p, struct netif *netif

View File

@@ -105,7 +105,7 @@ namespace ZeroTier
struct sockaddr_in *in4 = (struct sockaddr_in *)&addr; struct sockaddr_in *in4 = (struct sockaddr_in *)&addr;
proxyListenPhySocket = _phy.tcpListen((const struct sockaddr*)&in4,(void *)this); proxyListenPhySocket = _phy.tcpListen((const struct sockaddr*)&in4,(void *)this);
sockstate = SOCKS_OPEN; sockstate = SOCKS_OPEN;
DEBUG_INFO("SOCKS5 proxy server address for <%.16llx> is: <%s> (sock=%p)\n", nwid, inet_ntoa(in4->sin_addr), /*ntohs(in4->sin_port), */(void*)&proxyListenPhySocket); DEBUG_INFO("SOCKS5 proxy server address for <%.16lx> is: <%s> (sock=%p)\n", nwid, inet_ntoa(in4->sin_addr), /*ntohs(in4->sin_port), */(void*)&proxyListenPhySocket);
return 0; return 0;
} }
else { else {
@@ -125,7 +125,7 @@ namespace ZeroTier
unsigned int randp = 0; unsigned int randp = 0;
Utils::getSecureRandom(&randp,sizeof(randp)); Utils::getSecureRandom(&randp,sizeof(randp));
portno = 1000 + (randp % 1000); portno = 1000 + (randp % 1000);
DEBUG_INFO("Proxy(): No port specified in networks.d/%.16llx.port, randomly picking port\n", nwid); DEBUG_INFO("Proxy(): No port specified in networks.d/%.16lx.port, randomly picking port\n", nwid);
std::stringstream ss; std::stringstream ss;
ss << portno; ss << portno;
portStr = ss.str(); portStr = ss.str();

View File

@@ -193,6 +193,7 @@ void zts_get_ipv6_address(const char *nwid, char *addrstr)
// Get device ID // Get device ID
int zts_get_device_id() int zts_get_device_id()
{ {
// zt->node->status
/* TODO */ return 0; /* TODO */ return 0;
} }
// //

View File

@@ -112,7 +112,7 @@ int (*realclose)(CLOSE_SIG);
// This is used when you're dynamically-linking our library into your application at runtime // This is used when you're dynamically-linking our library into your application at runtime
if (!api_netpath) { if (!api_netpath) {
api_netpath = getenv("ZT_NC_NETWORK"); api_netpath = getenv("ZT_NC_NETWORK");
DEBUG_INFO("$ZT_NC_NETWORK(len=%d)=%s", strlen(api_netpath), api_netpath); DEBUG_INFO("$ZT_NC_NETWORK(len=%ld)=%s", strlen(api_netpath), api_netpath);
} }
#endif #endif
//DEBUG_EXTRA("api_netpath=%s", api_netpath); //DEBUG_EXTRA("api_netpath=%s", api_netpath);