From 49369cafe412e734e174fa3dccd5878499d28702 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Wed, 25 Jul 2007 15:42:39 +0200 Subject: [PATCH] rules_generator: add S/390 persistent network support --- .../75-persistent-net-generator.rules | 12 +++--- extras/rule_generator/write_net_rules | 42 +++++++++++++++---- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/extras/rule_generator/75-persistent-net-generator.rules b/extras/rule_generator/75-persistent-net-generator.rules index 21eb0c6649..0ff395d136 100644 --- a/extras/rule_generator/75-persistent-net-generator.rules +++ b/extras/rule_generator/75-persistent-net-generator.rules @@ -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" diff --git a/extras/rule_generator/write_net_rules b/extras/rule_generator/write_net_rules index b709200a35..e7386b057c 100644 --- a/extras/rule_generator/write_net_rules +++ b/extras/rule_generator/write_net_rules @@ -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