Estou executando o Proxmox VE 8.3 (baseado em Debian) instalado em uma máquina com uma NIC SFP+ de porta dupla (X710-DA2). Configurei meus VFs SR-IOV usando estas regras udev:
ACTION=="add", SUBSYSTEM=="net", ENV{INTERFACE}=="enp1s0f0np0", ATTR{device/sriov_numvfs}="3"
ACTION=="add", SUBSYSTEM=="net", ENV{INTERFACE}=="enp1s0f1np1", ATTR{device/sriov_numvfs}="3"
Configurei minhas interfaces da seguinte forma para conectar dois VFs e então colocar uma ponte na conexão:
auto lo
iface lo inet loopback
auto enp1s0f0v0
iface enp1s0f0v0 inet manual
auto enp1s0f1v0
iface enp1s0f1v0 inet manual
auto bond0
iface bond0 inet manual
bond-slaves enp1s0f0v0 enp1s0f1v0
bond-miimon 100
bond-mode active-backup
bond-primary enp1s0f0v0
auto vmbr0
iface vmbr0 inet manual
bridge-ports bond0
bridge-vlan-aware yes
bridge-vids 2-4094
bridge-stp off
bridge-fd 0
auto vmbr0.10
iface vmbr0.10 inet static
address 10.7.0.20/24
gateway 10.7.0.1
source /etc/network/interfaces.d/*
Se eu configurar tudo depois que o sistema já estiver inicializado e fizer um ifreload -a
, funciona. Mas se eu reinicializar, as interfaces não aparecem:
> ip link
2: enp1s0f0np0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 68:05:ca:9b:d6:84 brd ff:ff:ff:ff:ff:ff
vf 0 link/ether ba:4e:ac:fb:fe:ef brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off
vf 1 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off
vf 2 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off
3: enp1s0f1np1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 68:05:ca:9b:d6:85 brd ff:ff:ff:ff:ff:ff
vf 0 link/ether ba:4e:ac:fb:fe:ef brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off
vf 1 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off
vf 2 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off
5: enp1s0f0v0: <NO-CARRIER,BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 qdisc mq master bond0 state DOWN mode DEFAULT group default qlen 1000
link/ether ba:4e:ac:fb:fe:ef brd ff:ff:ff:ff:ff:ff
6: enp1s0f1v0: <NO-CARRIER,BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 qdisc mq master bond0 state DOWN mode DEFAULT group default qlen 1000
link/ether ba:4e:ac:fb:fe:ef brd ff:ff:ff:ff:ff:ff
11: bond0: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue master vmbr0 state DOWN mode DEFAULT group default qlen 1000
link/ether ba:4e:ac:fb:fe:ef brd ff:ff:ff:ff:ff:ff
12: vmbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
link/ether ba:4e:ac:fb:fe:ef brd ff:ff:ff:ff:ff:ff
13: vmbr0.10@vmbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
link/ether ba:4e:ac:fb:fe:ef brd ff:ff:ff:ff:ff:ff
Executando ifreload -a
ou ifup enp1s0f0v0 enp1s0f1v0
bem-sucedido, mas não realmente ativa as interfaces. Se eu fizer um ifdown enp1s0f0v0 enp1s0f1v0
, primeiro, no entanto, qualquer comando ativa as interfaces com sucesso e, uma vez que tudo esteja ativo, a rede se comporta conforme o esperado.
Não há nada no dmesg ou nos logs ifupdown2 ( https://pastebin.com/V69L8Wjg ) que indique um erro. Na verdade, os logs ifupdown2 mostram os comandos sendo executados para trazer tudo à tona!
Agora as coisas ficam mais estranhas... se eu me livrar da ponte e colocar um IP estático no vínculo, tudo ficará bem. (Veja os logs do ifupdown2 - https://pastebin.com/feU1bChf ).
auto lo
iface lo inet loopback
auto enp1s0f0v0
iface enp1s0f0v0 inet manual
auto enp1s0f1v0
iface enp1s0f1v0 inet manual
auto bond0
iface bond0 inet static
bond-slaves enp1s0f0v0 enp1s0f1v0
bond-miimon 100
bond-mode active-backup
bond-primary enp1s0f0v0
address 10.1.0.20/24
gateway 10.1.0.1
source /etc/network/interfaces.d/*
Da mesma forma, se eu usar as NICs apropriadas (ou seja, PFs) com a configuração de rede desejada, também funciona muito bem. Então, há algo sobre a combinação das VFs e da ponte que estão causando problemas.
Deve ser algum tipo de condição de corrida, porque consigo fazer tudo funcionar depois da inicialização. Suspeito que seja algo a ver com atribuições de endereços MAC ou com os drivers, mas não consigo descobrir o que tentar a partir daqui. Qualquer ajuda seria muito apreciada!!
Acontece que o problema era
bridge-vids 2-4094
. O VF por padrão tem a filtragem de VLAN ativada, e a filtragem é limitada a 16 VLANs. Eu compilei e instalei os drivers Intel NIC mais recentes, e finalmente obtive algumas informações úteis do ifupdown2, que saiu corretamente do non-zero e reclamou sobre a opção. Ainda não está claro para mim por que consegui fazê-lo aparecer mais tarde, mesmo com as VLANs extras, mas por enquanto o número menor funciona bem para mim.