unicast RPF for FIB2.0 02/3302/5
authorNeale Ranns <nranns@cisco.com>
Mon, 3 Oct 2016 12:05:48 +0000 (13:05 +0100)
committerDamjan Marion <dmarion.lists@gmail.com>
Fri, 7 Oct 2016 21:32:24 +0000 (21:32 +0000)
commit3ee44040c66cbe47ff292ac7fb0badccbe2afe6d
treea52a4dd0750467845f237ee5e4e88aa95ea11bab
parent4a7e58bf481adb843707eec4a81213776a6d5212
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>
23 files changed:
vlib/vlib/trace.c
vnet/Makefile.am
vnet/etc/scripts/urpf [new file with mode: 0644]
vnet/vnet/dpo/load_balance.c
vnet/vnet/dpo/load_balance.h
vnet/vnet/dpo/load_balance_map.c
vnet/vnet/dpo/load_balance_map.h
vnet/vnet/fib/fib_entry.c
vnet/vnet/fib/fib_entry.h
vnet/vnet/fib/fib_entry_src.c
vnet/vnet/fib/fib_entry_src_rr.c
vnet/vnet/fib/fib_path.c
vnet/vnet/fib/fib_path.h
vnet/vnet/fib/fib_path_list.c
vnet/vnet/fib/fib_path_list.h
vnet/vnet/fib/fib_test.c
vnet/vnet/fib/fib_types.h
vnet/vnet/fib/fib_urpf_list.c [new file with mode: 0644]
vnet/vnet/fib/fib_urpf_list.h [new file with mode: 0644]
vnet/vnet/gre/gre.c
vnet/vnet/ip/ip4_forward.c
vnet/vnet/ip/ip4_source_check.c
vnet/vnet/ip/lookup.c