.clear_counters = af_packet_clear_hw_interface_counters,
.admin_up_down_function = af_packet_interface_admin_up_down,
.subif_add_del_function = af_packet_subif_add_del_function,
- .no_flatten_output_chains = 1,
};
VLIB_DEVICE_TX_FUNCTION_MULTIARCH (af_packet_device_class,
.admin_up_down_function = dpdk_interface_admin_up_down,
.subif_add_del_function = dpdk_subif_add_del_function,
.rx_redirect_to_node = dpdk_set_interface_next_node,
- .no_flatten_output_chains = 1,
.mac_addr_change_function = dpdk_set_mac_address,
};
.clear_counters = netmap_clear_hw_interface_counters,
.admin_up_down_function = netmap_interface_admin_up_down,
.subif_add_del_function = netmap_subif_add_del_function,
- .no_flatten_output_chains = 1,
};
VLIB_DEVICE_TX_FUNCTION_MULTIARCH(netmap_device_class,
.clear_counters = ixge_clear_hw_interface_counters,
.admin_up_down_function = ixge_interface_admin_up_down,
.rx_redirect_to_node = ixge_set_interface_next_node,
+ .flatten_output_chains = 1,
};
/* *INDENT-ON* */
.admin_up_down_function = ssvm_eth_interface_admin_up_down,
.subif_add_del_function = ssvm_eth_subif_add_del_function,
.rx_redirect_to_node = ssvm_eth_set_interface_next_node,
- .no_flatten_output_chains = 1,
};
VLIB_DEVICE_TX_FUNCTION_MULTIARCH (ssvm_eth_device_class,
.format_device_name = format_vhost_user_interface_name,
.name_renumber = vhost_user_name_renumber,
.admin_up_down_function = vhost_user_interface_admin_up_down,
- .no_flatten_output_chains = 1,
.format_tx_trace = format_vhost_trace,
};
.format_device_name = format_simulated_ethernet_name,
.tx_function = simulated_ethernet_interface_tx,
.admin_up_down_function = simulated_ethernet_admin_up_down,
- .no_flatten_output_chains = 1,
};
/* *INDENT-ON* */
/* The new class may differ from the old one.
* Functions have to be updated. */
node = vlib_get_node (vm, hw->output_node_index);
- node->function = dev_class->no_flatten_output_chains ?
- vnet_interface_output_node_no_flatten_multiarch_select () :
+ node->function = dev_class->flatten_output_chains ?
+ vnet_interface_output_node_flatten_multiarch_select () :
vnet_interface_output_node_multiarch_select ();
node->format_trace = format_vnet_interface_output_trace;
nrt = vlib_node_get_runtime (vm, hw->output_node_index);
r.flags = 0;
r.name = output_node_name;
- r.function = dev_class->no_flatten_output_chains ?
- vnet_interface_output_node_no_flatten_multiarch_select () :
+ r.function = dev_class->flatten_output_chains ?
+ vnet_interface_output_node_flatten_multiarch_select () :
vnet_interface_output_node_multiarch_select ();
r.format_trace = format_vnet_interface_output_trace;
/* Link-list of all device classes set up by constructors created below */
struct _vnet_device_class *next_class_registration;
- /* Do not splice vnet_interface_output_node into TX path */
- u8 no_flatten_output_chains;
+ /* Splice vnet_interface_output_node into TX path */
+ u8 flatten_output_chains;
/* Function to set mac address. */
vnet_interface_set_mac_address_function_t *mac_addr_change_function;
/* Interface output functions. */
void *vnet_interface_output_node_multiarch_select (void);
-void *vnet_interface_output_node_no_flatten_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);
/* Interface output functions. */
uword
-vnet_interface_output_node (vlib_main_t * vm,
- vlib_node_runtime_t * node, vlib_frame_t * frame)
+vnet_interface_output_node_flatten (vlib_main_t * vm,
+ vlib_node_runtime_t * node,
+ vlib_frame_t * frame)
{
vnet_main_t *vnm = vnet_get_main ();
vnet_interface_output_runtime_t *rt = (void *) node->runtime_data;
return n_buffers;
}
-VLIB_NODE_FUNCTION_MULTIARCH_CLONE (vnet_interface_output_node);
-CLIB_MULTIARCH_SELECT_FN (vnet_interface_output_node);
+VLIB_NODE_FUNCTION_MULTIARCH_CLONE (vnet_interface_output_node_flatten);
+CLIB_MULTIARCH_SELECT_FN (vnet_interface_output_node_flatten);
uword
-vnet_interface_output_node_no_flatten (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * frame)
+vnet_interface_output_node (vlib_main_t * vm,
+ vlib_node_runtime_t * node, vlib_frame_t * frame)
{
vnet_main_t *vnm = vnet_get_main ();
vnet_interface_output_runtime_t *rt = (void *) node->runtime_data;
return n_buffers;
}
-VLIB_NODE_FUNCTION_MULTIARCH_CLONE (vnet_interface_output_node_no_flatten);
-CLIB_MULTIARCH_SELECT_FN (vnet_interface_output_node_no_flatten);
+VLIB_NODE_FUNCTION_MULTIARCH_CLONE (vnet_interface_output_node);
+CLIB_MULTIARCH_SELECT_FN (vnet_interface_output_node);
/* Use buffer's sw_if_index[VNET_TX] to choose output interface. */
static uword
.format_device_name = format_lisp_gpe_name,
.format_tx_trace = format_lisp_gpe_tx_trace,
.tx_function = lisp_gpe_interface_tx,
- .no_flatten_output_chains = 1,
};
/* *INDENT-ON* */
.format_device_name = format_l2_lisp_gpe_name,
.format_tx_trace = format_l2_lisp_gpe_tx_trace,
.tx_function = l2_lisp_gpe_interface_tx,
- .no_flatten_output_chains = 1,
};
/* *INDENT-ON* */
.format_device = format_mpls_tunnel_device,
.format_tx_trace = format_mpls_tunnel_tx_trace,
.tx_function = mpls_tunnel_tx,
- .no_flatten_output_chains = 1,
.admin_up_down_function = mpls_tunnel_admin_up_down,
};
.rx_redirect_to_node = tapcli_set_interface_next_node,
.name_renumber = tap_name_renumber,
.admin_up_down_function = tapcli_interface_admin_up_down,
- .no_flatten_output_chains = 1,
};
/**