Какие правила потока добавить в таблицу для пересылки L2 в open vSwitch?
Я выполняю эксперимент на 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-адресом.
2 ответа
По умолчанию ваш хост не знает 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