X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdpo%2Fmpls_label_dpo.c;h=683b544951365b0ee7aa74225d5d048e5f783ccb;hb=9ec846c2684b69f47505d73ea9f873b793a11558;hp=0a7063cc99a0ab54da44a6f58d46ddd6b5f17a2f;hpb=2303cb181b51f63c909cd506125c1f832432865a;p=vpp.git diff --git a/src/vnet/dpo/mpls_label_dpo.c b/src/vnet/dpo/mpls_label_dpo.c index 0a7063cc99a..683b5449513 100644 --- a/src/vnet/dpo/mpls_label_dpo.c +++ b/src/vnet/dpo/mpls_label_dpo.c @@ -18,6 +18,7 @@ #include #include +#ifndef CLIB_MARCH_VARIANT /* * pool of all MPLS Label DPOs */ @@ -38,9 +39,14 @@ static mpls_label_dpo_t * mpls_label_dpo_alloc (void) { mpls_label_dpo_t *mld; + vlib_main_t *vm; + u8 did_barrier_sync; + dpo_pool_barrier_sync (vm, mpls_label_dpo_pool, did_barrier_sync); pool_get_aligned(mpls_label_dpo_pool, mld, CLIB_CACHE_LINE_BYTES); - memset(mld, 0, sizeof(*mld)); + dpo_pool_barrier_release (vm, did_barrier_sync); + + clib_memset(mld, 0, sizeof(*mld)); dpo_reset(&mld->mld_dpo); @@ -205,7 +211,7 @@ format_mpls_label_dpo (u8 *s, va_list *args) } mld = mpls_label_dpo_get(index); - s = format(s, "mpls-label[%U%d]:", + s = format(s, "mpls-label[%U@%d]:", format_mpls_label_dpo_flags, (int) mld->mld_flags, index); @@ -247,6 +253,7 @@ mpls_label_dpo_unlock (dpo_id_t *dpo) pool_put(mpls_label_dpo_pool, mld); } } +#endif /* CLIB_MARCH_VARIANT */ /** * @brief A struct to hold tracing information for the MPLS label imposition @@ -287,7 +294,7 @@ mpls_label_paint (vlib_buffer_t * b0, } else { - clib_memcpy(hdr0, mld0->mld_hdr, mld0->mld_n_hdr_bytes); + clib_memcpy_fast(hdr0, mld0->mld_hdr, mld0->mld_n_hdr_bytes); hdr0 = hdr0 + (mld0->mld_n_labels - 1); } @@ -482,6 +489,12 @@ mpls_label_imposition_inline (vlib_main_t * vm, exp2 = ip_dscp_to_mpls_exp(ip2->tos); exp3 = ip_dscp_to_mpls_exp(ip3->tos); } + + /* save the payload proto information in mpls opaque */ + vnet_buffer(b0)->mpls.pyld_proto = DPO_PROTO_IP4; + vnet_buffer(b1)->mpls.pyld_proto = DPO_PROTO_IP4; + vnet_buffer(b2)->mpls.pyld_proto = DPO_PROTO_IP4; + vnet_buffer(b3)->mpls.pyld_proto = DPO_PROTO_IP4; } else if (DPO_PROTO_IP6 == dproto) { @@ -516,6 +529,12 @@ mpls_label_imposition_inline (vlib_main_t * vm, exp3 = ip_dscp_to_mpls_exp( ip6_traffic_class_network_order(ip3)); } + + /* save the payload proto information in mpls opaque */ + vnet_buffer(b0)->mpls.pyld_proto = DPO_PROTO_IP6; + vnet_buffer(b1)->mpls.pyld_proto = DPO_PROTO_IP6; + vnet_buffer(b2)->mpls.pyld_proto = DPO_PROTO_IP6; + vnet_buffer(b3)->mpls.pyld_proto = DPO_PROTO_IP6; } else { @@ -785,6 +804,9 @@ mpls_label_imposition_inline (vlib_main_t * vm, ttl0 = ip0->ttl; exp0 = ip_dscp_to_mpls_exp(ip0->tos); } + + /* save the payload proto information in mpls opaque */ + vnet_buffer(b0)->mpls.pyld_proto = DPO_PROTO_IP4; } else if (DPO_PROTO_IP6 == dproto) { @@ -803,6 +825,9 @@ mpls_label_imposition_inline (vlib_main_t * vm, exp0 = ip_dscp_to_mpls_exp( ip6_traffic_class_network_order(ip0)); } + + /* save the payload proto information in mpls opaque */ + vnet_buffer(b0)->mpls.pyld_proto = DPO_PROTO_IP6; } else { @@ -902,8 +927,7 @@ format_mpls_label_imposition_trace (u8 * s, va_list * args) return (s); } -static uword -mpls_mpls_label_imposition_pipe (vlib_main_t * vm, +VLIB_NODE_FN (mpls_mpls_label_imposition_pipe_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -913,7 +937,6 @@ mpls_mpls_label_imposition_pipe (vlib_main_t * vm, } VLIB_REGISTER_NODE (mpls_mpls_label_imposition_pipe_node) = { - .function = mpls_mpls_label_imposition_pipe, .name = "mpls-label-imposition-pipe", .vector_size = sizeof (u32), @@ -923,11 +946,8 @@ VLIB_REGISTER_NODE (mpls_mpls_label_imposition_pipe_node) = { [0] = "mpls-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (mpls_mpls_label_imposition_pipe_node, - mpls_mpls_label_imposition_pipe) -static uword -ip4_mpls_label_imposition_pipe (vlib_main_t * vm, +VLIB_NODE_FN (ip4_mpls_label_imposition_pipe_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -937,7 +957,6 @@ ip4_mpls_label_imposition_pipe (vlib_main_t * vm, } VLIB_REGISTER_NODE (ip4_mpls_label_imposition_pipe_node) = { - .function = ip4_mpls_label_imposition_pipe, .name = "ip4-mpls-label-imposition-pipe", .vector_size = sizeof (u32), @@ -947,11 +966,8 @@ VLIB_REGISTER_NODE (ip4_mpls_label_imposition_pipe_node) = { [0] = "ip4-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (ip4_mpls_label_imposition_pipe_node, - ip4_mpls_label_imposition_pipe) -static uword -ip6_mpls_label_imposition_pipe (vlib_main_t * vm, +VLIB_NODE_FN (ip6_mpls_label_imposition_pipe_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -961,7 +977,6 @@ ip6_mpls_label_imposition_pipe (vlib_main_t * vm, } VLIB_REGISTER_NODE (ip6_mpls_label_imposition_pipe_node) = { - .function = ip6_mpls_label_imposition_pipe, .name = "ip6-mpls-label-imposition-pipe", .vector_size = sizeof (u32), @@ -971,11 +986,8 @@ VLIB_REGISTER_NODE (ip6_mpls_label_imposition_pipe_node) = { [0] = "ip6-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (ip6_mpls_label_imposition_pipe_node, - ip6_mpls_label_imposition_pipe) -static uword -ethernet_mpls_label_imposition_pipe (vlib_main_t * vm, +VLIB_NODE_FN (ethernet_mpls_label_imposition_pipe_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -985,7 +997,6 @@ ethernet_mpls_label_imposition_pipe (vlib_main_t * vm, } VLIB_REGISTER_NODE (ethernet_mpls_label_imposition_pipe_node) = { - .function = ethernet_mpls_label_imposition_pipe, .name = "ethernet-mpls-label-imposition-pipe", .vector_size = sizeof (u32), @@ -996,11 +1007,7 @@ VLIB_REGISTER_NODE (ethernet_mpls_label_imposition_pipe_node) = { } }; -VLIB_NODE_FUNCTION_MULTIARCH (ethernet_mpls_label_imposition_pipe_node, - ethernet_mpls_label_imposition_pipe) - -static uword -mpls_mpls_label_imposition_uniform (vlib_main_t * vm, +VLIB_NODE_FN (mpls_mpls_label_imposition_uniform_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -1010,7 +1017,6 @@ mpls_mpls_label_imposition_uniform (vlib_main_t * vm, } VLIB_REGISTER_NODE (mpls_mpls_label_imposition_uniform_node) = { - .function = mpls_mpls_label_imposition_uniform, .name = "mpls-label-imposition-uniform", .vector_size = sizeof (u32), @@ -1020,11 +1026,8 @@ VLIB_REGISTER_NODE (mpls_mpls_label_imposition_uniform_node) = { [0] = "mpls-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (mpls_mpls_label_imposition_uniform_node, - mpls_mpls_label_imposition_uniform) -static uword -ip4_mpls_label_imposition_uniform (vlib_main_t * vm, +VLIB_NODE_FN (ip4_mpls_label_imposition_uniform_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -1034,7 +1037,6 @@ ip4_mpls_label_imposition_uniform (vlib_main_t * vm, } VLIB_REGISTER_NODE (ip4_mpls_label_imposition_uniform_node) = { - .function = ip4_mpls_label_imposition_uniform, .name = "ip4-mpls-label-imposition-uniform", .vector_size = sizeof (u32), @@ -1044,11 +1046,8 @@ VLIB_REGISTER_NODE (ip4_mpls_label_imposition_uniform_node) = { [0] = "ip4-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (ip4_mpls_label_imposition_uniform_node, - ip4_mpls_label_imposition_uniform) -static uword -ip6_mpls_label_imposition_uniform (vlib_main_t * vm, +VLIB_NODE_FN (ip6_mpls_label_imposition_uniform_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -1058,7 +1057,6 @@ ip6_mpls_label_imposition_uniform (vlib_main_t * vm, } VLIB_REGISTER_NODE (ip6_mpls_label_imposition_uniform_node) = { - .function = ip6_mpls_label_imposition_uniform, .name = "ip6-mpls-label-imposition-uniform", .vector_size = sizeof (u32), @@ -1068,11 +1066,8 @@ VLIB_REGISTER_NODE (ip6_mpls_label_imposition_uniform_node) = { [0] = "ip6-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (ip6_mpls_label_imposition_uniform_node, - ip6_mpls_label_imposition_uniform) -static uword -ethernet_mpls_label_imposition_uniform (vlib_main_t * vm, +VLIB_NODE_FN (ethernet_mpls_label_imposition_uniform_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -1082,7 +1077,6 @@ ethernet_mpls_label_imposition_uniform (vlib_main_t * vm, } VLIB_REGISTER_NODE (ethernet_mpls_label_imposition_uniform_node) = { - .function = ethernet_mpls_label_imposition_uniform, .name = "ethernet-mpls-label-imposition-uniform", .vector_size = sizeof (u32), @@ -1093,11 +1087,8 @@ VLIB_REGISTER_NODE (ethernet_mpls_label_imposition_uniform_node) = { } }; -VLIB_NODE_FUNCTION_MULTIARCH (ethernet_mpls_label_imposition_uniform_node, - ethernet_mpls_label_imposition_uniform) -static uword -ip4_mpls_label_imposition_pipe_no_ip_ttl_decr (vlib_main_t * vm, +VLIB_NODE_FN (ip4_mpls_label_imposition_pipe_no_ip_ttl_decr_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -1107,7 +1098,6 @@ ip4_mpls_label_imposition_pipe_no_ip_ttl_decr (vlib_main_t * vm, } VLIB_REGISTER_NODE (ip4_mpls_label_imposition_pipe_no_ip_ttl_decr_node) = { - .function = ip4_mpls_label_imposition_pipe_no_ip_ttl_decr, .name = "ip4-mpls-label-imposition-pipe-no-ip-ttl-decr", .vector_size = sizeof (u32), @@ -1117,11 +1107,8 @@ VLIB_REGISTER_NODE (ip4_mpls_label_imposition_pipe_no_ip_ttl_decr_node) = { [0] = "ip4-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (ip4_mpls_label_imposition_pipe_no_ip_ttl_decr_node, - ip4_mpls_label_imposition_pipe_no_ip_ttl_decr) -static uword -ip6_mpls_label_imposition_pipe_no_ip_ttl_decr (vlib_main_t * vm, +VLIB_NODE_FN (ip6_mpls_label_imposition_pipe_no_ip_ttl_decr_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -1131,7 +1118,6 @@ ip6_mpls_label_imposition_pipe_no_ip_ttl_decr (vlib_main_t * vm, } VLIB_REGISTER_NODE (ip6_mpls_label_imposition_pipe_no_ip_ttl_decr_node) = { - .function = ip6_mpls_label_imposition_pipe_no_ip_ttl_decr, .name = "ip6-mpls-label-imposition-pipe-no-ip-ttl-decr", .vector_size = sizeof (u32), @@ -1141,11 +1127,8 @@ VLIB_REGISTER_NODE (ip6_mpls_label_imposition_pipe_no_ip_ttl_decr_node) = { [0] = "ip6-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (ip6_mpls_label_imposition_pipe_no_ip_ttl_decr_node, - ip6_mpls_label_imposition_pipe_no_ip_ttl_decr) -static uword -ip4_mpls_label_imposition_uniform_no_ip_ttl_decr (vlib_main_t * vm, +VLIB_NODE_FN (ip4_mpls_label_imposition_uniform_no_ip_ttl_decr_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -1156,7 +1139,6 @@ ip4_mpls_label_imposition_uniform_no_ip_ttl_decr (vlib_main_t * vm, } VLIB_REGISTER_NODE (ip4_mpls_label_imposition_uniform_no_ip_ttl_decr_node) = { - .function = ip4_mpls_label_imposition_uniform_no_ip_ttl_decr, .name = "ip4-mpls-label-imposition-uniform-no-ip-ttl-decr", .vector_size = sizeof (u32), @@ -1166,11 +1148,8 @@ VLIB_REGISTER_NODE (ip4_mpls_label_imposition_uniform_no_ip_ttl_decr_node) = { [0] = "ip4-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (ip4_mpls_label_imposition_uniform_no_ip_ttl_decr_node, - ip4_mpls_label_imposition_uniform_no_ip_ttl_decr) -static uword -ip6_mpls_label_imposition_uniform_no_ip_ttl_decr (vlib_main_t * vm, +VLIB_NODE_FN (ip6_mpls_label_imposition_uniform_no_ip_ttl_decr_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { @@ -1181,7 +1160,6 @@ ip6_mpls_label_imposition_uniform_no_ip_ttl_decr (vlib_main_t * vm, } VLIB_REGISTER_NODE (ip6_mpls_label_imposition_uniform_no_ip_ttl_decr_node) = { - .function = ip6_mpls_label_imposition_uniform_no_ip_ttl_decr, .name = "ip6-mpls-label-imposition-uniform-no-ip-ttl-decr", .vector_size = sizeof (u32), @@ -1191,10 +1169,9 @@ VLIB_REGISTER_NODE (ip6_mpls_label_imposition_uniform_no_ip_ttl_decr_node) = { [0] = "ip6-drop", } }; -VLIB_NODE_FUNCTION_MULTIARCH (ip6_mpls_label_imposition_uniform_no_ip_ttl_decr_node, - ip6_mpls_label_imposition_uniform_no_ip_ttl_decr) +#ifndef CLIB_MARCH_VARIANT static void mpls_label_dpo_mem_show (void) { @@ -1218,7 +1195,7 @@ mpls_label_interpose (const dpo_id_t *original, mld = mpls_label_dpo_get(original->dpoi_index); mld_clone->mld_locks = 0; - clib_memcpy(&mld_clone->mld_hdr, + clib_memcpy_fast(&mld_clone->mld_hdr, &mld->mld_hdr, sizeof(mld_clone->mld_hdr)); mld_clone->mld_payload_proto = mld->mld_payload_proto; @@ -1359,3 +1336,4 @@ mpls_label_dpo_get_type (mpls_label_dpo_flags_t flags) { return (mpls_label_dpo_types[flags]); } +#endif /* CLIB_MARCH_VARIANT */