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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 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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 literal 0 HcmV?d00001 diff --git a/node/Defaults.cpp b/node/Defaults.cpp index 3e936b2d2..293fd465b 100644 --- a/node/Defaults.cpp +++ b/node/Defaults.cpp @@ -25,8 +25,18 @@ * LLC. Start here: http://www.zerotier.com/ */ -#include "Defaults.hpp" +#include +#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)\