Schlagwort-Archive: Netzwerkkarte

Speed und Duplex eines Interfaces beim Booten einstellen

Manchmal muss ein Netzwerk-Interface fest auf eine Geschwindigkeit und/oder Duplex-Verfahren eingestellt werden, weil die Autonegoation nicht funktioniert.

Grundsätzlich ist die Autonegoation, also die selbstständige, optimale Einstellung zweier verbundener Netzwerkports eine gute Sache – wenn sie funktioniert und sie auch bei beiden Ports eingeschaltet ist (siehe auch „Duplex Mismatch und Autonegotiation im Ethernet„). Wenn nicht, müssen die Ports manuell konfiguriert werden. Man kann diese Einstellungen mit dem Werkzeug ethtool vornehmen, aber beim Booten des Rechners wird das Interface wieder auf Auto stehen.

Leider gibt es kein einfachen Konfigurationsparameter (z.B. in der Interfacekonfiguration unter /etc/sysconfig/network), der das bewerkstelligt. Damit diese Einstellungen auch beim Booten wirksam werden muss bei SuSE 10.x ein Script angelegt werden, welches aufgerufen wird, wenn das Interface gestartet wurde. Dies ist ein sehr universelles Konzept, welches auch viele andere Möglichkeiten bietet. Grundsätzlich gibt es zwei Möglichkeiten, ein Script beim Starten ausführen zu lassen:

  • Ein Script in /etc/sysconfig/network/if-up.d
  • Ein Script mit der Variablen POST_UP_SCRIPT in der Interfacekonfigurationsdatei /etc/sysconfig/network/ifcfg-* angeben

Bei der ersten Möglichkeit wird das Script bei jedem Interface ausgeführt, man muss daher die übergebenen Parameter analysieren und ein Fehler im Script kann die gesamte Netzkonfiguration des Rechners durcheinander bringen.

Ich verwende daher die zweite Möglichkeit, bei dem ein spezielles Script für das gewünschte Interface erstellt wird. Man kann aber auch ein universelles Script erstellen, welches die übergebenen Parameter analysieren. Da es aber nur für die Interface ausgeführt wird, die dieses Script auch in POST_UP_SCRIPT stehen haben, ist das sicherer als die erste Methode. Wer mehr zu den beiden Verfahren wissen möchte, dem seinen die Man-Pages zu ifup und ifcfg empfohlen.

Ich habe nun also in der Konfigurtationsdatei für die betreffende Netzwerkkarte die folgende Zeile hinzugefügt:

POST_UP_SCRIPT='post_up_eth2'

Das Script sieht dann so aus:

#!/bin/sh
# Stellt das Interface auf 100 Full ein
#echo $0 $1 $2 $3 $4 $5
CONF_NAME=$1
HW_NAME=$2

ethtool -s $HW_NAME autoneg off speed 100 duplex full

ethtool $HW_NAME

Wird in der Konfigdatei kein Pfad mit angegeben, so wird das Script in /etc/sysconfig/network/scripts erwartet.

Interface-Name bei SuSE festlegen

Hat man in einem Rechner mehrere Netzwerkkarten möchte man eigentlich, das die Karte, die heute eth1 ist das auch nach dem nächsten booten ist. Durch die automatische Hardware-Erkennung ist das aber leider nicht immer der Fall, was gerade bei einer Firewall recht störend sein kann.

Liesen sich diese Einstellungen früher in der Netzwerkkonfiguration unter /etc/sysconfig/network eintragen, so muss man diese bei SuSE 10.0 ganz wo anders einstellen.

Um die Namen für die Interfaces festzulegen müssen diese in der Datei
/etc/udev/rules.d/30-net_persistent_names.rules
eingetragen werden.
Normalerweise trägt Yast bei der Konfiguration alle Karten dort ein. Ein solcher Eintrag sieht beispielsweise so aus:

SUBSYSTEM=="net", ACTION=="add", SYSFS{address}=="00:50:ba:5e:17:4b", IMPORT="/sbin/rename_netiface %k eth0"

Hier kann dann einfach ein anderer Bezeichner gewählt werden oder die Reihenfolge angepasst werden.

Weitere Infos finden sich auch in der Datei /usr/share/doc/packages/sysconfig/README.Persistent_Interface_Names.

Bei SuSE 11.1 heißt die Datei 70-persistent-net.rules und die Einträge sehen so aus:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1c:23:88:3f:63", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

Die o.g. README gibt es leider nicht mehr, zu udev (und auch zu den Netzwerk-Interfacen) gibt es /usr/share/doc/packages/udev/writing_udev_rules/index.html.

Es gibt wohl auch ein Tool namens nameif, aber das funktioniert bei mir nicht (keine /etc/mactab).