ethtool get l'adresse MAC permanente renvoie tous les 0

J'ai besoin de lire l'adresse MAC permanente (burn-in) de l'adaptateur réseau. Puisque l'adresse MAC peut être facilement usurpée, j'ai besoin de lire le vrai qui est écrit sur EEPROM. Je dois le faire en utilisant C ++ sous Linux.

J'ai essayé d'utiliser ethtool qui est assez bon et fonctionne bien. Cependant, sur certains systèmes, cela ne fonctionne pas comme prévu.

ethtool -P eth0 

renvoie ceci:

 Permanent address: 00:00:00:00:00:00 

et

 ethtool -e eth0 

renvoie ceci:

 Cannot get EEPROM data: Operation not supported 

L'adaptateur réseau a les informations suivantes:

  • pilote: ucc_geth
  • version: 1.1
  • version du firmware: N / A
  • bus-info: MOTEUR QUICC

La version du kernel Linux est: 2.6.32.13

La question est: puis-je résoudre ce problème avec une mise à jour (pilote, kernel, etc)?

En outre, je fais les mêmes appels ethtool avec la fonction ioctl en C ++. Y at-il un moyen de résoudre ce problème à l'intérieur du code? Ou est-il un autre moyen d'get l'adresse MAC permanente de l'EEPROM?

Si vous faites confiance à la machine locale pour qu'elle ne soit pas usurpée, ifconfig et ip addr vous donneront l'adresse MAC du matériel.

Si vous ne faites pas confiance à la machine locale, nihtool, ifconfig, ni ip ne vous fournira les informations dont vous avez besoin. Comme il y a des raisons très légitimes pour l'usurpation d'adresse MAC (par exemple, hot-fail sur ethercards), tous les pilotes ne signalent que l'adresse MAC "virtuelle" actuellement car si vous avez besoin d'usurper l'adresse, cela ne fonctionnerait pas bien pour certains outils pour signaler l'adresse du microprogramme et d'autres pour signaler l'adresse souple. Aucun ioctl ne peut ou ne devrait vous donner l'adresse exacte.

Pour get l'adresse exacte, il faut lire les registres de l'appareil directement et est donc complètement spécifique à l'appareil.

Un coup d'œil rapide à travers le pilote ucc_geth.c semble montrer que la réatsortingbution de l'adresse MAC est supscope par la puce elle-même (ce qui est logique car elle doit pouvoir extraire les packages envoyés à son adresse douce). Cela signifie que vous devez être très délibéré pour vous assurer que vous obtenez l'adresse difficile pour laquelle le conducteur dit généreusement:

 /* For more details see the hardware spec. */ 

Si vous faites confiance à l'administrateur système, l'adresse MAC de ifconfig ne sera pas usurpée car, par définition, vous faites confiance à l'administrateur système pour ne pas l'usurper.

Si vous ne faites pas confiance à l'administrateur système, vous n'avez aucun moyen de connaître l'adresse MAC de la machine. La machine pourrait être virtuelle. Il pourrait ne pas avoir d'interface réseau. Vous n'avez aucun moyen de savoir. Même si vous trouvez un appel système qui fait soi-disant ce que vous voulez, le sysadmin peut choisir d'exécuter votre programme de telle sorte que cet appel système renvoie un résultat différent.