summaryrefslogtreecommitdiff
path: root/netcon/NetconEthernetTap.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-11-23 13:02:50 -0800
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-11-23 13:02:50 -0800
commit2a6ea387180e76ae934a9d653adb7aa5f9fa479f (patch)
tree2cae267a5431227a6ed218144d18a7513b6d290a /netcon/NetconEthernetTap.cpp
parentd8d4cfbf0150de930504b02ee0dd8854afa558b0 (diff)
downloadinfinitytier-2a6ea387180e76ae934a9d653adb7aa5f9fa479f.tar.gz
infinitytier-2a6ea387180e76ae934a9d653adb7aa5f9fa479f.zip
More code cleanup, just moving some stuff into NetconEthernetTap that is not used elsewhere.
Diffstat (limited to 'netcon/NetconEthernetTap.cpp')
-rw-r--r--netcon/NetconEthernetTap.cpp46
1 files changed, 39 insertions, 7 deletions
diff --git a/netcon/NetconEthernetTap.cpp b/netcon/NetconEthernetTap.cpp
index 7d76b0b9..b722c682 100644
--- a/netcon/NetconEthernetTap.cpp
+++ b/netcon/NetconEthernetTap.cpp
@@ -30,6 +30,7 @@
#include <algorithm>
#include <utility>
#include <dlfcn.h>
+#include <sys/poll.h>
#include "NetconEthernetTap.hpp"
@@ -37,17 +38,18 @@
#include "../osdep/OSUtils.hpp"
#include "../osdep/Phy.hpp"
+#include "Intercept.h"
+#include "LWIPStack.hpp"
+#include "NetconUtilities.hpp"
+
#include "lwip/tcp_impl.h"
#include "netif/etharp.h"
+#include "lwip/api.h"
#include "lwip/ip.h"
#include "lwip/ip_addr.h"
#include "lwip/ip_frag.h"
#include "lwip/tcp.h"
-#include "LWIPStack.hpp"
-#include "NetconService.hpp"
-#include "Intercept.h"
-#include "NetconUtilities.hpp"
#include "Common.c"
#include "Sendfd.c"
@@ -57,8 +59,6 @@
namespace ZeroTier {
-namespace {
-
static err_t tapif_init(struct netif *netif)
{
// Actual init functionality is in addIp() of tap
@@ -103,7 +103,39 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p)
return ERR_OK;
}
-} // anonymous namespace
+/*
+ * TCP connection administered by service
+ */
+class TcpConnection
+{
+public:
+ int perceived_fd;
+ int their_fd;
+ bool pending;
+ bool listening;
+ int pid;
+
+ unsigned long written;
+ unsigned long acked;
+
+ PhySocket *rpcSock;
+ PhySocket *dataSock;
+ struct tcp_pcb *pcb;
+
+ unsigned char buf[DEFAULT_READ_BUFFER_SIZE];
+ int idx;
+};
+
+/*
+ * A helper class for passing a reference to _phy to LWIP callbacks as a "state"
+ */
+class Larg
+{
+public:
+ NetconEthernetTap *tap;
+ TcpConnection *conn;
+ Larg(NetconEthernetTap *_tap, TcpConnection *conn) : tap(_tap), conn(conn) {}
+};
NetconEthernetTap::NetconEthernetTap(
const char *homePath,