Browse Source

Updated zts_start* API naming convention

pull/1/head
Joseph Henry 9 years ago
parent
commit
9473b6f74a
  1. 2
      README.md
  2. 2
      examples/node/binding.cc
  3. 2
      examples/visual_studio_cpp/libztHelloWorld/libztHelloWorld/libztHelloWorld.cpp
  4. 2
      examples/ztproxy/ztproxy.cpp
  5. 2
      include/ZT1Service.h
  6. 4
      include/libzt.h
  7. 61
      src/ZT1Service.cpp
  8. 1
      test/alice/README.md
  9. 1
      test/bob/README.md
  10. 1
      test/carol/README.md
  11. 16
      test/carol/e5cd7a9e1c0fd272.conf
  12. 2
      test/client.cpp
  13. 2
      test/layer2.cpp
  14. 133
      test/selftest.cpp
  15. 2
      test/server.cpp
  16. 1
      test/ted/README.md
  17. 77
      test/test.conf

2
README.md

@ -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) {

2
examples/node/binding.cc

@ -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() {

2
examples/visual_studio_cpp/libztHelloWorld/libztHelloWorld/libztHelloWorld.cpp

@ -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);

2
examples/ztproxy/ztproxy.cpp

@ -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);

2
include/ZT1Service.h

@ -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)

4
include/libzt.h

@ -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
*/

61
src/ZT1Service.cpp

@ -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

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

1
test/bob/README.md

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

1
test/carol/README.md

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

16
test/carol/e5cd7a9e1c0fd272.conf

@ -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\\Ù0—Ï\0\0\0\0\0mÝ\0\0\0\0\0\0\0\0åÍzžÒr\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aȶÿÿÿÿÿÿÿÿåÍzž!›¤²´³ö¸u›rÕê¬xD˜Ë²q½ºI˾•ØûY^#…‡5ì<r$íÁIlIé};t5ûJŠÏ•Ï/Mæ“Ì!³YötŸ´­¿ÕJÜ‚<EFBFBD><EFBFBD>Aƒî*1.­æÒx
COO=åÍzžÒr\0\0\\Ù0—Ï\0\0\0\0\0\0\0\0\0\0\0\0ýåÍzžÒr™“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ȶåÍzž\0`¢8<EFBFBD>ÛCzGF–ú.þæ(&œ ˆùÛ<EFBFBD>QÔ>,H†¼ºz‘ÔÐ…ø‡I½Òt°, NFK È6ÍVO WåÐû¼×“¹aï…ä 6[z[Bà‡C<EFBFBD>·F£Xw¥õ\0\0
RT=\n \0\0\0\0\0\0\0\0
I=ýåÍzžÒr™“aȶ\0X\n 4\0\n 4\0
R=¥\0¥¥†Ý\0\0\0

2
test/client.cpp

@ -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);

2
test/layer2.cpp

@ -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);

133
test/selftest.cpp

@ -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,36 +2697,38 @@ 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;
DEBUG_TEST("Waiting for libzt to come online...\n");
zts_simple_start(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());
if (mode == TEST_MODE_SERVER) {
DEBUG_TEST("Ready. You should start selftest program on second host now...\n\n");
}
if (mode == TEST_MODE_CLIENT) {
DEBUG_TEST("Ready. Contacting selftest program on first host.\n\n");
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_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());
if (mode == TEST_MODE_SERVER) {
DEBUG_TEST("Ready. You should start selftest program on second host now...\n\n");
}
if (mode == TEST_MODE_CLIENT) {
DEBUG_TEST("Ready. Contacting selftest program on first host.\n\n");
}
// What follows is a long-form of zts_start():
/*
zts_start(path.c_str());
printf("waiting for service to start...\n");
while (zts_running() == false)
sleep(1);
printf("joining network...\n");
zts_join(nwid.c_str());
printf("waiting for address assignment...\n");
while (zts_has_address(nwid.c_str()) == false)
sleep(1);
*/
}
#endif // __SELFTEST__
// What follows is a long-form of zts_simple_start():
/*
zts_start(path.c_str());
printf("waiting for service to start...\n");
while (zts_running() == false)
sleep(1);
printf("joining network...\n");
zts_join(nwid.c_str());
printf("waiting for address assignment...\n");
while (zts_has_address(nwid.c_str()) == false)
sleep(1);
*/
for (int i=0; i<num_repeats; i++)
{
DEBUG_TEST("\n\n\n --- COMPREHENSIVE TEST ITERATION: %d out of %d ---\n\n\n", i, num_repeats);
@ -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;

2
test/server.cpp

@ -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

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

77
test/test.conf

@ -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
Loading…
Cancel
Save