summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2013-08-21 08:13:48 -0400
committerAdam Ierymenko <adam.ierymenko@gmail.com>2013-08-21 08:13:48 -0400
commit2536352e5d166719acc87535ed17a805e7bd3c26 (patch)
treeeb676d506f419c410e0dda711273f5dcfcc6bb79 /node
parentdbb509a30234059fb6de10cfcd9ba1aade6a0138 (diff)
downloadinfinitytier-2536352e5d166719acc87535ed17a805e7bd3c26.tar.gz
infinitytier-2536352e5d166719acc87535ed17a805e7bd3c26.zip
Make that an arbitrary tag to identify persistent taps...
Diffstat (limited to 'node')
-rw-r--r--node/EthernetTap.cpp4
-rw-r--r--node/EthernetTap.hpp3
-rw-r--r--node/Network.cpp5
-rw-r--r--node/Utils.hpp1
4 files changed, 9 insertions, 4 deletions
diff --git a/node/EthernetTap.cpp b/node/EthernetTap.cpp
index 88096470..1cc15c14 100644
--- a/node/EthernetTap.cpp
+++ b/node/EthernetTap.cpp
@@ -146,9 +146,9 @@ static Mutex __tapCreateLock;
#ifdef __LINUX__
EthernetTap::EthernetTap(
const RuntimeEnvironment *renv,
+ const char *tag,
const MAC &mac,
unsigned int mtu,
- const char *desc,
void (*handler)(void *,const MAC &,const MAC &,unsigned int,const Buffer<4096> &),
void *arg)
throw(std::runtime_error) :
@@ -247,9 +247,9 @@ EthernetTap::EthernetTap(
#ifdef __APPLE__
EthernetTap::EthernetTap(
const RuntimeEnvironment *renv,
+ const char *tag,
const MAC &mac,
unsigned int mtu,
- const char *desc,
void (*handler)(void *,const MAC &,const MAC &,unsigned int,const Buffer<4096> &),
void *arg)
throw(std::runtime_error) :
diff --git a/node/EthernetTap.hpp b/node/EthernetTap.hpp
index 2083e9e9..29cb1d88 100644
--- a/node/EthernetTap.hpp
+++ b/node/EthernetTap.hpp
@@ -60,6 +60,7 @@ public:
* Handler arguments: arg,from,to,etherType,data
*
* @param renv Runtime environment
+ * @param tag A tag used to identify persistent taps at the OS layer (e.g. nwid in hex)
* @param mac MAC address of device
* @param mtu MTU of device
* @param desc If non-NULL, a description (not used on all OSes)
@@ -69,9 +70,9 @@ public:
*/
EthernetTap(
const RuntimeEnvironment *renv,
+ const char *tag,
const MAC &mac,
unsigned int mtu,
- const char *desc,
void (*handler)(void *,const MAC &,const MAC &,unsigned int,const Buffer<4096> &),
void *arg)
throw(std::runtime_error);
diff --git a/node/Network.cpp b/node/Network.cpp
index d974c5d2..496e58fe 100644
--- a/node/Network.cpp
+++ b/node/Network.cpp
@@ -139,6 +139,9 @@ Network::~Network()
SharedPtr<Network> Network::newInstance(const RuntimeEnvironment *renv,uint64_t id)
throw(std::runtime_error)
{
+ char tag[32];
+ sprintf(tag,"%.16llx",(unsigned long long)id);
+
// We construct Network via a static method to ensure that it is immediately
// wrapped in a SharedPtr<>. Otherwise if there is traffic on the Ethernet
// tap device, a SharedPtr<> wrap can occur in the Ethernet frame handler
@@ -150,7 +153,7 @@ SharedPtr<Network> Network::newInstance(const RuntimeEnvironment *renv,uint64_t
nw->_rlLimit.bytesPerSecond = ZT_MULTICAST_DEFAULT_BYTES_PER_SECOND;
nw->_rlLimit.maxBalance = ZT_MULTICAST_DEFAULT_RATE_MAX_BALANCE;
nw->_rlLimit.minBalance = ZT_MULTICAST_DEFAULT_RATE_MIN_BALANCE;
- nw->_tap = new EthernetTap(renv,renv->identity.address().toMAC(),ZT_IF_MTU,(const char *)0,&_CBhandleTapData,nw.ptr());
+ nw->_tap = new EthernetTap(renv,tag,renv->identity.address().toMAC(),ZT_IF_MTU,&_CBhandleTapData,nw.ptr());
nw->_id = id;
nw->_lastConfigUpdate = 0;
nw->_destroyOnDelete = false;
diff --git a/node/Utils.hpp b/node/Utils.hpp
index 76448294..ff88124b 100644
--- a/node/Utils.hpp
+++ b/node/Utils.hpp
@@ -118,6 +118,7 @@ public:
* @return Number of characters actually written
*/
static unsigned int unhex(const char *hex,void *buf,unsigned int len);
+ static inline unsigned int unhex(const std::string &hex,void *buf,unsigned int len) { return unhex(hex.c_str(),buf,len); }
/**
* @param buf Buffer to fill