Seguir este guia para configurar um macvtap
funciona muito bem.
Um trecho do guia se parece com isso:
# ip link add link eth1 name macvtap0 type macvtap
# ip link set macvtap0 address 1a:46:0b:ca:bc:7b up
# ip link show macvtap0
O guia continua explicando que você pode fazer:
#qemu-system-x86_64 -net nic,model=virtio,addr=1a:46:0b:ca:bc:7b -net tap,fd=3 3<>/dev/tap11
E isso funciona muito bem, se o seu macvtap
terminar em /dev/tap11
.
Mas como você verifica qual /dev/tapX
interface realmente foi atribuída ao macvtap0
acima?
Eu tenho muitos serviços configurando dispositivos de toque na minha máquina em momentos aleatórios. E eu não posso adivinhar em qual meu específico acabou.
Eu esperava que inicializar a máquina qemu com:
-netdev tap,ifname="macvtap0",id=network0,script=no,downscript=no \
-device i82559b,netdev=network0,mac=${MAC}
Funcionaria, onde macvtap0
está o dispositivo que acabei de criar.
No entanto, isso me dá:
qemu-system-x86_64: could not configure /dev/net/tun (macvtap0): Invalid argument
Descrito neste artigo: Como encontrar a conexão entre a interface de toque e seu descritor de arquivo? - eles descrevem uma maneira de fazer isso acessando o PID e verificando os descritores de arquivos associados, o problema aqui para mim é que o qemu não está configurando o dispositivo, eu estou. E não há PID associado a ele.
Então, como posso obter o identificador de arquivo /dev
associado à macvtap
interface recém-criada?
Edit: Já estou há alguns dias nesse problema, mas acabei de perceber que esqueci de verificar /sys/class/net/macvtap0/
e há um /tap2
dispositivo. Obviamente, preciso percorrer todo o conteúdo ainda para encontrar uma correspondência de nome regex(tap[0-9]+)
. Isso funcionará, mas não tenho certeza se é a maneira melhor/correta de fazer isso.