还在初学阶段,如果有误,希望多批评指正。
参照前面的帖子Cisco VPP(3) 启动流程
这里面的node主要有3种:
1、注册的时候注册到node_registrations的node,这个是main函数运行之前就生成的链表
2、将注册的node存储到vlib_node_main_t->vlib_node_t ** nodes,这个是运行register_node时产生的,主要是存储
3、将2中的node存储到vlib_node_main_t->vlib_process_t ** processes,运行register_node时产生的,运行时执行此处的node
0x0 注册
VLIB_REGISTER_NODE主要是用来定义node,并且注册node到vlib_main_t->vlib_node_main_t->node_registrations,这个链表在main()函数之前创建,比如ip4-input的最初创建如下:
VLIB_REGISTER_NODE (ip4_input_node) = {
.function = ip4_input,//mbuf传入node之后的操作函数,以及下一级node的确定
.name = "ip4-input",//name必须唯一,因为串联node使用的标识为名字
.vector_size = sizeof (u32),
.n_errors = IP4_N_ERROR,//报错的计数,可以用来报错,也可以记录正常的数据包数量,show errors命令显示
.error_strings = ip4_error_strings,//显示计数的时候,对计数的提示,比如正常的ipv4数据包,不正确的ipv4数据包数量
.n_next_nodes = IP4_INPUT_N_NEXT,//next node的数量
.next_nodes = {
[IP4_INPUT_NEXT_DROP] = "error-drop",//下一级node丢弃
[I