All pastes #811417 Raw Edit

Untitled

public text v1 · immutable
·published 2007-12-10 22:04 UTC
rendered paste body
bt rules.d # cat /lib/udev/nethelper.sh
#!/bin/sh
DEVNAME="$1"
COMMAND="$2"
TESTNAME="net.$RANDOM"
LOCKFILE="/dev/net-lockfile"

. /etc/udev/udev.conf

PERM_RULES="${udev_rules}/75-network-devices.rules"
TEMP_RULES="${udev_root}/75-network-devices.rules"

getlock() {
        until ( mkdir $LOCKFILE ) 2>/dev/null
        do
           sleep 1
        done
}

givelock() {
        if [ -e $LOCKFILE ]; then
                rm -rf $LOCKFILE
        fi
}

checkrules() {
        if grep $1 ${udev_root}/*.rules &>/dev/null ; then
                return 0
        fi
        if grep $1 ${udev_rules}/*.rules &>/dev/null ; then
                return 0
        fi
        return 1
}

testwrite() {
        if ln -s /dev/null ${udev_rules}/$TESTNAME 2>/dev/null ; then
                rm -rf ${udev_rules}/$TESTNAME
                RW=1
                if [ -e $TEMP_RULES ]; then
                        mv $TEMP_RULES $PERM_RULES
                fi
                UDEV_RULES="$PERM_RULES"
        else
                if [ -e $PERM_RULES ] && [ ! -e $TEMP_RULES ]; then
                        cp $PERM_RULES $TEMP_RULES
                fi
                UDEV_RULES="$TEMP_RULES"
        fi
}

case $DEVNAME in
        ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|tun*|tap*|sit*|ipsec*|cipsec*)
                exit 0
                ;;
        eth*|ath*|wlan*|ra*|sta*)
                case $COMMAND in
                        'start')
                                getlock
                                # Test if the root filesystem is mounted RW
                                testwrite

                                ADDRESS=`cat /sys/class/net/${DEVNAME}/address`
                                if ! checkrules $ADDRESS ; then
                                        if [ ! -e $UDEV_RULES ]; then
                                            echo "# Local network rules to name your network cards.
#
# These rules were generated by nethelper.sh, but you can
# customize them.
#
# You may edit them as needed.
# (If, for example, your machine has more than one network
# card and you need to be sure they will always be given
# the same name, like eth0, based on the MAC address)
#
# If you delete this file, /lib/udev/nethelper.sh will try to
# generate it again the next time udev is started.
" > $UDEV_RULES
                                        fi
                                        KRN_NAME=`echo $DEVNAME | sed -ne 's#\(\w*\)[0-9].*#\1#p'`
                                        if checkrules "\"$DEVNAME\"" &>/dev/null ; then
                                                NUMBER=`grep -c "NAME=\"${KRN_NAME}.\"" $UDEV_RULES`
                                                while [ `grep -c "\"${KRN_NAME}${NUMBER}\"" \
                                                         $UDEV_RULES` -ne 0 ]; do
                                                        NUMBER=$(($NUMBER+1))
                                                done
                                                NAME="${KRN_NAME}${NUMBER}"
                                        else
                                                NAME="${DEVNAME}"
                                        fi
                                        echo "KERNEL==\"${KRN_NAME}?\", ATTR{address}==\"$ADDRESS\", NAME=\"${NAME}\"" >> $UDEV_RULES
                                        if [ "$NAME" != "$DEVNAME" ]; then
                                                /sbin/nameif ${NAME} ${ADDRESS}
                                                DEVNAME=${NAME}
                                        fi
                                fi
                                givelock
                                if [ $RW ]; then
                                        if [ -x /etc/rc.d/rc.inet1 ]; then
                                                if ! /sbin/ifconfig | /bin/grep -q "^${DEVNAME} "; then
                                                        /etc/rc.d/rc.inet1 ${DEVNAME}_start
                                                fi
                                        fi
                                        exit 0
                                else
                                        exit 1
                                fi
                                ;;
                        'stop')
                                if [ -x /etc/rc.d/rc.inet1 ]; then
                                     if /sbin/ifconfig | /bin/grep -q "^${DEVNAME} "; then
                                        /etc/rc.d/rc.inet1 ${DEVNAME}_stop
                                     fi
                                fi
                                # Does dhcpcd appear to still be running on the
                                # interface?  If so, try to stop it.
                                if [ -r /etc/dhcpc/dhcpcd-$DEVNAME.pid -o -r /var/run/dhcpcd-$DEVNAME.pid ]; then
                                  /sbin/dhcpcd -k -d $DEVNAME
                                  # Force garbage removal, if needed:
                                  if [ -r /etc/dhcpc/dhcpcd-$DEVNAME.pid ]; then
                                     /bin/rm -f /etc/dhcpc/dhcpcd-$DEVNAME.pid
                                  elif [ -r /var/run/dhcpcd-$DEVNAME.pid ]; then
                                     /bin/rm -f /var/run/dhcpcd-$DEVNAME.pid
                                  fi
                                fi
                                # If the interface is now down, exit with a status of 0:
                                if /sbin/ifconfig | /bin/grep -q "^${DEVNAME} " ; then
                                  exit 0
                                fi
                                ;;
                        *)
                                echo "usage $0 interface start|stop|create_rule"
                                exit 1
                                ;;
                esac
esac
exit 0