você está aqui: Home  → Arquivo de Mensagens

Endereço MAC de chipsets NVidia - Uma solução para muitas máquinas

Colaboração: Ricardo Jurczyk Pinheiro

Data de Publicação: 08 de November de 2008

É sabido por muitos que os chipsets southbridge da NVidia tem um probleminha irritante: Quando em uso com o módulo forcedeth, ele recebe o endereço MAC (físico) errado. Logo, se você usa DHCP, é provável que faça que nem eu, que seta o endereço IP das suas máquinas com base no endereço físico. E o que acontece? A máquina não recebe o IP certo. O curioso é que nem todos tem esse problema: Meu desktop tem uma Abit NF8-V (chipset NForce), mas o endereço MAC passado é o certo. Mas em outras placas, não.

Algumas soluções na Internet (http://tinyurl.com/64gtg6 e http://tinyurl.com/5lccut) apontam para fixar o MAC address com uma regra no udev. Funciona muito bem, mas complica quando você usa várias máquinas, e tem que fazer isso "na mão". Eu tenho 52 máquinas com dual-boot ("Janelas" e Linux), sendo que a maioria delas tem esse problema. Fazer isso em cada uma seria uma tarefa inviável. Pensei em montar um script com uma grande tabela, para setar o MAC em cada uma, mas qual seria o identificador único de cada hardware que eu usaria, e que não fosse o endereço físico?

Pensei um pouco, fui futucar... E vi essa saída do dmesg:

  (...)
  [    28.296465] forcedeth 0000:00:07.0: invalid Mac address detected: 9b:ee:b4:ea:0f:00
  (...)

Olhei e vi que nessas placas (Gigabyte GA-M61VME-82, chipset Nforce 6100), o endereço MAC é passado ao contrário para o Linux. Note abaixo como é:

  Endereço MAC certo:  00:0f:ea:b4:ee:9b
  Endereço MAC errado: 9b:ee:b4:ea:0f:00

Logo, podemos fazer uma acochambração no /etc/rc.local: Pego o endereço MAC ao contrário no dmesg, inverto-o e seto via ifconfig (que permite que eu faça MAC spoofing, hehehe). Depois é só rodar o dhclient novamente, e IP certo. Abaixo vai a minha solução, orgulhosamente implementada em três linhas :-)

  ifconfig eth0 down hw ether 00:00:00:00:00:01
  ifconfig eth0 up hw ether $(dmesg | grep Invalid | cut -f5- -d":" | tr ':' ' ' | sed 1q | sed 's/^/§ /;:a;s/\(.*\)§ \+\([^ ]\+\)/\2 \1§/;ta;s/§//' | tr ' ' ':' | cut -f1-6 -d':')
  dhclient eth0

O que ele faz:

1ª linha: Desliga a controladora Ethernet padrão, e seta o MAC address com um endereço zerado.

2ª linha: A "mágica": Ele filtra a saída do dmesg, pega a linha onde o endereço MAC está trocado, remove os dois-pontos ":" como separadores, e usa um comando com o sed para inverter a ordem das palavras. Depois coloca os dois-pontos, e remove o último caracter. Esse endereço MAC certo, ele seta para essa máquina.

3ª linha: Pega o novo IP, baseado nesse MAC address.

Enquanto o chipset não é arrumado, ou o módulo não é mexido... Essa solução está servindo muito bem, por isso estou passando para a Dicas-L, pois pode ser útil para alguém.

Ricardo Jurczyk Pinheiro - Linux user #82838 - http://estudiodaintrospeccao.blogspot.com


Veja a relação completa dos artigos de Ricardo Jurczyk Pinheiro

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script