chiark / gitweb /
rules_generator: add S/390 persistent network support
authorHannes Reinecke <hare@suse.de>
Wed, 25 Jul 2007 13:42:39 +0000 (15:42 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Wed, 25 Jul 2007 13:42:39 +0000 (15:42 +0200)
extras/rule_generator/75-persistent-net-generator.rules
extras/rule_generator/write_net_rules

index 21eb0c6649f2a85c976264dc692933137dd4d414..0ff395d136bde0e1f32ce0b8f24d28ee7baa689d 100644 (file)
@@ -1,19 +1,21 @@
 # these rules generate rules for persistent network device naming
 
-ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*|ath*|wlan*|ra*|sta*" \
+ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*|ath*|wlan*|ra*|sta*|ctc*|lcs*|hsi*" \
        NAME!="?*", DRIVERS=="?*", GOTO="persistent_net_generator_do"
 
 GOTO="persistent_net_generator_end"
 LABEL="persistent_net_generator_do"
 
 # build device description string to add a comment the generated rule
-SUBSYSTEMS=="pci", ENV{COMMENT}="PCI device $attr{vendor}:$attr{device} ($attr{driver})"
-SUBSYSTEMS=="usb", ENV{COMMENT}="USB device 0x$attr{idVendor}:0x$attr{idProduct} ($attr{driver})"
+SUBSYSTEMS=="pci", ENV{COMMENT}="PCI device $attr{vendor}:$attr{device} ($driver)"
+SUBSYSTEMS=="usb", ENV{COMMENT}="USB device 0x$attr{idVendor}:0x$attr{idProduct} ($driver)"
+SUBSYSTEMS=="ccwgroup", ENV{COMMENT}="S/390 $driver device at $id", ENV{NETDEV}="$id", ENV{NETDRV}="$driver"
 SUBSYSTEMS=="ieee1394", ENV{COMMENT}="Firewire device $attr{host_id})"
 SUBSYSTEMS=="xen", ENV{COMMENT}="Xen virtual device"
-ENV{COMMENT}=="", ENV{COMMENT}="$env{SUBSYSTEM} device ($attr{driver})"
+ENV{COMMENT}=="", ENV{COMMENT}="$env{SUBSYSTEM} device ($driver)"
 
-IMPORT{program}="write_net_rules $attr{address}"
+ENV{NETDEV}=="?*", IMPORT{program}="write_net_rules --driver $env{NETDRV} --id $env{NETDEV}"
+ENV{NETDEV}!="?*", IMPORT{program}="write_net_rules $attr{address}"
 ENV{INTERFACE_NEW}=="?*", NAME="$env{INTERFACE_NEW}"
 
 LABEL="persistent_net_generator_end"
index b709200a351c0f209057a05efe5ac2d86c637f26..e7386b057ca87c59dfb0e113c18d4a53e5935172 100644 (file)
@@ -69,7 +69,7 @@ if [ "$1" = "all_interfaces" ]; then
 
        for INTERFACE in *; do
                case $INTERFACE in
-               eth*|ath*|wlan*|ra*|sta*) ;;
+               eth*|ath*|wlan*|ra*|sta*|ctc*|hsi*) ;;
                *) continue ;;
                esac
 
@@ -86,18 +86,42 @@ if [ -z "$INTERFACE" ]; then
 fi
 
 if [ "$1" ]; then
-       MAC_ADDR="$1"
+    while [ "$*" ] ; do
+       case $1 in
+           --mac)
+               shift
+               MAC_ADDR=$1
+               shift
+               ;;
+           --driver)
+               shift
+               DRIVER=$1
+               shift
+               ;;
+           --id)
+               shift
+               ID=$1
+               shift
+               ;;
+           *)
+               MAC_ADDR=$1
+               shift
+               ;;
+       esac
+    done
 else
-       MAC_ADDR=$(sysread address)
+    MAC_ADDR=$(sysread address)
 fi
 
-if [ -z "$MAC_ADDR" ]; then
+if [ -z "$DRIVER" ] && [ -z "$ID" ] ; then
+    if [ -z "$MAC_ADDR" ]; then
        echo "No MAC address for $INTERFACE." >&2
        exit 1
-fi
-if [ "$MAC_ADDR" = "00:00:00:00:00:00" ]; then
+    fi
+    if [ "$MAC_ADDR" = "00:00:00:00:00:00" ]; then
        echo "NULL MAC address for $INTERFACE." >&2
        exit 1
+    fi
 fi
 
 # Prevent concurrent processes from modifying the file at the same time.
@@ -117,7 +141,11 @@ if interface_name_taken; then
 fi
 
 # the DRIVERS key is needed to not match bridges and VLAN sub-interfaces
-match="DRIVERS==\"?*\", ATTRS{address}==\"$MAC_ADDR\""
+if [ "$MAC_ADDR" ] ; then
+    match="DRIVERS==\"?*\", ATTRS{address}==\"$MAC_ADDR\""
+else
+    match="DRIVERS==\"$DRIVER\", KERNELS==\"$ID\""
+fi
 if [ $basename = "ath" -o $basename = "wlan" ]; then
        match="$match, ATTRS{type}==\"1\"" # do not match the wifi* interfaces
 fi