ip6_sr_policy_t *sr_policy = 0;
uword *p = 0;
- memset (&key, 0, sizeof (sr_steering_key_t));
+ clib_memset (&key, 0, sizeof (sr_steering_key_t));
/* Compute the steer policy key */
if (traffic_type == SR_STEER_IPV4 || traffic_type == SR_STEER_IPV6)
else if (steer_pl->classify.traffic_type == SR_STEER_L2)
{
/* Remove HW redirection */
- vnet_feature_enable_disable ("device-input",
- "sr-policy-rewrite-encaps-l2",
- sw_if_index, 0, 0, 0);
+ int ret = vnet_feature_enable_disable ("device-input",
+ "sr-pl-rewrite-encaps-l2",
+ sw_if_index, 0, 0, 0);
+
+ if (ret != 0)
+ return -1;
+
sm->sw_iface_sr_policies[sw_if_index] = ~(u32) 0;
/* Remove promiscous mode from interface */
vnet_main_t *vnm = vnet_get_main ();
- ethernet_main_t *em = ðernet_main;
- ethernet_interface_t *eif =
- ethernet_get_interface (em, sw_if_index);
-
- if (!eif)
- goto cleanup_error_redirection;
-
- ethernet_set_flags (vnm, sw_if_index, 0);
+ vnet_hw_interface_t *hi =
+ vnet_get_sup_hw_interface (vnm, sw_if_index);
+ /* Make sure it is main interface */
+ if (hi->sw_if_index == sw_if_index)
+ ethernet_set_flags (vnm, hi->hw_if_index, 0);
}
/* Delete SR steering policy entry */
else
sr_policy = pool_elt_at_index (sm->sr_policies, sr_policy_index);
- if (!sr_policy)
- return -2;
-
steer_pl->sr_policy = sr_policy - sm->sr_policies;
/* Remove old FIB/hw redirection and create a new one */
/* Create a new steering policy */
pool_get (sm->steer_policies, steer_pl);
- memset (steer_pl, 0, sizeof (*steer_pl));
+ clib_memset (steer_pl, 0, sizeof (*steer_pl));
if (traffic_type == SR_STEER_IPV4 || traffic_type == SR_STEER_IPV6)
{
- clib_memcpy (&steer_pl->classify.l3.prefix, prefix,
- sizeof (ip46_address_t));
+ clib_memcpy_fast (&steer_pl->classify.l3.prefix, prefix,
+ sizeof (ip46_address_t));
steer_pl->classify.l3.mask_width = mask_width;
steer_pl->classify.l3.fib_table =
(table_id != (u32) ~ 0 ? table_id : 0);
/* Set promiscous mode on interface */
vnet_main_t *vnm = vnet_get_main ();
- ethernet_main_t *em = ðernet_main;
- ethernet_interface_t *eif = ethernet_get_interface (em, sw_if_index);
-
- if (!eif)
- goto cleanup_error_redirection;
-
- ethernet_set_flags (vnm, sw_if_index,
- ETHERNET_INTERFACE_FLAG_ACCEPT_ALL);
+ vnet_hw_interface_t *hi = vnet_get_sup_hw_interface (vnm, sw_if_index);
+ /* Make sure it is main interface */
+ if (hi->sw_if_index == sw_if_index)
+ ethernet_set_flags (vnm, hi->hw_if_index,
+ ETHERNET_INTERFACE_FLAG_ACCEPT_ALL);
}
else if (traffic_type == SR_STEER_IPV4)
if (!sr_policy->is_encap)
u8 sr_policy_set = 0;
- memset (&prefix, 0, sizeof (ip46_address_t));
+ clib_memset (&prefix, 0, sizeof (ip46_address_t));
int rv;
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
&sw_if_index))
traffic_type = SR_STEER_L2;
else if (!sr_policy_set
- && unformat (input, "via sr policy index %d",
- &sr_policy_index))
+ && unformat (input, "via index %d", &sr_policy_index))
sr_policy_set = 1;
else if (!sr_policy_set
- && unformat (input, "via sr policy bsid %U",
+ && unformat (input, "via bsid %U",
unformat_ip6_address, &bsid))
sr_policy_set = 1;
else if (fib_table == (u32) ~ 0
if (!traffic_type)
return clib_error_return (0, "No L2/L3 traffic specified");
- if (!sr_policy_set)
+ if (!is_del && !sr_policy_set)
return clib_error_return (0, "No SR policy specified");
/* Make sure that the prefixes are clean */
/* *INDENT-OFF* */
VLIB_CLI_COMMAND (sr_steer_policy_command, static) = {
.path = "sr steer",
- .short_help = "sr steer (del) [l3 <ip_addr/mask>|l2 <sf_if>]"
- "via sr policy [index <sr_policy_index>|bsid <bsid_ip6_addr>]"
+ .short_help = "sr steer (del) [l3 <ip_addr/mask>|l2 <sf_if>] "
+ "via [index <sr_policy_index>|bsid <bsid_ip6_addr>] "
"(fib-table <fib_table_index>)",
.long_help =
"\tSteer a L2 or L3 traffic through an existing SR policy.\n"
vlib_cli_output (vm, "SR steering policies:");
/* *INDENT-OFF* */
- pool_foreach (steer_pl, sm->steer_policies, ({vec_add1(steer_policies, steer_pl);}));
+ pool_foreach (steer_pl, sm->steer_policies) {vec_add1(steer_policies, steer_pl);}
/* *INDENT-ON* */
vlib_cli_output (vm, "Traffic\t\tSR policy BSID");
for (i = 0; i < vec_len (steer_policies); i++)
/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_sr_steering_policies_command, static) = {
- .path = "show sr steering policies",
- .short_help = "show sr steering policies",
+ .path = "show sr steering-policies",
+ .short_help = "show sr steering-policies",
.function = show_sr_steering_policies_command_fn,
};
/* *INDENT-ON* */