ovs patch端口实现原理

时间:2025-03-25 18:20:07
  • root@ubuntu:~# ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev
  • root@ubuntu:~# ovs-vsctl add-br br12 -- set bridge br12 datapath_type=netdev
  • root@ubuntu:~# ovs-vsctl add-port br10 patch3 -- set interface patch3 type=patch options:peer=patch4 -- add-port br12 patch4 -- set interface patch4 type=patch options:peer=patch3
  • root@ubuntu:~# ovs-vsctl add-port br10 enp129s0f0
  • root@ubuntu:~# ovs-vsctl add-br br11 -- set bridge br11 datapath_type=system
  • root@ubuntu:~# ovs-vsctl add-port br10 patch1 -- set interface patch1 type=patch options:peer=patch2 -- add-port br11 patch2 -- set interface patch2 type=patch options:peer=patch1
  • root@ubuntu:~# ovs-vsctl show
  • e436075d-bffe-4cce-8cab-91cf99f0a4b2
  • Bridge "br10"
  • Port "enp129s0f0"
  • Interface "enp129s0f0"
  • Port "patch3"
  • Interface "patch3"
  • type: patch
  • options: {peer="patch4"}
  • Port "patch1"
  • Interface "patch1"
  • type: patch
  • options: {peer="patch2"}
  • Port "br10"
  • Interface "br10"
  • type: internal
  • Bridge "br11"
  • Port "br11"
  • Interface "br11"
  • type: internal
  • Port "patch2"
  • Interface "patch2"
  • type: patch
  • options: {peer="patch1"}
  • Bridge "br12"
  • Port "patch4"
  • Interface "patch4"
  • type: patch
  • options: {peer="patch3"}
  • Port "br12"
  • Interface "br12"
  • type: internal
  • //查看datapath信息
  • //可看到有两个datapath:netdev和system,并且datapath中不包含任何patch端口
  • root@ubuntu:~# ovs-appctl dpctl/show
  • netdev@ovs-netdev:
  • lookups: hit:2022051 missed:25 lost:0
  • flows: 1
  • port 0: ovs-netdev (tap)
  • port 1: br10 (tap)
  • port 2: enp129s0f0
  • port 3: br12 (tap)
  • system@ovs-system:
  • lookups: hit:0 missed:0 lost:0
  • flows: 0
  • masks: hit:0 total:1 hit/pkt:0.00
  • port 0: ovs-system (internal)
  • port 1: br11 (internal)
  • //给enp129s0f1 配置ip,并ping任意同网段的ip,目的是发送arp广播报文
  • root@ubuntu:~# ip link set dev enp129s0f1 2.2.2.2/24
  • root@ubuntu:~# ping 2.2.2.7
  • PING 2.2.2.7 (2.2.2.7) 56(84) bytes of data.
  • From 2.2.2.2 icmp_seq=1 Destination Host Unreachable
  • ...
  • //只有netdev datapath有流表,system datapath没有
  • root@ubuntu:~# ovs-appctl dpctl/dump-flows netdev@ovs-netdev
  • flow-dump from non-dpdk interfaces:
  • recirc_id(0),in_port(2),packet_type(ns=0,id=0),eth(src=3c:fd:fe:a2:1f:a7,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=2.2.2.2,tip=2.2.2.7,op=1/0xff), packets:1522, bytes:91320, used:0.030s, actions:1,3
  • root@ubuntu:~#
  • root@ubuntu:~# ovs-appctl dpctl/dump-flows system@ovs-system
  • root@ubuntu:~#
  • //查看网桥br10上端口统计信息,enp129s0f0收到arp广播报文后,flood到br10上所有端口(patch1没有,因为它连接的是不同类型的网桥)
  • root@ubuntu:~# ovs-ofctl dump-ports br10
  • OFPST_PORT reply (xid=0x2): 4 ports
  • port patch1: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
  • tx pkts=0, bytes=0, drop=?, errs=?, coll=?
  • port patch3: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
  • tx pkts=17260, bytes=1045224, drop=?, errs=?, coll=?
  • port LOCAL: rx pkts=34, bytes=2780, drop=0, errs=0, frame=0, over=0, crc=0
  • tx pkts=2025556, bytes=147632755, drop=0, errs=0, coll=0
  • port enp129s0f0: rx pkts=1035304, bytes=64562809, drop=0, errs=0, frame=0, over=0, crc=0
  • tx pkts=0, bytes=0, drop=0, errs=0, coll=0
  • //查看网桥br11上端口统计信息,因为patch2没收到任何报文,所有br11上端口统计信息全0
  • root@ubuntu:~# ovs-ofctl dump-ports br11
  • OFPST_PORT reply (xid=0x2): 2 ports
  • port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
  • tx pkts=0, bytes=0, drop=0, errs=0, coll=0
  • port patch2: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
  • tx pkts=0, bytes=0, drop=?, errs=?, coll=?
  • //查看网桥br12上端口统计信息,patch4从patch3收到报文,flood到其他端口
  • root@ubuntu:~# ovs-ofctl dump-ports br12
  • OFPST_PORT reply (xid=0x2): 2 ports
  • port LOCAL: rx pkts=8, bytes=648, drop=0, errs=0, frame=0, over=0, crc=0
  • tx pkts=19764, bytes=1197319, drop=0, errs=0, coll=0
  • port patch4: rx pkts=17430, bytes=1055750, drop=?, errs=?, frame=?, over=?, crc=?
  • tx pkts=0, bytes=0, drop=?, errs=?, coll=?