@ -71,12 +71,12 @@
# include "node/CertificateOfMembership.hpp"
# include "node/EthernetTapFactory.hpp"
# include "node/RoutingTable.hpp"
# include "node/SocketManager.hpp"
# include "control/NodeControlClient.hpp"
# include "control/NodeControlService.hpp"
# include "testnet/TestEthernetTapFactory.hpp"
# include "testnet/TestRoutingTable.hpp"
# include "osnet/NativeSocketManager.hpp"
# ifdef __WINDOWS__
# include "osnet/WindowsEthernetTapFactory.hpp"
@ -568,8 +568,7 @@ static void printHelp(const char *cn,FILE *out)
fprintf ( out , " -v - Show version " ZT_EOL_S ) ;
fprintf ( out , " -p<port> - Port for UDP (default: 9993) " ZT_EOL_S ) ;
fprintf ( out , " -t<port> - Port for TCP (default: disabled) " ZT_EOL_S ) ;
fprintf ( out , " -T<path> - Override root topology, do not authenticate or update " ZT_EOL_S ) ;
fprintf ( out , " -u - Do not require root, use dummy tap device " ZT_EOL_S ) ;
//fprintf(out," -T<path> - Override root topology, do not authenticate or update"ZT_EOL_S);
# ifdef __UNIX_LIKE__
fprintf ( out , " -d - Fork and run as daemon (Unix-ish OSes) " ZT_EOL_S ) ;
# endif
@ -626,7 +625,6 @@ int main(int argc,char **argv)
unsigned int tcpPort = 0 ;
std : : string overrideRootTopology ;
bool userMode = false ;
# ifdef __UNIX_LIKE__
bool runAsDaemon = false ;
# endif
@ -671,9 +669,6 @@ int main(int argc,char **argv)
return 1 ;
}
break ;
case ' u ' :
userMode = true ;
break ;
case ' v ' :
printf ( " %s " ZT_EOL_S , Node : : versionString ( ) ) ;
return 0 ;
@ -750,7 +745,7 @@ int main(int argc,char **argv)
homeDir = ZT_DEFAULTS . defaultHomePath . c_str ( ) ;
# ifdef __UNIX_LIKE__
if ( ( ! userMode ) & & ( getuid ( ) ! = 0 ) ) {
if ( getuid ( ) ! = 0 ) {
fprintf ( stderr , " %s: must be run as root (uid 0) \n " , argv [ 0 ] ) ;
return 1 ;
}
@ -782,7 +777,7 @@ int main(int argc,char **argv)
# ifdef __WINDOWS__
if ( winRunFromCommandLine ) {
// Running in "interactive" mode (mostly for debugging)
if ( ( ! userMode ) & & ( IsCurrentUserLocalAdministrator ( ) ! = TRUE ) ) {
if ( IsCurrentUserLocalAdministrator ( ) ! = TRUE ) {
fprintf ( stderr , " %s: must be run as a local administrator. " ZT_EOL_S , argv [ 0 ] ) ;
return 1 ;
}
@ -806,6 +801,7 @@ int main(int argc,char **argv)
bool needsReset = false ;
EthernetTapFactory * tapFactory = ( EthernetTapFactory * ) 0 ;
RoutingTable * routingTable = ( RoutingTable * ) 0 ;
SocketManager * socketManager = ( SocketManager * ) 0 ;
NodeControlService * controlService = ( NodeControlService * ) 0 ;
try {
@ -814,15 +810,17 @@ int main(int argc,char **argv)
// succeed unless something is wrong with the filesystem.
std : : string authToken ( NodeControlClient : : getAuthToken ( ( std : : string ( homeDir ) + ZT_PATH_SEPARATOR_S + " authtoken.secret " ) . c_str ( ) , true ) ) ;
if ( userMode ) {
tapFactory = new TestEthernetTapFactory ( ) ;
routingTable = new TestRoutingTable ( ) ;
} else {
tapFactory = ZTCreatePlatformEthernetTapFactory ;
routingTable = ZTCreatePlatformRoutingTable ;
tapFactory = ZTCreatePlatformEthernetTapFactory ;
routingTable = ZTCreatePlatformRoutingTable ;
try {
socketManager = new NativeSocketManager ( udpPort , tcpPort ) ;
} catch ( . . . ) {
fprintf ( stderr , " %s: unable to bind to port: %u/UDP, %u/TCP (0 == disabled) " ZT_EOL_S , argv [ 0 ] , udpPort , tcpPort ) ;
throw ;
}
node = new Node ( homeDir , tapFactory , routingTable , udpPort , tcpPort , needsReset , ( overrideRootTopology . length ( ) > 0 ) ? overrideRootTopology . c_str ( ) : ( const char * ) 0 ) ;
node = new Node ( homeDir , tapFactory , routingTable , socketManager , needsReset , ( overrideRootTopology . length ( ) > 0 ) ? overrideRootTopology . c_str ( ) : ( const char * ) 0 ) ;
controlService = new NodeControlService ( node , authToken . c_str ( ) ) ;
switch ( node - > run ( ) ) {
@ -832,11 +830,11 @@ int main(int argc,char **argv)
if ( upgPath ) {
if ( ! ZeroTierOneService : : doStartUpgrade ( std : : string ( upgPath ) ) ) {
exitCode = 3 ;
fprintf ( stderr , " %s: abnormal termination: unable to execute update at %s (doStartUpgrade failed) \n " , argv [ 0 ] , ( upgPath ) ? upgPath : " (unknown path) " ) ;
fprintf ( stderr , " %s: abnormal termination: unable to execute update at %s (doStartUpgrade failed) " ZT_EOL_S , argv [ 0 ] , ( upgPath ) ? upgPath : " (unknown path) " ) ;
}
} else {
exitCode = 3 ;
fprintf ( stderr , " %s: abnormal termination: unable to execute update at %s (no upgrade path provided) \n " , argv [ 0 ] , ( upgPath ) ? upgPath : " (unknown path) " ) ;
fprintf ( stderr , " %s: abnormal termination: unable to execute update at %s (no upgrade path provided) " ZT_EOL_S , argv [ 0 ] , ( upgPath ) ? upgPath : " (unknown path) " ) ;
}
} break ;
# else // __UNIX_LIKE__
@ -854,14 +852,14 @@ int main(int argc,char **argv)
: : execl ( upgPath , upgPath , ( char * ) 0 ) ;
}
exitCode = 3 ;
fprintf ( stderr , " %s: abnormal termination: unable to execute update at %s \n " , argv [ 0 ] , ( upgPath ) ? upgPath : " (unknown path) " ) ;
fprintf ( stderr , " %s: abnormal termination: unable to execute update at %s " ZT_EOL_S , argv [ 0 ] , ( upgPath ) ? upgPath : " (unknown path) " ) ;
} break ;
# endif // __WINDOWS__ / __UNIX_LIKE__
case Node : : NODE_UNRECOVERABLE_ERROR : {
exitCode = 3 ;
const char * termReason = node - > terminationMessage ( ) ;
fprintf ( stderr , " %s: abnormal termination: %s \n " , argv [ 0 ] , ( termReason ) ? termReason : " (unknown reason) " ) ;
fprintf ( stderr , " %s: abnormal termination: %s " ZT_EOL_S , argv [ 0 ] , ( termReason ) ? termReason : " (unknown reason) " ) ;
} break ;
default :
@ -877,6 +875,7 @@ int main(int argc,char **argv)
delete controlService ;
delete node ; node = ( Node * ) 0 ;
delete socketManager ;
delete routingTable ;
delete tapFactory ;