返回信息流主要的问题:
1.plugin和node的关系大概明白,但是如何把自己的node运行在vpp已经写好的node后边?
2.feature的作用看官方文档没理解
3.几个主要的数据结构vlib_main_t,vlib_node_runtime_t,v_lib_frame_t应该怎么用
先谢谢同学赐教了,官方文档语焉不详,实在是走投无路了
这是一条镜像帖。来源:北邮人论坛 / cpp / #101791同步于 2022/4/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助,有同学基于vpp做过插件开发吗,有一些基础的问题想问
wbzdzmqm
2022/4/3镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
1. 可以把自己的 node 作为 feature node 挂接在某个 feature arc 上。Feature 注册的时候可以指定在哪些已有 node 之后运行,参考 NAT plugin:https://github.com/FDio/vpp/blob/master/src/plugins/nat/nat44-ed/nat44_ed.c#L79-L84
2. Feature arc 相当于扩展现有的 graph。每个 feature arc 有自己的起始 node,你可以往某个 arc 中追加 node 来加入你自己的逻辑。比如像上面提到的 NAT,你想在收到一个 IP 包之后做地址翻译,可以把这个做地址翻译的 node 作为 feature node 加入到 ip4-unicast 这个 arc 上。
3. vlib_main_t 就是一个大一统的全局数据结构,里面保存的跟 VPP 运行相关的各种东西,每个 worker 线程有自己的 vlib_main_t。
vlib_node_runtime_t 描述 node 运行时需要的信息。vlib_frame_t 保存 buffer 的索引,buffer 里面是数据包。把 node 看作函数的话,vlib_frame_t 相当于函数的参数。
如果只是写 plugin 的话,可以看看 ping plugin,里面有个 node 实现是收 ICMP echo:https://github.com/FDio/vpp/blob/master/src/plugins/ping/ping.c#L356-L367
VPP 文档是一坨烂屎。
VPP 代码也是一坨烂屎。
【 在 wbzdzmqm 的大作中提到: 】
: 主要的问题:
: 1.plugin和node的关系大概明白,但是如何把自己的node运行在vpp已经写好的node后边?
: 2.feature的作用看官方文档没理解
: ...................