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,流程如下:
OVS源码--vxlan(七)

二、内核vxlan 创建

内核ovs_vport_cmd_new ()函数中ovs_vport_add()调用ovs_vxlan_vport_ops 对应
的操作函数,其中创建函数vxlan_tnl_create()流程如下:
OVS源码--vxlan(七)

三、vport 数据结构

根据上述流程分析,vxlan 类型的vport 数据结构如下:
OVS源码--vxlan(七)

四、vxlan 报文格式

OVS源码--vxlan(七)

五、vxlan 收包处理

vxlan 隧道报文的处理的入口函数是udp sock 监听函数vxlan_udp_encap_recv(),处
理流程如下:
OVS源码--vxlan(七)

六、vxlan 发包处理

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

相关文章: