OVS源码--vxlan(七)

vxlan 端口是ovs 的OVS_VPORT_TYPE_VXLAN 类型的隧道端口,用户态netdev 库通过netdev_vport_tunnel_register() 注册vport_class 结构,它包含如vxlan、gre 等各种类型隧道的相关处理函数。

一、添加vxlan 端口

添加命令为ovs-vsctl add-port br0 vxlan – set interface vxlan type=vxlan,用户态处理流程和上节的添加端口相同,不同时的是对vxlan 端口的参数配置,发往内核dp 的消息类型为OVS_VPORT_TYPE_VXLAN,流程如下:
在这里插入图片描述

二、内核vxlan 创建

内核ovs_vport_cmd_new ()函数中ovs_vport_add()调用ovs_vxlan_vport_ops 对应的操作函数,其中创建函数vxlan_tnl_create()流程如下:
在这里插入图片描述

三、vport 数据结构

根据上述流程分析,vxlan 类型的vport 数据结构如下:
在这里插入图片描述

四、vxlan 报文格式

在这里插入图片描述

五、vxlan 收包处理

vxlan 隧道报文的处理的入口函数是udp sock 监听函数vxlan_udp_encap_recv(),处理流程如下:
在这里插入图片描述

六、vxlan 发包处理

vlan 在执行action 时,判断需要发送数据的时候调用发送函数,函数调用do_execute_actions()->do_output()->ovs_vport_send()->vxlan_tnl_send(),这里vxlan_tnl_send()函数即为创建vport 端口是注册ovs_vxlan_vport_ops的send 函数,主要处理流程如下:
在这里插入图片描述

原文链接:https://www.sdnlab.com/my_sdnlab/wp-content/uploads/2017/02/cntctfrm_1a5b490b5708a374ad0d207df48ec29e_Openvswitch%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB%E7%AC%94%E8%AE%B0.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章