* @file
* @brief Pipe Interfaces.
*
- * A pipe interface, like the UNIX pipe, is a pair of interfaces
+ * A pipe interface, like the UNIX pipe, is a pair of vpp interfaces
* that are joined.
*/
const static pipe_t PIPE_INVALID = {
};
/**
- * Various 'module' lavel variables
+ * Various 'module' level variables
*/
typedef struct pipe_main_t_
{
uword *instances;
/**
- * the per-swif-index array of pipes. Each end of the pipe is stored againt
+ * the per-swif-index array of pipes. Each end of the pipe is stored against
* its respective sw_if_index
*/
pipe_t *pipes;
/*
* The pipe rewrite is the same size as an ethernet header (since it
* is an ethernet interface and the DP is optimised for writing
- * sizeof(ethernet_header_t) rewirtes. Hwoever, there are no MAC addresses
+ * sizeof(ethernet_header_t) rewrites. However, there are no MAC addresses
* since pipes don't have them.
*/
static u8 *
{
u32 n_left_from, n_left_to_next, n_copy, *from, *to_next;
u32 next_index = VNET_PIPE_TX_NEXT_ETHERNET_INPUT;
- u32 i, sw_if_index = 0;
- u32 n_pkts = 0, n_bytes = 0;
- u32 thread_index = vm->thread_index;
- vnet_main_t *vnm = vnet_get_main ();
- vnet_interface_main_t *im = &vnm->interface_main;
+ u32 i, sw_if_index = 0, n_pkts = 0, n_bytes = 0;
vlib_buffer_t *b;
pipe_t *pipe;
n_left_from = frame->n_vectors;
- from = vlib_frame_args (frame);
+ from = vlib_frame_vector_args (frame);
while (n_left_from > 0)
{
n_copy = clib_min (n_left_from, n_left_to_next);
- clib_memcpy (to_next, from, n_copy * sizeof (from[0]));
+ clib_memcpy_fast (to_next, from, n_copy * sizeof (from[0]));
n_left_to_next -= n_copy;
n_left_from -= n_copy;
i = 0;
from += n_copy;
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
-
- /* increment TX interface stat */
- vlib_increment_combined_counter (im->combined_sw_if_counters +
- VNET_INTERFACE_COUNTER_TX,
- thread_index, sw_if_index, n_pkts,
- n_bytes);
}
- return n_left_from;
+ return frame->n_vectors;
}
static u8 *
{
vnet_sw_interface_t template;
- memset (&template, 0, sizeof (template));
+ clib_memset (&template, 0, sizeof (template));
template.type = VNET_SW_INTERFACE_TYPE_PIPE;
template.flood_class = VNET_FLOOD_CLASS_NORMAL;
template.sup_sw_if_index = hi->sw_if_index;
ASSERT (parent_sw_if_index);
- memset (address, 0, sizeof (address));
+ clib_memset (address, 0, sizeof (address));
/*
* Allocate a pipe instance. Either select one dynamically