Какие правила потока добавить в таблицу для пересылки 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

Другие вопросы по тегам