From 6df19030f2bf986f1876c2c46b44c046b9b2c686 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Wed, 4 Apr 2018 05:00:48 -0700 Subject: [PATCH] NAT added FIB entries have a preference lower than API/CLI Change-Id: Ia99490180683e8649784f7d9d18c509c3ca78438 Signed-off-by: Neale Ranns --- src/plugins/nat/nat.c | 12 ++++++------ src/vnet/fib/fib_entry.h | 5 +++++ src/vnet/fib/fib_entry_src_api.c | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plugins/nat/nat.c b/src/plugins/nat/nat.c index 9a620472b86..6f8bd4582b4 100644 --- a/src/plugins/nat/nat.c +++ b/src/plugins/nat/nat.c @@ -522,7 +522,7 @@ snat_add_del_addr_to_fib (ip4_address_t * addr, u8 p_len, u32 sw_if_index, if (is_add) fib_table_entry_update_one_path(fib_index, &prefix, - FIB_SOURCE_PLUGIN_HI, + FIB_SOURCE_PLUGIN_LOW, (FIB_ENTRY_FLAG_CONNECTED | FIB_ENTRY_FLAG_LOCAL | FIB_ENTRY_FLAG_EXCLUSIVE), @@ -536,7 +536,7 @@ snat_add_del_addr_to_fib (ip4_address_t * addr, u8 p_len, u32 sw_if_index, else fib_table_entry_delete(fib_index, &prefix, - FIB_SOURCE_PLUGIN_HI); + FIB_SOURCE_PLUGIN_LOW); } void snat_add_address (snat_main_t *sm, ip4_address_t *addr, u32 vrf_id, @@ -562,7 +562,7 @@ void snat_add_address (snat_main_t *sm, ip4_address_t *addr, u32 vrf_id, if (vrf_id != ~0) ap->fib_index = fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP4, vrf_id, - FIB_SOURCE_PLUGIN_HI); + FIB_SOURCE_PLUGIN_LOW); else ap->fib_index = ~0; #define _(N, i, n, s) \ @@ -1154,7 +1154,7 @@ int nat44_add_del_lb_static_mapping (ip4_address_t e_addr, u16 e_port, fib_index = fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP4, vrf_id, - FIB_SOURCE_PLUGIN_HI); + FIB_SOURCE_PLUGIN_LOW); /* Find external address in allocated addresses and reserve port for address and port pair mapping when dynamic translations enabled */ @@ -1267,7 +1267,7 @@ int nat44_add_del_lb_static_mapping (ip4_address_t e_addr, u16 e_port, if (!m) return VNET_API_ERROR_NO_SUCH_ENTRY; - fib_table_unlock (m->fib_index, FIB_PROTOCOL_IP4, FIB_SOURCE_PLUGIN_HI); + fib_table_unlock (m->fib_index, FIB_PROTOCOL_IP4, FIB_SOURCE_PLUGIN_LOW); /* Free external address port */ if (!(sm->static_mapping_only || out2in_only)) @@ -1438,7 +1438,7 @@ snat_del_address (snat_main_t *sm, ip4_address_t addr, u8 delete_sm, if (a->fib_index != ~0) fib_table_unlock(a->fib_index, FIB_PROTOCOL_IP4, - FIB_SOURCE_PLUGIN_HI); + FIB_SOURCE_PLUGIN_LOW); /* Delete sessions using address */ if (a->busy_tcp_ports || a->busy_udp_ports || a->busy_icmp_ports) diff --git a/src/vnet/fib/fib_entry.h b/src/vnet/fib/fib_entry.h index 92333e9cc03..ddaf914389e 100644 --- a/src/vnet/fib/fib_entry.h +++ b/src/vnet/fib/fib_entry.h @@ -72,6 +72,10 @@ typedef enum fib_source_t_ { * From the CLI. */ FIB_SOURCE_CLI, + /** + * A low (below routing) priority source a plugin can use + */ + FIB_SOURCE_PLUGIN_LOW, /** * LISP */ @@ -169,6 +173,7 @@ STATIC_ASSERT (sizeof(fib_source_t) == 1, [FIB_SOURCE_URPF_EXEMPT] = "urpf-exempt", \ [FIB_SOURCE_DEFAULT_ROUTE] = "default-route", \ [FIB_SOURCE_PLUGIN_HI] = "plugin-hi", \ + [FIB_SOURCE_PLUGIN_LOW] = "plugin-low", \ [FIB_SOURCE_INTERPOSE] = "interpose", \ } diff --git a/src/vnet/fib/fib_entry_src_api.c b/src/vnet/fib/fib_entry_src_api.c index 4558d65d523..cc3c78c187f 100644 --- a/src/vnet/fib/fib_entry_src_api.c +++ b/src/vnet/fib/fib_entry_src_api.c @@ -163,6 +163,7 @@ void fib_entry_src_api_register (void) { fib_entry_src_register(FIB_SOURCE_PLUGIN_HI, &api_src_vft); + fib_entry_src_register(FIB_SOURCE_PLUGIN_LOW, &api_src_vft); fib_entry_src_register(FIB_SOURCE_API, &api_src_vft); fib_entry_src_register(FIB_SOURCE_CLI, &api_src_vft); fib_entry_src_register(FIB_SOURCE_DHCP, &api_src_vft); -- 2.16.6