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,流程如下:
OVS vxlan(二十八)_第1张图片

二、内核vxlan 创建

内核ovs_vport_cmd_new ()函数中ovs_vport_add()调用ovs_vxlan_vport_ops 对应的操作函数,其中创建函数vxlan_tnl_create()流程如下:
OVS vxlan(二十八)_第2张图片

三、vport 数据结构

根据上述流程分析,vxlan 类型的vport 数据结构如下:
OVS vxlan(二十八)_第3张图片

四、vxlan 报文格式

OVS vxlan(二十八)_第4张图片

五、vxlan 收包处理

vxlan 隧道报文的处理的入口函数是udp sock 监听函数vxlan_udp_encap_recv(),处理流程如下:
OVS vxlan(二十八)_第5张图片

六、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(二十八)_第6张图片

原文链接: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

你可能感兴趣的:(云)