"interface-dpo-ip4",
NULL,
};
+const static char* const interface_dpo_l2_nodes[] =
+{
+ "interface-dpo-l2",
+ NULL,
+};
const static char* const * const interface_dpo_nodes[DPO_PROTO_NUM] =
{
[DPO_PROTO_IP4] = interface_dpo_ip4_nodes,
[DPO_PROTO_IP6] = interface_dpo_ip6_nodes,
+ [DPO_PROTO_ETHERNET] = interface_dpo_l2_nodes,
[DPO_PROTO_MPLS] = NULL,
};
vlib_frame_t * from_frame)
{
u32 n_left_from, next_index, * from, * to_next;
- u32 cpu_index = os_get_cpu_number();
+ u32 thread_index = vlib_get_thread_index ();
vnet_interface_main_t *im;
im = &vnet_get_main ()->interface_main;
vlib_increment_combined_counter (im->combined_sw_if_counters
+ VNET_INTERFACE_COUNTER_RX,
- cpu_index,
+ thread_index,
ido0->ido_sw_if_index,
1,
vlib_buffer_length_in_chain (vm, b0));
vlib_increment_combined_counter (im->combined_sw_if_counters
+ VNET_INTERFACE_COUNTER_RX,
- cpu_index,
+ thread_index,
ido1->ido_sw_if_index,
1,
vlib_buffer_length_in_chain (vm, b1));
/* Bump the interface's RX coutners */
vlib_increment_combined_counter (im->combined_sw_if_counters
+ VNET_INTERFACE_COUNTER_RX,
- cpu_index,
+ thread_index,
ido0->ido_sw_if_index,
1,
vlib_buffer_length_in_chain (vm, b0));
return (interface_dpo_inline(vm, node, from_frame));
}
+static uword
+interface_dpo_l2 (vlib_main_t * vm,
+ vlib_node_runtime_t * node,
+ vlib_frame_t * from_frame)
+{
+ return (interface_dpo_inline(vm, node, from_frame));
+}
+
VLIB_REGISTER_NODE (interface_dpo_ip4_node) = {
.function = interface_dpo_ip4,
.name = "interface-dpo-ip4",
VLIB_NODE_FUNCTION_MULTIARCH (interface_dpo_ip6_node,
interface_dpo_ip6)
+VLIB_REGISTER_NODE (interface_dpo_l2_node) = {
+ .function = interface_dpo_l2,
+ .name = "interface-dpo-l2",
+ .vector_size = sizeof (u32),
+ .format_trace = format_interface_dpo_trace,
+
+ .n_next_nodes = 2,
+ .next_nodes = {
+ [INTERFACE_DPO_DROP] = "error-drop",
+ [INTERFACE_DPO_INPUT] = "l2-input",
+ },
+};
+
+VLIB_NODE_FUNCTION_MULTIARCH (interface_dpo_l2_node,
+ interface_dpo_l2)
+