aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-light/src/hicn/processor
diff options
context:
space:
mode:
Diffstat (limited to 'hicn-light/src/hicn/processor')
-rw-r--r--hicn-light/src/hicn/processor/fibEntry.c103
-rw-r--r--hicn-light/src/hicn/processor/fibEntry.h32
-rw-r--r--hicn-light/src/hicn/processor/messageProcessor.c15
-rw-r--r--hicn-light/src/hicn/processor/messageProcessor.h5
4 files changed, 63 insertions, 92 deletions
diff --git a/hicn-light/src/hicn/processor/fibEntry.c b/hicn-light/src/hicn/processor/fibEntry.c
index 11a572c88..46917a9d2 100644
--- a/hicn-light/src/hicn/processor/fibEntry.c
+++ b/hicn-light/src/hicn/processor/fibEntry.c
@@ -61,10 +61,10 @@ struct fib_entry {
// NumberSet *available_nexthops;
#ifdef WITH_MAPME
/* In case of no multipath, this stores the previous decision taken by policy */
- unsigned previous_nexthop;
#endif /* WITH_MAPME */
#endif /* WITH_POLICY */
#ifdef WITH_MAPME
+ NumberSet * previous_nexthops;
void *userData;
void (*userDataRelease)(void **userData);
#endif /* WITH_MAPME */
@@ -122,9 +122,6 @@ FibEntry *fibEntry_Create(Name *name, strategy_type fwdStrategy) {
fibEntry->forwarder = forwarder;
fibEntry->policy = POLICY_NONE;
fibEntry->policy_counters = POLICY_COUNTERS_NONE;
-#ifdef WITH_MAPME
- fibEntry->previous_nexthop = ~0;
-#endif /* WITH_MAPME */
#endif /* WITH_POLICY */
return fibEntry;
@@ -223,12 +220,12 @@ fibEntry_GetAvailableNextHops(const FibEntry *fibEntry, unsigned in_connection)
ConnectionList * list = connectionTable_GetEntries(table);
for (size_t i = 0; i < connectionList_Length(list); i++) {
Connection *conn = connectionList_Get(list, i);
+ if (connection_IsLocal(conn))
+ continue;
if (connection_GetAdminState(conn) == CONNECTION_STATE_DOWN)
continue;
if (connection_GetState(conn) == CONNECTION_STATE_DOWN)
continue;
- if (connection_IsLocal(conn))
- continue;
numberSet_Add(nexthops, connection_GetConnectionId(conn));
}
connectionList_Destroy(&list);
@@ -445,46 +442,57 @@ fibEntry_GetAvailableNextHops(const FibEntry *fibEntry, unsigned in_connection)
numberSet_Release(&filtered_nexthops);
}
- return available_nexthops;
-}
+ /* Priority */
+ NumberSet * priority_nexthops = numberSet_Create();
-policy_t fibEntry_GetPolicy(const FibEntry *fibEntry) {
- return fibEntry->policy;
-}
-
-void fibEntry_ReconsiderPolicy(FibEntry *fibEntry) {
-#ifdef WITH_MAPME
- NumberSet * available_nexthops = fibEntry_GetAvailableNextHops(fibEntry, ~0);
-
- if (numberSet_Length(available_nexthops) == 0)
- goto END;
-
- /* Multipath */
- if ((fibEntry->policy.tags[POLICY_TAG_MULTIPATH].state != POLICY_STATE_PROHIBIT) &&
- (fibEntry->policy.tags[POLICY_TAG_MULTIPATH].state != POLICY_STATE_AVOID))
- goto END;
-
- unsigned nexthop = numberSet_GetItem(available_nexthops, 0);
- if (nexthop != fibEntry->previous_nexthop) {
- /* Policy has elected a new nexthop, signal it using MAP-Me */
- fibEntry->previous_nexthop = nexthop;
- ConnectionTable * table = forwarder_GetConnectionTable(fibEntry->forwarder);
- const Connection * conn = connectionTable_FindById(table, nexthop);
- mapme_onPolicyUpdate(forwarder_getMapmeInstance(fibEntry->forwarder), conn, fibEntry);
+ uint32_t max_priority = 0;
+ for (size_t k = 0; k < numberSet_Length(available_nexthops); k++) {
+ unsigned conn_id = numberSet_GetItem(available_nexthops, k);
+ const Connection * conn = connectionTable_FindById(table, conn_id);
+ uint32_t priority = connection_GetPriority(conn);
+ if (priority < max_priority) {
+ continue;
+ } else if (priority == max_priority) {
+ numberSet_Add(priority_nexthops, conn_id);
+ } else { /* priority > max_priority */
+ numberSet_Release(&priority_nexthops);
+ priority_nexthops = numberSet_Create();
+ numberSet_Add(priority_nexthops, conn_id);
+ max_priority = priority;
+ }
}
-END:
numberSet_Release(&available_nexthops);
-#endif /* WITH_MAPME */
+
+ return priority_nexthops;
+}
+
+policy_t fibEntry_GetPolicy(const FibEntry *fibEntry) {
+ return fibEntry->policy;
}
void fibEntry_SetPolicy(FibEntry *fibEntry, policy_t policy) {
fibEntry->policy = policy;
- fibEntry_ReconsiderPolicy(fibEntry);
+ mapme_reconsiderFibEntry(forwarder_getMapmeInstance(fibEntry->forwarder), fibEntry);
}
+NumberSet *
+fibEntry_GetPreviousNextHops(const FibEntry *fibEntry)
+{
+ return fibEntry->previous_nexthops;
+}
#endif /* WITH_POLICY */
+void
+fibEntry_SetPreviousNextHops(FibEntry *fibEntry, NumberSet * nexthops)
+{
+ if (fibEntry->previous_nexthops)
+ numberSet_Release(&fibEntry->previous_nexthops);
+ fibEntry->previous_nexthops = numberSet_Create();
+ numberSet_AddSet(fibEntry->previous_nexthops, nexthops);
+}
+
+
void fibEntry_AddNexthop(FibEntry *fibEntry, unsigned connectionId) {
parcAssertNotNull(fibEntry, "Parameter fibEntry must be non-null");
#ifdef WITH_POLICY
@@ -576,39 +584,16 @@ const NumberSet *fibEntry_GetNexthopsFromForwardingStrategy(
if (numberSet_Length(available_nexthops) == 0) {
out = numberSet_Create();
} else {
-
- /* Priority */
- NumberSet * priority_nexthops = numberSet_Create();
-
- uint32_t max_priority = 0;
- for (size_t k = 0; k < numberSet_Length(available_nexthops); k++) {
- unsigned conn_id = numberSet_GetItem(available_nexthops, k);
- const Connection * conn = connectionTable_FindById(table, conn_id);
- uint32_t priority = connection_GetPriority(conn);
- if (priority < max_priority) {
- continue;
- } else if (priority == max_priority) {
- numberSet_Add(priority_nexthops, conn_id);
- } else { /* priority > max_priority */
- numberSet_Release(&priority_nexthops);
- priority_nexthops = numberSet_Create();
- numberSet_Add(priority_nexthops, conn_id);
- max_priority = priority;
- }
- }
-
/* Multipath */
if ((policy.tags[POLICY_TAG_MULTIPATH].state != POLICY_STATE_PROHIBIT) &&
(policy.tags[POLICY_TAG_MULTIPATH].state != POLICY_STATE_AVOID)) {
- out = fibEntry->fwdStrategy->lookupNexthop(fibEntry->fwdStrategy, priority_nexthops,
+ out = fibEntry->fwdStrategy->lookupNexthop(fibEntry->fwdStrategy, available_nexthops,
interestMessage);
} else {
- unsigned nexthop = numberSet_GetItem(priority_nexthops, 0);
+ unsigned nexthop = numberSet_GetItem(available_nexthops, 0);
out = numberSet_Create();
numberSet_Add(out, nexthop);
}
-
- numberSet_Release(&priority_nexthops);
}
numberSet_Release(&available_nexthops);
diff --git a/hicn-light/src/hicn/processor/fibEntry.h b/hicn-light/src/hicn/processor/fibEntry.h
index 11a00e836..7ec771b4c 100644
--- a/hicn-light/src/hicn/processor/fibEntry.h
+++ b/hicn-light/src/hicn/processor/fibEntry.h
@@ -81,16 +81,6 @@ FibEntry *fibEntry_Acquire(const FibEntry *fibEntry);
void fibEntry_SetStrategy(FibEntry *fibEntry, strategy_type strategy);
-#ifdef WITH_POLICY
-
-policy_t fibEntry_GetPolicy(const FibEntry *fibEntry);
-
-void fibEntry_ReconsiderPolicy(FibEntry *fibEntry);
-
-void fibEntry_SetPolicy(FibEntry *fibEntry, policy_t policy);
-
-#endif /* WITH_POLICY */
-
void fibEntry_AddNexthop(FibEntry *fibEntry, unsigned connectionId);
void fibEntry_RemoveNexthopByConnectionId(FibEntry *fibEntry,
@@ -123,14 +113,30 @@ void fibEntry_ReceiveObjectMessage(const FibEntry *fibEntry,
const Message *objectMessage, Ticks rtt);
#ifdef WITH_POLICY
+policy_t fibEntry_GetPolicy(const FibEntry *fibEntry);
+void fibEntry_ReconsiderPolicy(FibEntry *fibEntry);
+void fibEntry_SetPolicy(FibEntry *fibEntry, 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);
+void fibEntry_SetPreviousNextHops(FibEntry *fibEntry, NumberSet * nexthops);
+
void fibEntry_OnTimeout(FibEntry *fibEntry, const NumberSet *egressId);
+const NumberSet *fibEntry_GetNexthopsFromForwardingStrategy(
+ FibEntry *fibEntry, const Message *interestMessage, bool is_retransmission);
+
+void fibEntry_ReceiveObjectMessage(FibEntry *fibEntry,
+ const NumberSet *egressId,
+ const Message *objectMessage, Ticks rtt);
#else
void fibEntry_OnTimeout(const FibEntry *fibEntry, const NumberSet *egressId);
+const NumberSet *fibEntry_GetNexthopsFromForwardingStrategy(
+ const FibEntry *fibEntry, const Message *interestMessage);
+void fibEntry_ReceiveObjectMessage(const FibEntry *fibEntry,
+ const NumberSet *egressId,
+ const Message *objectMessage, Ticks rtt);
#endif /* WITH_POLICY */
-#ifdef WITH_POLICY
-void fibEntry_UpdateStats(FibEntry *fibEntry, uint64_t now);
-#endif /* WITH_POLICY */
strategy_type fibEntry_GetFwdStrategyType(const FibEntry *fibEntry);
diff --git a/hicn-light/src/hicn/processor/messageProcessor.c b/hicn-light/src/hicn/processor/messageProcessor.c
index 58220ac9c..ad9a4e6ac 100644
--- a/hicn-light/src/hicn/processor/messageProcessor.c
+++ b/hicn-light/src/hicn/processor/messageProcessor.c
@@ -393,21 +393,6 @@ bool messageProcessor_RemovePolicy(MessageProcessor *processor,
return true;
}
-
-#ifdef WITH_MAPME
-void messageProcessor_onConnectionEvent(const MessageProcessor *processor,
- const Connection *conn_added, connection_event_t event)
-{
- FibEntryList *fiblist = forwarder_GetFibEntries(processor->forwarder);
- for (size_t i = 0; i < fibEntryList_Length(fiblist); i++) {
- FibEntry *fibEntry = (FibEntry *)fibEntryList_Get(fiblist, i);
- fibEntry_ReconsiderPolicy(fibEntry);
- }
- fibEntryList_Destroy(&fiblist);
-
-}
-#endif /* WITH_MAPME */
-
#endif /* WITH_POLICY */
void messageProcessor_RemoveConnectionIdFromRoutes(MessageProcessor *processor,
diff --git a/hicn-light/src/hicn/processor/messageProcessor.h b/hicn-light/src/hicn/processor/messageProcessor.h
index 6804ba018..80cd22035 100644
--- a/hicn-light/src/hicn/processor/messageProcessor.h
+++ b/hicn-light/src/hicn/processor/messageProcessor.h
@@ -136,11 +136,6 @@ bool messageProcessor_AddOrUpdatePolicy(MessageProcessor *processor,
bool messageProcessor_RemovePolicy(MessageProcessor *processor,
remove_policy_command *control);
-#ifdef WITH_MAPME
-void messageProcessor_onConnectionEvent(const MessageProcessor *processor,
- const Connection *conn_added, connection_event_t event);
-#endif /* WITH_MAPME */
-
#endif /* WITH_POLICY */
/**