在开放 vSwitch 中,需要向 L2 转发表添加哪些流规则?

在开放 vSwitch 中,需要向 L2 转发表添加哪些流规则?

我正在 2 台基于 Xeon 的服务器上进行实验。两台服务器都有两个双端口 NIC,总共 4 个 NIC。OVS 在一台服务器上运行,DPDK pktgen 在另一台服务器上运行。

我尝试将流规则添加到表中以将 OVS 作为 L2 转发交换机运行。我运行以下命令来创建网桥并添加流规则。

./ovs-vsctl del-br br0
./ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
./ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk options:dpdk-devargs=0000:04:00.0 options:flow-ctrl-autoneg=true
./ovs-vsctl add-port br0 dpdk1 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=0000:04:00.1 options:flow-ctrl-autoneg=true
./ovs-vsctl add-port br0 dpdk2 -- set Interface dpdk2 type=dpdk options:dpdk-devargs=0000:05:00.0 options:flow-ctrl-autoneg=true
./ovs-vsctl add-port br0 dpdk3 -- set Interface dpdk3 type=dpdk options:dpdk-devargs=0000:05:00.1 options:flow-ctrl-autoneg=true

./ovs-ofctl del-flows br0
./ovs-ofctl add-flow br0 "table=0, eth_dst=a0:36:9f:0e:36:48,actions=output=1"
./ovs-ofctl add-flow br0 "table=0, eth_dst=a0:36:9f:0e:36:4a,actions=output=2"
./ovs-ofctl add-flow br0 "table=0, eth_dst=a0:36:9f:3e:eb:a4,actions=output=3"
./ovs-ofctl add-flow br0 "table=0, eth_dst=a0:36:9f:3e:eb:a2,actions=output=4"

在这种情况下,一切都运行良好。然后我更改了 pktgen 以生成带有虚假 mac 地址的数据包。我还通过执行以下命令更改了表中的流规则。

./ovs-ofctl add-flow br0 "table=0, eth_dst=00:00:00:00:00:00,actions=output=1"
./ovs-ofctl add-flow br0 "table=0, eth_dst=00:00:00:00:00:01,actions=output=2"
./ovs-ofctl add-flow br0 "table=0, eth_dst=00:00:00:00:00:02,actions=output=3"
./ovs-ofctl add-flow br0 "table=0, eth_dst=00:00:00:00:00:03,actions=output=4"

我已验证 pktgen 正在生成具有这些 mac 地址的数据包,但在这种情况下 OVS 不会转发数据包。我是不是漏掉了什么?

我尝试找到解决方案,但所有教程都提到了同一件事,即向表中添加流以进行 l2 转发。为什么 OVS 在出现假 mac 地址的情况下不转发数据包?我已将所有端口都设置为混杂模式。

我想要测量大量表条目的性能,这就是为什么我需要生成带有虚假 mac 地址的数据包。

答案1

您可以打印网络命名空间配置吗?

route -n
ip netns ls
ovs-vsctl show

确保您已经配置内核以允许转发:

sudo vi /etc/sysctl.conf

取消注释net.ipv4.ip_forward = 1

你可以观看交通情况

sudo tcpdump -i br0

关于iptables转发,请参见这个答案: https://unix.stackexchange.com/questions/313180/iptables-forward-chain-traffic-not-seen-by-tcpdump

答案2

默认情况下,您的主机不知道其他主机的 MAC 地址。它们将使用 ARP 协议知道邻居的 MAC 地址。因此,请确保您安装的表流处理每个主机的 ARP 进程。在 ryu 控制器上,您可以使用 simple_switch_13.py,或者使用 GUI 模拟控制器,您可以使用https://github.com/dektiram/SDNColdBrew

相关内容