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