diff options
author | Jordan Augé <jordan.auge+fdio@cisco.com> | 2019-11-17 00:07:12 +0100 |
---|---|---|
committer | Jordan Augé <jordan.auge+fdio@cisco.com> | 2019-11-17 11:03:31 +0100 |
commit | 2ada8954ecd3601d115a22696c4c3ab90858cec3 (patch) | |
tree | 6db983388333e8776eecaf9c07c5b7bd6f2f10be /hicn-light/src/hicn/processor/fibEntry.c | |
parent | 2dcc25795fab0100ce33852f08d77a5fd90d8f14 (diff) |
[HICN-379] Add face priority support in face manager
Change-Id: If4f75d44fc66414a4a70135de7827f5082b97112
Signed-off-by: Jordan Augé <jordan.auge+fdio@cisco.com>
Diffstat (limited to 'hicn-light/src/hicn/processor/fibEntry.c')
-rw-r--r-- | hicn-light/src/hicn/processor/fibEntry.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/hicn-light/src/hicn/processor/fibEntry.c b/hicn-light/src/hicn/processor/fibEntry.c index 1aaa3ace9..084be7b17 100644 --- a/hicn-light/src/hicn/processor/fibEntry.c +++ b/hicn-light/src/hicn/processor/fibEntry.c @@ -576,16 +576,39 @@ 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(priority_nexthops); k++) { + unsigned conn_id = numberSet_GetItem(priority_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, available_nexthops, + out = fibEntry->fwdStrategy->lookupNexthop(fibEntry->fwdStrategy, priority_nexthops, interestMessage); } else { - unsigned nexthop = numberSet_GetItem(available_nexthops, 0); + unsigned nexthop = numberSet_GetItem(priority_nexthops, 0); out = numberSet_Create(); numberSet_Add(out, nexthop); } + + numberSet_Release(&priority_nexthops); } numberSet_Release(&available_nexthops); |