架构模型
开发模型
图1 OVS控制面板开发数据模型


- hook函数:hook.h中定义的钩子函数,需要用户使用C语言代码开发实现。
- libapi接口:libapi.h中flexda_custom_api_t结构体,属性为编程框架实现提供调用的接口。
初始化流程
图2 OVS控制面初始化流程


图3 OVS控制面反初始化流程


OVS启动流程中会尝试链接“/usr/lib64/”路径下的custom_openvswitch_plugin.so动态库。
- 如链接成功,则会将用户实现的hook函数挂载在初始化、反初始化和流表卸载流程中;否则执行生态默认卸载逻辑。
- 之后会将提供用户调用的libapi作为传参,调用flexda_custom_init,执行用户自定义的全局初始化。
流表下发流程
图4 OVS控制面流表卸载流程


报文命中OpenVSwitch触发流表下发时会进入OVS控制面流程,流程中将实现以下功能:
- 流表归一:同一报文命中的多个软件流表(跳表情况)合并为一条硬件流表。
由编程框架实现,将报文首次触发下发的入口端口信息、每次触发卸载时的action等数据保存在以该报文为索引的报文上下文中。
在报文命中action没有跳表且有出口端口的软件流表时,将记录的软件流表action拼接后,调用用户自定义下发逻辑。
流表归一当前不支持以下场景:同一报文顺序命中三条(跳转两次)及以上软件流表,且在最后命中的两条以外的流表包含修改报文的action。
- 自定义下发:对硬件流表的key(item),action,attribute做自定义的修改后调用DPDK硬件流表卸载接口。
在下发硬件流表前,根据自定义报文上下文和其他报文信息,对下发的key、action、attr进行编辑组装。
- 硬件流表key初始状态为空,最大长度为15。
- 硬件流表action初始状态为拼接好的软件流表action,最大长度为13。
- 硬件流表attribute初始状态group为1,其他成员值为0。
父主题: OVS场景控制面编程