diff options
Diffstat (limited to 'hicn-light/src/hicn')
-rw-r--r-- | hicn-light/src/hicn/config/configurationListeners.c | 4 | ||||
-rw-r--r-- | hicn-light/src/hicn/config/controlAddPolicy.c | 2 | ||||
-rw-r--r-- | hicn-light/src/hicn/core/mapme.c | 61 | ||||
-rw-r--r-- | hicn-light/src/hicn/core/name.c | 5 | ||||
-rw-r--r-- | hicn-light/src/hicn/core/nameBitvector.c | 4 | ||||
-rw-r--r-- | hicn-light/src/hicn/io/hicnListener.c | 6 | ||||
-rw-r--r-- | hicn-light/src/hicn/io/udpListener.c | 1 | ||||
-rw-r--r-- | hicn-light/src/hicn/processor/fib.c | 5 | ||||
-rw-r--r-- | hicn-light/src/hicn/processor/fibEntry.c | 10 | ||||
-rw-r--r-- | hicn-light/src/hicn/processor/fibEntry.h | 11 | ||||
-rw-r--r-- | hicn-light/src/hicn/processor/messageProcessor.c | 1 | ||||
-rw-r--r-- | hicn-light/src/hicn/strategies/loadBalancer.c | 12 | ||||
-rw-r--r-- | hicn-light/src/hicn/utils/commands.h | 4 |
13 files changed, 83 insertions, 43 deletions
diff --git a/hicn-light/src/hicn/config/configurationListeners.c b/hicn-light/src/hicn/config/configurationListeners.c index 21bfe7640..b862b98f4 100644 --- a/hicn-light/src/hicn/config/configurationListeners.c +++ b/hicn-light/src/hicn/config/configurationListeners.c @@ -393,10 +393,12 @@ bool _addHicn(Configuration *config, add_listener_command *control, if (success == true && localAddress != NULL) { if (logger_IsLoggable(configuration_GetLogger(config), LoggerFacility_Config, PARCLogLevel_Info)) { + char * str = addressToString(localAddress); logger_Log(configuration_GetLogger(config), LoggerFacility_Config, PARCLogLevel_Info, __func__, "Setup hicn listener on address %s", - addressToString(localAddress)); + str); + parcMemory_Deallocate((void **)&str); } } diff --git a/hicn-light/src/hicn/config/controlAddPolicy.c b/hicn-light/src/hicn/config/controlAddPolicy.c index 8618c6246..66439d29c 100644 --- a/hicn-light/src/hicn/config/controlAddPolicy.c +++ b/hicn-light/src/hicn/config/controlAddPolicy.c @@ -139,7 +139,7 @@ static CommandReturn _controlAddPolicy_Execute(CommandParser *parser, addPolicyCommand->len = len; - policy_t policy; + hicn_policy_t policy; snprintf((char*)policy.app_name, APP_NAME_LEN, "%s", (char*)parcList_GetAtIndex(args, 3)); for (int i=4; i < 11; i++) { const char *tag = parcList_GetAtIndex(args, i); diff --git a/hicn-light/src/hicn/core/mapme.c b/hicn-light/src/hicn/core/mapme.c index a22d01ae7..397723a79 100644 --- a/hicn-light/src/hicn/core/mapme.c +++ b/hicn-light/src/hicn/core/mapme.c @@ -146,7 +146,7 @@ ERR_MALLOC: void mapmeTFIB_Release(MapMeTFIB **tfibPtr) { MapMeTFIB *tfib = *tfibPtr; - /* TODO; Release all timers */ + /* TODO; Release all timers: see mapmeTFIB_Remove */ parcHashMap_Release(&tfib->nexthops); free(tfib); *tfibPtr = NULL; @@ -177,9 +177,13 @@ static const PARCEventTimer *mapmeTFIB_Get(const MapMeTFIB *tfib, const PARCBuffer *buffer; PARCUnsigned *cid = parcUnsigned_Create(conn_id); buffer = parcHashMap_Get(tfib->nexthops, cid); - if (!buffer) return NULL; + if (!buffer) { + timer = NULL; + goto END; + } PARCByteArray *array = parcBuffer_Array(buffer); timer = *((PARCEventTimer **)parcByteArray_Array(array)); +END: parcUnsigned_Release(&cid); return timer; } @@ -200,14 +204,37 @@ static void mapmeTFIB_Put(MapMeTFIB *tfib, unsigned conn_id, parcBuffer_Release(&buffer); } -static void mapmeTFIB_Remove(MapMeTFIB *tfib, unsigned conn_id) { - // Who releases the timer ? +static void mapmeTFIB_Remove(const MapMe * mapme, MapMeTFIB *tfib, unsigned conn_id) { PARCUnsigned *cid = parcUnsigned_Create(conn_id); + + /* Release timer */ + const PARCBuffer *buffer = parcHashMap_Get(tfib->nexthops, cid); + if (buffer) { + PARCByteArray *array = parcBuffer_Array(buffer); + PARCEventTimer * timer = *((PARCEventTimer **)parcByteArray_Array(array)); + if (timer) { + Dispatcher *dispatcher = forwarder_GetDispatcher(mapme->forwarder); + dispatcher_DestroyTimerEvent(dispatcher, &timer); + } + } + parcHashMap_Remove(tfib->nexthops, cid); parcUnsigned_Release(&cid); } static PARCIterator *mapmeTFIB_CreateKeyIterator(const MapMeTFIB *tfib) { + /* + * Creating an iterator on an empty HashMap seems to raise an exception + * due to : + * parcTrapOutOfMemoryIf(state->listIterator == NULL, + * "Cannot create parcLinkedList_CreateIterator"); + * in : _parcHashMap_Init + * + * All buckets are empty, as they are after creation, and as they should be, + * but the error is triggered. + */ + if (parcHashMap_Size(tfib->nexthops) == 0) + return NULL; return parcHashMap_CreateKeyIterator(tfib->nexthops); } @@ -368,7 +395,7 @@ static bool mapme_setFacePending(const MapMe *mapme, const Name *name, PARCEventTimer *oldTimer = (PARCEventTimer *)mapmeTFIB_Get(TFIB(fibEntry), conn_id); if (oldTimer) parcEventTimer_Stop(oldTimer); - mapmeTFIB_Remove(TFIB(fibEntry), conn_id); + mapmeTFIB_Remove(mapme, TFIB(fibEntry), conn_id); } numberSet_Release(&conns); @@ -402,6 +429,7 @@ static bool mapme_setFacePending(const MapMe *mapme, const Name *name, name_str, params.seq, conn_id); free(name_str); connection_ReSend(conn, special_interest, NOT_A_NOTIFICATION); + parcMemory_Deallocate((void**)&special_interest); } else { INFO(mapme, "[MAP-Me] Stopped retransmissions as face went down"); } @@ -743,15 +771,18 @@ static bool mapme_onSpecialInterest(const MapMe *mapme, INFO(mapme, "[MAP-Me] - (1/3) processing prev hops"); if (params->type == UPDATE) { PARCIterator *iterator = mapmeTFIB_CreateKeyIterator(TFIB(fibEntry)); - while (parcIterator_HasNext(iterator)) { - PARCUnsigned *cid = parcIterator_Next(iterator); - unsigned conn_id = parcUnsigned_GetUnsigned(cid); - INFO(mapme, "[MAP-Me] - Re-sending IU to pending connection %d", - conn_id); - mapme_setFacePending(mapme, fibEntry_GetPrefix(fibEntry), fibEntry, - conn_id, false, false, false, 0); + if (iterator) { + /* No iterator is created if the TFIB is empty */ + while (parcIterator_HasNext(iterator)) { + PARCUnsigned *cid = parcIterator_Next(iterator); + unsigned conn_id = parcUnsigned_GetUnsigned(cid); + INFO(mapme, "[MAP-Me] - Re-sending IU to pending connection %d", + conn_id); + mapme_setFacePending(mapme, fibEntry_GetPrefix(fibEntry), fibEntry, + conn_id, false, false, false, 0); + } + parcIterator_Release(&iterator); } - parcIterator_Release(&iterator); } /* nextHops -> prevHops @@ -791,7 +822,7 @@ static bool mapme_onSpecialInterest(const MapMe *mapme, INFO(mapme, "[MAP-Me] - Canceled pending timer"); parcEventTimer_Stop(oldTimer); } - mapmeTFIB_Remove(TFIB(fibEntry), conn_in_id); + mapmeTFIB_Remove(mapme, TFIB(fibEntry), conn_in_id); /* Remove all next hops */ for (size_t k = 0; k < numberSet_Length(nexthops); k++) { @@ -934,7 +965,7 @@ void mapme_onSpecialInterestAck(const MapMe *mapme, const uint8_t *msgBuffer, /* Stop timer and remove entry from TFIB */ parcEventTimer_Stop(timer); - mapmeTFIB_Remove(TFIB(fibEntry), conn_in_id); + mapmeTFIB_Remove(mapme, TFIB(fibEntry), conn_in_id); INFO(mapme, "[MAP-Me] - Removing TFIB entry for ack on connection %d", conn_in_id); diff --git a/hicn-light/src/hicn/core/name.c b/hicn-light/src/hicn/core/name.c index 805e7bfae..b4a5e8d1b 100644 --- a/hicn-light/src/hicn/core/name.c +++ b/hicn-light/src/hicn/core/name.c @@ -239,8 +239,9 @@ char *name_ToString(const Name *name) { Address *packetAddr = nameBitvector_ToAddress(name_GetContentName(name)); - sprintf(output, "name: %s seq: %u", addressToString(packetAddr), - name->segment); + char * address_str = addressToString(packetAddr); + sprintf(output, "name: %s seq: %u", address_str, name->segment); + parcMemory_Deallocate((void **)&address_str); addressDestroy(&packetAddr); diff --git a/hicn-light/src/hicn/core/nameBitvector.c b/hicn-light/src/hicn/core/nameBitvector.c index 6ad623b14..cc13bf610 100644 --- a/hicn-light/src/hicn/core/nameBitvector.c +++ b/hicn-light/src/hicn/core/nameBitvector.c @@ -354,7 +354,9 @@ char *nameBitvector_ToString(const NameBitvector *name) { Address *packetAddr = nameBitvector_ToAddress(name); - sprintf(output, "prefix: %s len: %u", addressToString(packetAddr), name->len); + char * str = addressToString(packetAddr); + sprintf(output, "prefix: %s len: %u", str, name->len); + parcMemory_Deallocate((void **)&str); addressDestroy(&packetAddr); diff --git a/hicn-light/src/hicn/io/hicnListener.c b/hicn-light/src/hicn/io/hicnListener.c index bc49f4cee..8647a4d54 100644 --- a/hicn-light/src/hicn/io/hicnListener.c +++ b/hicn-light/src/hicn/io/hicnListener.c @@ -216,7 +216,10 @@ static void _hicnListener_readcb(int fd, PARCEventType what, void *listener_void static bool _isEmptyAddressIPv4(Address *address) { bool res = false; - if (strcmp("inet4://0.0.0.0:1234", addressToString(address)) == 0) res = true; + char * str = addressToString(address); + if (strcmp("inet4://0.0.0.0:1234", str) == 0) res = true; + parcMemory_Deallocate((void**)&str); + return res; } @@ -228,6 +231,7 @@ ListenerOps *hicnListener_CreateInet(Forwarder *forwarder, char *symbolic, hicn->forwarder = forwarder; hicn->listenerName = parcMemory_StringDuplicate(symbolic, strlen(symbolic)); + hicn->logger = logger_Acquire(forwarder_GetLogger(forwarder)); hicn->conn_id = forwarder_GetNextConnectionId(forwarder); hicn->inetFamily = IPv4; diff --git a/hicn-light/src/hicn/io/udpListener.c b/hicn-light/src/hicn/io/udpListener.c index 21b4f6190..16e8c8ddf 100644 --- a/hicn-light/src/hicn/io/udpListener.c +++ b/hicn-light/src/hicn/io/udpListener.c @@ -633,6 +633,7 @@ static void _readcb(int fd, PARCEventType what, void * listener_void) { if(readLength < 0) { printf("unable to read the message\n"); + parcMemory_Deallocate(packet); return; } diff --git a/hicn-light/src/hicn/processor/fib.c b/hicn-light/src/hicn/processor/fib.c index 8822134fe..de0d1e2ef 100644 --- a/hicn-light/src/hicn/processor/fib.c +++ b/hicn-light/src/hicn/processor/fib.c @@ -236,6 +236,8 @@ void fib_Add(FIB *fib, FibEntry *entry) { inner_node ->right = curr; } fib->size ++; + + name_Release(&inner_prefix); } FibEntry *fib_Contains(const FIB *fib, const Name *prefix) { @@ -431,6 +433,9 @@ void fib_Remove(FIB *fib, const Name *name, unsigned connId) { _removeNode(fib, name); #endif /* WITH_MAPME */ + // XXX We never release the FIB entry here it seems, including the inner + // prefix + } void _removeConnectionId(FibNode *n, unsigned connectionId, diff --git a/hicn-light/src/hicn/processor/fibEntry.c b/hicn-light/src/hicn/processor/fibEntry.c index 077e33ff3..7412b4ccf 100644 --- a/hicn-light/src/hicn/processor/fibEntry.c +++ b/hicn-light/src/hicn/processor/fibEntry.c @@ -55,7 +55,7 @@ struct fib_entry { #ifdef WITH_POLICY NumberSet *nexthops; const Forwarder * forwarder; - policy_t policy; + hicn_policy_t policy; policy_counters_t policy_counters; // NumberSet *available_nexthops; #ifdef WITH_MAPME @@ -198,7 +198,7 @@ fibEntry_GetAvailableNextHops(const FibEntry *fibEntry, unsigned in_connection) ConnectionTable * table = forwarder_GetConnectionTable(fibEntry->forwarder); NumberSet * nexthops; bool dealloc_nexthops = false; - policy_t policy = fibEntry_GetPolicy(fibEntry); + hicn_policy_t policy = fibEntry_GetPolicy(fibEntry); /* Reset available next hops and start filtering */ NumberSet * available_nexthops = numberSet_Create(); @@ -465,11 +465,11 @@ fibEntry_GetAvailableNextHops(const FibEntry *fibEntry, unsigned in_connection) return priority_nexthops; } -policy_t fibEntry_GetPolicy(const FibEntry *fibEntry) { +hicn_policy_t fibEntry_GetPolicy(const FibEntry *fibEntry) { return fibEntry->policy; } -void fibEntry_SetPolicy(FibEntry *fibEntry, policy_t policy) { +void fibEntry_SetPolicy(FibEntry *fibEntry, hicn_policy_t policy) { fibEntry->policy = policy; mapme_reconsiderFibEntry(forwarder_getMapmeInstance(fibEntry->forwarder), fibEntry); } @@ -541,7 +541,7 @@ const NumberSet *fibEntry_GetNexthopsFromForwardingStrategy( ConnectionTable * table = forwarder_GetConnectionTable(fibEntry->forwarder); unsigned in_connection = message_GetIngressConnectionId(interestMessage); - policy_t policy = fibEntry_GetPolicy(fibEntry); + hicn_policy_t policy = fibEntry_GetPolicy(fibEntry); NumberSet * out; diff --git a/hicn-light/src/hicn/processor/fibEntry.h b/hicn-light/src/hicn/processor/fibEntry.h index 9e438b0e6..3f78f47dd 100644 --- a/hicn-light/src/hicn/processor/fibEntry.h +++ b/hicn-light/src/hicn/processor/fibEntry.h @@ -99,13 +99,6 @@ size_t fibEntry_NexthopCount(const FibEntry *fibEntry); */ const NumberSet *fibEntry_GetNexthops(const FibEntry *fibEntry); -const NumberSet *fibEntry_GetNexthopsFromForwardingStrategy( -#ifdef WITH_POLICY - FibEntry *fibEntry, const Message *interestMessage, bool is_retransmission); -#else - const FibEntry *fibEntry, const Message *interestMessage); -#endif /* WITH_POLICY */ - #ifdef WITH_POLICY void fibEntry_ReceiveObjectMessage(FibEntry *fibEntry, #else @@ -117,9 +110,9 @@ void fibEntry_ReceiveObjectMessage(const FibEntry *fibEntry, Ticks objReception); #ifdef WITH_POLICY -policy_t fibEntry_GetPolicy(const FibEntry *fibEntry); +hicn_policy_t fibEntry_GetPolicy(const FibEntry *fibEntry); void fibEntry_ReconsiderPolicy(FibEntry *fibEntry); -void fibEntry_SetPolicy(FibEntry *fibEntry, policy_t policy); +void fibEntry_SetPolicy(FibEntry *fibEntry, hicn_policy_t policy); void fibEntry_UpdateStats(FibEntry *fibEntry, uint64_t now); NumberSet * fibEntry_GetAvailableNextHops(const FibEntry *fibEntry, unsigned in_connection); NumberSet * fibEntry_GetPreviousNextHops(const FibEntry *fibEntry); diff --git a/hicn-light/src/hicn/processor/messageProcessor.c b/hicn-light/src/hicn/processor/messageProcessor.c index bdd9c23e8..d3f07cbda 100644 --- a/hicn-light/src/hicn/processor/messageProcessor.c +++ b/hicn-light/src/hicn/processor/messageProcessor.c @@ -619,6 +619,7 @@ static bool messageProcessor_ForwardViaFib(MessageProcessor *processor, } } + numberSet_Release(&nexthops); return false; } diff --git a/hicn-light/src/hicn/strategies/loadBalancer.c b/hicn-light/src/hicn/strategies/loadBalancer.c index 878a58515..bba398b02 100644 --- a/hicn-light/src/hicn/strategies/loadBalancer.c +++ b/hicn-light/src/hicn/strategies/loadBalancer.c @@ -355,14 +355,14 @@ static void _strategyLoadBalancer_ImplDestroy(StrategyImpl **strategyPtr) { parcObject_Release((void **) &state); } parcIterator_Release(&it); + } - parcHashMap_Release(&(strategy->strategy_state)); + parcHashMap_Release(&(strategy->strategy_state)); #ifndef WITH_POLICY - numberSet_Release(&(strategy->nexthops)); + numberSet_Release(&(strategy->nexthops)); #endif /* ! WITH_POLICY */ - parcMemory_Deallocate((void **) &strategy); - parcMemory_Deallocate((void **) &impl); - *strategyPtr = NULL; - } + parcMemory_Deallocate((void **) &strategy); + parcMemory_Deallocate((void **) &impl); + *strategyPtr = NULL; } diff --git a/hicn-light/src/hicn/utils/commands.h b/hicn-light/src/hicn/utils/commands.h index d8e5329b3..3758f0f41 100644 --- a/hicn-light/src/hicn/utils/commands.h +++ b/hicn-light/src/hicn/utils/commands.h @@ -329,14 +329,14 @@ typedef struct { ip_address_t address; uint8_t addressType; uint8_t len; - policy_t policy; + hicn_policy_t policy; } add_policy_command; typedef struct { ip_address_t address; uint8_t addressType; uint8_t len; - policy_t policy; + hicn_policy_t policy; } list_policies_command; typedef struct { |