Cisco VPP入门(四)——VPP示例插件编译运行
一、VPP源码架构
VPP源码架构如上图,主要包括以下几个层次:
Plugins:主要为实现一些功能,在程序启动的时候加载,一般情况下会在插件中加入一些node节点去实现相关功能
Vnet:提供网络资源能力:比如设备,L2,L3,L4功能,session管理,控制管理,流量管理等
VLIB:主要提供基本的应用管理库:buffer管理,graph node管理,线程,CLI,trace等
VPP Infra:提供一些基本的通用的功能函数库:包括内存管理,向量操作,hash, timer等
基于VPP的开发,通常是开发一个功能插件,一个插件对应Linux系统中的一个动态链接库,由VPP启动时加载,VPP启动和源码分析参考后续文章,本篇的目的是介绍插件编译和运行的方法。
二、示例插件编译方法
Linux系统是Ubuntu 14.04,VPP的分支是16.06分支, 使用git可取16.06分支的代码
git clone -b stable/1606 https://github.com/FDio/vpp.git
在VPP的源码中,有 sample-plugin 目录,该目录中就是VPP项目提供的示例插件,通过该插件,我们可以了解以管窥豹,获悉基于VPP的插件开发基本方法。
编译:
#cd sample-plugin
#libtoolize
#aclocal
#autoconf
#autoheader (此步骤执行有error,对后面的运行没有影响,可忽略error)
#automake --add-missing
#chmod +x configure
#./configure
#make
#make install
编译后的插件在sample-plugin/.libs目录下, sample_plugin.so是提供给vpp使用的插件,sample_test_plugin.so是供vpp_api_test使用的插件
运行:
拷贝sample_plugin.so到 vpp默认的plugin路径(/usr/lib/vpp_plugins)
拷贝sample_test_plugin.so到vat默认的plugin路径(/usr/lib/vpp_api_test_plugins)
#start vpp,启动vpp后台进程
#vpp_api_test,执行vat测试命令
vpp_api_test运行时,看到如下提示,说明插件加载成功 load_one_plugin:63: Loaded plugin: /usr/lib/vpp_api_test_plugins/sample_test_plugin.so
执行插件命令:
sample_plugin加载OK,可执行插件中注册的命令
vat# help sample_macswap_enable_disable
usage: sample_macswap_enable_disable <intfc> [disable]
~~~~
sample_plugin的代码讲解与VPP架构和开发代码级介绍,参考后续章节,作者是一名TCP/IP Stack,DPDK&VPP开发者,如对此方面知识感兴趣,可加QQ 619634242 一起探索。
上一篇: ReentrantLock详解