return s;
}
-static uword
-netmap_interface_tx (vlib_main_t * vm,
- vlib_node_runtime_t * node, vlib_frame_t * frame)
+VNET_DEVICE_CLASS_TX_FN (netmap_device_class) (vlib_main_t * vm,
+ vlib_node_runtime_t * node,
+ vlib_frame_t * frame)
{
netmap_main_t *nm = &netmap_main;
u32 *buffers = vlib_frame_vector_args (frame);
b0 = vlib_get_buffer (vm, bi);
len = b0->current_length;
/* memcpy */
- clib_memcpy ((u8 *) NETMAP_BUF (ring, slot->buf_idx) + offset,
- vlib_buffer_get_current (b0), len);
+ clib_memcpy_fast ((u8 *) NETMAP_BUF (ring, slot->buf_idx) +
+ offset, vlib_buffer_get_current (b0), len);
offset += len;
}
while ((bi = b0->next_buffer));
/* *INDENT-OFF* */
VNET_DEVICE_CLASS (netmap_device_class) = {
.name = "netmap",
- .tx_function = netmap_interface_tx,
.format_device_name = format_netmap_device_name,
.format_device = format_netmap_device,
.format_tx_trace = format_netmap_tx_trace,
.admin_up_down_function = netmap_interface_admin_up_down,
.subif_add_del_function = netmap_subif_add_del_function,
};
-
-VLIB_DEVICE_TX_FUNCTION_MULTIARCH(netmap_device_class,
- netmap_interface_tx)
/* *INDENT-ON* */
/*