From 2536352e5d166719acc87535ed17a805e7bd3c26 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 21 Aug 2013 08:13:48 -0400 Subject: Make that an arbitrary tag to identify persistent taps... --- node/EthernetTap.cpp | 4 ++-- node/EthernetTap.hpp | 3 ++- node/Network.cpp | 5 ++++- node/Utils.hpp | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) (limited to 'node') 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::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::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 -- cgit v1.2.3