aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-light/src
diff options
context:
space:
mode:
Diffstat (limited to 'hicn-light/src')
-rw-r--r--hicn-light/src/hicn/config/configurationListeners.c4
-rw-r--r--hicn-light/src/hicn/config/controlAddPolicy.c2
-rw-r--r--hicn-light/src/hicn/core/mapme.c61
-rw-r--r--hicn-light/src/hicn/core/name.c5
-rw-r--r--hicn-light/src/hicn/core/nameBitvector.c4
-rw-r--r--hicn-light/src/hicn/io/hicnListener.c6
-rw-r--r--hicn-light/src/hicn/io/udpListener.c1
-rw-r--r--hicn-light/src/hicn/processor/fib.c5
-rw-r--r--hicn-light/src/hicn/processor/fibEntry.c10
-rw-r--r--hicn-light/src/hicn/processor/fibEntry.h11
-rw-r--r--hicn-light/src/hicn/processor/messageProcessor.c1
-rw-r--r--hicn-light/src/hicn/strategies/loadBalancer.c12
-rw-r--r--hicn-light/src/hicn/utils/commands.h4
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 {