On 20/01/16 02:10 AM, Bastian Bittorf wrote:
* open...@daniel.thecshore.com <open...@daniel.thecshore.com> [20.01.2016 
07:21]:
@@ -5,30 +5,34 @@ set_classless_routes() {
        local max=128
        local type

thanks for that, i have it also on my todo-list.
please remove also the 'local type' here.

Missed that.


        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:-+}
+       local prefix="$(
+               eval "$(ipcalc.sh 0.0.0.0 ${subnet:-255.255.255.0})"
+               echo -n $PREFIX

dont use '-n'

Why not?  It prevents echo from emitting an unwanted newline.


+       )"
+               
+       echo "udhcpc: ip address add $ip/${prefix:-24} ${broadcast:-+} dev 
$interface"
+       ip address add $ip/${prefix:-24} ${broadcast:-+} dev $interface"

please dont double-fallback. It's ok to have it once default to '255.255.255.0',
so just use $prefix

The second fallback is in case the interpolation fails.


maybe we can even have a function in /lib/functions.sh for that:

!#/bin/sh
mask2cidr()
{
        local x=${1##*255.}
        local allones=$(( (${#1} - ${#x}) * 2 ))
        local tbl='0^^^128^192^224^240^248^252^254^'

        x=${tbl%%${x%%.*}*}
        export CIDR=$(( allones + (${#x}/4) ))
}

mask2cidr 255.255.255.224
echo $CIDR



        [ -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
+                       ip route add default via $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";"}
+               eval $(ip route | awk '
+                       /^default\Wvia\W('$valid_gw')/ {next}
+                       /^default/ {print "ip route del "$1" via "$3";"}

the code leaves the default-gateway if already set and removes all other
default routes. i dont like the awk-approach, maybe something like:

I wasn't planning on reworking the udhcpc script beyond making it work with ip vs ifconfig/route. You're talking about changing more unrelated things, which really should go in a separate patch.


root@box:~ ip route list exact '0.0.0.0/0'
default via 217.0.116.253 dev pppoe-wan  proto static
default via 10.63.21.98 dev eth0.1  metric 7

#!/bin/sh

replace_default_gw()
{
        ip route list exact '0.0.0.0/0' | while read LINE; do
                set -- $LINE
                [ "$3" = "$valid_gw" ] || ip route del default via $3
        done
}

the rest looks good! there are still a lot of other users
for route/ifconfig, but thats a good start!


Actually according to grep, only openvpn after this in base (there are < 10 others in packages feed as well, and I am planning on creating a minimalist busybox package (calling the binary e.g. net-tools) to supply ifconfig/route for those packages that aren't converted yet, or for third party use of ifconfig/route (in the packages feeds; doesn't belong in base).

Regards,

Daniel
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to