diff options
Diffstat (limited to 'src/plugins/lisp/lisp-gpe')
-rw-r--r-- | src/plugins/lisp/lisp-gpe/interface.c | 15 | ||||
-rw-r--r-- | src/plugins/lisp/lisp-gpe/lisp_gpe_adjacency.c | 2 | ||||
-rw-r--r-- | src/plugins/lisp/lisp-gpe/lisp_gpe_sub_interface.c | 3 |
3 files changed, 13 insertions, 7 deletions
diff --git a/src/plugins/lisp/lisp-gpe/interface.c b/src/plugins/lisp/lisp-gpe/interface.c index d73471d6b3d..f1c49eadda8 100644 --- a/src/plugins/lisp/lisp-gpe/interface.c +++ b/src/plugins/lisp/lisp-gpe/interface.c @@ -88,9 +88,8 @@ format_lisp_gpe_tx_trace (u8 * s, va_list * args) * * @return number of vectors in frame. */ -static uword -lisp_gpe_interface_tx (vlib_main_t * vm, vlib_node_runtime_t * node, - vlib_frame_t * from_frame) +VLIB_NODE_FN (lisp_tunnel_output) +(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame) { u32 n_left_from, next_index, *from, *to_next; lisp_gpe_main_t *lgm = &lisp_gpe_main; @@ -122,6 +121,7 @@ lisp_gpe_interface_tx (vlib_main_t * vm, vlib_node_runtime_t * node, n_left_to_next -= 1; b0 = vlib_get_buffer (vm, bi0); + b0->flags |= VNET_BUFFER_F_LOCALLY_ORIGINATED; /* Fixup the checksum and len fields in the LISP tunnel encap * that was applied at the midchain node */ @@ -151,6 +151,13 @@ lisp_gpe_interface_tx (vlib_main_t * vm, vlib_node_runtime_t * node, return from_frame->n_vectors; } +VLIB_REGISTER_NODE (lisp_tunnel_output) = { + .name = "lisp-tunnel-output", + .vector_size = sizeof (u32), + .format_trace = format_lisp_gpe_tx_trace, + .sibling_of = "tunnel-output", +}; + static u8 * format_lisp_gpe_name (u8 * s, va_list * args) { @@ -162,8 +169,6 @@ format_lisp_gpe_name (u8 * s, va_list * args) VNET_DEVICE_CLASS (lisp_gpe_device_class) = { .name = "LISP_GPE", .format_device_name = format_lisp_gpe_name, - .format_tx_trace = format_lisp_gpe_tx_trace, - .tx_function = lisp_gpe_interface_tx, }; /* *INDENT-ON* */ diff --git a/src/plugins/lisp/lisp-gpe/lisp_gpe_adjacency.c b/src/plugins/lisp/lisp-gpe/lisp_gpe_adjacency.c index 8d20412a1f2..dd8a252f378 100644 --- a/src/plugins/lisp/lisp-gpe/lisp_gpe_adjacency.c +++ b/src/plugins/lisp/lisp-gpe/lisp_gpe_adjacency.c @@ -317,8 +317,6 @@ lisp_gpe_update_adjacency (vnet_main_t * vnm, u32 sw_if_index, adj_index_t ai) lgt = lisp_gpe_tunnel_get (ladj->tunnel_index); linkt = adj_get_link_type (ai); af = ADJ_FLAG_MIDCHAIN_IP_STACK; - if (VNET_LINK_ETHERNET == linkt) - af |= ADJ_FLAG_MIDCHAIN_NO_COUNT; adj_nbr_midchain_update_rewrite (ai, lisp_gpe_fixup, NULL, af, diff --git a/src/plugins/lisp/lisp-gpe/lisp_gpe_sub_interface.c b/src/plugins/lisp/lisp-gpe/lisp_gpe_sub_interface.c index aea84a3fa92..b40ed2e9234 100644 --- a/src/plugins/lisp/lisp-gpe/lisp_gpe_sub_interface.c +++ b/src/plugins/lisp/lisp-gpe/lisp_gpe_sub_interface.c @@ -168,6 +168,8 @@ lisp_gpe_sub_interface_find_or_create_and_lock (const ip_address_t * lrloc, vnet_sw_interface_set_flags (vnet_get_main (), l3s->sw_if_index, VNET_SW_INTERFACE_FLAG_ADMIN_UP); + vnet_set_interface_l3_output_node (vlib_get_main (), l3s->sw_if_index, + (u8 *) "lisp-tunnel-output"); lisp_gpe_sub_interface_db_insert (l3s); } @@ -200,6 +202,7 @@ lisp_gpe_sub_interface_unlock (index_t l3si) lisp_gpe_tenant_l3_iface_unlock (l3s->key->vni); vnet_sw_interface_set_flags (vnet_get_main (), l3s->sw_if_index, 0); + vnet_reset_interface_l3_output_node (vlib_get_main (), l3s->sw_if_index); vnet_delete_sub_interface (l3s->sw_if_index); lisp_gpe_sub_interface_db_remove (l3s); |