ovs patch端口实现原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ovs patch端口实现原理相关的知识,希望对你有一定的参考价值。
参考技术Aovs的patch端口,用于连接两个网桥,命令如下
添加端口时,会先后调用 port_construct 和 port_add,下面看一下这两个函数对于patch端口的特殊处理
a. port_construct
b. port_add
如果是patch类型端口,不会将其添加到datapath中,所以通过 ovs-appctl dpctl/show 是看不到patch端口的
br10和br12必须在同一个datapath,否则寻找peer就会失败,ofport->peer就会为空,后面数据转发时也不会从peer设备发出。
假如出端口为patch port,流程如下:
最后会将流表和action安装到datapath中,指导后续报文转发。
下面做一个小实验,拓扑图如下:
创建三个网桥br10,br11和br12,其中br10和br12为netdev类型,br11为system类型。
br10和br11通过patch端口patch1/patch2相连接,br10和br12通过patch端口patch3/patch4相连接。
br10上还添加了一个物理网卡enp129s0f0,其直连的网卡enp129s0f1配置ip地址2.2.2.2/24。
结论:
a. patch端口只存在网桥上,datapath中不会存在
b. 如果出端口为patch端口,则相当于其peer设备收到报文,在peer设备所在网桥查找openflow流表进行转发
c. 不同类型datapath的网桥不能通过patch端口相连接
openvswitch patch port使用方法
一、前言
-
patch port 说明: https://arthurchiao.github.io/blog/ovs-deep-dive-4-patch-port/
-
netdev说明 : https://github.com/openvswitch/ovs/blob/master/Documentation/intro/install/userspace.rst
二、OVS patch port
ovs里的不同bridge之间可以通过patch port进行连接,类似于linux的veth接口。
但必须注意,ovs的datapath_type有nedev和system,netdev表示用户态数据访问,system表示内核数据访问。在创建dpdk接口的bridge时需指定。
# ovs-vsctl set bridge br-bond_virt datapath_type=netdev
使用非dpdk的bridge时不需要指定,走默认的system。
通过patch port 连接bridge时,这两个bridge的datapath_type最好相同,不然可能会导致数据不通的情况,具体原因待分析。
创建patch port的命令是(br-test1<------>br-test2):
# ovs-vsctl add-port br-test1 patch-ovs-1 -- set Interface patch-ovs-1 type=patch -- set Interface patch-ovs-1 options:peer=patch-ovs-2
# ovs-vsctl add-port br-test2 patch-ovs-2 -- set Interface patch-ovs-2 type=patch -- set Interface patch-ovs-2 options:peer=patch-ovs-1
以上是关于ovs patch端口实现原理的主要内容,如果未能解决你的问题,请参考以下文章