diff options
author | Joseph Henry <joseph.henry@zerotier.com> | 2015-09-24 14:33:49 -0400 |
---|---|---|
committer | Joseph Henry <joseph.henry@zerotier.com> | 2015-09-24 14:33:49 -0400 |
commit | 0027a1e152962ae2090c0cafeb085b72114a6330 (patch) | |
tree | 3381577d4d6073def2f7f2cc08c2f5db351073c9 | |
parent | 65af5af138ed1f5292eb0b6a666c1728ffdce12c (diff) | |
parent | 557d2b3b0d7bc2bc120e12ad5455ce3ab30a504e (diff) | |
download | infinitytier-0027a1e152962ae2090c0cafeb085b72114a6330.tar.gz infinitytier-0027a1e152962ae2090c0cafeb085b72114a6330.zip |
Merge branch 'netcon' of http://10.6.6.2/zerotier/zerotierone into netcon
-rw-r--r-- | netcon/LWIPStack.hpp | 24 | ||||
-rw-r--r-- | netcon/NetconEthernetTap.cpp | 1 |
2 files changed, 19 insertions, 6 deletions
diff --git a/netcon/LWIPStack.hpp b/netcon/LWIPStack.hpp index a938dd1e..9bf3b613 100644 --- a/netcon/LWIPStack.hpp +++ b/netcon/LWIPStack.hpp @@ -97,13 +97,21 @@ typedef ip_addr ip_addr_t; #define NETIF_SET_UP_SIG struct netif *netif #define NETIF_POLL_SIG struct netif *netif - - -class LWIPStack{ +/** + * Loads an instance of liblwip.so in a private memory arena + * + * This uses dlmopen() to load an instance of the LWIP stack into its + * own private memory space. This is done to get around the stack's + * lack of thread-safety or multi-instance support. The alternative + * would be to massively refactor the stack so everything lives in a + * state object instead of static memory space. + */ +class LWIPStack +{ +private: void* libref; public: - void (*lwip_init)(); err_t (*tcp_write)(TCP_WRITE_SIG); void (*tcp_sent)(TCP_SENT_SIG); @@ -141,8 +149,6 @@ public: void (*netif_set_up)(NETIF_SET_UP_SIG); void (*netif_poll)(NETIF_POLL_SIG); - - LWIPStack(const char* path) { libref = dlmopen(LM_ID_NEWLM, path, RTLD_NOW); @@ -188,6 +194,12 @@ public: netif_set_up = (void(*)(NETIF_SET_UP_SIG))dlsym(libref, "netif_set_up"); netif_poll = (void(*)(NETIF_POLL_SIG))dlsym(libref, "netif_poll"); } + + ~LWIPStack() + { + if (lebref) + dlclose(libref); + } }; #endif diff --git a/netcon/NetconEthernetTap.cpp b/netcon/NetconEthernetTap.cpp index 69e7a264..07121a44 100644 --- a/netcon/NetconEthernetTap.cpp +++ b/netcon/NetconEthernetTap.cpp @@ -96,6 +96,7 @@ NetconEthernetTap::~NetconEthernetTap() _phy.whack(); Thread::join(_thread); _phy.close(_unixListenSocket,false); + delete lwipstack; } void NetconEthernetTap::setEnabled(bool en) |