还在初学阶段,如果有误,希望多批评指正。
在VPP中,插件可以在程序启动的时候加载,一般我们会往里面加入node,实现一些功能。
首先介绍怎么直接重定义硬件接口RX到我们的node
vnet_hw_interface_rx_redirect_to_node(vnet_main,hw_if_index, my_graph_node.index /* redirect to my_graph_node */);
这个接口主要是将指定的接口重定向到我们自己实现的node上。
具体的实现我们可以看sample-plugin,或者看以下简单的例子:
这是注册node的代码,里面主要是function、name和next_nodes
//注册node
VLIB_REGISTER_NODE(my_node) = {
.function = my_node_fn, //node功能函数
.name = "zzx-test", //node名字,唯一
.vector_size = 4,
.format_trace = format_my_trace, //show trace显示
.type = VLIB_NODE_TYPE_INTERNAL, //node类型
.n_errors = ARRAY_LEN(my_error_strings),
.error_strings = my_error_strings,
.n_next_nodes = MY_N_NEXT,
.next_nodes = {
[MY_ETHERNET_INPUT] = "ethernet-input", //下一级node名字
},
};
node功能如下,这里是拿到数据包,执行功能,设置下一级的node三个主要功能
static uint64_t my_node_fn(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
{
uint32_t *from = vlib_frame_vector_args(frame);
uint32_t n_left_from = frame->n_vector