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 292fcdda2c Improved callback logic. Simplified lwip driver. 7 years ago
examples Method signature fix for csharp in reference to ticket #32 - partial fix for bug 8 years ago
ext Improved callback logic. Simplified lwip driver. 7 years ago
include Improved callback logic. Simplified lwip driver. 7 years ago
packages Improvements to packaging scripts 8 years ago
src Improved callback logic. Simplified lwip driver. 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