fib: Table Replace 36/23336/6
authorNeale Ranns <nranns@cisco.com>
Fri, 8 Nov 2019 12:42:31 +0000 (12:42 +0000)
committerOle Trøan <otroan@employees.org>
Tue, 26 Nov 2019 09:15:11 +0000 (09:15 +0000)
commit9db6ada779794779158163f6293b479ae7f6ad5e
tree53dd65975958b2d87b1cd312e612b45d7225e531
parent0d3d4824a46205e776ff32c82be4cb514f459a5f
fib: Table Replace

Type: feature

from the API doc, a table replace is:

"
    The use-case is that, for some unspecified reason, the control plane
    has a very different set of entries it wants in the table than VPP
    currently has. The CP would thus like to 'replace' VPP's current table
    only by specifying what the new set of entries shall be, i.e. it is not
    going to delete anything that already eixts.
    the CP delcartes the start of this procedure with this begin_replace
    API Call, and when it has populated all the entries it wants, it calls
    the below end_replace API. From this point on it is of coursce free
    to add and delete entries as usual.
    The underlying mechanism by which VPP implements this replace is
    purposefully left unspecified.
"

In the FIB, the algorithm is implemented using mark and sweep.

Algorithm goes:
1) replace_begin: this marks all the entries in that table as 'stale'
2) download all the entries that should be in this table
 - this clears the stale flag on those entries
3) signal the table converged: ip_table_replace_end
 - this removes all entries that are still stale

this procedure can be used when an agent first connects to VPP,
as an alternative to dump and diff state reconciliation.

Change-Id: I168edec10cf7670866076b129ebfe6149ea8222e
Signed-off-by: Neale Ranns <nranns@cisco.com>
31 files changed:
src/plugins/nat/test/test_nat.py
src/vat/api_format.c
src/vnet/ethernet/arp.c
src/vnet/ethernet/arp.h
src/vnet/fib/fib_entry.h
src/vnet/fib/fib_entry_src.c
src/vnet/fib/fib_entry_src.h
src/vnet/fib/fib_table.c
src/vnet/fib/fib_table.h
src/vnet/fib/ip4_fib.c
src/vnet/fib/ip6_fib.c
src/vnet/ip/ip.api
src/vnet/ip/ip_api.c
src/vnet/mfib/ip4_mfib.c
src/vnet/mfib/ip6_mfib.c
src/vnet/mfib/mfib_entry.c
src/vnet/mfib/mfib_entry.h
src/vnet/mfib/mfib_entry_src.h
src/vnet/mfib/mfib_entry_src_rr.c
src/vnet/mfib/mfib_table.c
src/vnet/mfib/mfib_table.h
src/vnet/mpls/mpls.c
src/vnet/mpls/mpls.h
src/vpp/api/custom_dump.c
test/test_ip4.py
test/test_ip4_vrf_multi_instance.py
test/test_ip6.py
test/test_ip6_vrf_multi_instance.py
test/vpp_ip.py
test/vpp_ip_route.py
test/vpp_papi_provider.py