diff options
author | Neale Ranns <nranns@cisco.com> | 2016-10-03 13:05:48 +0100 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2016-10-07 21:32:24 +0000 |
commit | 3ee44040c66cbe47ff292ac7fb0badccbe2afe6d (patch) | |
tree | a52a4dd0750467845f237ee5e4e88aa95ea11bab /vnet/vnet/fib/fib_entry.c | |
parent | 4a7e58bf481adb843707eec4a81213776a6d5212 (diff) |
unicast RPF for FIB2.0
In a heirarchical FIB performing a unicast RPF check would require the traversal of the data-plane graph to seek out all the adjacency objects and then read those to find their interface. This is not efficient. Instead, for each path-list we construct a list of unique input interfaces and link this uRPF-list against the entry in the prefix table. In the data-plane the uRPF list can be retrieved from the load-balance lookup result and the RPF check is a simple and efficient walk across the minimal interface list. The uRPF-list is maintained as the routing heirarchy changes, in a similar way to the data-plane object graph.
We also provide a knob to allow an arbitrary prefix to pass the loose check.
Change-Id: Ie7c0ae3c4483ef467cfd5b136ee0315ff98ec15b
Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'vnet/vnet/fib/fib_entry.c')
-rw-r--r-- | vnet/vnet/fib/fib_entry.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/vnet/vnet/fib/fib_entry.c b/vnet/vnet/fib/fib_entry.c index 1821319dbf7..06922004021 100644 --- a/vnet/vnet/fib/fib_entry.c +++ b/vnet/vnet/fib/fib_entry.c @@ -473,6 +473,21 @@ static const fib_node_vft_t fib_entry_vft = { .fnv_mem_show = fib_entry_show_memory, }; +/** + * @brief Contribute the set of Adjacencies that this entry forwards with + * to build the uRPF list of its children + */ +void +fib_entry_contribute_urpf (fib_node_index_t entry_index, + index_t urpf) +{ + fib_entry_t *fib_entry; + + fib_entry = fib_entry_get(entry_index); + + return (fib_path_list_contribute_urpf(fib_entry->fe_parent, urpf)); +} + /* * fib_entry_contribute_forwarding * |