Browse Source

Make that an arbitrary tag to identify persistent taps...

Adam Ierymenko 12 years ago
parent
commit
2536352e5d
4 changed files with 9 additions and 4 deletions
  1. 2 2
      node/EthernetTap.cpp
  2. 2 1
      node/EthernetTap.hpp
  3. 4 1
      node/Network.cpp
  4. 1 0
      node/Utils.hpp

+ 2 - 2
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) :

+ 2 - 1
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);

+ 4 - 1
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;

+ 1 - 0
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