X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsrv6%2Fsr_localsid.c;h=c592f797d1c7410a90a1a5b55b3d927bf55f8595;hb=bf1f8b7f288c29bfcc128b1d09eae1c1eac2b7cc;hp=1be683349ee4857ff2d0a879b76423a407eeb2b0;hpb=910744394f2529ecac0fa91a16237777e023c5e6;p=vpp.git diff --git a/src/vnet/srv6/sr_localsid.c b/src/vnet/srv6/sr_localsid.c index 1be683349ee..c592f797d1c 100755 --- a/src/vnet/srv6/sr_localsid.c +++ b/src/vnet/srv6/sr_localsid.c @@ -146,7 +146,7 @@ sr_cli_localsid (char is_del, ip6_address_t * localsid_addr, /* Create a new localsid registry */ pool_get (sm->localsids, ls); - memset (ls, 0, sizeof (*ls)); + clib_memset (ls, 0, sizeof (*ls)); clib_memcpy (&ls->localsid, localsid_addr, sizeof (ip6_address_t)); ls->end_psp = end_psp; @@ -162,7 +162,7 @@ sr_cli_localsid (char is_del, ip6_address_t * localsid_addr, clib_memcpy (&ls->next_hop.ip6, &nh_addr->ip6, sizeof (ip6_address_t)); break; case SR_BEHAVIOR_T: - ls->vrf_index = sw_if_index; + ls->vrf_index = fib_table_find (FIB_PROTOCOL_IP6, sw_if_index); break; case SR_BEHAVIOR_DX4: ls->sw_if_index = sw_if_index; @@ -173,10 +173,10 @@ sr_cli_localsid (char is_del, ip6_address_t * localsid_addr, clib_memcpy (&ls->next_hop.ip6, &nh_addr->ip6, sizeof (ip6_address_t)); break; case SR_BEHAVIOR_DT6: - ls->vrf_index = sw_if_index; + ls->vrf_index = fib_table_find (FIB_PROTOCOL_IP6, sw_if_index); break; case SR_BEHAVIOR_DT4: - ls->vrf_index = sw_if_index; + ls->vrf_index = fib_table_find (FIB_PROTOCOL_IP4, sw_if_index); break; case SR_BEHAVIOR_DX2: ls->sw_if_index = sw_if_index; @@ -210,7 +210,8 @@ sr_cli_localsid (char is_del, ip6_address_t * localsid_addr, } /* Set DPO */ - if (ls->behavior == SR_BEHAVIOR_END || ls->behavior == SR_BEHAVIOR_X) + if (ls->behavior == SR_BEHAVIOR_END || ls->behavior == SR_BEHAVIOR_X + || ls->behavior == SR_BEHAVIOR_T) dpo_set (&dpo, sr_localsid_dpo_type, DPO_PROTO_IP6, ls - sm->localsids); else if (ls->behavior > SR_BEHAVIOR_D_FIRST && ls->behavior < SR_BEHAVIOR_LAST) @@ -276,7 +277,7 @@ sr_cli_localsid_command_fn (vlib_main_t * vm, unformat_input_t * input, int rv; - memset (&resulting_address, 0, sizeof (ip6_address_t)); + clib_memset (&resulting_address, 0, sizeof (ip6_address_t)); ip46_address_reset (&next_hop); while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) @@ -473,8 +474,7 @@ show_sr_localsid_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_output (vm, "\tAddress: \t%U\n\tBehavior: \tT (Endpoint with specific IPv6 table lookup)" "\n\tTable: \t%u", - format_ip6_address, &ls->localsid, - format_vnet_sw_if_index_name, vnm, ls->vrf_index); + format_ip6_address, &ls->localsid, ls->vrf_index); break; case SR_BEHAVIOR_DX4: vlib_cli_output (vm, @@ -575,8 +575,8 @@ clear_sr_localsid_counters_command_fn (vlib_main_t * vm, /* *INDENT-OFF* */ VLIB_CLI_COMMAND (clear_sr_localsid_counters_command, static) = { - .path = "clear sr localsid counters", - .short_help = "clear sr localsid counters", + .path = "clear sr localsid-counters", + .short_help = "clear sr localsid-counters", .function = clear_sr_localsid_counters_command_fn, }; /* *INDENT-ON* */ @@ -888,7 +888,7 @@ sr_localsid_d_fn (vlib_main_t * vm, vlib_node_runtime_t * node, from = vlib_frame_vector_args (from_frame); n_left_from = from_frame->n_vectors; next_index = node->cached_next_index; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; while (n_left_from > 0) { @@ -901,7 +901,6 @@ sr_localsid_d_fn (vlib_main_t * vm, vlib_node_runtime_t * node, u32 bi0, bi1, bi2, bi3; vlib_buffer_t *b0, *b1, *b2, *b3; ip6_header_t *ip0, *ip1, *ip2, *ip3; - ip6_ext_header_t *prev0, *prev1, *prev2, *prev3; ip6_sr_header_t *sr0, *sr1, *sr2, *sr3; u32 next0, next1, next2, next3; next0 = next1 = next2 = next3 = SR_LOCALSID_NEXT_IP6_LOOKUP; @@ -947,23 +946,27 @@ sr_localsid_d_fn (vlib_main_t * vm, vlib_node_runtime_t * node, vnet_buffer (b0)->ip.adj_index[VLIB_TX]); ls1 = pool_elt_at_index (sm->localsids, - vnet_buffer (b0)->ip.adj_index[VLIB_TX]); + vnet_buffer (b1)->ip.adj_index[VLIB_TX]); ls2 = pool_elt_at_index (sm->localsids, - vnet_buffer (b0)->ip.adj_index[VLIB_TX]); + vnet_buffer (b2)->ip.adj_index[VLIB_TX]); ls3 = pool_elt_at_index (sm->localsids, - vnet_buffer (b0)->ip.adj_index[VLIB_TX]); + vnet_buffer (b3)->ip.adj_index[VLIB_TX]); ip0 = vlib_buffer_get_current (b0); ip1 = vlib_buffer_get_current (b1); ip2 = vlib_buffer_get_current (b2); ip3 = vlib_buffer_get_current (b3); - ip6_ext_header_find_t (ip0, prev0, sr0, IP_PROTOCOL_IPV6_ROUTE); - ip6_ext_header_find_t (ip1, prev1, sr1, IP_PROTOCOL_IPV6_ROUTE); - ip6_ext_header_find_t (ip2, prev2, sr2, IP_PROTOCOL_IPV6_ROUTE); - ip6_ext_header_find_t (ip3, prev3, sr3, IP_PROTOCOL_IPV6_ROUTE); + sr0 = + ip6_ext_header_find (vm, b0, ip0, IP_PROTOCOL_IPV6_ROUTE, NULL); + sr1 = + ip6_ext_header_find (vm, b1, ip1, IP_PROTOCOL_IPV6_ROUTE, NULL); + sr2 = + ip6_ext_header_find (vm, b2, ip2, IP_PROTOCOL_IPV6_ROUTE, NULL); + sr3 = + ip6_ext_header_find (vm, b3, ip3, IP_PROTOCOL_IPV6_ROUTE, NULL); end_decaps_srh_processing (node, b0, ip0, sr0, ls0, &next0); end_decaps_srh_processing (node, b1, ip1, sr1, ls1, &next1); @@ -1097,7 +1100,6 @@ sr_localsid_d_fn (vlib_main_t * vm, vlib_node_runtime_t * node, u32 bi0; vlib_buffer_t *b0; ip6_header_t *ip0; - ip6_ext_header_t *prev0; ip6_sr_header_t *sr0; u32 next0 = SR_LOCALSID_NEXT_IP6_LOOKUP; ip6_sr_localsid_t *ls0; @@ -1118,7 +1120,8 @@ sr_localsid_d_fn (vlib_main_t * vm, vlib_node_runtime_t * node, vnet_buffer (b0)->ip.adj_index[VLIB_TX]); /* Find SRH as well as previous header */ - ip6_ext_header_find_t (ip0, prev0, sr0, IP_PROTOCOL_IPV6_ROUTE); + sr0 = + ip6_ext_header_find (vm, b0, ip0, IP_PROTOCOL_IPV6_ROUTE, NULL); /* SRH processing and End variants */ end_decaps_srh_processing (node, b0, ip0, sr0, ls0, &next0); @@ -1191,7 +1194,7 @@ sr_localsid_fn (vlib_main_t * vm, vlib_node_runtime_t * node, from = vlib_frame_vector_args (from_frame); n_left_from = from_frame->n_vectors; next_index = node->cached_next_index; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; while (n_left_from > 0) { @@ -1250,23 +1253,27 @@ sr_localsid_fn (vlib_main_t * vm, vlib_node_runtime_t * node, ip2 = vlib_buffer_get_current (b2); ip3 = vlib_buffer_get_current (b3); - ip6_ext_header_find_t (ip0, prev0, sr0, IP_PROTOCOL_IPV6_ROUTE); - ip6_ext_header_find_t (ip1, prev1, sr1, IP_PROTOCOL_IPV6_ROUTE); - ip6_ext_header_find_t (ip2, prev2, sr2, IP_PROTOCOL_IPV6_ROUTE); - ip6_ext_header_find_t (ip3, prev3, sr3, IP_PROTOCOL_IPV6_ROUTE); + sr0 = + ip6_ext_header_find (vm, b0, ip0, IP_PROTOCOL_IPV6_ROUTE, &prev0); + sr1 = + ip6_ext_header_find (vm, b1, ip1, IP_PROTOCOL_IPV6_ROUTE, &prev1); + sr2 = + ip6_ext_header_find (vm, b2, ip2, IP_PROTOCOL_IPV6_ROUTE, &prev2); + sr3 = + ip6_ext_header_find (vm, b3, ip3, IP_PROTOCOL_IPV6_ROUTE, &prev3); ls0 = pool_elt_at_index (sm->localsids, vnet_buffer (b0)->ip.adj_index[VLIB_TX]); ls1 = pool_elt_at_index (sm->localsids, - vnet_buffer (b0)->ip.adj_index[VLIB_TX]); + vnet_buffer (b1)->ip.adj_index[VLIB_TX]); ls2 = pool_elt_at_index (sm->localsids, - vnet_buffer (b0)->ip.adj_index[VLIB_TX]); + vnet_buffer (b2)->ip.adj_index[VLIB_TX]); ls3 = pool_elt_at_index (sm->localsids, - vnet_buffer (b0)->ip.adj_index[VLIB_TX]); + vnet_buffer (b3)->ip.adj_index[VLIB_TX]); end_srh_processing (node, b0, ip0, sr0, ls0, &next0, ls0->end_psp, prev0); @@ -1418,7 +1425,8 @@ sr_localsid_fn (vlib_main_t * vm, vlib_node_runtime_t * node, b0 = vlib_get_buffer (vm, bi0); ip0 = vlib_buffer_get_current (b0); - ip6_ext_header_find_t (ip0, prev0, sr0, IP_PROTOCOL_IPV6_ROUTE); + sr0 = + ip6_ext_header_find (vm, b0, ip0, IP_PROTOCOL_IPV6_ROUTE, &prev0); /* Lookup the SR End behavior based on IP DA (adj) */ ls0 = @@ -1550,7 +1558,7 @@ sr_localsid_register_function (vlib_main_t * vm, u8 * fn_name, plugin - sm->plugin_functions); } - memset (plugin, 0, sizeof (*plugin)); + clib_memset (plugin, 0, sizeof (*plugin)); plugin->sr_localsid_function_number = (plugin - sm->plugin_functions); plugin->sr_localsid_function_number += SR_BEHAVIOR_LAST;