You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Joseph Henry d715ebd461 Bugfix for hang in VirtualTap after calling getRoutes() and attempting to leave(), bugfix for potential memory leak if packet was rejected from stack 7 years ago
examples Method signature fix for csharp in reference to ticket #32 - partial fix for bug 8 years ago
ext Upgraded lwIP stack to 2.1.2 7 years ago
include Bugfix for hang in VirtualTap after calling getRoutes() and attempting to leave(), bugfix for potential memory leak if packet was rejected from stack 7 years ago
packages Improvements to packaging scripts 8 years ago
src Bugfix for hang in VirtualTap after calling getRoutes() and attempting to leave(), bugfix for potential memory leak if packet was rejected from stack 7 years ago
test Updated lwip.patch for Linux compatibility, CMakeLists.txt, and fixed other minor compile-time warnings 8 years ago
.gitignore Added gradle files for Android project 8 years ago
.gitmodules Added lwip, lwip-contrib, ZeroTierOne submodules to ext 8 years ago
CMakeLists.txt Switch to MEM_LIBC_MALLOC usage in lwIP. Added event callbacks. Use of finer-grained locks in RX logic. CRCs disabled on inbound packets 7 years ago
Jenkinsfile Updated Jenkinsfile for cmake usage 8 years ago
LICENSE.GPL-3 Added license files for libzt and lwip 9 years ago
Makefile Switch to MEM_LIBC_MALLOC usage in lwIP. Added event callbacks. Use of finer-grained locks in RX logic. CRCs disabled on inbound packets 7 years ago
README.md Improved reliability and performance, better startup and shutdown semantics, HTTP control plane is now disabled by default 7 years ago

README.md

libzt

Library version of ZeroTier


libzt makes it easy to securely connect devices, servers, cloud VMs, containers, and apps everywhere and manage them at scale. We provide a socket-like API supporting SOCK_STREAM, SOCK_DGRAM, and SOCK_RAW. There's no need for system-wide virtual interfaces. This connection is exclusive to your app and fully encrypted via the Salsa20 cipher. For a more in-depth discussion on the technical side of ZeroTier, check out our Manual


irc

Platform Static Shared Package Example project/code Library build instructions
macOS libzt.a libzt.dylib see below
iOS libzt.a zt.framework examples/swift packages/iOS
Windows libzt.lib (x86), libzt.lib (x64) libzt.dll (x86), libzt.dll (x64) examples/cpp/ExampleWindowsCppApp, examples/csharp/ExampleWindowsCSharpApp see below
Android libzt.aar examples/android/ExampleAndroidApp packages/android
Linux see below see below see below

C API: libzt.h Java JNI API: ZeroTier.java


C++ Example

#include <arpa/inet.h>

#include "libzt.h"

int main() 
{
	char *str = "welcome to the machine";
	char *remoteIp = "10.8.8.42";
	int remotePort = 8080;
	int fd, err = 0;
	struct zts_sockaddr_in addr;
	addr.sin_family = ZTS_AF_INET;
	addr.sin_addr.s_addr = inet_addr(remoteIp);
	addr.sin_port = htons(remotePort);

	zts_startjoin("path", 0xc7cd7c981b0f52a2); // config path, network ID
	printf("nodeId=%llx\n", zts_get_node_id());

	if ((fd = zts_socket(ZTS_AF_INET, ZTS_SOCK_STREAM, 0)) < 0) {
		printf("error creating socket\n");
	}
	if ((err = zts_connect(fd, (const struct sockaddr *)&addr, sizeof(addr))) < 0) {
		printf("error connecting to remote host\n");
	}
	if ((err = zts_write(fd, str, strlen(str))) < 0) {
		printf("error writing to socket\n");
	}

	zts_close(fd);
	zts_stop();
	return 0;
}

For an example using only the Virtual Layer 2, see examples/layer2


Build

We recommend using CMake and clang.

git submodule update --init && make patch
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release

or possibly:

cmake -H. -Bbuild --config Release

Then

cmake --build build 

Builds are placed in bin\lib


Commercial License

If you want a commercial license to use libzt in your product contact us directly via contact@zerotier.com