ppcrcd/trunk/conf.dir/lib: . udev udev/udev_net_helper

sparky cvs at pld-linux.org
Wed Mar 15 23:58:43 CET 2006


Author: sparky
Date: Wed Mar 15 23:58:36 2006
New Revision: 7177

Added:
   ppcrcd/trunk/conf.dir/lib/
   ppcrcd/trunk/conf.dir/lib/udev/
   ppcrcd/trunk/conf.dir/lib/udev/udev_net_helper   (contents, props changed)
Log:
- NEW: conf.dir/lib/udev/udev_net_helper
- modified udev_net_helper file which is able to use configuration from
  kernel command line or nvram


Added: ppcrcd/trunk/conf.dir/lib/udev/udev_net_helper
==============================================================================
--- (empty file)
+++ ppcrcd/trunk/conf.dir/lib/udev/udev_net_helper	Wed Mar 15 23:58:36 2006
@@ -0,0 +1,136 @@
+#!/bin/sh
+#
+# Kernel NET hotplug params include:
+#	
+#	ACTION=%s [register or unregister]
+#	INTERFACE=%s
+
+. /etc/sysconfig/network-scripts/functions.network
+
+mesg() {
+    /usr/bin/logger -t $(basename $0)"[$$]" "$@"
+}
+
+debug_mesg() {
+    :
+}
+
+# returns true if device is either wireless, usbnet or is named eth* and supports ethtool
+ethernet_check() {
+    [ -d /sys/class/net/$1/wireless/ ] && return 0
+    [[ "$1" == bnep* ]] && return 0
+    # eagle-usb/firewire create a fake ethX interface
+    if [ -x /usr/sbin/ethtool ] && ! /usr/sbin/ethtool $1 > /dev/null 2>&1;
+	then return 1;
+    fi
+    return 0;
+}
+
+if [ "$INTERFACE" = "" ]; then
+    mesg Bad NET invocation: \$INTERFACE is not set
+    exit 1
+fi
+
+export IN_HOTPLUG=1
+
+case $ACTION in
+add|register)
+    case $INTERFACE in
+	# interfaces that are registered after being "up" (?)
+	ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*)
+	    debug_mesg assuming $INTERFACE is already up
+	    exit 0
+	    ;;
+	# interfaces that are registered then brought up
+	*)
+	    # NOTE:  network configuration relies on administered state,
+	    # we can't do much here without distro-specific knowledge
+	    # such as whether/how to invoke DHCP, set up bridging, etc.
+
+	    # Run ifrename as needed - Jean II
+	    # Remap interface names based on MAC address. This workaround
+	    # the dreaded configuration problem "all my cards are 'eth0'"...
+	    # This needs to be done before ifup otherwise ifup will get
+	    # confused by the name changed and because iface need to be
+	    # down to change its name.
+	    if [ -x /sbin/ifrename ] && [ -r /etc/iftab ]; then
+		debug_mesg invoke ifrename for $INTERFACE
+		NEWNAME=`/sbin/ifrename -i $INTERFACE`
+		if [ -n "$NEWNAME" ]; then
+		    debug_mesg iface $INTERFACE is remapped to $NEWNAME
+		    INTERFACE=$NEWNAME
+		fi;
+	    fi
+
+	    # conform to network service (AUTOMATIC_IFCFG)
+	    [ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
+
+	    # don't do anything for non ethernet devices
+	    ethernet_check $INTERFACE || exit 0;
+
+	    # automatically create an interface file
+	    CFG=/etc/sysconfig/interfaces/ifcfg-$INTERFACE
+	    if [ "$AUTOMATIC_IFCFG" != no ]; then
+		debug_mesg creating config file for $INTERFACE
+		. /usr/lib/ppcrcd/functions
+		DRIVER=$(ethtool -i $INTERFACE | awk '/^driver/ { print $2 }')
+		ETHS="$(cmdvar eth)"
+		[ -z "$ETHS" ] && { cmdopt nonveth || ETHS="$(cmdvar eth)"; }
+		CONF=$(echo "$ETHS" | grep "^$DRIVER:")
+		if [ -n "$CONF" ]; then
+		    IP=$(echo $CONF | awk -F: '{print $2}')
+		    
+		    GATE=$(echo $CONF | awk -F: '{print $3}')
+		    if [ -n "$GATE" ]; then
+			sed -e "s/^GATEWAY=.*$/GATEWAY=$GATE/" \
+			    -e "s/^GATEWAYDEV=.*$/GATEWAYDEV=$INTERFACE/" \
+			    -i /etc/sysconfig/network
+		    fi
+		    for DNSip in $(echo $CONF | awk -F: '{print $4}' \
+			    | tr "," " "); do
+			echo nameserver $DNSip >> /etc/resolv.conf
+		    done
+	        else
+		    IP=dhcp
+		fi
+		ONBOOT="yes"
+		cmdopt nonet && ONBOOT="no"
+		set_ifcfg "$INTERFACE" "$IP" "$ONBOOT"
+	    fi
+
+	    if [ ! -f /var/lock/subsys/network ] || [ ! -r $CFG ]; then
+		# Don't do anything if the network is stopped or interface isn't configured
+		exit 0
+	    fi
+
+	    if [ -x /sbin/ifup ]; then
+		debug_mesg invoke ifup $INTERFACE
+		exec /sbin/ifup $INTERFACE hotplug
+	    fi
+	    ;;
+    esac
+    mesg $1 $ACTION event not handled
+    ;;
+
+remove|unregister)
+    case $INTERFACE in
+	# interfaces that are unregistered after being "down" (?)
+	ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*)
+	    debug_mesg assuming $INTERFACE is already down
+	    exit 0
+	    ;;
+	*)
+	    if [ -x /sbin/ifdown ]; then
+		debug_mesg invoke ifdown $INTERFACE
+		exec /sbin/ifdown $INTERFACE daemon
+	    fi
+	    ;;
+    esac
+    mesg $1 $ACTION event not handled
+    ;;
+
+*)
+    debug_mesg NET $ACTION event for $INTERFACE not supported
+    exit 1 ;;
+
+esac


More information about the pld-cvs-commit mailing list