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=