interface: add capabilities flags
[vpp.git] / src / plugins / lldp / lldp_cli.c
index d2cdf12..e77d699 100644 (file)
@@ -102,15 +102,20 @@ lldp_cfg_intf_set (u32 hw_if_index, u8 ** port_desc, u8 ** mgmt_ip4,
          *mgmt_oid = NULL;
        }
 
-      error =
-       vnet_hw_interface_add_del_mac_address (lm->vnet_main, hw_if_index,
-                                              lldp_mac_addr,
-                                              1 /* is_add */ );
-      if (error)
+      /* Add MAC address to an interface's filter */
+      if (hi->caps & VNET_HW_INTERFACE_CAP_SUPPORTS_MAC_FILTER)
        {
-         clib_error_free (error);
-         lldp_delete_intf (lm, n);
-         return lldp_internal_error;
+         error =
+           vnet_hw_interface_add_del_mac_address (lm->vnet_main,
+                                                  hw_if_index,
+                                                  lldp_mac_addr,
+                                                  1 /* is_add */ );
+         if (error)
+           {
+             clib_error_free (error);
+             lldp_delete_intf (lm, n);
+             return lldp_internal_error;
+           }
        }
 
       const vnet_sw_interface_t *sw =
@@ -124,10 +129,12 @@ lldp_cfg_intf_set (u32 hw_if_index, u8 ** port_desc, u8 ** mgmt_ip4,
     {
       lldp_intf_t *n = lldp_get_intf (lm, hi->sw_if_index);
       lldp_delete_intf (lm, n);
-      if (n)
+      /* Remove MAC address from the interface's filter */
+      if ((n) && (hi->caps & VNET_HW_INTERFACE_CAP_SUPPORTS_MAC_FILTER))
        {
          error =
-           vnet_hw_interface_add_del_mac_address (lm->vnet_main, hw_if_index,
+           vnet_hw_interface_add_del_mac_address (lm->vnet_main,
+                                                  hw_if_index,
                                                   lldp_mac_addr,
                                                   0 /* is_add */ );
          if (error)
@@ -574,8 +581,8 @@ format_lldp_intfs_detail (u8 * s, vlib_main_t * vm, const lldp_main_t * lm)
   f64 now = vlib_time_now (vm);
 
   /* *INDENT-OFF* */
-  pool_foreach(
-      n, lm->intfs, ({
+  pool_foreach (
+      n, lm->intfs)  {
         hw = vnet_get_hw_interface(vnm, n->hw_if_index);
         sw = vnet_get_sw_interface(lm->vnet_main, hw->sw_if_index);
 
@@ -632,7 +639,7 @@ format_lldp_intfs_detail (u8 * s, vlib_main_t * vm, const lldp_main_t * lm)
                        vec_len(n->port_id), 1, format_time_ago, n->last_sent,
                        now, format_time_ago, n->last_heard, now);
           }
-      }));
+      }
   /* *INDENT-ON* */
   return s;
 }
@@ -657,8 +664,8 @@ format_lldp_intfs (u8 * s, va_list * va)
              "Status");
 
   /* *INDENT-OFF* */
-  pool_foreach(
-      n, lm->intfs, ({
+  pool_foreach (
+      n, lm->intfs)  {
         const vnet_hw_interface_t *hw =
             vnet_get_hw_interface(vnm, n->hw_if_index);
         const vnet_sw_interface_t *sw =
@@ -681,7 +688,7 @@ format_lldp_intfs (u8 * s, va_list * va)
                        "", "", format_time_ago, n->last_heard, now,
                        format_time_ago, n->last_sent, now, "inactive");
           }
-      }));
+      }
   /* *INDENT-ON* */
   return s;
 }