diff --git a/make-linux.mk b/make-linux.mk index 1ffe459..0b64c59 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -78,14 +78,21 @@ android_jni_lib: mv -f $(INT)/android/android_jni_lib/java/libs/* $(BUILD)/android_jni_lib cp -R $(BUILD)/android_jni_lib/* $(INT)/android/example_app/app/src/main/jniLibs +lwip: + make -f make-liblwip.mk $(LWIP_FLAGS) + +# Builds libztlinux.so (full bundle) +linux_shared_lib: + +linux_intercept: + # Use gcc not clang to build standalone intercept library since gcc is typically used for libc and we want to ensure maximal ABI compatibility + cd src ; gcc $(DEFS) -O2 -Wall -std=c99 -fPIC -DVERBOSE -D_GNU_SOURCE -DSDK_INTERCEPT -I. -I../$(ZT1)/node -nostdlib -shared -o ../$(BUILD)/libztintercept.so SDK_Sockets.c SDK_Intercept.c SDK_Debug.c SDK_RPC.c -ldl + # Build a dynamically-loadable library -linux_shared_lib: $(OBJS) - mkdir -p $(BUILD)/linux_shared_lib +linux_service_and_intercept: lwip linux_intercept $(OBJS) + mkdir -p $(BUILD)/linux_intercept $(CXX) $(CXXFLAGS) $(LDFLAGS) $(DEFS) -DSDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -I$(ZT1)/osdep -I$(ZT1)/node -Isrc -o $(BUILD)/zerotier-sdk-service $(OBJS) $(ZT1)/service/OneService.cpp src/SDK_EthernetTap.cpp src/SDK_Proxy.cpp $(ZT1)/one.cpp -x c src/SDK_RPC.c $(LDLIBS) -ldl # Build liblwip.so which must be placed in ZT home for zerotier-netcon-service to work - make -f make-liblwip.mk $(LWIP_FLAGS) - # Use gcc not clang to build standalone intercept library since gcc is typically used for libc and we want to ensure maximal ABI compatibility - cd src ; gcc $(DEFS) -O2 -Wall -std=c99 -fPIC -DVERBOSE -D_GNU_SOURCE -DSDK_INTERCEPT -I. -I../$(ZT1)/node -nostdlib -shared -o ../$(BUILD)/linux_shared_lib/libztintercept.so SDK_Sockets.c SDK_Intercept.c SDK_Debug.c SDK_RPC.c -ldl ln -sf zerotier-sdk-service $(BUILD)/zerotier-cli ln -sf zerotier-sdk-service $(BUILD)/zerotier-idtool @@ -144,10 +151,10 @@ check: # Tests TEST_OBJDIR := $(BUILD)/tests -TEST_SOURCES := $(wildcard tests/*.c) +TEST_SOURCES := $(wildcard tests/api_test/*.c) TEST_TARGETS := $(addprefix $(BUILD)/tests/$(OSTYPE).,$(notdir $(TEST_SOURCES:.c=.out))) -$(BUILD)/tests/$(OSTYPE).%.out: tests/%.c +$(BUILD)/tests/$(OSTYPE).%.out: tests/api_test/%.c -$(CC) $(CC_FLAGS) -o $@ $< $(TEST_OBJDIR): @@ -156,12 +163,31 @@ $(TEST_OBJDIR): tests: $(TEST_OBJDIR) $(TEST_TARGETS) mkdir -p $(BUILD)/tests; -clean: +tests: $(TEST_OBJDIR) $(TEST_TARGETS) linux_service_and_intercept + mkdir -p $(BUILD)/tests; + mkdir -p build/tests/zerotier + cp tests/api_test/test.sh $(BUILD)/tests/test.sh + cp tests/api_test/servers.sh $(BUILD)/tests/servers.sh + cp tests/api_test/clients.sh $(BUILD)/tests/clients.sh + cp tests/cleanup.sh $(BUILD)/tests/cleanup.sh + cp $(BUILD)/lwip/liblwip.so $(BUILD)/tests/zerotier/liblwip.so + +clean_android: + # android JNI lib project + test -s /usr/bin/javac || { echo "Javac not found"; exit 1; } + -cd $(INT)/android/android_jni_lib/proj; ./gradlew clean + -rm -rf $(INT)/android/android_jni_lib/proj/build + # example android app project + -cd $(INT)/android/example_app; ./gradlew clean + +clean_basic: -rm -rf $(BUILD)/* -rm -rf $(INT)/Unity3D/Assets/Plugins/* -rm -rf zerotier-cli zerotier-idtool -find . -type f \( -name 'zerotier-one' -o -name 'zerotier-sdk-service' \) -delete - -find . -type f \( -name '*.o' -o -name '*.so' -o -name '*.o.d' -o -name '*.out' -o -name '*.log' \) -delete - # Remove junk generated by Android builds - -cd $(INT)/android/android_jni_lib/proj; ./gradlew clean - -rm -rf $(INT)/android/android_jni_lib/proj/build + -find . -type f \( -name '*.o' -o -name '*.so' -o -name '*.o.d' -o -name '*.out' -o -name '*.log' -o -name '*.dSYM' \) -delete + +clean: clean_basic clean_android + +clean_for_production: + -find . -type f \( -name '*.identity'\) -delete diff --git a/src/SDK_Sockets.c b/src/SDK_Sockets.c index 387ff7c..52c7117 100644 --- a/src/SDK_Sockets.c +++ b/src/SDK_Sockets.c @@ -113,7 +113,7 @@ int (*realclose)(CLOSE_SIG); // This is used when you're dynamically-linking our library into your application at runtime if (!api_netpath) { api_netpath = getenv("ZT_NC_NETWORK"); - dwr(MSG_DEBUG, "$ZT_NC_NETWORK = %s\n", api_netpath); + dwr(MSG_DEBUG, "$ZT_NC_NETWORK(len=%d) = %s\n", strlen(api_netpath), api_netpath); } #endif dwr(MSG_DEBUG_EXTRA, "zt_init_rpc(): api_netpath = %s\n", api_netpath); @@ -567,6 +567,7 @@ int (*realclose)(CLOSE_SIG); rpc_st.sockfd = sockfd; #if defined(__linux__) #if !defined(__ANDROID__) + // TODO: Candidate for removal rpc_st.__tid = 5;//syscall(SYS_gettid); #else rpc_st.__tid = gettid(); // dummy value diff --git a/tests/api_test/servers.sh b/tests/api_test/servers.sh index a4c1ef9..647eab0 100755 --- a/tests/api_test/servers.sh +++ b/tests/api_test/servers.sh @@ -4,17 +4,20 @@ echo "\n\n\n\nStarting server(s)" # test.sh [udp|tcp|all] [nwid] TEST_EXECUTABLE_PATH="build/tests" +LIB_PATH="./build/libztintercept.so" + +PLATFORM="Linux" protocol=$1 NWID=$2 +ZT_HOME_PATH=$3 HOME_DIR=$(pwd)/$TEST_EXECUTABLE_PATH -ZT_HOME_PATH=$(pwd)/$TEST_EXECUTABLE_PATH/zerotier BUILD_PATH=$(pwd)/build TEST_PATH=$(pwd)/build/tests localAddr="127.0.0.1" export ZT_NC_NETWORK=$ZT_HOME_PATH/nc_$NWID -export DYLD_LIBRARY_PATH=.$HOME_DIR/libztintercept.so +export LD_PRELOAD=$LIB_PATH echo "network = " $NWID echo "protocol = " $protocol @@ -34,12 +37,12 @@ if [ $protocol="tcp" ]; then echo "Starting TCP test..." random_tcp_server_port=$RANDOM echo $random_tcp_server_port > $TEST_EXECUTABLE_PATH/tcp_server.port - ./$TEST_EXECUTABLE_PATH/Darwin.tcp_server.out $random_tcp_server_port & + ./$TEST_EXECUTABLE_PATH/$PLATFORM.tcp_server.out $random_tcp_server_port & tcp_server_pid=$! # echo "TCP SERVER AT = " $localAddr ":" $random_tcp_server_port # sleep 3 - # ./$TEST_EXECUTABLE_PATH/Darwin.tcp_client.out $localAddr $random_tcp_server_port & + # ./$TEST_EXECUTABLE_PATH/$PLATFORM.tcp_client.out $localAddr $random_tcp_server_port & # tcp_client_pid=$! fi diff --git a/tests/api_test/test.sh b/tests/api_test/test.sh index ec0b767..5c171eb 100755 --- a/tests/api_test/test.sh +++ b/tests/api_test/test.sh @@ -5,6 +5,6 @@ echo "Performing unit tests..." chmod 755 build/tests/servers.sh chmod 755 build/tests/clients.sh -./build/tests/servers.sh $1 $2 & +./servers.sh $1 $2 $3 & sleep 3 -./build/tests/clients.sh $1 $2 & \ No newline at end of file +./clients.sh $1 $2 $3 &