summaryrefslogtreecommitdiffstats
path: root/src/vnet/geneve
diff options
context:
space:
mode:
authorJohn Lo <loj@cisco.com>2018-01-23 19:21:34 -0500
committerJohn Lo <loj@cisco.com>2018-02-02 17:34:00 +0000
commit5e150a06a8b291edc9427e740d441ac652f6e705 (patch)
tree2a3810c32b444a00ba1eed20bb805ae731969c2d /src/vnet/geneve
parentcba3675fabe618194bf80a9de0e9c53b89a541ca (diff)
Improve tunnel interface creation performance
Modify interface creation to allow creation of tunnel interfaces without dedicated per tunnel output and tx nodes which are not used for most tunnel types. Also changed interface-output node function vnet_per_buffer_interface_output() so it does not rely on hw_if_index as the next node index which is not flexible nor efficient for large scale tunnel interfaces. The improvenemts are done for VXLAN, VXLAN-GPE, GENEVE and GTPU tunnels. GRE tunnel is still using per tunnel output nodes which will be changed in a separate patch with other GRE enhencements. Change-Id: I4123c01c0d2ead814417a867adb8c8a407e4df55 Signed-off-by: John Lo <loj@cisco.com> (cherry picked from commit e5453d0fa29f39a7f78a7e22815566a7f4c9e5ef)
Diffstat (limited to 'src/vnet/geneve')
-rw-r--r--src/vnet/geneve/geneve.c19
1 files changed, 5 insertions, 14 deletions
diff --git a/src/vnet/geneve/geneve.c b/src/vnet/geneve/geneve.c
index 56db5ee775e..ffedf364a19 100644
--- a/src/vnet/geneve/geneve.c
+++ b/src/vnet/geneve/geneve.c
@@ -82,14 +82,6 @@ format_geneve_name (u8 * s, va_list * args)
return format (s, "geneve_tunnel%d", dev_instance);
}
-static uword
-dummy_interface_tx (vlib_main_t * vm,
- vlib_node_runtime_t * node, vlib_frame_t * frame)
-{
- clib_warning ("you shouldn't be here, leaking buffers...");
- return frame->n_vectors;
-}
-
static clib_error_t *
geneve_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags)
{
@@ -105,7 +97,6 @@ VNET_DEVICE_CLASS (geneve_device_class, static) = {
.name = "GENEVE",
.format_device_name = format_geneve_name,
.format_tx_trace = format_geneve_encap_trace,
- .tx_function = dummy_interface_tx,
.admin_up_down_function = geneve_interface_admin_up_down,
};
/* *INDENT-ON* */
@@ -465,6 +456,11 @@ int vnet_geneve_add_del_tunnel
hi = vnet_get_hw_interface (vnm, hw_if_index);
}
+ /* Set geneve tunnel output node */
+ u32 encap_index = !is_ip6 ?
+ geneve4_encap_node.index : geneve6_encap_node.index;
+ vnet_set_interface_output_node (vnm, hw_if_index, encap_index);
+
t->hw_if_index = hw_if_index;
t->sw_if_index = sw_if_index = hi->sw_if_index;
@@ -484,8 +480,6 @@ int vnet_geneve_add_del_tunnel
fib_node_init (&t->node, FIB_NODE_TYPE_GENEVE_TUNNEL);
fib_prefix_t tun_remote_pfx;
- u32 encap_index = !is_ip6 ?
- geneve4_encap_node.index : geneve6_encap_node.index;
vnet_flood_class_t flood_class = VNET_FLOOD_CLASS_TUNNEL_NORMAL;
fib_prefix_from_ip46_addr (&t->remote, &tun_remote_pfx);
@@ -576,9 +570,6 @@ int vnet_geneve_add_del_tunnel
flood_class = VNET_FLOOD_CLASS_TUNNEL_MASTER;
}
- /* Set geneve tunnel output node */
- hi->output_node_index = encap_index;
-
vnet_get_sw_interface (vnet_get_main (), sw_if_index)->flood_class =
flood_class;
}