NetworkManager mit 2 Wlan-Geräten

Letzter Stand der Dinge, noch ohne OPTIONS:

/etc/udev/rules.d/90-FritzStick.rules

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sr1", ATTRS{idVendor}=="057c", ATTRS{idProduct}=="62ff", RUN+="/sbin/modprobe -r sr1"
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan0", ATTRS{idVendor}=="057c", ATTRS{idProduct}=="6201", RUN+="/lib/udev/FritzStick_1_remove_ipw2100_load_ndiswrapper.sh"
ACTION=="remove", SUBSYSTEM=="net", KERNEL=="wlan0", ATTRS{idVendor}=="057c", ATTRS{idProduct}=="6201", RUN+="/lib/udev/FritzStick_2_remove_ndiswrapper_load_ipw2100.sh"

/lib/udev/FritzStick_1_remove_ipw2100_load_ndiswrapper.sh

#!/bin/sh
/sbin/modprobe -r ipw2100
/sbin/modprobe ndiswrapper
exit 0 

FritzStick_2_remove_ndiswrapper_load_ipw2100.sh

#!/bin/sh
/sbin/modprobe -r ndiswrapper
/sbin/modprobe ipw2100
exit 0 

Die beiden Scripte sind OK so, aber diese Regel hat einen Fehler:

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sr1", ATTRS{idVendor}=="057c", ATTRS{idProduct}=="62ff", RUN+="/sbin/modprobe -r sr1"

Der Ansatz ist so gesehen OK, aber es gibt kein Kernelmodul “sr1”, das ist in diesem Fall der Name des Gerätes (sog. “device node”).

Des Weiteren ist die Regel auf der “Wenn”-Seite so OK, aber stell Dir vor, es wäre noch ein weiteres CDROM-Laufwerk vorhanden, das könnte ein weiterer USB-Stick sein, der ebenfalls ein virtuelles CDROM enthält (wie z.B. diverse Surfsticks oder auch ein USB-Massenspeicher, da sind teilweise solche virtuellen CDROM-Laufwerke drauf), dann könnte dieses (je nach Reihenfolge des Anstöpselns) /dev/sr1 heissen (/dev/sr0 ist das eingebaute CD-Laufwerk) und der Fritz-Stick wäre z.B. /dev/sr2, dann greift die Regel so nicht mehr.

Deshalb würde es Sinn machen, die “Wenn-Seite” mit einem Platzhalter zu versehen, also so:

ACTION=="add", SUBSYSTEM=="block", KERNEL=="**sr***", ATTRS{idVendor}=="057c", ATTRS{idProduct}=="62ff",

Als Aktion soll das Gerät ignoriert werden und es sollen keine weiteren Regeln mehr zu diesem Gerät abgearbeitet werden.

Also zusammengefasst:

ACTION=="add", SUBSYSTEM=="block", KERNEL==**"sr***", ATTRS{idVendor}=="057c", ATTRS{idProduct}=="62ff", **OPTIONS+="ignore_device", OPTIONS+="last_rule"**

Damit wird dieses virtuelle CDROM zwar erkannt (daran kann man udev nicht hindern, würde auch keinen Sinn machen, denn udev muss ja wissen, was er damit zu tun hat), aber anschließend wird udev dafür sorgen, daß im System dieses Gerät nicht mehr vorhanden ist.

Wenn also dieses virtuelle CDROM-Laufwerk der Störenfried ist, welcher beim Herausziehen des Sticks dafür sorgt, daß ndiswrapper nicht schnell genug entladen werden kann, dann hätte man das verhindert, weil es nun dieses Gerät nicht mehr gibt.

Es war übrigens eine gute Idee hier auch "KERNEL==“sr*” zu setzen, dazu ein Beispiel aus meiner Hardwaresammlung.

Ich bin hier gerade über einen UMTS-Stick online, der auch so ein -unter Linux nutzloses- virtuelles CDROM-Laufwerk hat, allerdings ist zusätzlich auch ein Steckplatz für eine SD-Karte vorhanden.

Je nachdem, ob vorher schon einer meiner USB-Speichersticks angeschlossen ist, wird der Steckplatz für die SD-Karte als sdb, sdc usw. erkannt, das virtuelle CDROM als sr1.

Das dazugehörige “parent device” (der Surfstick) hat die USB-ID 12d1:1003, diese Regel würde beide Speichermedien “ausknipsen”,

ACTION=="add", SUBSYSTEM=="block", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003",  OPTIONS+="ignore_device", OPTIONS+="last_rule"

denn es passt auf das CDROM und den Steckplatz für die SD-Karte (beides sind blockorientierte Geräte).

Sollte ich eines Tages eine SD-Karte in dem Stick “versenken”, gäbe es eine böse Überraschung, denn ich könnte damit nichts anfangen, deshalb sieht meine Regel so aus:

ACTION=="add", SUBSYSTEM=="block", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003",  KERNEL=="sr*", OPTIONS+="ignore_device", OPTIONS+="last_rule"

Alles äußerst interessant und gut erklärt, den Thread hab ich gebookmarked.
Aber kann es sein, dass wicd als Network Manager ebenfalls eine Lösung wäre? Der kann IIRC recht gut mit mehrern Adaptern und Profilen umgehen.

Gruß
Uwe

Gut möglich, weiter vorne hatte ich das ja auch schon angedeutet (“anderes Frontend”), die udev-Regeln -um die es mir hier hauptsächlich geht, man könnte auch sagen, daß ich den Thread ein weing für ein HowTo mit Rückmeldung mißbrauche, oder er sich von alleine in diese Richtung entwickelte- sind unabhängig vom verwendeten Frontend für die Netzwerkkonfiguration.

Eigentlich soll das hier auch als Anregung für ähnliche Problem gelten (z.B. haben viele USB-Geräte mittlerweile solch ein unter Linux nutzloses, virtuelles CDROM).

Das Problem mit dem “ins Wackeln kommende System”, wenn man den Stick abzieht, scheint auf Treiberebene zu liegen, also das dürfte dann wohl auch wicd (oder ifup, welches man übrigens mit SCPM auch “profilfähig” bekommen könnte) davon betroffen sein.

Ich hoffe zumindest, daß dem TE auch schon eine weile klar ist, daß es hier nicht nur um die Lösung seines Problems geht, sondern auch ein wenig darum, etwas “zu Papier” zu bringen, was man alles mit Bordmitteln auf ziemlich tiefer Ebene (und das gilt nun mal für udev) so machen kann.

Später Nachtrag für Querleser, was NetworkManager selbst noch als Konfigurationsmöglichkeit anbietet:

Man kann NWM auch sagen, er solle ein bestimmtes Netzwerkgerät anhand der MAC-Adresse komplett ignorieren, also eine andere Art des Holzhammers.

Für Details empfehle ich das Lesen der entsprechenden man-Page(s) NetworkManager.conf(5) bzw. nm-system-settings.conf(5) (je nach Version von NWM gibt es die eine, die andere oder beide) mit Hauptaugenmerk auf den Abschnitt “plugins” in [main] sowie den Abschnitt [keyfile] und dort besonders die Option “unmanaged”.