aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2018-04-04 05:00:48 -0700
committerOle Trøan <otroan@employees.org>2018-04-04 13:31:56 +0000
commit6df19030f2bf986f1876c2c46b44c046b9b2c686 (patch)
treeebc11f7ec2fa917b3720cb7284b51d280a2b1a57
parent36a62702c5454d0a3f7e7aafc5b95d6ca0a7d703 (diff)
NAT added FIB entries have a preference lower than API/CLI
Change-Id: Ia99490180683e8649784f7d9d18c509c3ca78438 Signed-off-by: Neale Ranns <nranns@cisco.com>
-rw-r--r--src/plugins/nat/nat.c12
-rw-r--r--src/vnet/fib/fib_entry.h5
-rw-r--r--src/vnet/fib/fib_entry_src_api.c1
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
@@ -73,6 +73,10 @@ typedef enum fib_source_t_ {
*/
FIB_SOURCE_CLI,
/**
+ * A low (below routing) priority source a plugin can use
+ */
+ FIB_SOURCE_PLUGIN_LOW,
+ /**
* LISP
*/
FIB_SOURCE_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);