bond: packet drops on VPP bond interface [VPP-1544]
[vpp.git] / src / vnet / bonding / node.c
index d945069..8001342 100644 (file)
@@ -396,19 +396,21 @@ bond_sw_interface_up_down (vnet_main_t * vnm, u32 sw_if_index, u32 flags)
   if (sif)
     {
       sif->port_enabled = flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP;
+      if (sif->lacp_enabled)
+       return 0;
+
       if (sif->port_enabled == 0)
        {
-         if (sif->lacp_enabled == 0)
-           {
-             bond_disable_collecting_distributing (vm, sif);
-           }
+         bond_disable_collecting_distributing (vm, sif);
        }
       else
        {
-         if (sif->lacp_enabled == 0)
-           {
-             bond_enable_collecting_distributing (vm, sif);
-           }
+         vnet_main_t *vnm = vnet_get_main ();
+         vnet_hw_interface_t *hw =
+           vnet_get_sup_hw_interface (vnm, sw_if_index);
+
+         if (hw->flags & VNET_HW_INTERFACE_FLAG_LINK_UP)
+           bond_enable_collecting_distributing (vm, sif);
        }
     }
 
@@ -429,19 +431,16 @@ bond_hw_interface_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags)
   sif = bond_get_slave_by_sw_if_index (sw->sw_if_index);
   if (sif)
     {
+      if (sif->lacp_enabled)
+       return 0;
+
       if (!(flags & VNET_HW_INTERFACE_FLAG_LINK_UP))
        {
-         if (sif->lacp_enabled == 0)
-           {
-             bond_disable_collecting_distributing (vm, sif);
-           }
+         bond_disable_collecting_distributing (vm, sif);
        }
-      else
+      else if (sif->port_enabled)
        {
-         if (sif->lacp_enabled == 0)
-           {
-             bond_enable_collecting_distributing (vm, sif);
-           }
+         bond_enable_collecting_distributing (vm, sif);
        }
     }