Auto negotiation

Kürzlich sind mir nach einem Reboot folgende Log-Messages auf einem Server aufgefallen:

eth0: Transmit error, Tx status register 82.
Probably a duplex mismatch.  \
See Documentation/networking/vortex.txt
Flags; bus-master 1, dirty 6819588(4) current 6819588(4)
Transmit list 00000000 vs. f6a25300.

Das schöne an Fehlermeldungen unter Linux ist, dass sie oft sogar gleich einen Lösungsansatz mitliefern, wie hier also einen "duplex mismatch".

Zuerst war ich doch etwas verwundert, wie sowas in Zeiten von auto negotiation überhaupt noch passieren kann. Ich habe dann ein bißchen mit mii-diag geguckt (es ist eine 3com Karte, sonst hätte man ggf. auch ethtool nehmen können) wodran es liegen könnte.

Der Switch beim Provider hatte auto negotiation disabled und hat als Geschwindigkeit 100baseTX angegeben, laut Rücksprache mit dem Provider ist der Switch im Full Duplex Modus. Die Netzwerkkarte versteht diverse Modi, welche uns hier interessieren sind: 100baseTX, 100baseTX-HD, 100baseTX-FD.

Wie es aussieht hat die Netzwerkkarte also die 100BaseTX vom Switch als Half-Duplex gedeutet, statt dem Full Duplex Mode - warum auch immer. Ob der Fehler auf Seiten des Switches oder der Karte liegt müsste man noch mal im Detail untersuchen, fürs erste genügt eine Lösung für das Problem. Ein mii-diag eth0 -F 100baseTX-FD hat das Problem behoben und nun sind beide Seiten glücklich und laufen im 100mBit Full Duplex Modus.

Nachtrag: Gerade musste ich den Fix nochmal anwenden, diesmal mit mii-tool, die Kommandozeile sah so aus: mii-tool eth0 -F 100baseTx-FD.


Kommentare