Estou realizando uma experiência em dois servidores baseados no Xeon. Ambos os servidores possuem dois NIC de porta dupla, total de 4 NICs. OVS está sendo executado em um servidor e o DPDK pktgen no outro servidor.
Eu tentei adicionar regras de fluxo à tabela para executar o OVS como o switch de encaminhamento L2. Eu executei os seguintes comandos para criar a ponte e adicionar as regras de fluxo.
./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"
Tudo está funcionando bem neste caso. E então eu mudei o pktgen para gerar pacotes com os endereços mac falsos. Também alterei as regras de fluxo na tabela executando os seguintes comandos.
./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"
Eu verifiquei que o pktgen está gerando os pacotes com esses endereços mac, mas o OVS não encaminha os pacotes neste caso. Estou faltando alguma coisa aqui?
Eu tentei descobrir a solução, mas todos os tutoriais mencionaram a mesma coisa para adicionar fluxos às tabelas para o encaminhamento de l2. Por que o OVS não está encaminhando pacotes no caso de endereços macidos falsos? Eu usei todas as portas no modo promíscuo.
Eu quero medir o desempenho para um grande número de entradas de tabelas e é por isso que eu preciso gerar pacotes com endereço mac falso.