Назад | Перейти на главную страницу

Какие правила потока добавить в таблицу для L2 Forwarding в открытом vSwitch?

Я провожу эксперимент на 2 серверах на базе Xeon. Оба сервера имеют два двухпортовых сетевых адаптера, всего 4 сетевых адаптера. 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-адресом.

По умолчанию ваш хост не знает MAC-адрес другого хоста. Они будут знать MAC-адрес соседа с протоколом ARP. Итак, убедитесь, что установленный вами поток таблицы обрабатывает процесс ARP для каждого хоста. На контроллере ryu вы можете использовать simple_switch_13.py или для имитации контроллера с графическим интерфейсом вы можете использовать https://github.com/dektiram/SDNColdBrew

Можете ли вы распечатать конфигурацию сетевого пространства имен.

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