diff --git a/CMakeLists.txt b/CMakeLists.txt index 324bac0..f4d9bf6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,24 @@ project(n2n) cmake_minimum_required(VERSION 2.6) include(CheckFunctionExists) +SET(CMAKE_VERBOSE_MAKEFILE ON) # N2n information -set(N2N_VERSION 2.5.1) +execute_process( + COMMAND git rev-list --count HEAD + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_REV +) +execute_process( + COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_ID +) +string(REGEX REPLACE "\n$" "" GIT_REV "${GIT_REV}") +string(REGEX REPLACE "\n$" "" GIT_ID "${GIT_ID}") +set(N2N_VERSION "2.7.0.r${GIT_REV}.${GIT_ID}") set(N2N_OSNAME ${CMAKE_SYSTEM}) +MESSAGE(STATUS "Build from git rev: ${N2N_VERSION}") # N2n specific params OPTION(N2N_OPTION_AES "USE AES" ON) @@ -22,8 +36,11 @@ add_definitions(-DGIT_RELEASE="" -DPACKAGE_VERSION="${N2N_VERSION}" -DPACKAGE_OS add_definitions(-DN2N_VERSION="${N2N_VERSION}" -DN2N_OSNAME="${N2N_OSNAME}") if(N2N_OPTION_AES) -find_package(OpenSSL REQUIRED) -add_definitions(-DN2N_HAVE_AES) + if(NOT DEFINED WIN32) + find_package(OpenSSL REQUIRED) + include_directories(${OPENSSL_INCLUDE_DIR}) + endif(NOT DEFINED WIN32) + add_definitions(-DN2N_HAVE_AES) endif(N2N_OPTION_AES) if(NOT DEFINED CMAKE_BUILD_TYPE) @@ -42,7 +59,10 @@ set(CMAKE_CXX_FLAGS_DEBUG "-g") # Release set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") -endif() +endif(DEFINED UNIX) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static") + ## DEBUG FOR CMAKE #message(${N2N_VERSION}) @@ -51,51 +71,67 @@ endif() #message(${N2N_OPTION_AES}) ## DEBUG FOR CMAKE +INCLUDE_DIRECTORIES(.) +INCLUDE_DIRECTORIES(include) +if(DEFINED WIN32) + INCLUDE_DIRECTORIES(win32) + INCLUDE_DIRECTORIES("D:/Program Files/MinGW/opt/include/" "D:/Program Files/MinGW/x86_64-w64-mingw32/include/") + LINK_DIRECTORIES("D:/Program Files/MinGW/opt/lib/" "D:/Program Files/MinGW/x86_64-w64-mingw32/lib/") +endif(DEFINED WIN32) + # Add SHARED to build DLL -add_library(n2n n2n.c - edge_utils.c - sn_utils.c - wire.c - minilzo.c - twofish.c - transform_null.c - transform_tf.c - transform_aes.c - transform_cc20.c - transform_speck.c - speck.c - random_numbers.c - pearson.c - header_encryption.c - tuntap_freebsd.c - tuntap_netbsd.c - tuntap_linux.c - tuntap_osx.c - ) +#aux_source_directory(./src N2N_DIR_SRCS) +#add_library(n2n STATIC ${N2N_DIR_SRCS}) +add_library(n2n + src/n2n.c + src/edge_utils.c + src/sn_utils.c + src/wire.c + src/minilzo.c + src/twofish.c + src/transform_null.c + src/transform_tf.c + src/transform_aes.c + src/transform_cc20.c + src/transform_speck.c + src/speck.c + src/random_numbers.c + src/pearson.c + src/header_encryption.c + src/tuntap_freebsd.c + src/tuntap_netbsd.c + src/tuntap_linux.c + src/tuntap_osx.c + ) + if(DEFINED WIN32) -add_subdirectory(win32) -target_link_libraries(n2n n2n_win32) + add_library(edge_utils_win32 src/edge_utils_win32.c) + add_subdirectory(win32) + target_link_libraries(n2n edge_utils_win32 n2n_win32 ) endif(DEFINED WIN32) if(N2N_OPTION_AES) -target_link_libraries(n2n ${OPENSSL_LIBRARIES}) -include_directories(${OPENSSL_INCLUDE_DIR}) + if(DEFINED WIN32) + target_link_libraries(n2n crypto) + else() + target_link_libraries(n2n ${OPENSSL_LIBRARIES}) + endif(DEFINED WIN32) endif(N2N_OPTION_AES) -add_executable(edge edge.c) +add_executable(edge src/edge.c) target_link_libraries(edge n2n) -add_executable(supernode sn.c) +add_executable(supernode src/sn.c) target_link_libraries(supernode n2n) -add_executable(example_edge_embed_quick_edge_init example_edge_embed_quick_edge_init.c) +add_executable(example_edge_embed_quick_edge_init src/example_edge_embed_quick_edge_init.c) target_link_libraries(example_edge_embed_quick_edge_init n2n) -add_executable(example_edge_embed example_edge_embed.c) +add_executable(example_edge_embed src/example_edge_embed.c) target_link_libraries(example_edge_embed n2n) -add_executable(example_sn_embed example_sn_embed.c) +add_executable(example_sn_embed src/example_sn_embed.c) target_link_libraries(example_sn_embed n2n) if(NOT DEFINED WIN32) @@ -115,8 +151,6 @@ install(TARGETS edge supernode ) # Tools -include_directories(.) - add_executable(n2n-benchmark tools/benchmark.c) target_link_libraries(n2n-benchmark n2n ${OPENSSL_LIBRARIES}) @@ -130,8 +164,8 @@ if(PCAP_LIB) check_function_exists(pcap_set_immediate_mode HAVE_PCAP_IMMEDIATE_MODE) IF(HAVE_PCAP_IMMEDIATE_MODE) ADD_DEFINITIONS("-DHAVE_PCAP_IMMEDIATE_MODE") - ENDIF() -endif() + ENDIF(HAVE_PCAP_IMMEDIATE_MODE) +endif(PCAP_LIB) install(TARGETS n2n-benchmark RUNTIME DESTINATION bin) diff --git a/include/edge_utils_win32.h b/include/edge_utils_win32.h index e82b50d..57d7e09 100644 --- a/include/edge_utils_win32.h +++ b/include/edge_utils_win32.h @@ -19,6 +19,7 @@ #ifdef WIN32 #include +#include /* Multicast peers discovery disabled due to https://github.com/ntop/n2n/issues/65 */ #define SKIP_MULTICAST_PEERS_DISCOVERY diff --git a/include/n2n.h b/include/n2n.h index a525b3c..baebe61 100644 --- a/include/n2n.h +++ b/include/n2n.h @@ -126,7 +126,6 @@ typedef struct ether_hdr ether_hdr_t; #include #include #include -#include #include #include #include @@ -140,12 +139,13 @@ typedef struct ether_hdr ether_hdr_t; #include #endif -#include "minilzo.h" -#include "n2n_define.h" #define closesocket(a) close(a) #endif /* #ifndef WIN32 */ +#include "minilzo.h" +#include "n2n_define.h" +#include #include #include #include "uthash.h" diff --git a/src/edge_utils.c b/src/edge_utils.c index 70d2746..a1b6572 100644 --- a/src/edge_utils.c +++ b/src/edge_utils.c @@ -797,10 +797,10 @@ static void send_query_peer( n2n_edge_t * eee, traceEvent( TRACE_DEBUG, "send QUERY_PEER to supernode" ); - if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) + if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED){ packet_header_encrypt (pktbuf, idx, eee->conf.header_encryption_ctx, eee->conf.header_iv_ctx, pearson_hash_16 (pktbuf, idx)); - + } sendto_sock( eee->udp_sock, pktbuf, idx, &(eee->supernode) ); } @@ -1082,7 +1082,7 @@ static int handle_PACKET(n2n_edge_t * eee, /* Check if it is a routed packet */ if((ntohs(eh->type) == 0x0800) && (eth_size >= ETH_FRAMESIZE + IP4_MIN_SIZE)) { uint32_t *dst = (uint32_t*)ð_payload[ETH_FRAMESIZE + IP4_DSTOFFSET]; - u_int8_t *dst_mac = (u_int8_t*)eth_payload; + uint8_t *dst_mac = (uint8_t*)eth_payload; /* Note: all elements of the_ip are in network order */ if(!memcmp(dst_mac, broadcast_mac, 6)) @@ -1868,6 +1868,7 @@ int run_edge_loop(n2n_edge_t * eee, int *keep_running) { #endif #ifdef WIN32 + #include "edge_utils_win32.h" struct tunread_arg arg; arg.eee = eee; arg.keep_running = keep_running; @@ -2045,7 +2046,7 @@ static int edge_init_sockets(n2n_edge_t *eee, int udp_local_port, int mgmt_port, /* https://www.tucny.com/Home/dscp-tos */ sockopt = tos; - if(setsockopt(eee->udp_sock, IPPROTO_IP, IP_TOS, &sockopt, sizeof(sockopt)) == 0) + if(setsockopt(eee->udp_sock, IPPROTO_IP, IP_TOS, (char *)&sockopt, sizeof(sockopt)) == 0) traceEvent(TRACE_NORMAL, "TOS set to 0x%x", tos); else traceEvent(TRACE_ERROR, "Could not set TOS 0x%x[%d]: %s", tos, errno, strerror(errno)); diff --git a/src/edge_utils_win32.c b/src/edge_utils_win32.c index 5f5caba..306fd50 100644 --- a/src/edge_utils_win32.c +++ b/src/edge_utils_win32.c @@ -26,7 +26,7 @@ static DWORD* tunReadThread(LPVOID lpArg) { struct tunread_arg *arg = (struct tunread_arg*)lpArg; while(*arg->keep_running) - readFromTAPSocket(arg->eee); + edge_read_from_tap(arg->eee); return((DWORD*)NULL); } diff --git a/src/n2n.c b/src/n2n.c index 8e574a7..47b0bb8 100644 --- a/src/n2n.c +++ b/src/n2n.c @@ -92,7 +92,7 @@ SOCKET open_socket(int local_port, int bind_any) { #endif sockopt = 1; - setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(sockopt)); + setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&sockopt, sizeof(sockopt)); memset(&local_address, 0, sizeof(local_address)); local_address.sin_family = AF_INET; @@ -145,9 +145,7 @@ void traceEvent(int eventTraceLevel, char* file, int line, char * format, ...) { char theDate[N2N_TRACE_DATESIZE]; char *extra_msg = ""; time_t theTime = time(NULL); -#ifdef WIN32 int i; -#endif /* We have two paths - one if we're logging, one if we aren't * Note that the no-log case is those systems which don't support it(WIN32), @@ -179,7 +177,8 @@ void traceEvent(int eventTraceLevel, char* file, int line, char * format, ...) { snprintf(out_buf, sizeof(out_buf), "%s%s", extra_msg, buf); syslog(LOG_INFO, "%s", out_buf); } else { - snprintf(out_buf, sizeof(out_buf), "%s [%s:%d] %s%s", theDate, file, line, extra_msg, buf); + for(i=strlen(file)-1; i>0; i--) if(file[i] == '/') { i++; break; }; + snprintf(out_buf, sizeof(out_buf), "%s [%s:%d] %s%s", theDate, &file[i], line, extra_msg, buf); #ifdef __ANDROID_NDK__ switch (eventTraceLevel) { case 0: // ERROR @@ -316,7 +315,7 @@ void hexdump(const uint8_t * buf, size_t len) void print_n2n_version() { printf("Welcome to n2n v.%s for %s\n" "Built on %s\n" - "Copyright 2007-19 - ntop.org and contributors\n\n", + "Copyright 2007-2020 - ntop.org and contributors\n\n", GIT_RELEASE, PACKAGE_OSNAME, PACKAGE_BUILDDATE); } diff --git a/src/sn.c b/src/sn.c index 608a31c..b73eb19 100644 --- a/src/sn.c +++ b/src/sn.c @@ -21,9 +21,6 @@ #include "n2n.h" #include "header_encryption.h" -#ifdef WIN32 -#include -#endif #define N2N_SN_LPORT_DEFAULT 7654 #define N2N_SN_PKTBUF_SIZE 2048 diff --git a/win32/wintap.c b/win32/wintap.c index a9adf57..90606c6 100644 --- a/win32/wintap.c +++ b/win32/wintap.c @@ -2,7 +2,7 @@ (C) 2007-09 - Luca Deri */ -#include "../n2n.h" +#include "n2n.h" #include "n2n_win32.h" /* ***************************************************** */