Improvements over the last patch:

- more networkranges recognized
- proper regex for 172.16/16
- deal with combined ipv6addr/netmask on RHEL


Tested on zeneco, zuniran, zomo & zonozu.

-- 
Casper Gielen <cgie...@uvt.nl> | LIS UNIX
PGP fingerprint = 16BD 2C9F 8156 C242 F981  63B8 2214 083C F80E 4AF7

Universiteit van Tilburg | Postbus 90153, 5000 LE
Warandelaan 2 | Telefoon 013 466 4100 | G 236 | http://www.uvt.nl


--- autodetect-ips.old	2013-04-05 16:49:16.000000000 +0200
+++ autodetect-ips	2013-04-11 14:30:12.000000000 +0200
@@ -31,6 +31,31 @@
 
 # For each interface <if> in interfaces, ip_<if> should be defined.
 
+# If an autodetected address is in a non-routable range,
+# then net_<iface>_default should expand to contain the entire range.
+expandnet4()
+{
+	case "$1" in
+		10.*)                                echo "10.0.0/8"  ;;
+		192.168.*)           		     echo "192.168.0.0/24" ;;
+                172.1[6-9].*|172.2?.*|172.3[0-1].*)  echo "172.16.0.0/12"  ;;
+		*)                                   echo "$1" ;;
+	esac
+}
+
+expandnet6()
+{
+	# Matching IPv6 with regexes is really hard.
+	# The code below assumes that the usual conventions for writing IPv6-adresses are followed.
+	case "$1" in
+		fc00:*)       echo "fc00::/7" ;;
+		fec0:*)       echo "fec0::/10"  ;;
+		::ffff:*:*)   echo "::ffff:0:0/96" ;;		
+		2001:0db8::*) echo "2001:0db8::/32" ;; 
+		*)            echo "$1" ;;
+	esac
+}
+
 # First try Red Hat's init scripts
 for f in /etc/sysconfig/network-scripts/ifcfg-*
 do
@@ -41,10 +66,12 @@
     esac
     eval "$(
         . $f
+	net4=$(expandnet4 $IPADDR/$NETMASK)
+	net6=$(expandnet6 $IPV6ADDR)  # netmask is deel van IPV6ADDR
         echo ip_${i}_default=$IPADDR
-        echo net_${i}_default=$IPADDR/$NETMASK
+        echo net_${i}_default=$net4
         echo ip6_${i}_default=${IPV6ADDR%/*}
-        echo net6_${i}_default=$IPV6ADDR
+        echo net6_${i}_default=$net6
     )"
 done
 
@@ -71,11 +98,13 @@
             esac
             case $iface,$address,$netmask in ?*,?*,?*)
                 case $type in inet)
+		    net=$(expandnet4 $address/$netmask)
                     echo ip_${iface}_default=$address
-                    echo net_${iface}_default=$address/$netmask
+                    echo net_${iface}_default=$net
                 ;; inet6)
+		    net=$(expandnet6 $address/$netmask)
                     echo ip6_${iface}_default=$address
-                    echo net6_${iface}_default=$address/$netmask
+                    echo net6_${iface}_default=$net
                 esac
                 iface=
                 type=

Reply via email to