Netzwerkinterface bleibt hängen

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

Dieser Artikel beschreibt das Problem einer abbrechenden Netzwerkverbindung unter Linux (und in Einzelfällen auch unter Windows) bei einigen Supermicro Mainboards.

Update: Mittlerweile gibt es einen entsprechenden Fix: http://sourceforge.net/p/e1000/mailman/message/27612146/

Hinweis:
Bei allen aktuellen Systemen, die die betroffenen Mainboards verbaut haben, sollte dieses Problem nicht mehr auftreten, da im Zuge der Installation unseres TK-Debians nachfolgendes Skript standardmäßig durchlaufen wird. (Jeder unserer Server wird vor der Auslieferung bzw. vor der endgültigen Installation mit unserem TK-Debian installiert, damit qualitätssichernde Maßnahmen durchgeführt werden können.)
Dieses Problem sollte also nur noch vereinzelt bei älteren Systemen auftreten.

Problembeschreibung

Durch ein falsches Bit im EEPROM der Netzwerkschnittstelle bricht unter Linux (und in Einzelfällen auch unter Windows) die Netzwerkverbindung ab (meistens bei hohem Datenverkehr über die jeweilige Netzwerkschnittstelle). Abhilfe schafft ein Shell-Skript, welches mit Hilfe von ethtool dieses falsche Bit korrigiert.

Betroffene Hardware

  • Intel Corporation 82573V Gigabit Ethernet Controller
  • Intel Corporation 82573E Gigabit Ethernet Controller
  • Intel Corporation 82573L Gigabit Ethernet Controller

Betroffene Mainboards des TK-Shops

  • Supermicro PDSMI+
  • Supermicro PDSME+

Lösung

  • Erstellen eines Shell-Skripts z. B. mit nano:
nano fixeep.sh
  • Ausführen des Shell-Skripts für den ersten NIC
sh fixeep.sh eth0
  • Analog für den zweiten NIC
sh fixeep.sh eth1
  • Nach einem Reboot des Systems sollten die Probleme behoben sein!

Inhalt von fixeep.sh

Hinweis: Auf dem jeweiligen Linux-System muss ethtool verfügbar sein.

Bei Windowssystemen ist die Ausführung des Tools auch über eine Linux-LiveCD möglich!

#!/bin/bash

if [ -z "$1" ]; then
	echo "Usage: $0 \<interface\>"
	echo "       i.e. $0 eth0"
	exit 1
fi

if ! ifconfig $1 > /dev/null; then
	exit 1
fi

dev=$(ethtool -e $1 | grep 0x0010 | awk '{print "0x"$13$12$15$14}')

case $dev in
	0x108b8086)
		echo "$1: is a \"82573V Gigabit Ethernet Controller\""
		;;
	0x108c8086)
		echo "$1: is a \"82573E Gigabit Ethernet Controller\""
		;;
	0x109a8086)
		echo "$1: is a \"82573L Gigabit Ethernet Controller\""
		;;
	*)
		echo "No appropriate hardware found for this fixup"
		exit 1
		;;
esac

echo "This fixup is applicable to your hardware"

var=$(ethtool -e $1 | grep 0x0010 | awk '{print $16}')
new=$(echo ${var:0:1}`echo ${var:1} | tr '02468ace' '13579bdf'`)

if [ ${var:0:1}${var:1} == $new ]; then
	echo "Your eeprom is up to date, no changes were made"
	exit 2
fi

echo "executing command: ethtool -E $1 magic $dev offset 0x1e value 0x$new"
ethtool -E $1 magic $dev offset 0x1e value 0x$new

Weblink

http://bugzilla.kernel.org/show_bug.cgi?id=7450

Das könnte Sie auch interessieren

Linux Netzwerk Analyse mit netstat
Mehrere IP Adressen einem Netzwerk Interface zuordnen
TCP und UDP Netzwerk Performance mit iperf messen