OpenWrt – Rev 1

Subversion Repositories:
Rev:
#!/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