l2: L2/L3 mode swicth cleanup and l2-patch fix 91/27091/3
authorJohn Lo <loj@cisco.com>
Thu, 14 May 2020 19:02:16 +0000 (15:02 -0400)
committerFlorin Coras <florin.coras@gmail.com>
Sat, 16 May 2020 02:52:13 +0000 (02:52 +0000)
Cleanup L2/L3 mode switch to not redirect to/from ethernet-input node
as it is no longer necessary.
L2 patch should use sw_if_index for device feature enable/disable.

Type: fix

Signed-off-by: John Lo <loj@cisco.com>
Change-Id: I0f24161d027b07c188fd1e05276146f94c075710

src/vnet/bonding/cli.c
src/vnet/bonding/device.c
src/vnet/l2/l2_input.c
src/vnet/l2/l2_patch.c

index d9a6408..92a9ff0 100644 (file)
@@ -727,12 +727,11 @@ bond_enslave (vlib_main_t * vm, bond_enslave_args_t * args)
   bond_slave_add_del_mac_addrs (bif, sif->sw_if_index, 1 /* is_add */ );
 
   if (bif_hw->l2_if_count)
-    {
-      ethernet_set_flags (vnm, sif_hw->hw_if_index,
-                         ETHERNET_INTERFACE_FLAG_ACCEPT_ALL);
-      /* ensure all packets go to ethernet-input */
-      ethernet_set_rx_redirect (vnm, sif_hw, 1);
-    }
+    ethernet_set_flags (vnm, sif_hw->hw_if_index,
+                       ETHERNET_INTERFACE_FLAG_ACCEPT_ALL);
+  else
+    ethernet_set_flags (vnm, sif_hw->hw_if_index,
+                       /*ETHERNET_INTERFACE_FLAG_DEFAULT_L3 */ 0);
 
   if (bif->mode == BOND_MODE_LACP)
     {
index 550321b..b3069fe 100644 (file)
@@ -99,9 +99,6 @@ bond_set_l2_mode_function (vnet_main_t * vnm,
        sif_hw = vnet_get_sup_hw_interface (vnm, *sw_if_index);
        ethernet_set_flags (vnm, sif_hw->hw_if_index,
                            ETHERNET_INTERFACE_FLAG_ACCEPT_ALL);
-
-       /* ensure all packets go to ethernet-input */
-       ethernet_set_rx_redirect (vnm, sif_hw, 1);
       }
     }
   else if ((bif_hw->l2_if_count == 0) && (l2_if_adjust == -1))
@@ -110,9 +107,8 @@ bond_set_l2_mode_function (vnet_main_t * vnm,
       vec_foreach (sw_if_index, bif->slaves)
       {
        sif_hw = vnet_get_sup_hw_interface (vnm, *sw_if_index);
-
-       /* Allow ip packets to go directly to ip4-input etc */
-       ethernet_set_rx_redirect (vnm, sif_hw, 0);
+       ethernet_set_flags (vnm, sif_hw->hw_if_index,
+                           /*ETHERNET_INTERFACE_FLAG_DEFAULT_L3 */ 0);
       }
     }
 
index 7b93fba..8a7ab80 100644 (file)
@@ -800,9 +800,6 @@ set_int_l2_mode (vlib_main_t * vm, vnet_main_t * vnet_main, /*           */
          config->feature_bitmap &=
            ~(L2INPUT_FEAT_LEARN | L2INPUT_FEAT_FWD | L2INPUT_FEAT_FLOOD);
          shg = 0;              /* not used in xconnect */
-
-         /* Insure all packets go to ethernet-input */
-         ethernet_set_rx_redirect (vnet_main, hi, 1);
        }
 
       /* set up split-horizon group and set output feature bit */
@@ -827,25 +824,18 @@ set_int_l2_mode (vlib_main_t * vm, vnet_main_t * vnet_main,       /*           */
     {
       if ((hi->l2_if_count == 1) && (l2_if_adjust == 1))
        {
-         /* Just added first L2 interface on this port */
-
-         /* Set promiscuous mode on the l2 interface */
+         /* Just added first L2 interface on this port
+          * Set promiscuous mode on the l2 interface */
          ethernet_set_flags (vnet_main, hi->hw_if_index,
                              ETHERNET_INTERFACE_FLAG_ACCEPT_ALL);
-
-         /* ensure all packets go to ethernet-input */
-         ethernet_set_rx_redirect (vnet_main, hi, 1);
-
        }
       else if ((hi->l2_if_count == 0) && (l2_if_adjust == -1))
        {
-         /* Just removed only L2 subinterface on this port */
-
-         /* Disable promiscuous mode on the l2 interface */
-         ethernet_set_flags (vnet_main, hi->hw_if_index, 0);
+         /* Just removed only L2 subinterface on this port
+          * Disable promiscuous mode on the l2 interface */
+         ethernet_set_flags (vnet_main, hi->hw_if_index,
+                             /*ETHERNET_INTERFACE_FLAG_DEFAULT_L3 */ 0);
 
-         /* Allow ip packets to go directly to ip4-input etc */
-         ethernet_set_rx_redirect (vnet_main, hi, 0);
        }
     }
 
index fb8849d..618ae20 100644 (file)
@@ -270,15 +270,15 @@ vnet_l2_patch_add_del (u32 rx_sw_if_index, u32 tx_sw_if_index, int is_add)
                          ETHERNET_INTERFACE_FLAG_ACCEPT_ALL);
 
       vnet_feature_enable_disable ("device-input", "l2-patch",
-                                  rxhi->hw_if_index, 1, 0, 0);
+                                  rxhi->sw_if_index, 1, 0, 0);
     }
   else
     {
       ethernet_set_flags (l2pm->vnet_main, rxhi->hw_if_index,
-                         0 /* disable promiscuous mode */ );
+                         /*ETHERNET_INTERFACE_FLAG_DEFAULT_L3 */ 0);
 
       vnet_feature_enable_disable ("device-input", "l2-patch",
-                                  rxhi->hw_if_index, 0, 0, 0);
+                                  rxhi->sw_if_index, 0, 0, 0);
       if (vec_len (l2pm->tx_next_by_rx_sw_if_index) > rx_sw_if_index)
        {
          l2pm->tx_next_by_rx_sw_if_index[rx_sw_if_index] = ~0;