VPP-如何使用C-API

C API 总览

C源码级别API

        1)所有API函数都被在C 头文件中描述

        2)所有VPP API间的交互通过直接的C函数调用

代码库

        有几个可供C应用程序开发人员使用的与VPP相关的代码库,概述如下:

        1) vlib

        2) vlibapi

        3) vlibmemory

        4) vlibsocket

                总体来说,大部分VPP C函数的VPI调用

        5) vpp

                VPP 消息传递API

        6)vppinfra

                基本架构部分,向量,hash表,位操作(bitops)等

        7)vpp_plugins(VPP插件)

        8)dpdk

                数据平面开发套件,主要目的有两个:

                1)从接口接收网络数据包,并将其放到一个方便的内存向量中。

                2)从内存向量中获取一个网络数据,通过接口发送出去。该库虽然被作为VPP的一部分被构建,但有自己的项目和开发。

        此外还有,jvpp-common、pneum、svm、vat、vnet

消息API Review

        消息API分类见VPP-API概念,对于回复消息,必须有对应的回复消息处理函数,关于回复处理函数很重要的几点如下:

        1)回复处理函数异步运行

        2)dump/details 类型的消息需要通过附加的最终的(final)CONTROL_PIING消息完成

案例

基于新增插件添加API

新增VPP插件

        新增插件有多种方式,VPP源码中自带新增插件脚本,通过执行脚本可快速添加一个插件,具体步骤为:

        1)在vpp/src/plugins目录下执行../../extras/emacs/make-plugin.sh

        2)输入插件名

        3)选择插件类型 dual或qs

        dual和qs只在node.c文件上有差异,dual一般应用于二层网络,里面添加了对mac的处理,qs一般是三层网络,里面只有数据包的处理
        两种模板转发数据包的方式有点差异,dual适合转发到多个节点,qs适合转发到下一个节点,vpp中node节点的转发基本上都是这两种方式。

        4)脚本执行成功后,会自动在当前目录下生成新增插件文件;包括如下:

        CMakeLists.txt: xxx plugin的编译文件

        myplugintest.api:用于描述插件中使用的消息内容的文件,并基于此生成对应语言的消息结构体变量,主要有request/reply/dump/details/event类型消息

        xxx.c: 用于定义xxx plugin的vpp端(server)初始化、回调处理函数等。

        xxx_test.c:用于定义vat端(client端)request、dump及vpp端回复的reply、details消息处理函数

        node.c: xxx plugin的node处理函数的文件

        xxx_periodic.c:定义处理plugin 事件消息函数的文件

        5)编译插件,在vpp顶层目录,make build生成新的插件

 添加API

        在生成的代码中已包含enable_disable类型的API及相关实现,其他类型消息的API实现类似,具体步骤为:

        1)在.api文件中描述插件新增消息内容request/reply/dump/details/event类型消息。

        2)在node.c中实现用于VPP响应的对应消息vl_api_xx_handler回调函数

        3)在_test.c文件中实现用于vat命令下发的cli的回调处理函数api_xxx_xx

        4)在_test.c文件中实现用于vat解析vpp回应消息的vl_api_xx_t_handler回调函数

参考链接

        VPP之创建插件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值