From f5accc8221f7b296dbdb053192e0225e80cea4dd Mon Sep 17 00:00:00 2001 From: fengdaolong Date: Wed, 1 Jul 2020 18:35:22 +0800 Subject: [PATCH 1/2] Fix cmake compilation errors. 1. CMakeLists.txt added to automatically obtain the revised version number from the git repository. 2. Adjusted some header files to fix Windows platform compilation errors. 3. Eliminate some compilation warnings. --- CMakeLists.txt | 108 ++++++++++++++++++++++++------------- include/edge_utils_win32.h | 1 + include/n2n.h | 6 +-- src/edge_utils.c | 9 ++-- src/edge_utils_win32.c | 2 +- src/n2n.c | 9 ++-- src/sn.c | 3 -- win32/wintap.c | 2 +- 8 files changed, 86 insertions(+), 54 deletions(-) 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" /* ***************************************************** */ From 1ada1dc7ed011763f98f2bc1fa213bddb4a848f6 Mon Sep 17 00:00:00 2001 From: fengdaolong Date: Thu, 2 Jul 2020 11:54:22 +0800 Subject: [PATCH 2/2] CMakeLists.txt automatically judges git commands and OpenSSL libraries. 1. Automatically determines whether the git command exists to generate a revision number. 2. When OpenSSL is not found, AES is automatically disabled. --- CMakeLists.txt | 65 ++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f4d9bf6..f6e72eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,15 @@ cmake_minimum_required(VERSION 2.6) include(CheckFunctionExists) SET(CMAKE_VERBOSE_MAKEFILE ON) -# N2n information +# N2n release information +set(N2N_VERSION "2.7.0") +set(N2N_OSNAME ${CMAKE_SYSTEM}) +execute_process( + COMMAND git --version + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_EXIST +) +if (GIT_EXIST) execute_process( COMMAND git rev-list --count HEAD WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} @@ -16,33 +24,37 @@ execute_process( ) 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}) +set(N2N_VERSION "${N2N_VERSION}.r${GIT_REV}.${GIT_ID}") MESSAGE(STATUS "Build from git rev: ${N2N_VERSION}") +endif (GIT_EXIST) + +add_definitions(-DCMAKE_BUILD) +add_definitions(-DGIT_RELEASE="" -DPACKAGE_VERSION="${N2N_VERSION}" -DPACKAGE_OSNAME="${N2N_OSNAME}") +add_definitions(-DN2N_VERSION="${N2N_VERSION}" -DN2N_OSNAME="${N2N_OSNAME}") -# N2n specific params -OPTION(N2N_OPTION_AES "USE AES" ON) # Build information OPTION(BUILD_SHARED_LIBS "BUILD Shared Library" OFF) +# N2n specific params +OPTION(N2N_OPTION_AES "USE AES" ON) if(NOT DEFINED N2N_OPTION_AES) set(N2N_OPTION_AES ON) endif(NOT DEFINED N2N_OPTION_AES) -add_definitions(-DCMAKE_BUILD) -add_definitions(-DGIT_RELEASE="" -DPACKAGE_VERSION="${N2N_VERSION}" -DPACKAGE_OSNAME="${CMAKE_SYSTEM}") -add_definitions(-DN2N_VERSION="${N2N_VERSION}" -DN2N_OSNAME="${N2N_OSNAME}") - if(N2N_OPTION_AES) - if(NOT DEFINED WIN32) - find_package(OpenSSL REQUIRED) + find_package(OpenSSL QUIET) + if(NOT OPENSSL_FOUND) + MESSAGE(WARNING "OpenSSL not found, AES disabled.") + set(N2N_OPTION_AES OFF) + else() include_directories(${OPENSSL_INCLUDE_DIR}) - endif(NOT DEFINED WIN32) - add_definitions(-DN2N_HAVE_AES) + add_definitions(-DN2N_HAVE_AES) + endif(NOT OPENSSL_FOUND) endif(N2N_OPTION_AES) + if(NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE None) endif(NOT DEFINED CMAKE_BUILD_TYPE) @@ -61,28 +73,21 @@ set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") endif(DEFINED UNIX) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static") - +#SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static") -## DEBUG FOR CMAKE -#message(${N2N_VERSION}) -#message(${N2N_OSNAME}) -##message(${CMAKE_BUILD_TYPE}) -#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/") +# 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 + #aux_source_directory(./src N2N_DIR_SRCS) #add_library(n2n STATIC ${N2N_DIR_SRCS}) -add_library(n2n +add_library(n2n STATIC src/n2n.c src/edge_utils.c src/sn_utils.c @@ -104,7 +109,6 @@ add_library(n2n src/tuntap_osx.c ) - if(DEFINED WIN32) add_library(edge_utils_win32 src/edge_utils_win32.c) add_subdirectory(win32) @@ -112,13 +116,11 @@ if(DEFINED WIN32) endif(DEFINED WIN32) if(N2N_OPTION_AES) - if(DEFINED WIN32) - target_link_libraries(n2n crypto) - else() - target_link_libraries(n2n ${OPENSSL_LIBRARIES}) - endif(DEFINED WIN32) +# target_link_libraries(n2n crypto) + target_link_libraries(n2n ${OPENSSL_LIBRARIES}) endif(N2N_OPTION_AES) + add_executable(edge src/edge.c) target_link_libraries(edge n2n) @@ -150,6 +152,7 @@ install(TARGETS edge supernode ARCHIVE DESTINATION lib ) + # Tools add_executable(n2n-benchmark tools/benchmark.c) target_link_libraries(n2n-benchmark n2n ${OPENSSL_LIBRARIES})