diff options
Diffstat (limited to 'src/plugins')
-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 | ||||
-rw-r--r-- | src/plugins/pppoe/pppoe.c | 3 | ||||
-rw-r--r-- | src/plugins/wireguard/wireguard_if.c | 3 |
5 files changed, 19 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); diff --git a/src/plugins/pppoe/pppoe.c b/src/plugins/pppoe/pppoe.c index d073a941cba..182f93b6156 100644 --- a/src/plugins/pppoe/pppoe.c +++ b/src/plugins/pppoe/pppoe.c @@ -413,6 +413,8 @@ int vnet_pppoe_add_del_session si->flags &= ~VNET_SW_INTERFACE_FLAG_HIDDEN; vnet_sw_interface_set_flags (vnm, sw_if_index, VNET_SW_INTERFACE_FLAG_ADMIN_UP); + vnet_set_interface_l3_output_node (vnm->vlib_main, sw_if_index, + (u8 *) "tunnel-output"); /* add reverse route for client ip */ fib_table_entry_path_add (a->decap_fib_index, &pfx, @@ -431,6 +433,7 @@ int vnet_pppoe_add_del_session t = pool_elt_at_index (pem->sessions, result.fields.session_index); sw_if_index = t->sw_if_index; + vnet_reset_interface_l3_output_node (vnm->vlib_main, sw_if_index); vnet_sw_interface_set_flags (vnm, t->sw_if_index, 0 /* down */ ); vnet_sw_interface_t *si = vnet_get_sw_interface (vnm, t->sw_if_index); si->flags |= VNET_SW_INTERFACE_FLAG_HIDDEN; diff --git a/src/plugins/wireguard/wireguard_if.c b/src/plugins/wireguard/wireguard_if.c index ad8f42c1969..64e405608f4 100644 --- a/src/plugins/wireguard/wireguard_if.c +++ b/src/plugins/wireguard/wireguard_if.c @@ -315,6 +315,8 @@ wg_if_create (u32 user_instance, ip_address_copy (&wg_if->src_ip, src_ip); wg_if->sw_if_index = *sw_if_indexp = hi->sw_if_index; + vnet_set_interface_l3_output_node (vnm->vlib_main, hi->sw_if_index, + (u8 *) "tunnel-output"); return 0; } @@ -359,6 +361,7 @@ wg_if_delete (u32 sw_if_index) udp_unregister_dst_port (vlib_get_main (), wg_if->port, 0); } + vnet_reset_interface_l3_output_node (vnm->vlib_main, sw_if_index); vnet_delete_hw_interface (vnm, hw->hw_if_index); pool_put_index (noise_local_pool, wg_if->local_idx); pool_put (wg_if_pool, wg_if); |