X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fvnet%2Fl2%2Fl2_flood.c;h=10e087767e444512e0e8712e9d2bbbc4a7ca495b;hb=2de9c0f92;hp=8908c4312d397ce8c57f71c4de54523bc94d0c55;hpb=b9fa29d513bfad0d9f18e8ed8c2da3feaa6d3bf0;p=vpp.git diff --git a/src/vnet/l2/l2_flood.c b/src/vnet/l2/l2_flood.c index 8908c4312d3..10e087767e4 100644 --- a/src/vnet/l2/l2_flood.c +++ b/src/vnet/l2/l2_flood.c @@ -87,9 +87,11 @@ format_l2flood_trace (u8 * s, va_list * args) return s; } -l2flood_main_t l2flood_main; +extern l2flood_main_t l2flood_main; -static vlib_node_registration_t l2flood_node; +#ifndef CLIB_MARCH_VARIANT +l2flood_main_t l2flood_main; +#endif /* CLIB_MARCH_VARIANT */ #define foreach_l2flood_error \ _(L2FLOOD, "L2 flood packets") \ @@ -134,9 +136,8 @@ typedef enum * could be turned into an ICMP reply. If BVI processing is not performed * last, the modified packet would be replicated to the remaining members. */ -static uword -l2flood_node_fn (vlib_main_t * vm, - vlib_node_runtime_t * node, vlib_frame_t * frame) +VLIB_NODE_FN (l2flood_node) (vlib_main_t * vm, + vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 n_left_from, *from, *to_next; l2flood_next_t next_index; @@ -212,7 +213,6 @@ l2flood_node_fn (vlib_main_t * vm, else if (n_clones > 1) { vec_validate (msm->clones[thread_index], n_clones); - vec_reset_length (msm->clones[thread_index]); /* * the header offset needs to be large enough to incorporate @@ -223,9 +223,9 @@ l2flood_node_fn (vlib_main_t * vm, n_cloned = vlib_buffer_clone (vm, bi0, msm->clones[thread_index], n_clones, - (vnet_buffer (b0)->l2.l2_len + - sizeof (udp_header_t) + - 2 * sizeof (ip6_header_t))); + VLIB_BUFFER_CLONE_HEAD_SIZE); + + vec_set_len (msm->clones[thread_index], n_cloned); if (PREDICT_FALSE (n_cloned != n_clones)) { @@ -251,15 +251,12 @@ l2flood_node_fn (vlib_main_t * vm, ethernet_header_t *h0; l2flood_trace_t *t; - if (c0 != b0) - vlib_buffer_copy_trace_flag (vm, b0, ci0); - t = vlib_add_trace (vm, node, c0, sizeof (*t)); h0 = vlib_buffer_get_current (c0); t->sw_if_index = sw_if_index0; t->bd_index = vnet_buffer (c0)->l2.bd_index; - clib_memcpy (t->src, h0->src_address, 6); - clib_memcpy (t->dst, h0->dst_address, 6); + clib_memcpy_fast (t->src, h0->src_address, 6); + clib_memcpy_fast (t->dst, h0->dst_address, 6); } /* Do normal L2 forwarding */ @@ -302,15 +299,12 @@ l2flood_node_fn (vlib_main_t * vm, ethernet_header_t *h0; l2flood_trace_t *t; - if (c0 != b0) - vlib_buffer_copy_trace_flag (vm, b0, ci0); - t = vlib_add_trace (vm, node, c0, sizeof (*t)); h0 = vlib_buffer_get_current (c0); t->sw_if_index = sw_if_index0; t->bd_index = vnet_buffer (c0)->l2.bd_index; - clib_memcpy (t->src, h0->src_address, 6); - clib_memcpy (t->dst, h0->dst_address, 6); + clib_memcpy_fast (t->src, h0->src_address, 6); + clib_memcpy_fast (t->dst, h0->dst_address, 6); } @@ -364,8 +358,7 @@ l2flood_node_fn (vlib_main_t * vm, /* *INDENT-OFF* */ -VLIB_REGISTER_NODE (l2flood_node,static) = { - .function = l2flood_node_fn, +VLIB_REGISTER_NODE (l2flood_node) = { .name = "l2-flood", .vector_size = sizeof (u32), .format_trace = format_l2flood_trace, @@ -382,10 +375,9 @@ VLIB_REGISTER_NODE (l2flood_node,static) = { [L2FLOOD_NEXT_DROP] = "error-drop", }, }; - -VLIB_NODE_FUNCTION_MULTIARCH (l2flood_node, l2flood_node_fn) /* *INDENT-ON* */ +#ifndef CLIB_MARCH_VARIANT clib_error_t * l2flood_init (vlib_main_t * vm) { @@ -423,6 +415,7 @@ l2flood_register_input_type (vlib_main_t * vm, next_by_ethertype_register (&mp->l3_next, type, next_index); } +#endif /* CLIB_MARCH_VARIANT */ /**