diff options
Diffstat (limited to 'osdep/WindowsEthernetTap.hpp')
| -rw-r--r-- | osdep/WindowsEthernetTap.hpp | 40 | 
1 files changed, 21 insertions, 19 deletions
| diff --git a/osdep/WindowsEthernetTap.hpp b/osdep/WindowsEthernetTap.hpp index 9c513a5d..67046763 100644 --- a/osdep/WindowsEthernetTap.hpp +++ b/osdep/WindowsEthernetTap.hpp @@ -37,42 +37,38 @@  #include <queue>  #include <stdexcept> -#include "EthernetTap.hpp" -  #include "../node/Constants.hpp"  #include "../node/Mutex.hpp" -#include "../node/Thread.hpp"  #include "../node/Array.hpp"  #include "../node/MulticastGroup.hpp" +#include "../osdep/Thread.hpp"  namespace ZeroTier { -class WindowsEthernetTap : public EthernetTap +class WindowsEthernetTap  {  public:  	WindowsEthernetTap( -		const char *pathToHelpers, +		const char *hp,  		const MAC &mac,  		unsigned int mtu,  		unsigned int metric,  		uint64_t nwid, -		const char *desiredDevice,  		const char *friendlyName, -		void (*handler)(void *,const MAC &,const MAC &,unsigned int,const Buffer<4096> &), +		void (*handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *,unsigned int),  		void *arg); -	virtual ~WindowsEthernetTap(); +	~WindowsEthernetTap(); -	virtual void setEnabled(bool en); -	virtual bool enabled() const; -	virtual bool addIP(const InetAddress &ip); -	virtual bool removeIP(const InetAddress &ip); -	virtual std::set<InetAddress> ips() const; -	virtual void put(const MAC &from,const MAC &to,unsigned int etherType,const void *data,unsigned int len); -	virtual std::string deviceName() const; -	virtual void setFriendlyName(const char *friendlyName); -	virtual bool updateMulticastGroups(std::set<MulticastGroup> &groups); -	virtual bool injectPacketFromHost(const MAC &from,const MAC &to,unsigned int etherType,const void *data,unsigned int len); +	void setEnabled(bool en); +	bool enabled() const; +	bool addIp(const InetAddress &ip); +	bool removeIp(const InetAddress &ip); +	std::vector<InetAddress> ips() const; +	void put(const MAC &from,const MAC &to,unsigned int etherType,const void *data,unsigned int len); +	std::string deviceName() const; +	void setFriendlyName(const char *friendlyName); +	void scanMulticastGroups(std::vector<MulticastGroup> &added,std::vector<MulticastGroup> &removed);  	inline const NET_LUID &luid() const { return _deviceLuid; }  	inline const GUID &guid() const { return _deviceGuid; } @@ -81,6 +77,9 @@ public:  	void threadMain()  		throw(); +	static void destroyAllPersistentTapDevices(const char *pathToHelpers); +	static void deletePersistentTapDevice(const char *pathToHelpers,const char *instanceId); +  private:  	bool _disableTapDevice();  	bool _enableTapDevice(); @@ -88,8 +87,9 @@ private:  	std::vector<std::string> _getRegistryIPv4Value(const char *regKey);  	void _setRegistryIPv4Value(const char *regKey,const std::vector<std::string> &value); -	void (*_handler)(void *,const MAC &,const MAC &,unsigned int,const Buffer<4096> &); +	void (*_handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *,unsigned int);  	void *_arg; +	MAC _mac;  	uint64_t _nwid;  	Thread _thread; @@ -101,6 +101,8 @@ private:  	std::string _netCfgInstanceId; // NetCfgInstanceId, a GUID  	std::string _deviceInstanceId; // DeviceInstanceID, another kind of "instance ID" +	std::vector<MulticastGroup> _multicastGroups; +  	std::queue< std::pair< Array<char,ZT_IF_MTU + 32>,unsigned int > > _injectPending;  	Mutex _injectPending_m; | 
