vpp通过插件的方式可以方便的在原有框架基础上扩展新的功能
vpp提供了脚本可以自动创建插件
1.安装emacs
一般安装vpp时就安装了
yum install emacs
2.切换至插件目录
cd vpp/src/plugins
3.执行脚本
../../extras/emacs/make-plugin.sh
这里先设置插件名字,然后选择插件的类型
插件有两个类型 dual 和 qs
dual和qs只在node.c文件上有差异,dual一般应用于二层网络,里面添加了对mac的处理,qs一般是三层网络,里面只有数据包的处理
两种模板转发数据包的方式有点差异,dual适合转发到多个节点,qs适合转发到下一个节点,vpp中node节点的转发基本上都是这两种方式,具体的分析将会在后面文章中介绍
即使有差异也不要紧,因为两种方式只是插件的模板,还要根据具体需求对代码进行修改
4.插件的目录结构
这里以dual类型的插件为例,qs类型生成的文件是一样的,只是node.c中的代码有些差异
如图所示,脚本生成的插件都是这么几个文件
CMakeLists.txt是编译文件,最终生成两个动态库,一个是给vpp用,另一个是给vat用;另外还会生成一些代码放在vpp/build-root/build-vpp_debug-native/vpp目录下
node.c是该插件作为节点,主要负责数据包经过该节点的处理
testdual.api是定义vat需要的数据结构
testdual.c主要负责binary api和cli处理
testdual.h主要负责声明和定义节点需要的全局变量
testdual_periodic.c应该是跟事件触发相关,一直没用到
testdual_test.c是vat与vpp通信的接口,会集成到vpp_api_test程序里去
5.使用插件
在vpp目录下执行 make build 即可编译插件,目前插件只能enable-disable,没有太大意义,如下图所示
后面将会对插件代码进行更进一步分析