searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

VPP feature arc机制

2024-06-17 09:27:08
110
0

简介

VPP内部业务逻辑是通过一系列的node连接来实现的,这些node通常在初始化时就已经定义,比如二层以太处理ethernet-input,三层ip4-input等,通过初始化定义,将node连接成一个有序的向量图,来实现VPP的业务功能,如下图所示:

而早期的VPP本身的node框架比较固定,各个node之间逻辑连接已经固定了。为此新版本增加了feature机制,每个feature是一个node,用户可以启用/停止某个或某些feature。用户也可以自己写插件,把自定义node(自己的业务逻辑)加入到指定位置。 VPP中,将不同的feature按照类型分成了不同的组,每组feature称之为一个arc。arc中的feature按照代码指定的顺序串接起来。arc结构中,记录这组feature中的起始node和结束node。系统初始化时,会完成初步的排序,但并没有应用到对应的接口中。

feature arc及feature注册

下面以ip4-unicast为例来介绍基本的流程:

1、feature arc注册

VNET_FEATURE_ARC_INIT将注册feature arc,主要初始化feature类的名称、起始及结束node名字及记录arc索引的指针地址。会 以链表形式挂接到全局变量extern vnet_feature_main_t feature_main 的next_arc上。

2、feature注册

VNET_FEATURE_INIT完成feature的注册,主要初始化arc名称,node节点名称,及运行当前feature node的前面或后面的feature node。

需要注意是feature的顺序是初始化的时候已经固定固定好的。 ip4-unicast以ip4-lookup结束,虽然在feature arc 初始化时已经指定,但是在feature 初始化时必须设置一下,否则会引起转发异常(debug版本直接coredump,release版本可能转发节点异常)。

feature初始化及使能

1、feature初始化 feature初始化流程必须是在node节点注册的后面,是由VLIB_INIT_FUNCTION (vnet_feature_init)宏注册到初始化函数中,在mian loop前被调用。主要是完成feature相关资源的申请及初始化,遍历vnet_feature_main_t feature_main链表生成feature arc及生成feature资源顺序关系图。

2、以ip4-unicast为例,vnet_feature_arc_init函数实现流程。

3、使能去使能流程feature

4、最终生成转发节点获取next0结构图

结构体vnet_feature_config_main_t中变量config_index_by_sw_if_index是vector结构,通过接口索引获取config_index(也就是在config_string_heap堆的偏移量)。

 

总结

本文简单描述了vpp的feature机制的注册、初始化及函数调用,并介绍了如何注册

和使用自己的feature arc类。通过VPP的feature机制,可以在不改变VPP现有框架

下,灵活地增加/删除业务功能。

0条评论
作者已关闭评论
h****n
2文章数
0粉丝数
h****n
2 文章 | 0 粉丝
h****n
2文章数
0粉丝数
h****n
2 文章 | 0 粉丝
原创

VPP feature arc机制

2024-06-17 09:27:08
110
0

简介

VPP内部业务逻辑是通过一系列的node连接来实现的,这些node通常在初始化时就已经定义,比如二层以太处理ethernet-input,三层ip4-input等,通过初始化定义,将node连接成一个有序的向量图,来实现VPP的业务功能,如下图所示:

而早期的VPP本身的node框架比较固定,各个node之间逻辑连接已经固定了。为此新版本增加了feature机制,每个feature是一个node,用户可以启用/停止某个或某些feature。用户也可以自己写插件,把自定义node(自己的业务逻辑)加入到指定位置。 VPP中,将不同的feature按照类型分成了不同的组,每组feature称之为一个arc。arc中的feature按照代码指定的顺序串接起来。arc结构中,记录这组feature中的起始node和结束node。系统初始化时,会完成初步的排序,但并没有应用到对应的接口中。

feature arc及feature注册

下面以ip4-unicast为例来介绍基本的流程:

1、feature arc注册

VNET_FEATURE_ARC_INIT将注册feature arc,主要初始化feature类的名称、起始及结束node名字及记录arc索引的指针地址。会 以链表形式挂接到全局变量extern vnet_feature_main_t feature_main 的next_arc上。

2、feature注册

VNET_FEATURE_INIT完成feature的注册,主要初始化arc名称,node节点名称,及运行当前feature node的前面或后面的feature node。

需要注意是feature的顺序是初始化的时候已经固定固定好的。 ip4-unicast以ip4-lookup结束,虽然在feature arc 初始化时已经指定,但是在feature 初始化时必须设置一下,否则会引起转发异常(debug版本直接coredump,release版本可能转发节点异常)。

feature初始化及使能

1、feature初始化 feature初始化流程必须是在node节点注册的后面,是由VLIB_INIT_FUNCTION (vnet_feature_init)宏注册到初始化函数中,在mian loop前被调用。主要是完成feature相关资源的申请及初始化,遍历vnet_feature_main_t feature_main链表生成feature arc及生成feature资源顺序关系图。

2、以ip4-unicast为例,vnet_feature_arc_init函数实现流程。

3、使能去使能流程feature

4、最终生成转发节点获取next0结构图

结构体vnet_feature_config_main_t中变量config_index_by_sw_if_index是vector结构,通过接口索引获取config_index(也就是在config_string_heap堆的偏移量)。

 

总结

本文简单描述了vpp的feature机制的注册、初始化及函数调用,并介绍了如何注册

和使用自己的feature arc类。通过VPP的feature机制,可以在不改变VPP现有框架

下,灵活地增加/删除业务功能。

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0