Parte 4 do problema com as interfaces nic usb3 após a atualização do kernel debian 6.1.0-20.
Veja as outras postagens aqui:
- Debian 12 - De repente, meu adaptador Lan USB3 recebe um endereço MAC aleatório a cada reinicialização
- Use o atributo parrent "serial" na configuração UDEV para atribuir outro nome à interface lan em vez de depender do endereço mac
- Use o caminho usb de um endereço nic usb nas regras do udev para atribuir um nome de interface em vez do endereço mac
Resumo: Uma atualização recente do debian com kernel 6.1.0-20 quebrou o reconhecimento do endereço mac armazenado dentro das EEPROMs usb-lan nics para que todas as regras do udev escritas anteriormente com o ATTR{address} (alterando o nome da interface com base em endereço mac) não funcionam mais.
Agora, por que esta postagem:
- usar o ATTRS{serial} funcionou, mas tenho 3 de 6 adaptadores que compartilham o mesmo atributo "serial", portanto, não é possível determinar qual é qual.
- Tentei neste ponto usar o ATTRS{busnum} e ATTRS{devnum} do USB para identificar especificamente as 3 interfaces restantes, mas parece que esses valores não são estáveis e mudam de tempos em tempos, removendo a corrente CA da rede elétrica e colocando-a de volta.
Portanto, nenhuma das soluções acima realmente resolveu o problema final.
No entanto, parece que se você colocar para baixo e para cima (ou talvez apenas para cima), o eth fará interface com comandos como:
ip link set dev eth0 down
ip link set dev eth0 up
eth0, também conhecido como adaptador lan usb3, lê o endereço MAC correto armazenado na EEPROM ...
Neste ponto, minha única ideia é:
- Posso desativar/ativar todas as interfaces para que elas obtenham o endereço MAC correto e faça o udev reaplicar as regras novamente ou é apenas uma coisa que acontece uma vez no momento da inicialização? Caso seja possível, você pode me ajudar a escrever um script que seja capaz de colocar down -> up eth de 0 a 10 e depois recuperar o udev para que as interfaces possam ser renomeadas.
ou...
- Ser capaz de atualizar/ativar os ETHs antes do momento principal em que o udev é chamado, quando as interfaces já recuperaram seu endereço MAC original e neste caso o udev deve fazer seu trabalho.
A solução com RUN+= que você sugeriu da última vez @AB está relacionada a isso?
Descrição
Para corrigir o estado atual, seguindo a ideia do OP, criei uma única regra do udev que:
somente quando todas essas condições forem atendidas:
ax88179_178a
addr_assign_type=1
)vai:
configure a interface para cima (fazendo com que o driver recupere a propriedade do endereço MAC permanente)
coloque-o novamente em DOWN (esse é o estado esperado de uma interface recém-adicionada)
se for confirmado que a interface recuperou seu endereço MAC permanente (
addr_assign_type=0
), acione novamente uma adição da interface... desencadeando assim uma nova rodada com a renomeação apropriada da interface. (por exemplo: quando nada mais diz o contrário, geralmente as interfaces de rede USB são renomeadas a partir de seu endereço MAC como
enx...
)Regra e ativação
Crie uma regra com prioridade baixa o suficiente (escolhi 40)
/etc/udev/rules.d/40-local-net-ax88179_178a.rules
:Então, apenas na primeira vez (do efeito mais pesado para o mais leve):
reinício
ou reinicie
udev
:e desconecte/reconecte dispositivos USB
ou recarregar o driver
ou acionar artificialmente a nova regra apenas em interfaces que precisam de correção
Se a interface já foi ativada (por exemplo: por uma ferramenta de rede como NetworkManager ), pode ser necessário não verificar o tipo de endereço MAC e fazer apenas:
Notas Adicionais
isso terá no final o mesmo número de reinicializações de dispositivos que antes do patch, evitando que tal redefinição de dispositivo aconteça: dois, porque a interface recebe um UP (depois DOWN) adicional que aciona tal redefinição.
Assim, ao compilar um kernel de qualquer maneira, reverter o patch ainda é mais simples. Quando alguém precisa do SecureBoot e não consegue assinar o módulo do kernel resultante, esta solução alternativa é útil.
Um terceiro patch de driver real ainda seria bem-vindo.
Comandos de EXECUÇÃO
O primeiro comando RUN DEVE ser usado.
O segundo comando RUN DEVE ser usado para ter o mesmo resultado de quando executado com um driver de kernel que lida com a NIC corretamente: uma interface adicionada no estado DOWN. Pode-se considerar não configurá-lo e deixá-lo ATIVADO, poupando a reinicialização de um dispositivo, se ferramentas de rede posteriores puderem lidar com isso
O último comando RUN PODE ser ignorado: pode não ser necessário se a interface já tiver sido renomeada por uma ferramenta de rede posterior que dependa apenas do endereço MAC.
loop não acontecerá porque:
add
ação não será executada (porque está restrita a um dispositivo com endereço MAC permanente), deixando o dispositivo com um endereço MAC aleatórioOutras distribuições além do Debian
Certifique-se
/bin/ip
de que existe ou substitua-o por um caminho correto (por exemplo/sbin/ip
:)eudev (Devuan, Gentoo ...): Não sei se o eudev se comporta da mesma forma que o udev do systemd ao disparar um evento de dentro. A 3ª RUN pode precisar de uma mudança.
Se por algum motivo condições adicionais tiverem que ser adicionadas, já que as
...S
variantes de correspondência (para uma propriedade pai) devem ser todas parte do mesmo pai,DRIVERS=="ax88179_178a"
poderão ser substituídas porATTRS{product}=="AX88179"
para um efeito semelhante, se necessário (e se o dispositivo USB específico realmente corresponder esta propriedade) para alcançar propriedades úteis alternativas de outro pai (comoATTRS{serial}
).Pelo menos também
addr_assign_type=3
parece significar que o endereço MAC foi alterado (manualmente ou não, por exemplo: definindo a interface como escravo de ligação). Esta regra não tocará nisso (nem deveria, nem encontraria este caso)documentação usada
udev(7)
udevadm(8)
/lib/udev/rules.d/
como exemplos