X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fsrv6-as%2Fas.c;h=bdf17527ae87d564a8b476c8d9bd7bcbd7967896;hb=dfd426c2c83f69e95fe8dab5b4827825230f1d7c;hp=3a476044d60a0d85c1560039d6f0f37672327221;hpb=be83704c5b1482dfd2ba38423662a9da5a8d8f81;p=vpp.git diff --git a/src/plugins/srv6-as/as.c b/src/plugins/srv6-as/as.c index 3a476044d60..bdf17527ae8 100644 --- a/src/plugins/srv6-as/as.c +++ b/src/plugins/srv6-as/as.c @@ -64,7 +64,7 @@ prepare_rewrite (ip6_address_t src_addr, ip6_address_t * sid_list, iph->src_address = src_addr; iph->dst_address = sid_list[0]; iph->payload_length = sr_hdr_len; - iph->hop_limit = IPv6_DEFAULT_HOP_LIMIT; + iph->hop_limit = sr_get_hop_limit (); if (num_sids > 1) { @@ -177,12 +177,16 @@ srv6_as_localsid_creation_fn (ip6_sr_localsid_t * localsid) /* Set interface in promiscuous mode */ vnet_main_t *vnm = vnet_get_main (); - ethernet_set_flags (vnm, ls_mem->sw_if_index_in, - ETHERNET_INTERFACE_FLAG_ACCEPT_ALL); + vnet_hw_interface_t *hi = + vnet_get_sup_hw_interface (vnm, ls_mem->sw_if_index_in); + /* Make sure it is main interface */ + if (hi->sw_if_index == ls_mem->sw_if_index_in) + ethernet_set_flags (vnm, hi->hw_if_index, + ETHERNET_INTERFACE_FLAG_ACCEPT_ALL); /* Prepare rewrite string */ ls_mem->rewrite = prepare_rewrite (ls_mem->src_addr, ls_mem->sid_list, - IP_PROTOCOL_IP6_NONXT); + IP_PROTOCOL_IP6_ETHERNET); /* Associate local SID index to this interface (resize vector if needed) */ if (ls_mem->sw_if_index_in >= vec_len (sm->sw_iface_localsid2)) @@ -278,7 +282,11 @@ srv6_as_localsid_removal_fn (ip6_sr_localsid_t * localsid) /* Disable promiscuous mode on the interface */ vnet_main_t *vnm = vnet_get_main (); - ethernet_set_flags (vnm, ls_mem->sw_if_index_in, 0); + vnet_hw_interface_t *hi = + vnet_get_sup_hw_interface (vnm, ls_mem->sw_if_index_in); + /* Make sure it is main interface */ + if (hi->sw_if_index == ls_mem->sw_if_index_in) + ethernet_set_flags (vnm, hi->hw_if_index, 0); /* Remove local SID index from interface table */ sm->sw_iface_localsid2[ls_mem->sw_if_index_in] = ~(u32) 0; @@ -462,7 +470,7 @@ unformat_srv6_as_localsid (unformat_input_t * input, va_list * args) } /* Allocate and initialize memory block for local SID parameters */ - ls_mem = clib_mem_alloc_aligned_at_offset (sizeof *ls_mem, 0, 0, 1); + ls_mem = clib_mem_alloc (sizeof *ls_mem); clib_memset (ls_mem, 0, sizeof *ls_mem); *plugin_mem_p = ls_mem; @@ -535,6 +543,7 @@ srv6_as_init (vlib_main_t * vm) keyword_str, def_str, params_str, + 128, &sm->srv6_as_dpo_type, format_srv6_as_localsid, unformat_srv6_as_localsid, @@ -548,7 +557,6 @@ srv6_as_init (vlib_main_t * vm) return 0; } -/* *INDENT-OFF* */ VNET_FEATURE_INIT (srv6_as2_rewrite, static) = { .arc_name = "device-input", @@ -576,7 +584,6 @@ VLIB_PLUGIN_REGISTER () = { .version = VPP_BUILD_VER, .description = "Static Segment Routing for IPv6 (SRv6) Proxy", }; -/* *INDENT-ON* */ /* * fd.io coding-style-patch-verification: ON