linux-cp: Only enable/disable the punt feature on the 0<->1 transition
[vpp.git] / src / plugins / linux-cp / lcp_interface.c
index 3a6a685..8f0b78e 100644 (file)
@@ -308,10 +308,13 @@ lcp_itf_pair_add (u32 host_sw_if_index, u32 phy_sw_if_index, u8 *host_name,
     }
   else
     {
-      vnet_feature_enable_disable ("ip4-punt", "linux-cp-punt-l3", 0, 1, NULL,
-                                  0);
-      vnet_feature_enable_disable ("ip6-punt", "linux-cp-punt-l3", 0, 1, NULL,
-                                  0);
+      if (hash_elts (lip_db_by_vif) == 1)
+       {
+         vnet_feature_enable_disable ("ip4-punt", "linux-cp-punt-l3", 0, 1,
+                                      NULL, 0);
+         vnet_feature_enable_disable ("ip6-punt", "linux-cp-punt-l3", 0, 1,
+                                      NULL, 0);
+       }
     }
 
   /* invoke registered callbacks for pair addition */
@@ -435,12 +438,14 @@ lcp_itf_pair_del (u32 phy_sw_if_index)
     }
   else
     {
-      vnet_feature_enable_disable ("ip4-punt", "linux-cp-punt-l3", 0, 0, NULL,
-                                  0);
-      vnet_feature_enable_disable ("ip6-punt", "linux-cp-punt-l3", 0, 0, NULL,
-                                  0);
+      if (hash_elts (lip_db_by_vif) == 1)
+       {
+         vnet_feature_enable_disable ("ip4-punt", "linux-cp-punt-l3", 0, 0,
+                                      NULL, 0);
+         vnet_feature_enable_disable ("ip6-punt", "linux-cp-punt-l3", 0, 0,
+                                      NULL, 0);
+       }
     }
-
   lip_db_by_phy[phy_sw_if_index] = INDEX_INVALID;
   lip_db_by_host[lip->lip_host_sw_if_index] = INDEX_INVALID;
   hash_unset (lip_db_by_vif, lip->lip_vif_index);