From e0bdc021395fed6a6931d973b1f780c3a0c7de83 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Sat, 24 Aug 2013 17:10:34 -0400 Subject: [PATCH] Docs, Node picks a default home folder if created with NULL as its home path, and add binary tap drivers (self-signed for now). --- AUTHORS.txt | 3 + ext/bin/tap-windows/x64/ztTap100.inf | 85 +++++++++++++++++++++++++++ ext/bin/tap-windows/x64/ztTap100.sys | Bin 0 -> 29928 bytes ext/bin/tap-windows/x86/ztTap100.inf | 85 +++++++++++++++++++++++++++ ext/bin/tap-windows/x86/ztTap100.sys | Bin 0 -> 32464 bytes node/Defaults.cpp | 36 +++++++++++- node/Defaults.hpp | 5 ++ node/Node.cpp | 5 +- vsprojects/SelfTest/SelfTest.vcxproj | 2 + 9 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 ext/bin/tap-windows/x64/ztTap100.inf create mode 100644 ext/bin/tap-windows/x64/ztTap100.sys create mode 100644 ext/bin/tap-windows/x86/ztTap100.inf create mode 100644 ext/bin/tap-windows/x86/ztTap100.sys diff --git a/AUTHORS.txt b/AUTHORS.txt index f304f6af2..9baaaab8e 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -22,5 +22,8 @@ ZeroTier One includes or links with the following third party software: * TunTapOSX by Mattias Nissler (with tiny modifications) (BSD license) http://tuntaposx.sourceforge.net + * tap-windows by the OpenVPN project (forked for ZT1) (GPL) + https://github.com/OpenVPN/tap-windows + * Salsa20 stream cipher by D. J. Bernstein (public domain) http://cr.yp.to/snuffle.html diff --git a/ext/bin/tap-windows/x64/ztTap100.inf b/ext/bin/tap-windows/x64/ztTap100.inf new file mode 100644 index 000000000..452d36249 --- /dev/null +++ b/ext/bin/tap-windows/x64/ztTap100.inf @@ -0,0 +1,85 @@ +[Version] +Signature="$WINDOWS NT$" +Class=Net +ClassGuid={4d36e972-e325-11ce-bfc1-08002be10318} +Provider=%Provider% +CatalogFile=ztTap100.cat +DriverVer=08/24/2013,16.12.30.608 + + +[Strings] +DeviceDescription = "ZeroTier One Ethernet Tap" +Provider = "ZeroTier Networks" + +[Manufacturer] +%Provider%=ztTap100,NTamd64 + +[ztTap100] +%DeviceDescription%=ztTap100.ndi,ztTap100 + +[ztTap100.NTamd64] +%DeviceDescription%=ztTap100.ndi,ztTap100 + +[ztTap100.ndi] +CopyFiles = ztTap100.driver,ztTap100.files +AddReg = ztTap100.reg +AddReg = ztTap100.params.reg +Characteristics = 0x81 + +[ztTap100.ndi.Services] +AddService = ztTap100, 2, ztTap100.service + +[ztTap100.reg] +HKR, Ndi, Service, 0, "ztTap100" +HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" +HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" +HKR, , Manufacturer, 0, "%Provider%" +HKR, , ProductName, 0, "%DeviceDescription%" + +[ztTap100.params.reg] +HKR, Ndi\params\MTU, ParamDesc, 0, "MTU" +HKR, Ndi\params\MTU, Type, 0, "int" +HKR, Ndi\params\MTU, Default, 0, "2800" +HKR, Ndi\params\MTU, Optional, 0, "0" +HKR, Ndi\params\MTU, Min, 0, "100" +HKR, Ndi\params\MTU, Max, 0, "2800" +HKR, Ndi\params\MTU, Step, 0, "1" +HKR, Ndi\params\MediaStatus, ParamDesc, 0, "Media Status" +HKR, Ndi\params\MediaStatus, Type, 0, "enum" +HKR, Ndi\params\MediaStatus, Default, 0, "0" +HKR, Ndi\params\MediaStatus, Optional, 0, "0" +HKR, Ndi\params\MediaStatus\enum, "0", 0, "Application Controlled" +HKR, Ndi\params\MediaStatus\enum, "1", 0, "Always Connected" +HKR, Ndi\params\MAC, ParamDesc, 0, "MAC Address" +HKR, Ndi\params\MAC, Type, 0, "edit" +HKR, Ndi\params\MAC, Optional, 0, "1" +HKR, Ndi\params\AllowNonAdmin, ParamDesc, 0, "Non-Admin Access" +HKR, Ndi\params\AllowNonAdmin, Type, 0, "enum" +HKR, Ndi\params\AllowNonAdmin, Default, 0, "0" +HKR, Ndi\params\AllowNonAdmin, Optional, 0, "0" +HKR, Ndi\params\AllowNonAdmin\enum, "0", 0, "Not Allowed" +HKR, Ndi\params\AllowNonAdmin\enum, "1", 0, "Allowed" + +[ztTap100.service] +DisplayName = %DeviceDescription% +ServiceType = 1 +StartType = 3 +ErrorControl = 1 +LoadOrderGroup = NDIS +ServiceBinary = %12%\ztTap100.sys + +[SourceDisksNames] +1 = %DeviceDescription%, ztTap100.sys + +[SourceDisksFiles] +ztTap100.sys = 1 + +[DestinationDirs] +ztTap100.files = 11 +ztTap100.driver = 12 + +[ztTap100.files] +; + +[ztTap100.driver] +ztTap100.sys,,,6 ; COPYFLG_NOSKIP | COPYFLG_NOVERSIONCHECK diff --git a/ext/bin/tap-windows/x64/ztTap100.sys b/ext/bin/tap-windows/x64/ztTap100.sys new file mode 100644 index 0000000000000000000000000000000000000000..904c0e64d9c2c0b872915e5c769e15ca98963449 GIT binary patch literal 29928 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 Y&9yup4I<|kJQ91JEVPUS0Is0q?*IS* literal 0 HcmV?d00001 diff --git a/ext/bin/tap-windows/x86/ztTap100.inf b/ext/bin/tap-windows/x86/ztTap100.inf new file mode 100644 index 000000000..b67eb1561 --- /dev/null +++ b/ext/bin/tap-windows/x86/ztTap100.inf @@ -0,0 +1,85 @@ +[Version] +Signature="$WINDOWS NT$" +Class=Net +ClassGuid={4d36e972-e325-11ce-bfc1-08002be10318} +Provider=%Provider% +CatalogFile=ztTap100.cat +DriverVer=08/24/2013,16.12.37.14 + + +[Strings] +DeviceDescription = "ZeroTier One Ethernet Tap" +Provider = "ZeroTier Networks" + +[Manufacturer] +%Provider%=ztTap100,NTamd64 + +[ztTap100] +%DeviceDescription%=ztTap100.ndi,ztTap100 + +[ztTap100.NTamd64] +%DeviceDescription%=ztTap100.ndi,ztTap100 + +[ztTap100.ndi] +CopyFiles = ztTap100.driver,ztTap100.files +AddReg = ztTap100.reg +AddReg = ztTap100.params.reg +Characteristics = 0x81 + +[ztTap100.ndi.Services] +AddService = ztTap100, 2, ztTap100.service + +[ztTap100.reg] +HKR, Ndi, Service, 0, "ztTap100" +HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" +HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" +HKR, , Manufacturer, 0, "%Provider%" +HKR, , ProductName, 0, "%DeviceDescription%" + +[ztTap100.params.reg] +HKR, Ndi\params\MTU, ParamDesc, 0, "MTU" +HKR, Ndi\params\MTU, Type, 0, "int" +HKR, Ndi\params\MTU, Default, 0, "2800" +HKR, Ndi\params\MTU, Optional, 0, "0" +HKR, Ndi\params\MTU, Min, 0, "100" +HKR, Ndi\params\MTU, Max, 0, "2800" +HKR, Ndi\params\MTU, Step, 0, "1" +HKR, Ndi\params\MediaStatus, ParamDesc, 0, "Media Status" +HKR, Ndi\params\MediaStatus, Type, 0, "enum" +HKR, Ndi\params\MediaStatus, Default, 0, "0" +HKR, Ndi\params\MediaStatus, Optional, 0, "0" +HKR, Ndi\params\MediaStatus\enum, "0", 0, "Application Controlled" +HKR, Ndi\params\MediaStatus\enum, "1", 0, "Always Connected" +HKR, Ndi\params\MAC, ParamDesc, 0, "MAC Address" +HKR, Ndi\params\MAC, Type, 0, "edit" +HKR, Ndi\params\MAC, Optional, 0, "1" +HKR, Ndi\params\AllowNonAdmin, ParamDesc, 0, "Non-Admin Access" +HKR, Ndi\params\AllowNonAdmin, Type, 0, "enum" +HKR, Ndi\params\AllowNonAdmin, Default, 0, "0" +HKR, Ndi\params\AllowNonAdmin, Optional, 0, "0" +HKR, Ndi\params\AllowNonAdmin\enum, "0", 0, "Not Allowed" +HKR, Ndi\params\AllowNonAdmin\enum, "1", 0, "Allowed" + +[ztTap100.service] +DisplayName = %DeviceDescription% +ServiceType = 1 +StartType = 3 +ErrorControl = 1 +LoadOrderGroup = NDIS +ServiceBinary = %12%\ztTap100.sys + +[SourceDisksNames] +1 = %DeviceDescription%, ztTap100.sys + +[SourceDisksFiles] +ztTap100.sys = 1 + +[DestinationDirs] +ztTap100.files = 11 +ztTap100.driver = 12 + +[ztTap100.files] +; + +[ztTap100.driver] +ztTap100.sys,,,6 ; COPYFLG_NOSKIP | COPYFLG_NOVERSIONCHECK diff --git a/ext/bin/tap-windows/x86/ztTap100.sys b/ext/bin/tap-windows/x86/ztTap100.sys new file mode 100644 index 0000000000000000000000000000000000000000..297f468088a8c648295e00d84651024fb8cc5635 GIT binary patch literal 32464 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 +#include +#include + #include "Constants.hpp" +#include "Defaults.hpp" +#include "Utils.hpp" + +#ifdef __WINDOWS__ +#include +#include +#endif namespace ZeroTier { @@ -66,8 +76,32 @@ static inline std::map< Identity,std::vector > _mkSupernodeMap() return sn; } +static inline std::string _mkDefaultHomePath() +{ +#ifdef __UNIX_LIKE__ +#ifdef __APPLE__ + return std::string("/Library/Application\ Support/ZeroTier/One"); +#else + return std::string("/var/lib/zerotier-one"); +#endif +#else +#ifdef __WINDOWS__ + OSVERSIONINFO vi; + memset (&vi,0,sizeof(vi)); + vi.dwOSVersionInfoSize = sizeof(vi); + GetVersionEx(&vi); + if (vi.dwMajorVersion < 6) + return std::string("C:\\Documents and Settings\\All Users\\Application Data\\ZeroTier\\One"); + return std::string("C:\\ProgramData\\ZeroTier\\One"); +#else + // unknown platform +#endif +#endif +} + Defaults::Defaults() throw(std::runtime_error) : + defaultHomePath(_mkDefaultHomePath()), supernodes(_mkSupernodeMap()) { } diff --git a/node/Defaults.hpp b/node/Defaults.hpp index 3a3508655..fe79d5255 100644 --- a/node/Defaults.hpp +++ b/node/Defaults.hpp @@ -51,6 +51,11 @@ public: throw(std::runtime_error); ~Defaults() {} + /** + * Default home path for this platform + */ + const std::string defaultHomePath; + /** * Supernodes on the ZeroTier network */ diff --git a/node/Node.cpp b/node/Node.cpp index bb68cdaf3..1884f9ce4 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -258,8 +258,9 @@ Node::Node(const char *hp) { _NodeImpl *impl = (_NodeImpl *)_impl; - impl->renv.homePath = hp; - + if (hp) + impl->renv.homePath = hp; + else impl->renv.homePath = ZT_DEFAULTS.defaultHomePath; impl->reasonForTermination = Node::NODE_RUNNING; impl->started = false; impl->running = false; diff --git a/vsprojects/SelfTest/SelfTest.vcxproj b/vsprojects/SelfTest/SelfTest.vcxproj index f974b9266..5189da462 100644 --- a/vsprojects/SelfTest/SelfTest.vcxproj +++ b/vsprojects/SelfTest/SelfTest.vcxproj @@ -41,9 +41,11 @@ true + $(SolutionDir)\Build\$(Configuration)\ false + $(SolutionDir)\Build\$(Configuration)\