Updated zts_start* API naming convention

This commit is contained in:
Joseph Henry
2017-10-12 12:07:33 -07:00
parent b78662dd9b
commit 9473b6f74a
17 changed files with 262 additions and 49 deletions

View File

@@ -30,7 +30,7 @@ addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(ip);
addr.sin_port = hton(port);
zts_simple_start(path, nwid);
zts_startjoin(path, nwid);
int fd, err = 0;
if ((fd = zts_socket(AF_INET, SOCK_STREAM, 0)) < 0) {

View File

@@ -9,7 +9,7 @@ struct ZT {
}
static void simpleStart(const char *path, const char *nwid) {
zts_simple_start(path, nwid);
zts_startjoin(path, nwid);
}
static void stop() {

View File

@@ -11,7 +11,7 @@
int main()
{
printf("waiting for libzt to come online...\n");
zts_simple_start("dlldir", "17d709436c2c5367");
zts_startjoin("dlldir", "17d709436c2c5367");
printf("started. now performing a socket call\n");
int fd = zts_socket(AF_INET, SOCK_STREAM, 0);
printf("fd=%d\n", fd);

View File

@@ -376,7 +376,7 @@ int main(int argc, char **argv)
// Start ZeroTier Node
// Join Network which contains resources we need to proxy
DEBUG_INFO("waiting for libzt to come online");
zts_simple_start(path.c_str(), nwid.c_str());
zts_startjoin(path.c_str(), nwid.c_str());
ZeroTier::ZTProxy *proxy = new ZeroTier::ZTProxy(proxy_listen_port, nwid, path, internal_addr, internal_port, dns_nameserver);

View File

@@ -213,7 +213,7 @@ int zts_start(const char *path);
* @param nwid A 16-digit hexidecimal virtual network ID
* @return Returns 0 on success, -1 on failure
*/
int zts_simple_start(const char *path, const char *nwid);
int zts_startjoin(const char *path, const char *nwid);
/**
* @brief Stops libzt (ZeroTier core services, stack drivers, stack threads, etc)

View File

@@ -104,7 +104,7 @@ ZT_SOCKET_API int ZTCALL zts_start(const char *path);
* @param nwid A 16-digit hexidecimal network identifier (e.g. Earth: `8056c2e21c000001`)
* @return 0 if successful; or 1 if failed
*/
ZT_SOCKET_API int ZTCALL zts_simple_start(const char *path, const char *nwid);
ZT_SOCKET_API int ZTCALL zts_startjoin(const char *path, const char *nwid);
/**
* @brief Stops the ZeroTier core service and disconnects from all virtual networks
@@ -117,7 +117,7 @@ ZT_SOCKET_API void ZTCALL zts_stop();
/**
* @brief Joins a virtual network
*
* @usage Called after zts_start() or zts_simple_start()
* @usage Called after zts_start() or zts_startjoin()
* @param nwid the 16-digit hexidecimal network identifier
* @return
*/

View File

@@ -163,7 +163,9 @@ ZeroTier::VirtualTap *getAnyTap()
return vtap;
}
int zts_get_device_id_from_file(const char *filepath, char *devID) {
int zts_get_device_id_from_file(const char *filepath, char *devID)
{
DEBUG_EXTRA();
std::string fname("identity.public");
std::string fpath(filepath);
if (ZeroTier::OSUtils::fileExists((fpath + ZT_PATH_SEPARATOR_S + fname).c_str(),false)) {
@@ -178,7 +180,7 @@ int zts_get_device_id_from_file(const char *filepath, char *devID) {
// Starts a ZeroTier service in the background
void *zts_start_service(void *thread_id)
{
DEBUG_INFO("homeDir=%s", ZeroTier::homeDir.c_str());
DEBUG_INFO("path=%s", ZeroTier::homeDir.c_str());
// Where network .conf files will be stored
ZeroTier::netDir = ZeroTier::homeDir + "/networks.d";
ZeroTier::zt1Service = (ZeroTier::OneService *)0;
@@ -250,6 +252,7 @@ void *zts_start_service(void *thread_id)
void disableTaps()
{
DEBUG_EXTRA();
ZeroTier::_vtaps_lock.lock();
for (size_t i=0; i<ZeroTier::vtaps.size(); i++) {
DEBUG_EXTRA("vt=%p", ZeroTier::vtaps[i]);
@@ -260,6 +263,7 @@ void disableTaps()
void zts_get_ipv4_address(const char *nwid, char *addrstr, const size_t addrlen)
{
DEBUG_EXTRA();
if (ZeroTier::zt1Service) {
uint64_t nwid_int = strtoull(nwid, NULL, 16);
ZeroTier::VirtualTap *tap = getTapByNWID(nwid_int);
@@ -282,6 +286,7 @@ void zts_get_ipv4_address(const char *nwid, char *addrstr, const size_t addrlen)
void zts_get_ipv6_address(const char *nwid, char *addrstr, size_t addrlen)
{
DEBUG_EXTRA();
if (ZeroTier::zt1Service) {
uint64_t nwid_int = strtoull(nwid, NULL, 16);
ZeroTier::VirtualTap *tap = getTapByNWID(nwid_int);
@@ -304,6 +309,7 @@ void zts_get_ipv6_address(const char *nwid, char *addrstr, size_t addrlen)
int zts_has_ipv4_address(const char *nwid)
{
DEBUG_EXTRA();
char ipv4_addr[INET_ADDRSTRLEN];
memset(ipv4_addr, 0, INET_ADDRSTRLEN);
zts_get_ipv4_address(nwid, ipv4_addr, INET_ADDRSTRLEN);
@@ -312,6 +318,7 @@ int zts_has_ipv4_address(const char *nwid)
int zts_has_ipv6_address(const char *nwid)
{
DEBUG_EXTRA();
char ipv6_addr[INET6_ADDRSTRLEN];
memset(ipv6_addr, 0, INET6_ADDRSTRLEN);
zts_get_ipv6_address(nwid, ipv6_addr, INET6_ADDRSTRLEN);
@@ -320,12 +327,14 @@ int zts_has_ipv6_address(const char *nwid)
int zts_has_address(const char *nwid)
{
DEBUG_EXTRA();
return zts_has_ipv4_address(nwid) || zts_has_ipv6_address(nwid);
}
void zts_get_6plane_addr(char *addr, const char *nwid, const char *devID)
{
DEBUG_EXTRA();
ZeroTier::InetAddress _6planeAddr = ZeroTier::InetAddress::makeIpv66plane(
ZeroTier::Utils::hexStrToU64(nwid),ZeroTier::Utils::hexStrToU64(devID));
char ipbuf[INET6_ADDRSTRLEN];
@@ -334,13 +343,16 @@ void zts_get_6plane_addr(char *addr, const char *nwid, const char *devID)
void zts_get_rfc4193_addr(char *addr, const char *nwid, const char *devID)
{
DEBUG_EXTRA();
ZeroTier::InetAddress _6planeAddr = ZeroTier::InetAddress::makeIpv6rfc4193(
ZeroTier::Utils::hexStrToU64(nwid),ZeroTier::Utils::hexStrToU64(devID));
char ipbuf[INET6_ADDRSTRLEN];
memcpy(addr, _6planeAddr.toIpString(ipbuf), 40);
}
void zts_join(const char * nwid) {
void zts_join(const char * nwid)
{
DEBUG_EXTRA();
if (ZeroTier::zt1Service) {
std::string confFile = ZeroTier::zt1Service->givenHomePath() + "/networks.d/" + nwid + ".conf";
if (ZeroTier::OSUtils::mkdir(ZeroTier::netDir) == false) {
@@ -361,7 +373,9 @@ void zts_join(const char * nwid) {
}
}
void zts_join_soft(const char * filepath, const char * nwid) {
void zts_join_soft(const char * filepath, const char * nwid)
{
DEBUG_EXTRA();
std::string net_dir = std::string(filepath) + "/networks.d/";
std::string confFile = net_dir + std::string(nwid) + ".conf";
if (ZeroTier::OSUtils::mkdir(net_dir) == false) {
@@ -376,23 +390,30 @@ void zts_join_soft(const char * filepath, const char * nwid) {
}
}
void zts_leave(const char * nwid) {
void zts_leave(const char * nwid)
{
DEBUG_EXTRA();
if (ZeroTier::zt1Service) {
ZeroTier::zt1Service->leave(nwid);
}
}
void zts_leave_soft(const char * filepath, const char * nwid) {
void zts_leave_soft(const char * filepath, const char * nwid)
{
DEBUG_EXTRA();
std::string net_dir = std::string(filepath) + "/networks.d/";
ZeroTier::OSUtils::rm((net_dir + nwid + ".conf").c_str());
}
int zts_running() {
int zts_running()
{
DEBUG_EXTRA();
return ZeroTier::zt1Service == NULL ? false : ZeroTier::zt1Service->isRunning();
}
int zts_start(const char *path)
{
DEBUG_EXTRA();
if (ZeroTier::zt1Service) {
return 0; // already initialized, ok
}
@@ -406,8 +427,9 @@ int zts_start(const char *path)
return pthread_create(&service_thread, NULL, zts_start_service, NULL);
}
int zts_simple_start(const char *path, const char *nwid)
int zts_startjoin(const char *path, const char *nwid)
{
DEBUG_EXTRA();
ZT_NodeStatus status;
int err = zts_start(path);
while (zts_running() == false || ZeroTier::zt1Service->getNode() == NULL) {
@@ -437,7 +459,9 @@ int zts_simple_start(const char *path, const char *nwid)
return err;
}
void zts_stop() {
void zts_stop()
{
DEBUG_EXTRA();
if (ZeroTier::zt1Service) {
ZeroTier::zt1Service->terminate();
disableTaps();
@@ -447,7 +471,9 @@ void zts_stop() {
#endif
}
void zts_get_homepath(char *homePath, size_t len) {
void zts_get_homepath(char *homePath, size_t len)
{
DEBUG_EXTRA();
if (ZeroTier::homeDir.length()) {
memset(homePath, 0, len);
size_t buf_len = len < ZeroTier::homeDir.length() ? len : ZeroTier::homeDir.length();
@@ -455,7 +481,9 @@ void zts_get_homepath(char *homePath, size_t len) {
}
}
int zts_get_device_id(char *devID) {
int zts_get_device_id(char *devID)
{
DEBUG_EXTRA();
if (ZeroTier::zt1Service) {
char id[ZTO_ID_LEN];
sprintf(id, "%lx",ZeroTier::zt1Service->getNode()->address());
@@ -476,7 +504,9 @@ int zts_get_device_id(char *devID) {
return -1;
}
unsigned long zts_get_peer_count() {
unsigned long zts_get_peer_count()
{
DEBUG_EXTRA();
if (ZeroTier::zt1Service) {
return ZeroTier::zt1Service->getNode()->peers()->peerCount;
}
@@ -485,7 +515,9 @@ unsigned long zts_get_peer_count() {
}
}
int zts_get_peer_address(char *peer, const char *devID) {
int zts_get_peer_address(char *peer, const char *devID)
{
DEBUG_EXTRA();
if (ZeroTier::zt1Service) {
ZT_PeerList *pl = ZeroTier::zt1Service->getNode()->peers();
// uint64_t addr;
@@ -501,12 +533,11 @@ int zts_get_peer_address(char *peer, const char *devID) {
void zts_allow_http_control(bool allowed)
{
DEBUG_EXTRA();
// TODO
}
#if defined(SDK_JNI)
namespace ZeroTier {

1
test/alice/README.md Normal file
View File

@@ -0,0 +1 @@
**alice's** identity files and keys go here

1
test/bob/README.md Normal file
View File

@@ -0,0 +1 @@
**bob's** identity files and keys go here

1
test/carol/README.md Normal file
View File

@@ -0,0 +1 @@
**carol's** identity files and keys go here

View File

@@ -0,0 +1,16 @@
v=7
nwid=e5cd7a9e1c0fd272
ts=15cd93097cf
ctmd=6ddd00
r=4c
id=611fc8b606
f=6
ml=20
t=0
n=OPNET
mtu=af0
C=\0\0\0\0\0\0\0\0\0\0\0\\<5C>0<EFBFBD><30>\0\0\0\0\0m<30>\0\0\0\0\0\0\0\0<01><>z<EFBFBD><0F>r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aȶ<06><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD>!<21><>²<><C2B2><EFBFBD><1B>u<EFBFBD>r<EFBFBD><72><EFBFBD>xD<><44><11>q<EFBFBD><71>I<EFBFBD><03><><EFBFBD><EFBFBD>Y^#<23><>5<EFBFBD><r$<24><>IlI<10>};t5<74>J<EFBFBD>ϕ<07>/M<><4D><EFBFBD>!<21>Y<EFBFBD>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>J܂<4A><DC82>A<EFBFBD><41>*1.<2E><><EFBFBD>x
COO=<3D><>z<EFBFBD><0F>r\0\0\\<5C>0<EFBFBD><30>\0\0\0\0\0\0\0\0\0\0\0\0<03><><EFBFBD>z<EFBFBD><0F>r<EFBFBD><72>aȶ\n 4\0\0\0\0\0\0\0\0\0\0\0\0\n 4\0\0\0\0\0\0\0\0\0\0\0\0aȶ<06><>z<EFBFBD>\0`<60>8<EFBFBD><1E>CzGF<47><46>.<2E><>(&<26> <09><>ۍQ<16>>,H<><48><EFBFBD>z<01><>Ѕ<EFBFBD><D085>I<11><>t<EFBFBD>, NFK <20>6<EFBFBD>VO<>W<EFBFBD><57><EFBFBD><EFBFBD>ד<EFBFBD>a<EFBFBD><13><><EFBFBD>6[z[B<><42>C<EFBFBD><43>F<EFBFBD>Xw<58><77>\0\0
RT=\n \0\0\0\0\0\0\0\0
I=<06><><EFBFBD>z<EFBFBD><0F>r<EFBFBD><72>aȶ\0X\n 4\0\n 4\0
R=<3D>\0<><06><02><>\0\0\0

View File

@@ -36,7 +36,7 @@ int main(int argc, char **argv)
// --- BEGIN
DEBUG_TEST("Waiting for libzt to come online...\n");
zts_simple_start(path.c_str(), nwid.c_str());
zts_startjoin(path.c_str(), nwid.c_str());
char device_id[11];
zts_get_device_id(device_id);
DEBUG_TEST("I am %s", device_id);

View File

@@ -44,7 +44,7 @@ int main(int argc , char *argv[])
// initialize library
printf("Starting libzt...\n");
zts_simple_start(argv[1], argv[2]);
zts_startjoin(argv[1], argv[2]);
char device_id[11];
zts_get_device_id(device_id);
fprintf(stderr, "Complete. I am %s\n", device_id);

View File

@@ -1759,7 +1759,84 @@ void tcp_perf_rx_echo_4(TCP_UNIT_TEST_SIG_4)
}
int ZT_control_semantics_test(bool *passed)
{
// TODO: Each discrete operation should be tested in random order among every other discrete operation for a sustained period
/*
std::vector<ZT_VirtualNetworkRoute> *zts_get_network_routes(char *nwid);
int zts_get_device_id_from_file(const char *filepath, char *devID);
void *zts_start_service(void *thread_id);
void disableTaps();
void zts_get_ipv4_address(const char *nwid, char *addrstr, const size_t addrlen);
void zts_get_ipv6_address(const char *nwid, char *addrstr, const size_t addrlen);
int zts_has_ipv4_address(const char *nwid);
int zts_has_ipv6_address(const char *nwid);
int zts_has_address(const char *nwid);
void zts_get_6plane_addr(char *addr, const char *nwid, const char *devID);
void zts_get_rfc4193_addr(char *addr, const char *nwid, const char *devID);
void zts_join(const char * nwid);
void zts_leave(const char * nwid);
int zts_running();
int zts_start(const char *path);
int zts_start(const char *path, const char *nwid);
void zts_stop();
void zts_get_homepath(char *homePath, size_t len);
int zts_get_device_id(char *devID);
unsigned long zts_get_peer_count();
int zts_get_peer_address(char *peer, const char *devID);
*/
int n_times = 5;
char *nwid = "17d709436c2c5367";
char *path = "fake_path";
/*
// Perform operations on ZeroTier before calling zts_start(). Doing this makes absolutely no sense but could happen
zts_stop();
zts_join(nwid);
zts_leave(nwid);
DEBUG_TEST("---\n");
sleep(1);
// Perform operations on ZeroTier immediately upon startup, try to catch it with its pants down
// Ideally, the service wrapper should perform necessary checks to prevent any sort of issue
zts_start(path);
zts_join(nwid);
zts_leave(nwid);
zts_stop();
DEBUG_TEST("---\n");
sleep(1);
*/
zts_start(path);
zts_join(nwid);
zts_leave(nwid);
zts_stop();
DEBUG_TEST("---\n");
sleep(1);
/*
// start the ZeroTier service many times
for (int i=0; i<n_times; i++) { zts_start(path); }
// join the same network many times
for (int i=0; i<n_times; i++) { zts_join(nwid); }
// leave the same network many times
for (int i=0; i<n_times; i++) { zts_leave(nwid); }
// stop the ZeroTier service many times
for (int i=0; i<n_times; i++) { zts_stop(); }
*/
DEBUG_TEST("---\n");
sleep(1);
sleep(30); // wait for any aftermath
*passed = true;
DEBUG_TEST("PASSED");
}
/****************************************************************************/
/* OBSCURE API CALL TESTS */
@@ -2620,12 +2697,13 @@ int main(int argc , char *argv[])
fprintf(stderr, "\tremote_echo_ipv4 = %s\n", remote_echo_ipv4.c_str());
#if defined(__SELFTEST__)
// set start time here since we need to wait for both libzt instances to be online
long int selftest_start_time = get_now_ts();
subtest_expected_duration = 5;
if (me != "dummy") { // used for testing ZT service wrapper API (before, during, and after coming online)
// set start time here since we need to wait for both libzt instances to be online
DEBUG_TEST("Waiting for libzt to come online...\n");
zts_simple_start(path.c_str(), nwid.c_str());
zts_startjoin(path.c_str(), nwid.c_str());
char device_id[ZTO_ID_LEN];
zts_get_device_id(device_id);
DEBUG_TEST("I am %s, %s", device_id, me.c_str());
@@ -2635,9 +2713,8 @@ int main(int argc , char *argv[])
if (mode == TEST_MODE_CLIENT) {
DEBUG_TEST("Ready. Contacting selftest program on first host.\n\n");
}
#endif // __SELFTEST__
// What follows is a long-form of zts_simple_start():
// What follows is a long-form of zts_start():
/*
zts_start(path.c_str());
printf("waiting for service to start...\n");
@@ -2649,6 +2726,8 @@ int main(int argc , char *argv[])
while (zts_has_address(nwid.c_str()) == false)
sleep(1);
*/
}
#endif // __SELFTEST__
for (int i=0; i<num_repeats; i++)
{
@@ -2693,6 +2772,12 @@ for (int i=0; i<num_repeats; i++)
obscure_api_test(&passed);
}
// Test things like zts_start(), zts_stop(), zts_join(), etc
if (true) {
ZT_control_semantics_test(&passed);
}
exit(0);
// Spam a SOCK_DGRAM socket from many threads
if (false) {
ipv = 4;

View File

@@ -33,7 +33,7 @@ int main(int argc, char **argv)
DEBUG_TEST("Waiting for libzt to come online...\n");
zts_simple_start(path.c_str(), nwid.c_str());
zts_startjoin(path.c_str(), nwid.c_str());
char device_id[11];
zts_get_device_id(device_id);
DEBUG_TEST("I am %s", device_id);

1
test/ted/README.md Normal file
View File

@@ -0,0 +1 @@
**ted's** identity files and keys go here

77
test/test.conf Normal file
View File

@@ -0,0 +1,77 @@
name dummy
mode none
nwid 17d709436c2c5367
test comprehensive
port 8000
path test/dummy
ipv4 -1.-1.-1.-1
ipv6 [::]
echo_ipv4 -1.-1.-1.-1
echo_ipv6 [::]
echo_port 7100
dns_ipv4 -1.-1.-1.-1
name alice
mode server
nwid 17d709436c2c5367
test comprehensive
port 8000
path test/alice
ipv4 172.30.30.10
ipv6 fd17:d709:436c:2c53:6799:93c4:0fe0:4bb8
echo_ipv4 172.30.30.1
echo_ipv6 fd17:d709:436c:2c53:6799:9322:30ce:418a
echo_port 7100
dns_ipv4 1.2.3.4
name bob
mode client
nwid 17d709436c2c5367
test comprehensive
port 8000
path test/bob
ipv4 172.30.30.20
ipv6 fd17:d709:436c:2c53:6799:93e1:b555:8c83
echo_ipv4 172.30.30.2
echo_ipv6 fd17:d709:436c:2c53:6799:93a1:42ef:0285
echo_port 7101
dns_ipv4 1.2.3.4
name carol
mode client
nwid 17d709436c2c5367
test comprehensive
port 8000
path test/carol
ipv4 172.30.30.31
ipv6 fd17:d709:436c:2c53:6799:9361:1fc8:b606
echo_ipv4 172.30.30.3
echo_ipv6 fd17:d709:436c:2c53:6799:936f:341a:b379
echo_port 7100
dns_ipv4 1.2.3.4
name ted
mode server
nwid 17d709436c2c5367
test comprehensive
port 8000
path test/ted
ipv4 172.30.30.11
ipv6 fd17:d709:436c:2c53:6799:93a5:634e:6b06
echo_ipv4 172.30.30.1
echo_ipv6 fd17:d709:436c:2c53:6799:9322:30ce:418a
echo_port 7101
dns_ipv4 1.2.3.4
name native
mode client
nwid 17d709436c2c5367
test comprehensive
port 8000
path none
ipv4 172.30.30.1
ipv6 fd17:d709:436c:2c53:6799:9360:0b4d:c3cf
echo_ipv4 none
echo_ipv6 none
echo_port none
dns_ipv4 1.2.3.4