Update sample plugin and plugin skeletons: use driver feature arc
Change-Id: Ic0a1479e4a0408a4b93f47e50752d07c2bdccdde Signed-off-by: Dave Barach <dave@barachs.net>
This commit is contained in:

committed by
Damjan Marion

parent
3a4ed39345
commit
b7e2f3d312
@ -127,8 +127,7 @@ int " plugin-name "_enable_disable (" plugin-name "_main_t * sm, u32 sw_if_index
|
||||
int enable_disable)
|
||||
{
|
||||
vnet_sw_interface_t * sw;
|
||||
int rv;
|
||||
u32 node_index = enable_disable ? " plugin-name "_node.index : ~0;
|
||||
int rv = 0;
|
||||
|
||||
/* Utterly wrong? */
|
||||
if (pool_is_free_index (sm->vnet_main->interface_main.sw_interfaces,
|
||||
@ -140,15 +139,9 @@ int " plugin-name "_enable_disable (" plugin-name "_main_t * sm, u32 sw_if_index
|
||||
if (sw->type != VNET_SW_INTERFACE_TYPE_HARDWARE)
|
||||
return VNET_API_ERROR_INVALID_SW_IF_INDEX;
|
||||
|
||||
/*
|
||||
* Redirect pkts from the driver to the macswap node.
|
||||
* Returns VNET_API_ERROR_UNIMPLEMENTED if the h/w driver
|
||||
* doesn't implement the API.
|
||||
*
|
||||
* Node_index = ~0 => shut off redirection
|
||||
*/
|
||||
rv = vnet_hw_interface_rx_redirect_to_node (sm->vnet_main, sw_if_index,
|
||||
node_index);
|
||||
vnet_feature_enable_disable (\"device-input\", \"" plugin-name "\",
|
||||
sw_if_index, enable_disable, 0, 0);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
@ -258,5 +251,12 @@ static clib_error_t * " plugin-name "_init (vlib_main_t * vm)
|
||||
}
|
||||
|
||||
VLIB_INIT_FUNCTION (" plugin-name "_init);
|
||||
|
||||
VNET_FEATURE_INIT (" plugin-name ", static) =
|
||||
{
|
||||
.arc_name = \"device-input\",
|
||||
.node_name = \"" plugin-name "\",
|
||||
.runs_before = VNET_FEATURES (\"ethernet-input\"),
|
||||
};
|
||||
")
|
||||
|
||||
|
@ -72,5 +72,4 @@ noinst_HEADERS = \\
|
||||
install-data-hook:
|
||||
@(cd $(vpppluginsdir) && $(RM) $(vppplugins_LTLIBRARIES))
|
||||
@(cd $(vppapitestpluginsdir) && $(RM) $(vppapitestplugins_LTLIBRARIES))
|
||||
endif
|
||||
")
|
||||
|
@ -47,8 +47,18 @@ nil
|
||||
typedef struct {
|
||||
u32 next_index;
|
||||
u32 sw_if_index;
|
||||
u8 new_src_mac[6];
|
||||
u8 new_dst_mac[6];
|
||||
} " plugin-name "_trace_t;
|
||||
|
||||
static u8 *
|
||||
format_mac_address (u8 * s, va_list * args)
|
||||
{
|
||||
u8 *a = va_arg (*args, u8 *);
|
||||
return format (s, \"%02x:%02x:%02x:%02x:%02x:%02x\",
|
||||
a[0], a[1], a[2], a[3], a[4], a[5]);
|
||||
}
|
||||
|
||||
/* packet trace format function */
|
||||
static u8 * format_" plugin-name "_trace (u8 * s, va_list * args)
|
||||
{
|
||||
@ -56,8 +66,11 @@ static u8 * format_" plugin-name "_trace (u8 * s, va_list * args)
|
||||
CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
|
||||
" plugin-name "_trace_t * t = va_arg (*args, " plugin-name "_trace_t *);
|
||||
|
||||
s = format (s, \"" PLUGIN-NAME ": sw_if_index %d, next index %d\",
|
||||
s = format (s, \"" PLUGIN-NAME ": sw_if_index %d, next index %d\\n\",
|
||||
t->sw_if_index, t->next_index);
|
||||
s = format (s, \" new src %U -> new dst %U\",
|
||||
format_mac_address, t->new_src_mac,
|
||||
format_mac_address, t->new_dst_mac);
|
||||
return s;
|
||||
}
|
||||
|
||||
@ -193,6 +206,10 @@ static uword
|
||||
vlib_add_trace (vm, node, b0, sizeof (*t));
|
||||
t->sw_if_index = sw_if_index0;
|
||||
t->next_index = next0;
|
||||
clib_memcpy (t->new_src_mac, en0->src_address,
|
||||
sizeof (t->new_src_mac));
|
||||
clib_memcpy (t->new_dst_mac, en0->dst_address,
|
||||
sizeof (t->new_dst_mac));
|
||||
}
|
||||
if (b1->flags & VLIB_BUFFER_IS_TRACED)
|
||||
{
|
||||
@ -200,6 +217,10 @@ static uword
|
||||
vlib_add_trace (vm, node, b1, sizeof (*t));
|
||||
t->sw_if_index = sw_if_index1;
|
||||
t->next_index = next1;
|
||||
clib_memcpy (t->new_src_mac, en1->src_address,
|
||||
sizeof (t->new_src_mac));
|
||||
clib_memcpy (t->new_dst_mac, en1->dst_address,
|
||||
sizeof (t->new_dst_mac));
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,6 +278,10 @@ static uword
|
||||
vlib_add_trace (vm, node, b0, sizeof (*t));
|
||||
t->sw_if_index = sw_if_index0;
|
||||
t->next_index = next0;
|
||||
clib_memcpy (t->new_src_mac, en0->src_address,
|
||||
sizeof (t->new_src_mac));
|
||||
clib_memcpy (t->new_dst_mac, en0->dst_address,
|
||||
sizeof (t->new_dst_mac));
|
||||
}
|
||||
|
||||
pkts_swapped += 1;
|
||||
|
Reference in New Issue
Block a user