api: remove transport specific code from handlers
[vpp.git] / src / vnet / interface_funcs.h
index ab808df..1f22e80 100644 (file)
@@ -73,7 +73,8 @@ always_inline vnet_sw_interface_t *
 vnet_get_sup_sw_interface (vnet_main_t * vnm, u32 sw_if_index)
 {
   vnet_sw_interface_t *sw = vnet_get_sw_interface (vnm, sw_if_index);
-  if (sw->type == VNET_SW_INTERFACE_TYPE_SUB)
+  if (sw->type == VNET_SW_INTERFACE_TYPE_SUB ||
+      sw->type == VNET_SW_INTERFACE_TYPE_P2P)
     sw = vnet_get_sw_interface (vnm, sw->sup_sw_if_index);
   return sw;
 }
@@ -182,6 +183,26 @@ vnet_sw_interface_is_admin_up (vnet_main_t * vnm, u32 sw_if_index)
          VNET_SW_INTERFACE_FLAG_ADMIN_UP) != 0;
 }
 
+always_inline uword
+vnet_swif_is_api_visible (vnet_sw_interface_t * si)
+{
+  return !(si->flags & VNET_SW_INTERFACE_FLAG_HIDDEN);
+}
+
+always_inline uword
+vnet_sw_interface_is_api_visible (vnet_main_t * vnm, u32 sw_if_index)
+{
+  vnet_sw_interface_t *si = vnet_get_sw_interface (vnm, sw_if_index);
+  return vnet_swif_is_api_visible (si);
+}
+
+always_inline uword
+vnet_sw_interface_is_api_valid (vnet_main_t * vnm, u32 sw_if_index)
+{
+  return !pool_is_free_index (vnm->interface_main.sw_interfaces, sw_if_index)
+    && vnet_sw_interface_is_api_visible (vnm, sw_if_index);
+}
+
 always_inline uword
 vnet_hw_interface_get_flags (vnet_main_t * vnm, u32 hw_if_index)
 {
@@ -253,10 +274,19 @@ clib_error_t *vnet_rename_interface (vnet_main_t * vnm, u32 hw_if_index,
 /* Change interface mac address*/
 clib_error_t *vnet_hw_interface_change_mac_address (vnet_main_t * vnm,
                                                    u32 hw_if_index,
-                                                   u64 mac_address);
+                                                   u8 * mac_address);
+
+/* Change rx-mode */
+clib_error_t *set_hw_interface_change_rx_mode (vnet_main_t * vnm,
+                                              u32 hw_if_index,
+                                              u8 queue_id_valid,
+                                              u32 queue_id,
+                                              vnet_hw_interface_rx_mode
+                                              mode);
 
 /* Formats sw/hw interface. */
 format_function_t format_vnet_hw_interface;
+format_function_t format_vnet_hw_interface_rx_mode;
 format_function_t format_vnet_sw_interface;
 format_function_t format_vnet_sw_interface_name;
 format_function_t format_vnet_sw_interface_name_override;
@@ -280,9 +310,8 @@ typedef struct
   u32 is_deleted;
 } vnet_interface_output_runtime_t;
 
-/* Interface output functions. */
+/* Interface output function. */
 void *vnet_interface_output_node_multiarch_select (void);
-void *vnet_interface_output_node_flatten_multiarch_select (void);
 
 word vnet_sw_interface_compare (vnet_main_t * vnm, uword sw_if_index0,
                                uword sw_if_index1);