From e1dbbf7e8e0b2d5101aa4e06d90f82cfab5087d2 Mon Sep 17 00:00:00 2001 From: Mauro Sardara Date: Mon, 11 Mar 2019 19:19:15 +0100 Subject: [HICN-106] Added generation of .lib for dll shared libraries fixed warning for shift in csum_fold function in libhicn added declaration of external symbol in libtransport log. Change-Id: I9377eb6016a74f14eb8f05df2ced36ee41a27bfd Signed-off-by: Mauro Sardara --- cmake/Modules/BuildMacros.cmake | 53 +++++++++++++++------- hicn-light/src/io/udpConnection.c | 19 +++++--- lib/src/common.h | 28 ++++++++++-- lib/src/protocol/tcp.c | 4 +- .../src/hicn/transport/core/forwarder_interface.h | 2 - .../src/hicn/transport/core/manifest_inline.h | 2 - utils/src/ping_client.cc | 5 ++ 7 files changed, 81 insertions(+), 32 deletions(-) diff --git a/cmake/Modules/BuildMacros.cmake b/cmake/Modules/BuildMacros.cmake index 474026d1d..0908189b5 100644 --- a/cmake/Modules/BuildMacros.cmake +++ b/cmake/Modules/BuildMacros.cmake @@ -23,10 +23,19 @@ macro(build_executable exec) ${ARGN} ) - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") - set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - add_executable(${exec} ${ARG_SOURCES}) + + set(BUILD_ROOT ${CMAKE_BINARY_DIR}/build-root) + + set_target_properties(${exec} + PROPERTIES + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" + INSTALL_RPATH_USE_LINK_PATH TRUE + ARCHIVE_OUTPUT_DIRECTORY "${BUILD_ROOT}/lib" + LIBRARY_OUTPUT_DIRECTORY "${BUILD_ROOT}/lib" + RUNTIME_OUTPUT_DIRECTORY "${BUILD_ROOT}/bin" + ) + if(ARG_LINK_LIBRARIES) target_link_libraries(${exec} ${ARG_LINK_LIBRARIES}) endif() @@ -47,7 +56,7 @@ macro(build_executable exec) endif() if(NOT ARG_NO_INSTALL) - install(TARGETS ${exec} DESTINATION bin COMPONENT ${ARG_COMPONENT}) + install(TARGETS ${exec} RUNTIME DESTINATION bin COMPONENT ${ARG_COMPONENT}) endif() endmacro() @@ -59,9 +68,6 @@ macro(build_library lib) ${ARGN} ) - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") - set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - if (ARG_SHARED) list(APPEND TARGET_LIBS ${lib}.shared @@ -76,18 +82,13 @@ macro(build_library lib) add_library(${lib} STATIC ${ARG_SOURCES}) endif() - # install .so if(NOT ARG_COMPONENT) set(ARG_COMPONENT hicn) endif() - foreach(library ${TARGET_LIBS}) + set(BUILD_ROOT ${CMAKE_BINARY_DIR}/build-root) - if (WIN32) - target_compile_options(${library} PRIVATE) - else () - target_compile_options(${library} PRIVATE -Wall) - endif () + foreach(library ${TARGET_LIBS}) if(HICN_VERSION) set_target_properties(${library} @@ -98,9 +99,27 @@ macro(build_library lib) set_target_properties(${library} PROPERTIES - OUTPUT_NAME ${lib} + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" + INSTALL_RPATH_USE_LINK_PATH TRUE + ARCHIVE_OUTPUT_DIRECTORY "${BUILD_ROOT}/lib" + LIBRARY_OUTPUT_DIRECTORY "${BUILD_ROOT}/lib" + RUNTIME_OUTPUT_DIRECTORY "${BUILD_ROOT}/bin" ) + if (WIN32) + target_compile_options(${library} PRIVATE) + set_target_properties(${library} + PROPERTIES + WINDOWS_EXPORT_ALL_SYMBOLS TRUE + ) + else () + target_compile_options(${library} PRIVATE -Wall) + set_target_properties(${library} + PROPERTIES + OUTPUT_NAME ${lib} + ) + endif () + # library deps if(ARG_LINK_LIBRARIES) target_link_libraries(${library} ${ARG_LINK_LIBRARIES}) @@ -119,7 +138,9 @@ macro(build_library lib) install( TARGETS ${library} - DESTINATION lib + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib COMPONENT ${ARG_COMPONENT} ) diff --git a/hicn-light/src/io/udpConnection.c b/hicn-light/src/io/udpConnection.c index c3e6d32ac..5fbdf4998 100644 --- a/hicn-light/src/io/udpConnection.c +++ b/hicn-light/src/io/udpConnection.c @@ -287,13 +287,20 @@ static bool _sendCommandResponse(IoOperations *ops, struct iovec *message){ return false; } #else - ssize_t writeLength = write(udpConnState->udpListenerSocket, message[0].iov_base, (unsigned int)message[0].iov_len); - if (writeLength < 0) { - return false; + WSABUF dataBuf[2]; + DWORD BytesSent = 0; + + for (int i = 0; i < 2; i++) { + dataBuf[i].buf = message[i].iov_base; + dataBuf[i].len = (ULONG)message[i].iov_len; } - writeLength = write(udpConnState->udpListenerSocket, message[0].iov_base, (unsigned int)message[0].iov_len); - if (writeLength < 0) { - return false; + + int rc = WSASendTo(udpConnState->udpListenerSocket, dataBuf, 2, + &BytesSent, 0, (SOCKADDR *)udpConnState->peerAddress, + udpConnState->peerAddressLength, NULL, NULL); + + if (rc == SOCKET_ERROR) { + return false; } #endif return true; diff --git a/lib/src/common.h b/lib/src/common.h index 1d4b1e6bf..33323da1b 100644 --- a/lib/src/common.h +++ b/lib/src/common.h @@ -60,6 +60,28 @@ typedef uint8_t u8; #define STATIC_ASSERT(x) +/* Architecture-dependent uword size */ +#if INTPTR_MAX == INT64_MAX +#define log2_uword_bits 6 +#elif INTPTR_MAX == INT32_MAX +#define log2_uword_bits 5 +#else +#error "Impossible to detect architecture" +#endif + +#define uword_bits (1 << log2_uword_bits) + +/* Word types. */ +#if uword_bits == 64 +/* 64 bit word machines. */ +typedef u64 uword; +#else +/* 32 bit word machines. */ +typedef u32 uword; +#endif + +typedef uword ip_csum_t; + #endif /* ! HICN_VPP_PLUGIN */ /* @@ -173,8 +195,6 @@ int get_addr_family (const char *ip_address); #ifndef HICN_VPP_PLUGIN -typedef u16 ip_csum_t; - /* * Checksum update (incremental and non-incremental) * @@ -186,7 +206,7 @@ static_always_inline u16 ip_csum_fold (ip_csum_t c) { /* Reduce to 16 bits. */ -#if 0 // uword_bits == 64 +#if uword_bits == 64 c = (c & (ip_csum_t) 0xffffffff) + (c >> (ip_csum_t) 32); c = (c & 0xffff) + (c >> 16); #endif @@ -194,7 +214,7 @@ ip_csum_fold (ip_csum_t c) c = (c & 0xffff) + (c >> 16); c = (c & 0xffff) + (c >> 16); - return c; + return (u16)c; } static_always_inline ip_csum_t diff --git a/lib/src/protocol/tcp.c b/lib/src/protocol/tcp.c index 08b7bde8a..b9f1d2775 100644 --- a/lib/src/protocol/tcp.c +++ b/lib/src/protocol/tcp.c @@ -247,7 +247,7 @@ tcp_rewrite_interest (hicn_type_t type, hicn_protocol_t * h, * csum = ip_csum_sub_even (*tcp_checksum, h->ipv4.saddr.as_u32); * csum = ip_csum_add_even (csum, h->ipv4.saddr.as_u32); */ - u16 csum = ip_csum_sub_even (*tcp_checksum, (ip_csum_t) (h->ipv6.saddr.as_u64[0])); + ip_csum_t csum = ip_csum_sub_even (*tcp_checksum, (ip_csum_t) (h->ipv6.saddr.as_u64[0])); csum = ip_csum_sub_even (csum, (ip_csum_t) (h->ipv6.saddr.as_u64[1])); csum = ip_csum_add_even (csum, (ip_csum_t) (h->ipv6.saddr.as_u64[0])); csum = ip_csum_add_even (csum, (ip_csum_t) (h->ipv6.saddr.as_u64[1])); @@ -272,7 +272,7 @@ tcp_rewrite_data (hicn_type_t type, hicn_protocol_t * h, * csum = ip_csum_sub_even (*tcp_checksum, h->ipv4.saddr.as_u32); * csum = ip_csum_add_even (csum, h->ipv4.saddr.as_u32); */ - u16 csum = ip_csum_sub_even (*tcp_checksum, (ip_csum_t) (addr_old->ip6.as_u64[0])); + ip_csum_t csum = ip_csum_sub_even (*tcp_checksum, (ip_csum_t) (addr_old->ip6.as_u64[0])); csum = ip_csum_sub_even (*tcp_checksum, (ip_csum_t) (addr_old->ip6.as_u64[1])); csum = ip_csum_add_even (csum, (ip_csum_t) (addr_new->ip6.as_u64[0])); csum = ip_csum_add_even (csum, (ip_csum_t) (addr_new->ip6.as_u64[1])); diff --git a/libtransport/src/hicn/transport/core/forwarder_interface.h b/libtransport/src/hicn/transport/core/forwarder_interface.h index d470b6276..974b1c39a 100644 --- a/libtransport/src/hicn/transport/core/forwarder_interface.h +++ b/libtransport/src/hicn/transport/core/forwarder_interface.h @@ -19,8 +19,6 @@ #include #include #include -#include - #include namespace transport { diff --git a/libtransport/src/hicn/transport/core/manifest_inline.h b/libtransport/src/hicn/transport/core/manifest_inline.h index 60eb08433..385e43af3 100644 --- a/libtransport/src/hicn/transport/core/manifest_inline.h +++ b/libtransport/src/hicn/transport/core/manifest_inline.h @@ -18,8 +18,6 @@ #include #include #include -#include - #include namespace transport { diff --git a/utils/src/ping_client.cc b/utils/src/ping_client.cc index 3811c6db8..72a310c2d 100644 --- a/utils/src/ping_client.cc +++ b/utils/src/ping_client.cc @@ -16,6 +16,11 @@ #include #include +// Let's make the linker happy +#if !TRANSPORT_LOG_EXTERN_GLOBAL_OUTPUT_LEVEL +TRANSPORT_LOG_DEFINE_GLOBAL_OUTPUT_LEVEL = 0; +#endif + #include #include #include -- cgit 1.2.3-korg