netifd: add a new udhcpc default script for command line use (no uci support)
authorFelix Fietkau <nbd@openwrt.org>
Mon, 27 Feb 2012 16:23:39 +0000 (16:23 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 27 Feb 2012 16:23:39 +0000 (16:23 +0000)
SVN-Revision: 30741

package/netifd/files/usr/share/udhcpc/default.script [new file with mode: 0755]

diff --git a/package/netifd/files/usr/share/udhcpc/default.script b/package/netifd/files/usr/share/udhcpc/default.script
new file mode 100755 (executable)
index 0000000..ac765a6
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/sh
+[ -z "$1" ] && echo "Error: should be run by udhcpc" && exit 1
+
+set_classless_routes() {
+       local max=128
+       local type
+       while [ -n "$1" -a -n "$2" -a $max -gt 0 ]; do
+               [ ${1##*/} -eq 32 ] && type=host || type=net
+               echo "udhcpc: adding route for $type $1 via $2"
+               route add -$type "$1" gw "$2" dev "$interface"
+               max=$(($max-1))
+               shift 2
+       done
+}
+
+setup_interface() {
+       echo "udhcpc: ifconfig $interface $ip netmask ${subnet:-255.255.255.0} broadcast ${broadcast:-+}"
+       ifconfig $interface $ip netmask ${subnet:-255.255.255.0} broadcast ${broadcast:-+}
+
+       [ -n "$router" ] && [ "$router" != "0.0.0.0" ] && [ "$router" != "255.255.255.255" ] && {
+               echo "udhcpc: setting default routers: $router"
+
+               local valid_gw=""
+               for i in $router ; do
+                       route add default gw $i dev $interface
+                       valid_gw="${valid_gw:+$valid_gw|}$i"
+               done
+               
+               eval $(route -n | awk '
+                       /^0.0.0.0\W{9}('$valid_gw')\W/ {next}
+                       /^0.0.0.0/ {print "route del -net "$1" gw "$2";"}
+               ')
+       }
+
+       # CIDR STATIC ROUTES (rfc3442)
+       [ -n "$staticroutes" ] && set_classless_routes $staticroutes
+       [ -n "$msstaticroutes" ] && set_classless_routes $msstaticroutes
+}
+
+
+applied=
+case "$1" in
+       deconfig)
+               ifconfig "$interface" 0.0.0.0
+       ;;
+       renew)
+               setup_interface update
+       ;;
+       bound)
+               setup_interface ifup
+       ;;
+esac
+
+# user rules
+[ -f /etc/udhcpc.user ] && . /etc/udhcpc.user
+
+exit 0