Cisco VPP(4) node

本文探讨了Cisco VPP中的节点(node)概念,包括注册过程和操作。节点分为三种类型,主要通过VLIB_REGISTER_NODE进行定义和注册。在main函数之前,节点链表已经生成。vlib_register_all_static_nodes()负责初始化节点并建立它们之间的联系。vlib_main_loop()处理节点操作,尤其是收包入口函数,如dpdk-input节点,其功能调用会将数据传递到后续节点。节点功能计算并调度下一级节点,利用vlib_put_next_frame()将任务加入待处理队列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还在初学阶段,如果有误,希望多批评指正。


参照前面的帖子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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值