=== modified file 'network-hooks.d/bridge' --- network-hooks.d/bridge 2011-12-27 03:56:39 +0000 +++ network-hooks.d/bridge 2011-12-31 13:25:58 +0000 @@ -15,13 +15,17 @@ CONFIG="$MANDOSNETHOOKDIR/bridge.conf" -# Read config file, which must set "BRIDGE", "PORTS", and optionally -# "IPADDRS" and "ROUTES". +addrtoif(){ + grep -liFe "$1" /sys/class/net/*/address | sed -e 's,.*/\([^/]*\)/[^/]*,\1,' +} + +# Read config file, which must set "BRIDGE", "PORT_ADDRESSES", and +# optionally "IPADDRS" and "ROUTES". if [ -e "$CONFIG" ]; then . "$CONFIG" fi -if [ -z "$BRIDGE" -o -z "$PORTS" ]; then +if [ -z "$BRIDGE" -o -z "$PORT_ADDRESSES" ]; then exit fi @@ -39,9 +43,10 @@ case "$1" in start) "$brctl" addbr "$BRIDGE" - for port in $PORTS; do - "$brctl" addif "$BRIDGE" "$port" - ip link set dev "$port" up + for address in $PORT_ADDRESSES; do + interface=`addrtoif "$address"` + "$brctl" addif "$BRIDGE" "$interface" + ip link set dev "$interface" up done ip link set dev "$BRIDGE" up sleep "$DELAY" @@ -58,9 +63,10 @@ ;; stop) ip link set dev "$BRIDGE" down - for port in $PORTS; do - ip link set dev "$port" down - "$brctl" delif "$BRIDGE" "$port" + for address in $PORT_ADDRESSES; do + interface=`addrtoif "$address"` + ip link set dev "$interface" down + "$brctl" delif "$BRIDGE" "$interface" done "$brctl" delbr "$BRIDGE" ;; === modified file 'network-hooks.d/bridge.conf' --- network-hooks.d/bridge.conf 2011-11-24 20:15:24 +0000 +++ network-hooks.d/bridge.conf 2011-12-31 13:25:58 +0000 @@ -2,7 +2,7 @@ #BRIDGE=br0 -#PORTS="eth0 eth1" +#PORT_ADDRESSES="00:11:22:33:44:55 11:22:33:44:55:66" ## Optional === modified file 'network-hooks.d/wireless' --- network-hooks.d/wireless 2011-12-31 12:08:11 +0000 +++ network-hooks.d/wireless 2011-12-31 13:25:58 +0000 @@ -20,6 +20,10 @@ CONFIG="$MANDOSNETHOOKDIR/wireless.conf" +addrtoif(){ + grep -liFe "$1" /sys/class/net/*/address | sed -e 's,.*/\([^/]*\)/[^/]*,\1,' +} + # Read config file if [ -e "$CONFIG" ]; then . "$CONFIG" @@ -27,13 +31,15 @@ exit fi -interfaces="`env|sed -n -e 's/^\(MODULE\|IPADDRS\|ROUTES\|WPA_DRIVER\)_\([^=]*\)=.*/\2/p' \"$CONFIG\" |sort -u`" +ifkeys="`env | sed -n -e 's/^ADDRESS_\([^=]*\)=.*/\1/p' \"$CONFIG\" | sort -u`" # Exit if DEVICE is set and is not any of the wireless interfaces if [ -n "$DEVICE" ]; then while :; do - for IF in $interfaces; do - if [ "$IF" = "$DEVICE" ]; then + for KEY in $ifkeys; do + ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"` + INTERFACE=`addrtoif "$ADDRESS"` + if [ "$INTERFACE" = "$DEVICE" ]; then break 2 fi done @@ -66,14 +72,16 @@ start) mkdir -m u=rwx,go= -p "$CTRLDIR" "$wpa_supplicant" -B -g "$CTRL" -p "$CTRLDIR" $WPAS_OPTIONS - for INTERFACE in $interfaces; do - DRIVER=`eval 'echo "$WPA_DRIVER_'"$INTERFACE"\"` - IFDELAY=`eval 'echo "$DELAY_'"$INTERFACE"\"` + for KEY in $ifkeys; do + ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"` + INTERFACE=`addrtoif "$ADDRESS"` + DRIVER=`eval 'echo "$WPA_DRIVER_'"$KEY"\"` + IFDELAY=`eval 'echo "$DELAY_'"$KEY"\"` "$wpa_cli" -g "$CTRL" interface_add "$INTERFACE" "" \ "${DRIVER:-wext}" "$CTRLDIR" > /dev/null \ | sed -e '/^OK$/d' NETWORK=`"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" add_network` - eval wpa_interface_"$INTERFACE" + eval wpa_interface_"$KEY" "$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" enable_network \ "$NETWORK" | sed -e '/^OK$/d' sleep "${IFDELAY:-$DELAY}" & @@ -95,7 +103,7 @@ sleep 1 done & wait $sleep || : - IPADDRS=`eval 'echo "$IPADDRS_'"$INTERFACE"\"` + IPADDRS=`eval 'echo "$IPADDRS_'"$KEY"\"` if [ -n "$IPADDRS" ]; then if [ "$IPADDRS" = dhcp ]; then ipconfig -c dhcp -d "$INTERFACE" || : @@ -106,7 +114,7 @@ done fi fi - ROUTES=`eval 'echo "$ROUTES_'"$INTERFACE"\"` + ROUTES=`eval 'echo "$ROUTES_'"$KEY"\"` if [ -n "$ROUTES" ]; then for route in $ROUTES; do "$ip" route add "$route" dev "$BRIDGE" @@ -116,7 +124,9 @@ ;; stop) "$wpa_cli" -g "$CTRL" terminate 2>&1 | sed -e '/^OK$/d' - for INTERFACE in $interfaces; do + for KEY in $ifkeys; do + ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"` + INTERFACE=`addrtoif "$ADDRESS"` "$ip" addr show scope global permanent dev "$INTERFACE" \ | while read type addr rest; do case "$type" in === modified file 'network-hooks.d/wireless.conf' --- network-hooks.d/wireless.conf 2011-12-30 18:26:04 +0000 +++ network-hooks.d/wireless.conf 2011-12-31 13:25:58 +0000 @@ -2,9 +2,10 @@ #WPAS_OPTIONS="" # wlan0 -MODULE_wlan0=ath9k -#WPA_DRIVER_wlan0=wext -wpa_interface_wlan0(){ +ADDRESS_0=00:11:22:33:44:55 +MODULE_0=ath9k +#WPA_DRIVER_0=wext +wpa_interface_0(){ # Use this format to set simple things: wpa_cli_set ssid home wpa_cli_set psk "secret passphrase" @@ -12,7 +13,11 @@ #"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" bssid "$NETWORK" 00:11:22:33:44:55 #"$wpa_cli" -g "$CTRL" ping } -#DELAY_wlan0=10 -IPADDRS_wlan0=dhcp -#IPADDRS_wlan0="192.0.2.3/24 2001:DB8::aede:48ff:fe71:f6f2/32" -#ROUTES_wlan0="192.0.2.0/24 2001:DB8::/32" +#DELAY_0=10 +IPADDRS_0=dhcp +#IPADDRS_0="192.0.2.3/24 2001:DB8::aede:48ff:fe71:f6f2/32" +#ROUTES_0="192.0.2.0/24 2001:DB8::/32" + +#ADDRESS_1=11:22:33:44:55:66 +#MODULE_1=... +#...