X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_output.c;h=563f6149708f25d6957671b75f06de1cf2be0d6d;hb=f8f516a8b0ccab2f5d9796f90419bf2661c750af;hp=c95f08b1a1e1756f5c210a8ea804da67c3fc8dfa;hpb=2c0a4f407f565d8dd33ff3a9fada346860d30ad2;p=vpp.git diff --git a/src/vnet/interface_output.c b/src/vnet/interface_output.c index c95f08b1a1e..563f6149708 100644 --- a/src/vnet/interface_output.c +++ b/src/vnet/interface_output.c @@ -59,7 +59,7 @@ format_vnet_interface_output_trace (u8 * s, va_list * va) interface_output_trace_t *t = va_arg (*va, interface_output_trace_t *); vnet_main_t *vnm = vnet_get_main (); vnet_sw_interface_t *si; - uword indent; + u32 indent; if (t->sw_if_index != (u32) ~ 0) { @@ -188,7 +188,6 @@ calc_checksums (vlib_main_t * vm, vlib_buffer_t * b) if (is_ip6) { int bogus; - ASSERT (b->flags & VNET_BUFFER_F_OFFLOAD_IP_CKSUM); if (b->flags & VNET_BUFFER_F_OFFLOAD_TCP_CKSUM) th->checksum = ip6_tcp_udp_icmp_compute_checksum (vm, b, ip6, &bogus); if (b->flags & VNET_BUFFER_F_OFFLOAD_UDP_CKSUM) @@ -514,8 +513,8 @@ vnet_per_buffer_interface_output (vlib_main_t * vm, vnet_buffer (b1)->sw_if_index [VLIB_TX]); - next0 = hi0->hw_if_index; - next1 = hi1->hw_if_index; + next0 = hi0->output_node_next_index; + next1 = hi1->output_node_next_index; vlib_validate_buffer_enqueue_x2 (vm, node, next_index, to_next, n_left_to_next, bi0, bi1, next0, @@ -542,7 +541,7 @@ vnet_per_buffer_interface_output (vlib_main_t * vm, vnet_buffer (b0)->sw_if_index [VLIB_TX]); - next0 = hi0->hw_if_index; + next0 = hi0->output_node_next_index; vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, bi0, next0); @@ -1105,12 +1104,13 @@ vnet_per_buffer_interface_output_hw_interface_add_del (vnet_main_t * vnm, vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm, hw_if_index); u32 next_index; - next_index = vlib_node_add_next_with_slot - (vnm->vlib_main, vnet_per_buffer_interface_output_node.index, - hi->output_node_index, - /* next_index */ hw_if_index); + if (hi->output_node_index == 0) + return 0; - ASSERT (next_index == hw_if_index); + next_index = vlib_node_add_next + (vnm->vlib_main, vnet_per_buffer_interface_output_node.index, + hi->output_node_index); + hi->output_node_next_index = next_index; return 0; } @@ -1118,6 +1118,18 @@ vnet_per_buffer_interface_output_hw_interface_add_del (vnet_main_t * vnm, VNET_HW_INTERFACE_ADD_DEL_FUNCTION (vnet_per_buffer_interface_output_hw_interface_add_del); +void +vnet_set_interface_output_node (vnet_main_t * vnm, + u32 hw_if_index, u32 node_index) +{ + ASSERT (node_index); + vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm, hw_if_index); + u32 next_index = vlib_node_add_next + (vnm->vlib_main, vnet_per_buffer_interface_output_node.index, node_index); + hi->output_node_next_index = next_index; + hi->output_node_index = node_index; +} + static clib_error_t * pcap_drop_trace_command_fn (vlib_main_t * vm, unformat_input_t * input,