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 dd916f0194 Added Threading and Error section to API.md, minor build script additions 7 years ago
examples Re-work of thread model 7 years ago
ext Added lwIP 2.1.2 errno patch 7 years ago
include Updated build script, minor shuffling of code to prevent naming conflicts 7 years ago
ports Added Threading and Error section to API.md, minor build script additions 7 years ago
src Decreased MTU to 1500, increased TCP_WND to 0xffff0, tweaked window scaling factor 7 years ago
test Re-work of thread model 7 years ago
.gitignore Trimmed down .gitignore 7 years ago
.gitmodules Added lwip, lwip-contrib, ZeroTierOne submodules to ext 8 years ago
API.md Added Threading and Error section to API.md, minor build script additions 7 years ago
CMakeLists.txt Build script improvements (merging, wrapping), added build-specific clean targets 7 years ago
LICENSE.GPL-3 Added license files for libzt and lwip 9 years ago
Makefile Added Threading and Error section to API.md, minor build script additions 7 years ago
README.md Re-work of thread model 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 <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.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 sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = inet_addr(remoteIp);
	addr.sin_port = htons(remotePort);

	zts_startjoin("path", 0xc7cd7c981b0f52a2); // config path, network ID

	if ((fd = zts_socket(AF_INET, 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