examples: make udhcpc script handle /32 netmasks
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 5 Apr 2017 22:53:43 +0000 (00:53 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 5 Apr 2017 22:53:43 +0000 (00:53 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
examples/udhcp/sample.bound
examples/udhcp/sample.renew
examples/udhcp/simple.script

index 7c9d857e03ffe56bc21fa642127379b548c758d1..efd98cf15d7693076844f04553c480824ce4c480 100755 (executable)
@@ -18,11 +18,18 @@ then
        metric=0
        for i in $router
        do
+               if [ "$subnet" = "255.255.255.255" ]; then
+                       # special case for /32 subnets:
+                       # /32 instructs kernel to always use routing for all outgoing packets
+                       # (they can never be sent to local subnet - there is no local subnet for /32).
+                       # Used in datacenters, avoids the need for private ip-addresses between two hops.
+                       /sbin/ip route add $i dev $interface
+               fi
                /sbin/route add default gw $i dev $interface metric $((metric++))
        done
 fi
 
-# Only replace resolv.conf is we have at least one DNS server
+# Only replace resolv.conf if we have at least one DNS server
 if [ -n "$dns" ]
 then
        echo -n > $RESOLV_CONF
index 4dce8486a618cd326f6a3a5ca36bee215f8cd199..efd98cf15d7693076844f04553c480824ce4c480 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Sample udhcpc bound script
+# Sample udhcpc renew script
 
 RESOLV_CONF="/etc/udhcpc/resolv.conf"
 
@@ -18,11 +18,18 @@ then
        metric=0
        for i in $router
        do
+               if [ "$subnet" = "255.255.255.255" ]; then
+                       # special case for /32 subnets:
+                       # /32 instructs kernel to always use routing for all outgoing packets
+                       # (they can never be sent to local subnet - there is no local subnet for /32).
+                       # Used in datacenters, avoids the need for private ip-addresses between two hops.
+                       /sbin/ip route add $i dev $interface
+               fi
                /sbin/route add default gw $i dev $interface metric $((metric++))
        done
 fi
 
-# Only replace resolv.conf is we have at least one DNS server
+# Only replace resolv.conf if we have at least one DNS server
 if [ -n "$dns" ]
 then
        echo -n > $RESOLV_CONF
index 2a917eb6ce87e2b2e760f2314a3f2bcb398736b7..e4c1f2d76429eadfb129f817838194aaf12cd785 100755 (executable)
@@ -29,8 +29,14 @@ case "$1" in
                        metric=0
                        for i in $router ; do
                                echo "Adding router $i"
-                               route add default gw $i dev $interface metric $metric
-                               : $(( metric += 1 ))
+                               if [ "$subnet" = "255.255.255.255" ]; then
+       # special case for /32 subnets:
+       # /32 instructs kernel to always use routing for all outgoing packets
+       # (they can never be sent to local subnet - there is no local subnet for /32).
+       # Used in datacenters, avoids the need for private ip-addresses between two hops.
+                                       ip route add $i dev $interface
+                               fi
+                               route add default gw $i dev $interface metric $((metric++))
                        done
                fi