diff options
36 files changed, 440 insertions, 167 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index a362a4005..29fa1700b 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,13 +39,17 @@ set(LIBTRANSPORT_HEADER_FILES) set(SUBDIRS lib hicn-light libtransport utils) +add_compile_options(-Wall -Werror) + if (BUILD_VPP_PLUGIN AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" ) -list(APPEND SUBDIRS - hicn-plugin -) -list(APPEND HICN_BINARY_API_INCLUDE_DIRS - ${PROJECT_BINARY_DIR}/hicn-plugin - ${PROJECT_BINARY_DIR}/hicn-plugin/vpp_plugins) + list(APPEND SUBDIRS + hicn-plugin + ) + + list(APPEND HICN_BINARY_API_INCLUDE_DIRS + ${PROJECT_BINARY_DIR}/hicn-plugin + ${PROJECT_BINARY_DIR}/hicn-plugin/vpp_plugins + ) endif() foreach(dir ${SUBDIRS}) diff --git a/cmake/Modules/Packager.cmake b/cmake/Modules/Packager.cmake index f060bfa4b..c04e5c0b0 100755 --- a/cmake/Modules/Packager.cmake +++ b/cmake/Modules/Packager.cmake @@ -42,7 +42,7 @@ macro(make_packages) ) if (NOT VER) - set(VER 1.0) + set(VER "v1.0-1-gcafe") endif() string(REGEX REPLACE "v(.*)-([0-9]+)-(g[0-9a-f]+)" "\\1;\\2;\\3" VER ${VER}) @@ -51,13 +51,21 @@ macro(make_packages) list(GET VER 1 commit_num) list(GET VER 2 commit_name) + if (NOT DEFINED ENV{BUILD_NUMBER}) + set(bld "b1") + else() + set(bld "b$ENV{BUILD_NUMBER}") + endif() + + message("Build number is: ${bld}") + #define DEB and RPM version numbers if(${commit_num} EQUAL 0) set(deb_ver "${tag}") set(rpm_ver "${tag}") else() - set(deb_ver "${tag}~${commit_num}~${commit_name}") - set(rpm_ver "${tag}~${commit_num}_${commit_name}") + set(deb_ver "${tag}-${commit_num}-release") + set(rpm_ver "${tag}-${commit_num}-release") endif() get_cmake_property(components COMPONENTS) @@ -65,29 +73,57 @@ macro(make_packages) if(OS_ID_LIKE MATCHES "debian") set(CPACK_GENERATOR "DEB") set(type "DEBIAN") + + execute_process( + COMMAND dpkg --print-architecture + OUTPUT_VARIABLE arch + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(CPACK_PACKAGE_VERSION "${deb_ver}") - set(CPACK_${type}_FILE_NAME DEB-DEFAULT) foreach(lc ${components}) string(TOUPPER ${lc} uc) - set(CPACK_${type}_${uc}_PACKAGE_DEPENDS "${${lc}_DEB_DEPENDENCIES}") + set(CPACK_${type}_${uc}_FILE_NAME "${lc}_${deb_ver}_${arch}.deb") + + set(DEB_DEPS) + if (NOT ${${lc}_DEB_DEPENDENCIES} STREQUAL "") + string(REPLACE "stable_version" ${tag} DEB_DEPS ${${lc}_DEB_DEPENDENCIES}) + endif() + + set(CPACK_${type}_${uc}_PACKAGE_DEPENDS "${DEB_DEPS}") set(CPACK_${type}_${uc}_PACKAGE_NAME "${lc}") set(CPACK_COMPONENT_${uc}_DESCRIPTION "${${lc}_DESCRIPTION}") endforeach() elseif(OS_ID_LIKE MATCHES "rhel") set(CPACK_GENERATOR "RPM") set(type "RPM") + + execute_process( + COMMAND uname -m + OUTPUT_VARIABLE arch + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(CPACK_PACKAGE_VERSION "${rpm_ver}") - set(CPACK_${type}_FILE_NAME RPM-DEFAULT) foreach(lc ${components}) string(TOUPPER ${lc} uc) + set(CPACK_${type}_${uc}_DESCRIPTION "${${lc}_DESCRIPTION}") + + set(RPM_DEPS) + if (NOT ${${lc}_DEB_DEPENDENCIES} STREQUAL "") + string(REPLACE "stable_version" ${tag} RPM_DEPS ${${lc}_RPM_DEPENDENCIES}) + endif() + + set(CPACK_${type}_${uc}_PACKAGE_REQUIRES "${RPM_DEPS}") + if(${lc} MATCHES ".*-dev") - set(CPACK_${type}_${uc}_DEBUGINFO_PACKAGE ON) - set(lc ${lc}el) + set(package_name ${lc}el) + else() + set(package_name ${lc}) endif() - set(CPACK_${type}_${uc}_PACKAGE_NAME "${lc}") - set(CPACK_${type}_${uc}_DESCRIPTION "${${lc}_DESCRIPTION}") - set(CPACK_${type}_${uc}_PACKAGE_REQUIRES "${${lc}_RPM_DEPENDENCIES}") + set(CPACK_RPM_${uc}_PACKAGE_NAME "${package_name}") + set(CPACK_${type}_${uc}_FILE_NAME "${package_name}-${rpm_ver}.${arch}.rpm") endforeach() endif() diff --git a/hicn-light/cmake/Modules/Packaging.cmake b/hicn-light/cmake/Modules/Packaging.cmake index 386c9e985..7e8399626 100644 --- a/hicn-light/cmake/Modules/Packaging.cmake +++ b/hicn-light/cmake/Modules/Packaging.cmake @@ -21,11 +21,11 @@ set(${LIBHICN_LIGHT}_DESCRIPTION ) set(${LIBHICN_LIGHT}_DEB_DEPENDENCIES - "libhicn (>= 1.0), libparc (>= 1.0)" + "libhicn (>= stable_version), libparc (>= 1.0)" CACHE STRING "Dependencies for deb/rpm package." ) set(${LIBHICN_LIGHT}_RPM_DEPENDENCIES - "libhicn >= 1.0, libparc >= 1.0" + "libhicn >= stable_version, libparc >= 1.0" CACHE STRING "Dependencies for deb/rpm package." )
\ No newline at end of file diff --git a/hicn-light/src/command_line/daemon/hicnLightDaemon_main.c b/hicn-light/src/command_line/daemon/hicnLightDaemon_main.c index f6d521711..415e98d65 100755 --- a/hicn-light/src/command_line/daemon/hicnLightDaemon_main.c +++ b/hicn-light/src/command_line/daemon/hicnLightDaemon_main.c @@ -158,7 +158,7 @@ static void _daemonize(void) { } int forkReturn = fork(); - parcTrapUnexpectedStateIf(forkReturn < 0, "Fork error"); + parcTrapUnexpectedStateIf(forkReturn < 0, "Fork error") if (forkReturn > 0) { // parent exits diff --git a/hicn-light/src/config/configuration.c b/hicn-light/src/config/configuration.c index cccd60620..737605932 100755 --- a/hicn-light/src/config/configuration.c +++ b/hicn-light/src/config/configuration.c @@ -102,7 +102,7 @@ void configuration_Destroy(Configuration **configPtr) { *configPtr = NULL; } -struct iovec *configuration_ProcessRegisterHIcnPrefix(Configuration *config, +struct iovec *configuration_ProcessRegisterHicnPrefix(Configuration *config, struct iovec *request, unsigned ingressId) { header_control_message *header = request[0].iov_base; @@ -168,7 +168,7 @@ struct iovec *configuration_ProcessRegisterHIcnPrefix(Configuration *config, return response; } -struct iovec *configuration_ProcessUnregisterHIcnPrefix(Configuration *config, +struct iovec *configuration_ProcessUnregisterHicnPrefix(Configuration *config, struct iovec *request) { header_control_message *header = request[0].iov_base; remove_route_command *control = request[1].iov_base; @@ -292,6 +292,7 @@ struct iovec *configuration_ProcessRegistrationList(Configuration *config, response[1].iov_base = payloadResponse; response[1].iov_len = sizeof(list_routes_command) * payloadSize; + fibEntryList_Destroy(&fibList); return response; } @@ -578,6 +579,7 @@ struct iovec *configuration_ProcessConnectionList(Configuration *config, response[1].iov_len = sizeof(list_connections_command) * connectionList_Length(connList); + connectionList_Destroy(&connList); return response; } @@ -984,7 +986,7 @@ struct iovec *configuration_DispatchCommand(Configuration *config, case ADD_ROUTE: response = - configuration_ProcessRegisterHIcnPrefix(config, control, ingressId); + configuration_ProcessRegisterHicnPrefix(config, control, ingressId); break; case LIST_ROUTES: @@ -996,7 +998,7 @@ struct iovec *configuration_DispatchCommand(Configuration *config, break; case REMOVE_ROUTE: - response = configuration_ProcessUnregisterHIcnPrefix(config, control); + response = configuration_ProcessUnregisterHicnPrefix(config, control); break; case CACHE_STORE: diff --git a/hicn-light/src/config/configurationListeners.c b/hicn-light/src/config/configurationListeners.c index be30e2a49..0982a2b13 100755 --- a/hicn-light/src/config/configurationListeners.c +++ b/hicn-light/src/config/configurationListeners.c @@ -37,7 +37,7 @@ #include <src/utils/commands.h> #include <src/utils/utils.h> -static bool _setupHIcnListenerOnInet4(Forwarder *forwarder, +static bool _setupHicnListenerOnInet4(Forwarder *forwarder, const char *symbolic, Address *address) { bool success = false; #ifndef __APPLE__ @@ -45,14 +45,14 @@ static bool _setupHIcnListenerOnInet4(Forwarder *forwarder, hicnListener_CreateInet(forwarder, (char *)symbolic, address); if (ops != NULL) { success = listenerSet_Add(forwarder_GetListenerSet(forwarder), ops); - parcAssertTrue(success, "Failed to add HIcn listener %s to ListenerSet", + parcAssertTrue(success, "Failed to add Hicn listener %s to ListenerSet", symbolic); } #endif /* __APPLE__ */ return success; } -static bool _setupHIcnListenerOnInet6(Forwarder *forwarder, +static bool _setupHicnListenerOnInet6(Forwarder *forwarder, const char *symbolic, Address *address) { bool success = false; #ifndef __APPLE__ @@ -60,7 +60,7 @@ static bool _setupHIcnListenerOnInet6(Forwarder *forwarder, hicnListener_CreateInet6(forwarder, (char *)symbolic, address); if (ops != NULL) { success = listenerSet_Add(forwarder_GetListenerSet(forwarder), ops); - parcAssertTrue(success, "Failed to add HIcn listener %s to ListenerSet", + parcAssertTrue(success, "Failed to add Hicn listener %s to ListenerSet", symbolic); } #endif /* __APPLE__ */ @@ -149,7 +149,7 @@ bool _AddPuntingInet6(const Configuration *config, Punting *punting, Address *fakeAddr = addressCreateFromInet6((struct sockaddr_in6 *)addr); // comments: - // EncapType: I use the HIcn encap since the puting is available only for HIcn + // EncapType: I use the Hicn encap since the punting is available only for Hicn // listeners LocalAddress: The only listern for which we need punting rules is // the main one, which has no address // so I create a fake empty address. This need to be consistent @@ -297,7 +297,7 @@ bool _addHicn(Configuration *config, add_listener_command *control, case ADDR_INET: { localAddress = utils_AddressFromInet(&control->address.ipv4, &control->port); - success = _setupHIcnListenerOnInet4(configuration_GetForwarder(config), + success = _setupHicnListenerOnInet4(configuration_GetForwarder(config), symbolic, localAddress); break; } @@ -305,7 +305,7 @@ bool _addHicn(Configuration *config, add_listener_command *control, case ADDR_INET6: { localAddress = utils_AddressFromInet6(&control->address.ipv6, &control->port); - success = _setupHIcnListenerOnInet6(configuration_GetForwarder(config), + success = _setupHicnListenerOnInet6(configuration_GetForwarder(config), symbolic, localAddress); break; } diff --git a/hicn-light/src/config/controlAddConnection.c b/hicn-light/src/config/controlAddConnection.c index a0a966ddf..0603e37a5 100755 --- a/hicn-light/src/config/controlAddConnection.c +++ b/hicn-light/src/config/controlAddConnection.c @@ -43,9 +43,9 @@ static CommandReturn _controlAddConnection_Execute(CommandParser *parser, // =================================================== -static CommandReturn _controlAddConnection_HIcnHelpExecute( +static CommandReturn _controlAddConnection_HicnHelpExecute( CommandParser *parser, CommandOps *ops, PARCList *args); -static CommandReturn _controlAddConnection_HIcnExecute(CommandParser *parser, +static CommandReturn _controlAddConnection_HicnExecute(CommandParser *parser, CommandOps *ops, PARCList *args); @@ -66,11 +66,11 @@ static CommandReturn _controlAddConnection_TcpExecute(CommandParser *parser, // =================================================== static const char *_commandAddConnection = "add connection"; -static const char *_commandAddConnectionHIcn = "add connection hicn"; +static const char *_commandAddConnectionHicn = "add connection hicn"; static const char *_commandAddConnectionUdp = "add connection udp"; static const char *_commandAddConnectionTcp = "add connection tcp"; static const char *_commandAddConnectionHelp = "help add connection"; -static const char *_commandAddConnectionHIcnHelp = "help add connection hicn"; +static const char *_commandAddConnectionHicnHelp = "help add connection hicn"; static const char *_commandAddConnectionUdpHelp = "help add connection udp"; static const char *_commandAddConnectionTcpHelp = "help add connection tcp"; @@ -90,9 +90,9 @@ CommandOps *controlAddConnection_HelpCreate(ControlState *state) { // =================================================== -static CommandOps *_controlAddConnection_HIcnCreate(ControlState *state) { - return commandOps_Create(state, _commandAddConnectionHIcn, NULL, - _controlAddConnection_HIcnExecute, +static CommandOps *_controlAddConnection_HicnCreate(ControlState *state) { + return commandOps_Create(state, _commandAddConnectionHicn, NULL, + _controlAddConnection_HicnExecute, commandOps_Destroy); } @@ -110,9 +110,9 @@ static CommandOps *_controlAddConnection_TcpCreate(ControlState *state) { // =================================================== -static CommandOps *_controlAddConnection_HIcnHelpCreate(ControlState *state) { - return commandOps_Create(state, _commandAddConnectionHIcnHelp, NULL, - _controlAddConnection_HIcnHelpExecute, +static CommandOps *_controlAddConnection_HicnHelpCreate(ControlState *state) { + return commandOps_Create(state, _commandAddConnectionHicnHelp, NULL, + _controlAddConnection_HicnHelpExecute, commandOps_Destroy); } @@ -134,7 +134,7 @@ static CommandReturn _controlAddConnection_HelpExecute(CommandParser *parser, CommandOps *ops, PARCList *args) { printf("Available commands:\n"); - printf(" %s\n", _commandAddConnectionHIcn); + printf(" %s\n", _commandAddConnectionHicn); printf(" %s\n", _commandAddConnectionUdp); printf(" %s\n", _commandAddConnectionTcp); printf("\n"); @@ -144,13 +144,13 @@ static CommandReturn _controlAddConnection_HelpExecute(CommandParser *parser, static void _controlAddConnection_Init(CommandParser *parser, CommandOps *ops) { ControlState *state = ops->closure; controlState_RegisterCommand(state, - _controlAddConnection_HIcnHelpCreate(state)); + _controlAddConnection_HicnHelpCreate(state)); controlState_RegisterCommand(state, _controlAddConnection_UdpHelpCreate(state)); controlState_RegisterCommand(state, _controlAddConnection_TcpHelpCreate(state)); - controlState_RegisterCommand(state, _controlAddConnection_HIcnCreate(state)); + controlState_RegisterCommand(state, _controlAddConnection_HicnCreate(state)); controlState_RegisterCommand(state, _controlAddConnection_UdpCreate(state)); controlState_RegisterCommand(state, _controlAddConnection_TcpCreate(state)); } @@ -269,14 +269,14 @@ static CommandReturn _controlAddConnection_IpHelp(CommandParser *parser, return CommandReturn_Success; } -static CommandReturn _controlAddConnection_HIcnHelpExecute( +static CommandReturn _controlAddConnection_HicnHelpExecute( CommandParser *parser, CommandOps *ops, PARCList *args) { _controlAddConnection_IpHelp(parser, ops, args, "hicn"); return CommandReturn_Success; } -static CommandReturn _controlAddConnection_HIcnExecute(CommandParser *parser, +static CommandReturn _controlAddConnection_HicnExecute(CommandParser *parser, CommandOps *ops, PARCList *args) { static const int _indexSymbolic = 3; @@ -284,7 +284,7 @@ static CommandReturn _controlAddConnection_HIcnExecute(CommandParser *parser, static const int _indexLocAddr = 5; if (parcList_Size(args) != 6) { - _controlAddConnection_HIcnHelpExecute(parser, ops, args); + _controlAddConnection_HicnHelpExecute(parser, ops, args); return CommandReturn_Failure; } diff --git a/hicn-light/src/core/forwarder.c b/hicn-light/src/core/forwarder.c index cb94af3b5..e84351365 100755 --- a/hicn-light/src/core/forwarder.c +++ b/hicn-light/src/core/forwarder.c @@ -439,7 +439,7 @@ PARCClock *forwarder_GetClock(const Forwarder *forwarder) { return forwarder->clock; } -hicn_socket_helper_t *forwarder_GetHIcnSocketHelper(Forwarder *forwarder) { +hicn_socket_helper_t *forwarder_GetHicnSocketHelper(Forwarder *forwarder) { return forwarder->hicnSocketHelper; } diff --git a/hicn-light/src/core/forwarder.h b/hicn-light/src/core/forwarder.h index ad3f9756b..e044add3b 100755 --- a/hicn-light/src/core/forwarder.h +++ b/hicn-light/src/core/forwarder.h @@ -240,7 +240,7 @@ void forwarder_ClearCache(Forwarder *forwarder); void forwarder_SetStrategy(Forwarder *forwarder, Name *prefix, strategy_type strategy); -hicn_socket_helper_t *forwarder_GetHIcnSocketHelper(Forwarder *forwarder); +hicn_socket_helper_t *forwarder_GetHicnSocketHelper(Forwarder *forwarder); #ifdef WITH_MAPME diff --git a/hicn-light/src/core/messageHandler.h b/hicn-light/src/core/messageHandler.h index d63656461..cf8ab3672 100755 --- a/hicn-light/src/core/messageHandler.h +++ b/hicn-light/src/core/messageHandler.h @@ -145,7 +145,7 @@ static inline size_t messageHandler_GetIPHeaderLength(unsigned ipVersion) { return 0; } -static inline bool messageHandler_IsValidHIcnPacket(const uint8_t *message) { +static inline bool messageHandler_IsValidHicnPacket(const uint8_t *message) { uint8_t version = messageHandler_GetIPPacketType(message); if (version == IPv6_TYPE || version == IPv4_TYPE) { return true; diff --git a/hicn-light/src/io/hicnConnection.c b/hicn-light/src/io/hicnConnection.c index 85cf50921..6def8ed43 100755 --- a/hicn-light/src/io/hicnConnection.c +++ b/hicn-light/src/io/hicnConnection.c @@ -14,7 +14,7 @@ */ /** - * Embodies the reader/writer for a HIcn connection + * Embodies the reader/writer for a Hicn connection * * NB The Send() function may overflow the output buffer * @@ -112,7 +112,7 @@ static IoOperations _template = {.closure = NULL, // ================================================================= -static void _setConnectionState(_HicnState *HIcn, bool isUp); +static void _setConnectionState(_HicnState *Hicn, bool isUp); static bool _saveSockaddr(_HicnState *hicnConnState, const AddressPair *pair); static void _refreshProbeDestAddress(_HicnState *hicnConnState, const uint8_t *message); @@ -150,7 +150,7 @@ IoOperations *hicnConnection_Create(Forwarder *forwarder, int fd, char *str = addressPair_ToString(hicnConnState->addressPair); logger_Log(hicnConnState->logger, LoggerFacility_IO, PARCLogLevel_Info, __func__, - "HIcnConnection %p created for address %s (isLocal %d)", + "HicnConnection %p created for address %s (isLocal %d)", (void *)hicnConnState, str, hicnConnState->isLocal); free(str); } @@ -196,7 +196,7 @@ static void _destroy(IoOperations **opsPtr) { if (logger_IsLoggable(hicnConnState->logger, LoggerFacility_IO, PARCLogLevel_Info)) { logger_Log(hicnConnState->logger, LoggerFacility_IO, PARCLogLevel_Info, - __func__, "HIcnConnection %p destroyed", (void *)hicnConnState); + __func__, "HicnConnection %p destroyed", (void *)hicnConnState); } // XXX diff --git a/hicn-light/src/io/hicnConnection.h b/hicn-light/src/io/hicnConnection.h index 757e534ba..930e2d470 100755 --- a/hicn-light/src/io/hicnConnection.h +++ b/hicn-light/src/io/hicnConnection.h @@ -15,7 +15,7 @@ /** * @file hicnConnection.h - * @brief Represents a HIcn connection for the connection table + * @brief Represents a Hicn connection for the connection table * * <#Detailed Description#> * @@ -30,7 +30,7 @@ #include <src/utils/address.h> /** - * Creates a HIcn connection that can send to the remote address + * Creates a Hicn connection that can send to the remote address * * The address pair must both be same type (i.e. INET or INET6). * diff --git a/hicn-light/src/io/hicnListener.c b/hicn-light/src/io/hicnListener.c index 161f5b317..789face90 100755 --- a/hicn-light/src/io/hicnListener.c +++ b/hicn-light/src/io/hicnListener.c @@ -119,9 +119,9 @@ static bool _isEmptyAddressIPv4(Address *address) { ListenerOps *hicnListener_CreateInet(Forwarder *forwarder, char *symbolic, Address *address) { - HIcnListener *hicn = parcMemory_AllocateAndClear(sizeof(HIcnListener)); + HicnListener *hicn = parcMemory_AllocateAndClear(sizeof(HicnListener)); parcAssertNotNull(hicn, "parcMemory_AllocateAndClear(%zu) returned NULL", - sizeof(HIcnListener)); + sizeof(HicnListener)); hicn->forwarder = forwarder; hicn->logger = logger_Acquire(forwarder_GetLogger(forwarder)); @@ -134,7 +134,7 @@ ListenerOps *hicnListener_CreateInet(Forwarder *forwarder, char *symbolic, hicn->connection_id = -1; hicn_socket_helper_t *hicnSocketHelper = - forwarder_GetHIcnSocketHelper(forwarder); + forwarder_GetHicnSocketHelper(forwarder); if (_isEmptyAddressIPv4(address)) { hicn->hicn_fd = hicn_socket(hicnSocketHelper, symbolic, NULL); @@ -158,7 +158,7 @@ ListenerOps *hicnListener_CreateInet(Forwarder *forwarder, char *symbolic, PARCLogLevel_Debug)) { logger_Log( hicn->logger, LoggerFacility_IO, PARCLogLevel_Debug, __func__, - "HIcnListener %s: error while creating an hicn listener in lib_hicn", + "HicnListener %s: error while creating an hicn listener in lib_hicn", symbolic); } logger_Release(&hicn->logger); @@ -190,7 +190,7 @@ ListenerOps *hicnListener_CreateInet(Forwarder *forwarder, char *symbolic, if (logger_IsLoggable(hicn->logger, LoggerFacility_IO, PARCLogLevel_Debug)) { logger_Log(hicn->logger, LoggerFacility_IO, PARCLogLevel_Debug, __func__, - "HIcnListener %s created", symbolic); + "HicnListener %s created", symbolic); } return ops; @@ -199,9 +199,9 @@ ListenerOps *hicnListener_CreateInet(Forwarder *forwarder, char *symbolic, ListenerOps *hicnListener_CreateInet6(Forwarder *forwarder, char *symbolic, Address *address) { - HIcnListener *hicn = parcMemory_AllocateAndClear(sizeof(HIcnListener)); + HicnListener *hicn = parcMemory_AllocateAndClear(sizeof(HicnListener)); parcAssertNotNull(hicn, "parcMemory_AllocateAndClear(%zu) returned NULL", - sizeof(HIcnListener)); + sizeof(HicnListener)); hicn->forwarder = forwarder; hicn->logger = logger_Acquire(forwarder_GetLogger(forwarder)); @@ -219,7 +219,7 @@ ListenerOps *hicnListener_CreateInet6(Forwarder *forwarder, char *symbolic, //address we just need to set the right type of packet hicn_socket_helper_t *hicnSocketHelper = - forwarder_GetHIcnSocketHelper(forwarder); + forwarder_GetHicnSocketHelper(forwarder); if (_isEmptyAddressIPv6(address)) { // create main listener @@ -248,7 +248,7 @@ ListenerOps *hicnListener_CreateInet6(Forwarder *forwarder, char *symbolic, PARCLogLevel_Debug)) { logger_Log( hicn->logger, LoggerFacility_IO, PARCLogLevel_Debug, __func__, - "HIcnListener %s: error while creating an hicn listener in lib_hicn", + "HicnListener %s: error while creating an hicn listener in lib_hicn", symbolic); } logger_Release(&hicn->logger); @@ -280,16 +280,16 @@ ListenerOps *hicnListener_CreateInet6(Forwarder *forwarder, char *symbolic, if (logger_IsLoggable(hicn->logger, LoggerFacility_IO, PARCLogLevel_Debug)) { logger_Log(hicn->logger, LoggerFacility_IO, PARCLogLevel_Debug, __func__, - "HIcnListener %s created", symbolic); + "HicnListener %s created", symbolic); } return ops; } bool _hicnListener_BindInet6(ListenerOps *ops, const Address *remoteAddress) { - HIcnListener *hicn = (HIcnListener *)ops->context; + HicnListener *hicn = (HicnListener *)ops->context; hicn_socket_helper_t *hicnSocketHelper = - forwarder_GetHIcnSocketHelper(hicn->forwarder); + forwarder_GetHicnSocketHelper(hicn->forwarder); struct sockaddr_in6 *tmpAddr = parcMemory_AllocateAndClear(sizeof(struct sockaddr_in6)); @@ -319,9 +319,9 @@ bool _hicnListener_BindInet6(ListenerOps *ops, const Address *remoteAddress) { } bool _hicnListener_BindInet(ListenerOps *ops, const Address *remoteAddress) { - HIcnListener *hicn = (HIcnListener *)ops->context; + HicnListener *hicn = (HicnListener *)ops->context; hicn_socket_helper_t *hicnSocketHelper = - forwarder_GetHIcnSocketHelper(hicn->forwarder); + forwarder_GetHicnSocketHelper(hicn->forwarder); struct sockaddr_in *tmpAddr = parcMemory_AllocateAndClear(sizeof(struct sockaddr_in)); @@ -362,9 +362,9 @@ bool hicnListener_Bind(ListenerOps *ops, const Address *remoteAddress) { } bool hicnListener_Punting(ListenerOps *ops, const char *prefix) { - HIcnListener *hicn = (HIcnListener *)ops->context; + HicnListener *hicn = (HicnListener *)ops->context; hicn_socket_helper_t *hicnSocketHelper = - forwarder_GetHIcnSocketHelper(hicn->forwarder); + forwarder_GetHicnSocketHelper(hicn->forwarder); int res = hicn_listen(hicnSocketHelper, hicn->hicn_fd, prefix); int retry = 0; @@ -388,7 +388,7 @@ bool hicnListener_Punting(ListenerOps *ops, const char *prefix) { } bool hicnListener_SetConnectionId(ListenerOps *ops, unsigned connId) { - HIcnListener *hicn = (HIcnListener *)ops->context; + HicnListener *hicn = (HicnListener *)ops->context; if (hicn) { hicn->connection_id = connId; return true; @@ -396,12 +396,12 @@ bool hicnListener_SetConnectionId(ListenerOps *ops, unsigned connId) { return false; } -static void _hicnListener_Destroy(HIcnListener **listenerPtr) { +static void _hicnListener_Destroy(HicnListener **listenerPtr) { parcAssertNotNull(listenerPtr, "Parameter must be non-null double pointer"); parcAssertNotNull(*listenerPtr, "Parameter must derefernce to non-null pointer"); - HIcnListener *hicn = *listenerPtr; + HicnListener *hicn = *listenerPtr; // close(hicn->hicn_fd); //XXX close the fd in the hicnlib (detroy listener?) dispatcher_DestroyNetworkEvent(forwarder_GetDispatcher(hicn->forwarder), @@ -414,32 +414,32 @@ static void _hicnListener_Destroy(HIcnListener **listenerPtr) { static void _destroy(ListenerOps **listenerOpsPtr) { ListenerOps *ops = *listenerOpsPtr; - HIcnListener *hicn = (HIcnListener *)ops->context; + HicnListener *hicn = (HicnListener *)ops->context; _hicnListener_Destroy(&hicn); parcMemory_Deallocate((void **)&ops); *listenerOpsPtr = NULL; } static unsigned _getInterfaceIndex(const ListenerOps *ops) { - HIcnListener *hicn = (HIcnListener *)ops->context; + HicnListener *hicn = (HicnListener *)ops->context; return hicn->conn_id; } static const Address *_getListenAddress(const ListenerOps *ops) { - HIcnListener *hicn = (HIcnListener *)ops->context; + HicnListener *hicn = (HicnListener *)ops->context; return hicn->localAddress; } static EncapType _getEncapType(const ListenerOps *ops) { return ENCAP_HICN; } static int _getSocket(const ListenerOps *ops) { - HIcnListener *hicn = (HIcnListener *)ops->context; + HicnListener *hicn = (HicnListener *)ops->context; return hicn->hicn_fd; } // =============================== -static void _readFrameToDiscard(HIcnListener *hicn, int fd) { +static void _readFrameToDiscard(HicnListener *hicn, int fd) { // we need to discard the frame. Read 1 byte. This will clear it off the // stack. uint8_t buffer; @@ -463,7 +463,7 @@ static void _readFrameToDiscard(HIcnListener *hicn, int fd) { } } -static unsigned _createNewConnection(HIcnListener *hicn, int fd, +static unsigned _createNewConnection(HicnListener *hicn, int fd, const AddressPair *pair) { bool isLocal = false; @@ -477,7 +477,7 @@ static unsigned _createNewConnection(HIcnListener *hicn, int fd, return connid; } -const Connection *_findConnectionFromPacket(HIcnListener *hicn, +const Connection *_findConnectionFromPacket(HicnListener *hicn, Address *packetSourceAddress) { const Connection *conn = NULL; if (hicn->connection_id != -1) { @@ -520,7 +520,7 @@ static Address *_createAddressFromPacket(uint8_t *msgBuffer) { return packetAddr; } -static void _handleProbeMessage(HIcnListener *hicn, uint8_t *msgBuffer) { +static void _handleProbeMessage(HicnListener *hicn, uint8_t *msgBuffer) { Address *packetAddr = _createAddressFromPacket(msgBuffer); if (packetAddr != NULL) { @@ -536,7 +536,7 @@ static void _handleProbeMessage(HIcnListener *hicn, uint8_t *msgBuffer) { parcMemory_Deallocate((void **)&msgBuffer); } -static void _handleWldrNotification(HIcnListener *hicn, uint8_t *msgBuffer) { +static void _handleWldrNotification(HicnListener *hicn, uint8_t *msgBuffer) { Address *packetAddr = _createAddressFromPacket(msgBuffer); if (packetAddr == NULL) { @@ -563,7 +563,7 @@ static void _handleWldrNotification(HIcnListener *hicn, uint8_t *msgBuffer) { } #ifdef WITH_MAPME -static void _handleMapMe(HIcnListener *hicn, int fd, uint8_t *msgBuffer) { +static void _handleMapMe(HicnListener *hicn, int fd, uint8_t *msgBuffer) { Address *packetAddr = _createAddressFromPacket(msgBuffer); if (packetAddr == NULL) { @@ -630,7 +630,7 @@ static void _handleMapMe(HIcnListener *hicn, int fd, uint8_t *msgBuffer) { } #endif /* WITH_MAPME */ -static Message *_readMessage(HIcnListener *hicn, int fd, uint8_t *msgBuffer) { +static Message *_readMessage(HicnListener *hicn, int fd, uint8_t *msgBuffer) { Message *message = NULL; ssize_t readLength = read(fd, msgBuffer, MTU_SIZE); @@ -702,7 +702,7 @@ static Message *_readMessage(HIcnListener *hicn, int fd, uint8_t *msgBuffer) { return message; } -static void _receivePacket(HIcnListener *hicn, int fd) { +static void _receivePacket(HicnListener *hicn, int fd) { Message *msg = NULL; uint8_t *msgBuffer = parcMemory_AllocateAndClear(MTU_SIZE); msg = _readMessage(hicn, fd, msgBuffer); @@ -713,7 +713,7 @@ static void _receivePacket(HIcnListener *hicn, int fd) { } static void _hicnListener_readcb(int fd, PARCEventType what, void *hicnVoid) { - HIcnListener *hicn = (HIcnListener *)hicnVoid; + HicnListener *hicn = (HicnListener *)hicnVoid; if (hicn->inetFamily == IPv4 || hicn->inetFamily == IPv6) { if (what & PARCEventType_Read) { diff --git a/hicn-light/src/io/hicnListener.h b/hicn-light/src/io/hicnListener.h index 98c5387c9..5897d33ad 100755 --- a/hicn-light/src/io/hicnListener.h +++ b/hicn-light/src/io/hicnListener.h @@ -15,7 +15,7 @@ /** * @file hicnListener.h - * @brief Listens for in coming HIcn connections + * @brief Listens for in coming Hicn connections * * */ @@ -29,7 +29,7 @@ #include <stdlib.h> struct hicn_listener; -typedef struct hicn_listener HIcnListener; +typedef struct hicn_listener HicnListener; ListenerOps *hicnListener_CreateInet(Forwarder *forwarder, char *symbolic, Address *address); diff --git a/hicn-light/src/io/streamConnection.c b/hicn-light/src/io/streamConnection.c index fedbb157a..948b6c01b 100755 --- a/hicn-light/src/io/streamConnection.c +++ b/hicn-light/src/io/streamConnection.c @@ -504,13 +504,13 @@ PARCEventBuffer *_tryReadControlMessage(_StreamState *stream, return NULL; } -static bool _isAnHIcnPacket(PARCEventBuffer *input) { +static bool _isAnHicnPacket(PARCEventBuffer *input) { size_t bytesAvailable = parcEventBuffer_GetLength(input); parcAssertTrue(bytesAvailable >= sizeof(header_control_message), "Called with too short an input: %zu", bytesAvailable); uint8_t *fh = parcEventBuffer_Pullup(input, sizeof(header_control_message)); - return messageHandler_IsValidHIcnPacket(fh); + return messageHandler_IsValidHicnPacket(fh); } static Message *_readMessage(_StreamState *stream, Ticks time, @@ -607,8 +607,8 @@ static void _conn_readcb(PARCEventQueue *event, PARCEventType type, parcEventBuffer_Destroy(&message); } - } else if (_isAnHIcnPacket(input)) { - // this is an HIcn packet (here we should distinguish between IPv4 and + } else if (_isAnHicnPacket(input)) { + // this is an Hicn packet (here we should distinguish between IPv4 and // IPv6 tryReadMessage may set nextMessageLength Message *message = _tryReadMessage(input, stream); diff --git a/hicn-plugin/cmake/Modules/Packaging.cmake b/hicn-plugin/cmake/Modules/Packaging.cmake index 21ba4138d..ce3b69f8f 100644 --- a/hicn-plugin/cmake/Modules/Packaging.cmake +++ b/hicn-plugin/cmake/Modules/Packaging.cmake @@ -21,11 +21,11 @@ set(${HICN_PLUGIN}_DESCRIPTION ) set(${HICN_PLUGIN}_DEB_DEPENDENCIES - "libhicn (>= 1.0), vpp (== 19.01-release), vpp-plugins (== 19.01-release)" + "libhicn (>= stable_version), vpp (== stable_version-release), vpp-plugins (== stable_version-release)" CACHE STRING "Dependencies for deb/rpm package." ) set(${HICN_PLUGIN}_RPM_DEPENDENCIES - "libhicn >= 1.0, vpp = 19.01-release, vpp-plugins = 19.01-release" + "libhicn >= stable_version, vpp = stable_version-release, vpp-plugins = stable_version-release" CACHE STRING "Dependencies for deb/rpm package." )
\ No newline at end of file diff --git a/lib/cmake/Modules/Packaging.cmake b/lib/cmake/Modules/Packaging.cmake index 5f946f95d..2ceda1426 100644 --- a/lib/cmake/Modules/Packaging.cmake +++ b/lib/cmake/Modules/Packaging.cmake @@ -23,19 +23,20 @@ socket API, etc" CACHE STRING "Description for deb/rpm package." ) -set(lib${LIBHICN}-dev_DESCRIPTION ${${LIBHICN}_DESCRIPTION} +set(lib${LIBHICN}_DESCRIPTION ${${LIBHICN}_DESCRIPTION} CACHE STRING "Description for deb/rpm package." ) -set(lib${LIBHICN}-devel_DESCRIPTION ${${LIBHICN}_DESCRIPTION} + +set(lib${LIBHICN}-dev_DESCRIPTION ${${LIBHICN}_DESCRIPTION} CACHE STRING "Description for deb/rpm package." ) set(lib${LIBHICN}-dev_DEB_DEPENDENCIES - "libhicn (>= 1.0)" + "libhicn (>= stable_version)" CACHE STRING "Dependencies for deb/rpm package." ) -set(lib${LIBHICN}-devel_DEB_DEPENDENCIES - "libhicn >= 1.0" +set(lib${LIBHICN}-dev_RPM_DEPENDENCIES + "libhicn >= stable_version" CACHE STRING "Dependencies for deb/rpm package." ) diff --git a/libtransport/cmake/Modules/Packaging.cmake b/libtransport/cmake/Modules/Packaging.cmake index 6dc0eb457..64d1dd325 100755 --- a/libtransport/cmake/Modules/Packaging.cmake +++ b/libtransport/cmake/Modules/Packaging.cmake @@ -32,48 +32,44 @@ set(lib${LIBTRANSPORT}-devel_DESCRIPTION ${lib${LIBTRANSPORT}_DESCRIPTION} if ((BUILD_MEMIF_CONNECTOR OR BUILD_VPP_PLUGIN) AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") set(lib${LIBTRANSPORT}_DEB_DEPENDENCIES - "libhicn (>= 1.0), libparc (>= 1.0), vpp-lib (== 19.01-release)" + "libhicn (>= stable_version), libparc (>= 1.0), vpp-lib (== stable_version-release)" CACHE STRING "Dependencies for deb/rpm package." ) set(lib${LIBTRANSPORT}_RPM_DEPENDENCIES - "libhicn >= 1.0, libparc >= 1.0, vpp-lib = 19.01-release" + "libhicn >= stable_version, libparc >= 1.0, vpp-lib = stable_version-release" CACHE STRING "Dependencies for deb/rpm package." ) set(lib${LIBTRANSPORT}-dev_DEB_DEPENDENCIES - "libtransport (>= 1.0), libasio-dev (>= 1.10), libhicn-dev (>= 1.0), libparc-dev (>= 1.0), vpp-dev (== 19.01-release)" + "lib${LIBTRANSPORT} (>= stable_version), libasio-dev (>= 1.10), libhicn-dev (>= stable_version), libparc-dev (>= 1.0), vpp-dev (== stable_version-release)" CACHE STRING "Dependencies for deb/rpm package." ) - set(lib${LIBTRANSPORT}-devel_RPM_DEPENDENCIES - "libtransport >= 1.0, asio-devel >= 1.10, libhicn-devel >= 1.0, libparc-devel >= 1.0, vpp-devel = 19.01-release" + set(lib${LIBTRANSPORT}-dev_RPM_DEPENDENCIES + "lib${LIBTRANSPORT} >= stable_version, asio-devel >= 1.10, libhicn-devel >= stable_version, libparc-devel >= 1.0, vpp-devel = stable_version-release" CACHE STRING "Dependencies for deb/rpm package." ) else() -<<<<<<< HEAD - -======= ->>>>>>> 691dfde... [HICN-3] First version of packaging system based on cmake. set(lib${LIBTRANSPORT}_DEB_DEPENDENCIES - "libhicn (>= 1.0), libparc (>= 1.0)" + "libhicn (>= stable_version), libparc (>= 1.0)" CACHE STRING "Dependencies for deb/rpm package." ) set(lib${LIBTRANSPORT}_RPM_DEPENDENCIES - "libhicn >= 1.0, libparc >= 1.0" + "libhicn >= stable_version, libparc >= 1.0" CACHE STRING "Dependencies for deb/rpm package." ) set(lib${LIBTRANSPORT}-dev_DEB_DEPENDENCIES - "libtransport (>= 1.0), libasio-dev (>= 1.10), libhicn-dev (>= 1.0), libparc-dev (>= 1.0)" + "lib${LIBTRANSPORT} (>= stable_version), libasio-dev (>= 1.10), libhicn-dev (>= stable_version), libparc-dev (>= 1.0)" CACHE STRING "Dependencies for deb/rpm package." ) - set(lib${LIBTRANSPORT}-devel_RPM_DEPENDENCIES - "libtransport >= 1.0, asio-devel >= 1.10, libhicn-devel >= 1.0, libparc-devel >= 1.0" + set(lib${LIBTRANSPORT}-dev_RPM_DEPENDENCIES + "lib${LIBTRANSPORT} >= stable_version, asio-devel >= 1.10, libhicn-devel >= stable_version, libparc-devel >= 1.0" CACHE STRING "Dependencies for deb/rpm package." ) diff --git a/libtransport/src/hicn/transport/core/memif_connector.cc b/libtransport/src/hicn/transport/core/memif_connector.cc index b3785e5c3..6c5f2ff5f 100644 --- a/libtransport/src/hicn/transport/core/memif_connector.cc +++ b/libtransport/src/hicn/transport/core/memif_connector.cc @@ -38,7 +38,6 @@ MemifConnector::MemifConnector(PacketReceivedCallback &&receive_callback, timer_set_(false), send_timer_(std::make_unique<utils::FdDeadlineTimer>(event_reactor_)), io_service_(io_service), - work_(std::make_unique<asio::io_service::work>(io_service_)), packet_counter_(0), memif_connection_({}), tx_buf_counter_(0), @@ -74,6 +73,8 @@ void MemifConnector::connect(uint32_t memif_id, long memif_mode) { createMemif(memif_id, memif_mode, nullptr); + work_ = std::make_unique<asio::io_service::work>(io_service_); + while (is_connecting_) { MemifConnector::main_event_reactor_.runOneEvent(); } @@ -402,7 +403,7 @@ void MemifConnector::close() { if (!closed_) { closed_ = true; event_reactor_.stop(); - io_service_.stop(); + work_.reset(); if (memif_worker_ && memif_worker_->joinable()) { memif_worker_->join(); diff --git a/libtransport/src/hicn/transport/core/pending_interest.cc b/libtransport/src/hicn/transport/core/pending_interest.cc index 8f6de1839..a2df9ba44 100644 --- a/libtransport/src/hicn/transport/core/pending_interest.cc +++ b/libtransport/src/hicn/transport/core/pending_interest.cc @@ -20,12 +20,28 @@ namespace transport { namespace core { PendingInterest::PendingInterest() - : interest_(nullptr, nullptr), timer_(), received_(false) {} + : interest_(nullptr, nullptr), + timer_(), + on_content_object_callback_(), + on_interest_timeout_callback_(), + received_(false) {} PendingInterest::PendingInterest(Interest::Ptr &&interest, std::unique_ptr<asio::steady_timer> &&timer) : interest_(std::move(interest)), timer_(std::move(timer)), + on_content_object_callback_(), + on_interest_timeout_callback_(), + received_(false) {} + +PendingInterest::PendingInterest(Interest::Ptr &&interest, + const OnContentObjectCallback &&on_content_object, + const OnInterestTimeoutCallback &&on_interest_timeout, + std::unique_ptr<asio::steady_timer> &&timer) + : interest_(std::move(interest)), + timer_(std::move(timer)), + on_content_object_callback_(std::move(on_content_object)), + on_interest_timeout_callback_(std::move(on_interest_timeout)), received_(false) {} PendingInterest::~PendingInterest() { @@ -34,16 +50,28 @@ PendingInterest::~PendingInterest() { void PendingInterest::cancelTimer() { timer_->cancel(); } -bool PendingInterest::isReceived() const { return received_; } - void PendingInterest::setReceived() { received_ = true; } +bool PendingInterest::isReceived() const { return received_; } + Interest::Ptr &&PendingInterest::getInterest() { return std::move(interest_); } -void PendingInterest::setReceived(bool received) { - PendingInterest::received_ = received; +const OnContentObjectCallback &PendingInterest::getOnDataCallback() const { + return on_content_object_callback_; +} + +void PendingInterest::setOnDataCallback(const OnContentObjectCallback &on_content_object) { + PendingInterest::on_content_object_callback_ = on_content_object; +} + +const OnInterestTimeoutCallback &PendingInterest::getOnTimeoutCallback() const { + return on_interest_timeout_callback_; +} + +void PendingInterest::setOnTimeoutCallback(const OnInterestTimeoutCallback &on_interest_timeout) { + PendingInterest::on_interest_timeout_callback_ = on_interest_timeout; } } // end namespace core -} // end namespace transport
\ No newline at end of file +} // end namespace transport diff --git a/libtransport/src/hicn/transport/core/pending_interest.h b/libtransport/src/hicn/transport/core/pending_interest.h index cbcafb5d9..58b51db79 100644 --- a/libtransport/src/hicn/transport/core/pending_interest.h +++ b/libtransport/src/hicn/transport/core/pending_interest.h @@ -34,6 +34,8 @@ class RawSocketInterface; template <typename ForwarderInt> class Portal; +typedef std::function<void(Interest::Ptr&&, ContentObject::Ptr&&)> OnContentObjectCallback; +typedef std::function<void(Interest::Ptr&&)> OnInterestTimeoutCallback; typedef std::function<void(const std::error_code &)> TimerCallback; class PendingInterest { @@ -47,9 +49,12 @@ class PendingInterest { PendingInterest(Interest::Ptr &&interest, std::unique_ptr<asio::steady_timer> &&timer); - ~PendingInterest(); + PendingInterest(Interest::Ptr &&interest, + const OnContentObjectCallback &&on_content_object, + const OnInterestTimeoutCallback &&on_interest_timeout, + std::unique_ptr<asio::steady_timer> &&timer); - bool isReceived() const; + ~PendingInterest(); template <typename Handler> TRANSPORT_ALWAYS_INLINE void startCountdown(Handler &&cb) { @@ -62,17 +67,23 @@ class PendingInterest { void setReceived(); + bool isReceived() const; + Interest::Ptr &&getInterest(); - void setReceived(bool received); + const OnContentObjectCallback &getOnDataCallback() const; + + void setOnDataCallback(const OnContentObjectCallback &on_content_object); - bool isValid() const; + const OnInterestTimeoutCallback &getOnTimeoutCallback() const; - void setValid(bool valid); + void setOnTimeoutCallback(const OnInterestTimeoutCallback &on_interest_timeout); private: Interest::Ptr interest_; std::unique_ptr<asio::steady_timer> timer_; + OnContentObjectCallback on_content_object_callback_; + OnInterestTimeoutCallback on_interest_timeout_callback_; bool received_; }; diff --git a/libtransport/src/hicn/transport/core/portal.h b/libtransport/src/hicn/transport/core/portal.h index a79717037..58406bbde 100644 --- a/libtransport/src/hicn/transport/core/portal.h +++ b/libtransport/src/hicn/transport/core/portal.h @@ -97,13 +97,10 @@ class Portal { virtual void onInterest(Interest::Ptr &&i) = 0; }; - Portal() : Portal(internal_io_service_) { - internal_work_ = std::make_unique<asio::io_service::work>(io_service_); - } + Portal() : Portal(internal_io_service_) {} Portal(asio::io_service &io_service) : io_service_(io_service), - is_running_(false), app_name_("libtransport_application"), consumer_callback_(nullptr), producer_callback_(nullptr), @@ -131,8 +128,7 @@ class Portal { } ~Portal() { - connector_.close(); - stopEventsLoop(); + stopEventsLoop(true); } TRANSPORT_ALWAYS_INLINE bool interestIsPending(const Name &name) { @@ -157,9 +153,30 @@ class Portal { std::placeholders::_1, name)); } + TRANSPORT_ALWAYS_INLINE void sendInterest(Interest::Ptr &&interest, + const OnContentObjectCallback &&on_content_object_callback, + const OnInterestTimeoutCallback &&on_interest_timeout_callback) { + + const Name name(interest->getName(), true); + + // Send it + forwarder_interface_.send(*interest); + + pending_interest_hash_table_[name] = std::make_unique<PendingInterest>( + std::move(interest), std::move(on_content_object_callback), + std::move(on_interest_timeout_callback), + std::make_unique<asio::steady_timer>(io_service_)); + + pending_interest_hash_table_[name]->startCountdown( + std::bind(&Portal<ForwarderInt>::timerHandler, + this, std::placeholders::_1, name)); + + } + TRANSPORT_ALWAYS_INLINE void timerHandler(const std::error_code &ec, const Name &name) { - if (TRANSPORT_EXPECT_FALSE(!is_running_)) { + bool is_stopped = io_service_.stopped(); + if (TRANSPORT_EXPECT_FALSE(is_stopped)) { return; } @@ -170,7 +187,9 @@ class Portal { std::unique_ptr<PendingInterest> ptr = std::move(it->second); pending_interest_hash_table_.erase(it); - if (consumer_callback_) { + if(ptr->getOnTimeoutCallback() != UNSET_CALLBACK){ + ptr->on_interest_timeout_callback_(std::move(ptr->getInterest())); + }else if (consumer_callback_) { consumer_callback_->onTimeout(std::move(ptr->getInterest())); } } @@ -189,9 +208,7 @@ class Portal { io_service_.reset(); // ensure that run()/poll() will do some work } - is_running_ = true; this->io_service_.run(); - is_running_ = false; } TRANSPORT_ALWAYS_INLINE void runOneEvent() { @@ -199,9 +216,7 @@ class Portal { io_service_.reset(); // ensure that run()/poll() will do some work } - is_running_ = true; this->io_service_.run_one(); - is_running_ = false; } TRANSPORT_ALWAYS_INLINE void sendContentObject( @@ -209,16 +224,17 @@ class Portal { forwarder_interface_.send(content_object); } - TRANSPORT_ALWAYS_INLINE void stopEventsLoop() { - is_running_ = false; - internal_work_.reset(); - + TRANSPORT_ALWAYS_INLINE void stopEventsLoop(bool kill_connection = false) { for (auto &pend_interest : pending_interest_hash_table_) { pend_interest.second->cancelTimer(); } clear(); + if(kill_connection) { + connector_.close(); + } + io_service_.post([this]() { io_service_.stop(); }); } @@ -242,7 +258,8 @@ class Portal { private: TRANSPORT_ALWAYS_INLINE void processIncomingMessages( Packet::MemBufPtr &&packet_buffer) { - if (TRANSPORT_EXPECT_FALSE(!is_running_)) { + bool is_stopped = io_service_.stopped(); + if (TRANSPORT_EXPECT_FALSE(is_stopped)) { return; } @@ -293,7 +310,11 @@ class Portal { interest_ptr->setReceived(); pending_interest_hash_table_.erase(content_object->getName()); - if (consumer_callback_) { + if(interest_ptr->getOnDataCallback() != UNSET_CALLBACK){ + interest_ptr->on_content_object_callback_( + std::move(interest_ptr->getInterest()), + std::move(content_object)); + }else if (consumer_callback_) { consumer_callback_->onContentObject( std::move(interest_ptr->getInterest()), std::move(content_object)); @@ -318,9 +339,6 @@ class Portal { private: asio::io_service &io_service_; asio::io_service internal_io_service_; - std::unique_ptr<asio::io_service::work> internal_work_; - - volatile bool is_running_; std::string app_name_; diff --git a/libtransport/src/hicn/transport/core/raw_socket_interface.cc b/libtransport/src/hicn/transport/core/raw_socket_interface.cc index 37aaff7e0..4cf7b2ca6 100644 --- a/libtransport/src/hicn/transport/core/raw_socket_interface.cc +++ b/libtransport/src/hicn/transport/core/raw_socket_interface.cc @@ -41,7 +41,7 @@ void RawSocketInterface::connect(bool is_consumer) { } // Get interface ip address - struct sockaddr_in6 address; + struct sockaddr_in6 address = {0}; utils::retrieveInterfaceAddress(output_interface_, &address); inet6_address_.family = address.sin6_family; diff --git a/libtransport/src/hicn/transport/core/socket_connector.cc b/libtransport/src/hicn/transport/core/socket_connector.cc index 332b87ec7..704d3badb 100644 --- a/libtransport/src/hicn/transport/core/socket_connector.cc +++ b/libtransport/src/hicn/transport/core/socket_connector.cc @@ -62,6 +62,7 @@ SocketConnector::SocketConnector(PacketReceivedCallback &&receive_callback, is_connecting_(false), is_reconnection_(false), data_available_(false), + is_closed_(false), receive_callback_(receive_callback), on_reconnect_callback_(on_reconnect_callback), app_name_(app_name) {} @@ -102,7 +103,11 @@ void SocketConnector::send(const Packet::MemBufPtr &packet) { } void SocketConnector::close() { - io_service_.post([this]() { socket_.close(); }); + io_service_.dispatch([this]() { + is_closed_ = true; + socket_.shutdown(asio::ip::tcp::socket::shutdown_type::shutdown_both); + socket_.close(); + }); } void SocketConnector::doWrite() { @@ -125,6 +130,9 @@ void SocketConnector::doWrite() { if (!output_buffer_.empty()) { doWrite(); } + } else if (ec.value() == static_cast<int>(std::errc::operation_canceled)) { + // The connection has been closed by the application. + return; } else { TRANSPORT_LOGE("%d %s", ec.value(), ec.message().c_str()); tryReconnect(); @@ -141,6 +149,9 @@ void SocketConnector::doReadBody(std::size_t body_length) { if (TRANSPORT_EXPECT_TRUE(!ec)) { receive_callback_(std::move(read_msg_)); doReadHeader(); + } else if (ec.value() == static_cast<int>(std::errc::operation_canceled)) { + // The connection has been closed by the application. + return; } else { TRANSPORT_LOGE("%d %s", ec.value(), ec.message().c_str()); tryReconnect(); @@ -165,6 +176,9 @@ void SocketConnector::doReadHeader() { } else { TRANSPORT_LOGE("Decoding error. Ignoring packet."); } + } else if (ec.value() == static_cast<int>(std::errc::operation_canceled)) { + // The connection has been closed by the application. + return; } else { TRANSPORT_LOGE("%d %s", ec.value(), ec.message().c_str()); tryReconnect(); @@ -173,11 +187,12 @@ void SocketConnector::doReadHeader() { } void SocketConnector::tryReconnect() { - if (!is_connecting_) { + if (!is_connecting_ && !is_closed_) { TRANSPORT_LOGE("Connection lost. Trying to reconnect...\n"); is_connecting_ = true; is_reconnection_ = true; io_service_.post([this]() { + socket_.shutdown(asio::ip::tcp::socket::shutdown_type::shutdown_both); socket_.close(); startConnectionTimer(); doConnect(); diff --git a/libtransport/src/hicn/transport/core/socket_connector.h b/libtransport/src/hicn/transport/core/socket_connector.h index d7a05aab4..e014111e2 100644 --- a/libtransport/src/hicn/transport/core/socket_connector.h +++ b/libtransport/src/hicn/transport/core/socket_connector.h @@ -19,6 +19,7 @@ #include <hicn/transport/core/name.h> #include <hicn/transport/utils/branch_prediction.h> +#include <asio/steady_timer.hpp> #include <asio.hpp> #include <deque> @@ -78,6 +79,7 @@ class SocketConnector : public Connector { bool is_connecting_; bool is_reconnection_; bool data_available_; + bool is_closed_; PacketReceivedCallback receive_callback_; OnReconnect on_reconnect_callback_; diff --git a/libtransport/src/hicn/transport/interfaces/full_duplex_socket.cc b/libtransport/src/hicn/transport/interfaces/full_duplex_socket.cc index 37e1d7b3e..e06858cc3 100644 --- a/libtransport/src/hicn/transport/interfaces/full_duplex_socket.cc +++ b/libtransport/src/hicn/transport/interfaces/full_duplex_socket.cc @@ -397,7 +397,7 @@ void AsyncFullDuplexSocket::onContentRetrieved(ConsumerSocket &s, return; } - TRANSPORT_LOGI("Received content with size %lu", size); + TRANSPORT_LOGI("Received content with size %zu", size); if (!ec) { read_callback_->readBufferAvailable(std::move(*receive_buffer_)); } else { diff --git a/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.cc b/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.cc index de3e84417..cc4f478af 100755 --- a/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.cc +++ b/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.cc @@ -22,6 +22,9 @@ namespace interface { RTCConsumerSocket::RTCConsumerSocket(int protocol, asio::io_service &io_service) : ConsumerSocket(protocol, io_service) {} +RTCConsumerSocket::RTCConsumerSocket(int protocol) + : ConsumerSocket(protocol) {} + RTCConsumerSocket::~RTCConsumerSocket() {} void RTCConsumerSocket::handleRTCPPacket(uint8_t *packet, size_t len) { diff --git a/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.h b/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.h index 86ccf6e22..cfde3128d 100755 --- a/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.h +++ b/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.h @@ -25,6 +25,8 @@ class RTCConsumerSocket : public ConsumerSocket { public: explicit RTCConsumerSocket(int protocol, asio::io_service &io_service); + explicit RTCConsumerSocket(int protocol); + ~RTCConsumerSocket(); void handleRTCPPacket(uint8_t *packet, size_t len); diff --git a/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.cc b/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.cc index 7b39e7ac9..f19502dee 100644 --- a/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.cc +++ b/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.cc @@ -55,6 +55,24 @@ RTCProducerSocket::RTCProducerSocket(asio::io_service &io_service) prodLabel_ = ((rand() % 255) << 24UL); } +RTCProducerSocket::RTCProducerSocket() + : ProducerSocket(), + currentSeg_(1), + nack_(std::make_shared<ContentObject>()), + producedBytes_(0), + producedPackets_(0), + bytesProductionRate_(0), + packetsProductionRate_(INIT_PACKET_PRODUCTION_RATE), + perSecondFactor_(1000 / STATS_INTERVAL_DURATION) { + auto nack_payload = utils::MemBuf::create(NACK_HEADER_SIZE); + nack_payload->append(NACK_HEADER_SIZE); + nack_->appendPayload(std::move(nack_payload)); + lastStats_ = std::chrono::steady_clock::now(); + srand(time(NULL)); + prodLabel_ = ((rand() % 255) << 24UL); +} + + RTCProducerSocket::~RTCProducerSocket() {} void RTCProducerSocket::registerName(Prefix &producer_namespace) { diff --git a/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.h b/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.h index 1a42bdc56..f1bcaa9e8 100755 --- a/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.h +++ b/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.h @@ -28,6 +28,9 @@ namespace interface { class RTCProducerSocket : public ProducerSocket { public: RTCProducerSocket(asio::io_service &io_service); + + RTCProducerSocket(); + ~RTCProducerSocket(); void registerName(Prefix &producer_namespace); diff --git a/libtransport/src/hicn/transport/interfaces/socket_consumer.cc b/libtransport/src/hicn/transport/interfaces/socket_consumer.cc index 27ed4e65f..89411e92c 100644 --- a/libtransport/src/hicn/transport/interfaces/socket_consumer.cc +++ b/libtransport/src/hicn/transport/interfaces/socket_consumer.cc @@ -99,7 +99,7 @@ int ConsumerSocket::consume(const Name &name, transport_protocol_->start(receive_buffer); - return CONSUMER_READY; + return CONSUMER_FINISHED; } int ConsumerSocket::asyncConsume( @@ -115,7 +115,7 @@ int ConsumerSocket::asyncConsume( }); } - return CONSUMER_READY; + return CONSUMER_RUNNING; } void ConsumerSocket::asyncSendInterest(Interest::Ptr &&interest, diff --git a/libtransport/src/hicn/transport/interfaces/socket_consumer.h b/libtransport/src/hicn/transport/interfaces/socket_consumer.h index 9e309aae8..536d2fde3 100755 --- a/libtransport/src/hicn/transport/interfaces/socket_consumer.h +++ b/libtransport/src/hicn/transport/interfaces/socket_consumer.h @@ -26,8 +26,9 @@ #include <hicn/transport/utils/event_thread.h> #include <hicn/transport/utils/sharable_vector.h> -#define CONSUMER_READY 0 +#define CONSUMER_FINISHED 0 #define CONSUMER_BUSY 1 +#define CONSUMER_RUNNING 2 namespace transport { diff --git a/libtransport/src/hicn/transport/interfaces/socket_producer.cc b/libtransport/src/hicn/transport/interfaces/socket_producer.cc index 69adc2b3f..d9204f111 100755 --- a/libtransport/src/hicn/transport/interfaces/socket_producer.cc +++ b/libtransport/src/hicn/transport/interfaces/socket_producer.cc @@ -54,9 +54,9 @@ ProducerSocket::ProducerSocket(asio::io_service &io_service) } ProducerSocket::~ProducerSocket() { - TRANSPORT_LOGI("Destroying the ProducerSocket"); + processing_thread_stop_ = true; - portal_->stopEventsLoop(); + portal_->stopEventsLoop(true); if (processing_thread_.joinable()) { processing_thread_.join(); @@ -79,8 +79,6 @@ void ProducerSocket::serveForever() { } void ProducerSocket::stop() { - TRANSPORT_LOGI("Calling stop for ProducerSocket"); - portal_->killConnection(); portal_->stopEventsLoop(); } diff --git a/scripts/build-packages.sh b/scripts/build-packages.sh index ae775aca9..b199f99e8 100644 --- a/scripts/build-packages.sh +++ b/scripts/build-packages.sh @@ -11,4 +11,133 @@ # See the License for the specific language governing permissions and # limitations under the License. +#!/bin/bash +set -euxo pipefail + +SCRIPT_PATH=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P ) +APT_PATH=`which apt-get` || true +apt_get=${APT_PATH:-"/usr/local/bin/apt-get"} + +PACKAGECLOUD_RELEASE_REPO_DEB="https://packagecloud.io/install/repositories/fdio/release/script.deb.sh" +PACKAGECLOUD_RELEASE_REPO_RPM="https://packagecloud.io/install/repositories/fdio/release/script.rpm.sh" + +BUILD_TOOLS_UBUNTU="build-essential doxygen" +LIBSSL_LIBEVENT_UBUNTU="libevent-dev libssl-dev" +DEPS_UBUNTU="libparc-dev libasio-dev" + +# BUILD_TOOLS_GROUP_CENTOS="'Development Tools'" +DEPS_CENTOS="libparc-devel asio-devel centos-release-scl devtoolset-7" +LATEST_EPEL_REPO="http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm" + +install_cmake() { + cat /etc/resolv.conf + echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf + cat /etc/resolv.conf + + CMAKE_INSTALL_SCRIPT_URL="https://cmake.org/files/v3.8/cmake-3.8.0-Linux-x86_64.sh" + CMAKE_INSTALL_SCRIPT="/tmp/install_cmake.sh" + curl ${CMAKE_INSTALL_SCRIPT_URL} > ${CMAKE_INSTALL_SCRIPT} + + sudo mkdir -p /opt/cmake + sudo bash ${CMAKE_INSTALL_SCRIPT} --skip-license --prefix=/opt/cmake + export PATH=/opt/cmake/bin:${PATH} +} + +# Parameters: +# $1 = Distribution id +# $2 = Distribution codename +# +setup_fdio_repo() { + DISTRIB_ID=${1} + + if [ "${DISTRIB_ID}" == "ubuntu" ]; then + curl -s ${PACKAGECLOUD_RELEASE_REPO_DEB} | sudo bash + elif [ "${DISTRIB_ID}" == "centos" ]; then + curl -s ${PACKAGECLOUD_RELEASE_REPO_RPM} | sudo bash + curl ${LATEST_EPEL_REPO} > epel-release-latest-7.noarch.rpm + rpm -ivh epel-release-latest-7.noarch.rpm || true + rm epel-release-latest-7.noarch.rpm + else + echo "Distribution ${DISTRIB_ID} is not supported" + exit -1 + fi +} + +setup() { + # Figure out what system we are running on + if [ -f /etc/os-release ]; then + . /etc/os-release + else + echo "ERROR: System configuration not recognized. Build failed" + exit -1 + fi + + DISTRIB_ID=${ID} + + echo DISTRIBUTION: ${PRETTY_NAME} + echo ARCHITECTURE: $(uname -m) + + install_cmake + setup_fdio_repo ${DISTRIB_ID} + + if [ "${DISTRIB_ID}" == "ubuntu" ]; then + sudo ${apt_get} update || true + fi + + # Install dependencies + if [ ${DISTRIB_ID} == "ubuntu" ]; then + echo ${BUILD_TOOLS_UBUNTU} ${DEPS_UBUNTU} | xargs sudo ${apt_get} install -y --allow-unauthenticated --no-install-recommends + elif [ ${DISTRIB_ID} == "centos" ]; then + # echo ${BUILD_TOOLS_GROUP_CENTOS} | xargs sudo yum groupinstall -y --nogpgcheck + echo ${DEPS_CENTOS} | xargs sudo yum install -y --nogpgcheck + sudo yum install devtoolset-7 + scl enable devtoolset-7 bash + + c++ --version + + CXX_COMPILER="/opt/rh/devtoolset-7/root/usr/bin/c++" + CC_COMPILER="/opt/rh/devtoolset-7/root/usr/bin/cc" + + ${CXX_COMPILER} --version + ${CC_COMPILER} --version + + export CC=${CC_COMPILER} CXX=${CXX_COMPILER} + fi + + # do nothing but check compiler version + c++ --version +} + +# Parameters: +# $1 = Package name +# +build_package() { + setup + + echo "*******************************************************************" + echo "********************* STARTING PACKAGE BUILD **********************" + echo "*******************************************************************" + + # Make the package + mkdir -p ${SCRIPT_PATH}/../build && pushd ${SCRIPT_PATH}/../build + + rm -rf * + cmake -DCMAKE_INSTALL_PREFIX=/usr .. + make package + + find . -not -name '*.deb' -not -name '*.rpm' -print0 | xargs -0 rm -rf -- || true + + popd + + echo "*******************************************************************" + echo "***************** BUILD COMPLETED SUCCESSFULLY *******************" + echo "*******************************************************************" + + exit 0 +} + +pushd ${SCRIPT_PATH}/.. +build_package +popd + exit 0
\ No newline at end of file diff --git a/utils/cmake/Modules/Packaging.cmake b/utils/cmake/Modules/Packaging.cmake index cff3d3fb1..37c123cf2 100644 --- a/utils/cmake/Modules/Packaging.cmake +++ b/utils/cmake/Modules/Packaging.cmake @@ -18,11 +18,11 @@ useful for testing and debugging within a hicn network." ) set(${HICN_UTILS}_DEB_DEPENDENCIES - "libhicntransport (>= 1.0)" + "libhicntransport (>= stable_version)" CACHE STRING "Dependencies for deb/rpm package." ) set(${HICN_UTILS}_RPM_DEPENDENCIES - "libhicntransport >= 1.0" + "libhicntransport >= stable_version" CACHE STRING "Dependencies for deb/rpm package." )
\ No newline at end of file diff --git a/utils/src/ping_client.cc b/utils/src/ping_client.cc index c3bfa4086..24f7bd7c9 100755 --- a/utils/src/ping_client.cc +++ b/utils/src/ping_client.cc @@ -76,13 +76,15 @@ class Configuration { class Client : interface::BasePortal::ConsumerCallback { public: - Client(Configuration *c) : portal_() { + Client(Configuration *c) + : portal_(), + signals_(portal_.getIoService(), SIGINT, SIGQUIT) { // Let the main thread to catch SIGINT and SIGQUIT - // asio::signal_set signals(io_service, SIGINT, SIGQUIT); - // signals.async_wait(std::bind(&Client::afterSignal, this)); - portal_.connect(); portal_.setConsumerCallback(this); + + signals_.async_wait(std::bind(&Client::afterSignal, this)); + timer_.reset(new asio::steady_timer(portal_.getIoService())); config_ = c; sequence_number_ = config_->first_suffix_; @@ -97,6 +99,8 @@ class Client : interface::BasePortal::ConsumerCallback { } } + virtual ~Client() {} + void ping() { std::cout << "start ping" << std::endl; doPing(); @@ -270,7 +274,7 @@ class Client : interface::BasePortal::ConsumerCallback { std::cout << "Stop ping" << std::endl; std::cout << "Sent: " << sent_ << " Received: " << received_ << " Timeouts: " << timedout_ << std::endl; - portal_.stopEventsLoop(); + portal_.stopEventsLoop(true); } void reset() { @@ -287,6 +291,7 @@ class Client : interface::BasePortal::ConsumerCallback { private: SendTimeMap send_timestamps_; interface::BasePortal portal_; + asio::signal_set signals_; uint64_t sequence_number_; uint64_t last_jump_; uint64_t processed_; |