nat: Include platform specific headers on FreeBSD
[vpp.git] / src / plugins / srv6-as / as.c
index 3a47604..bdf1752 100644 (file)
@@ -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