|
|
@@ -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
|