--- a/vz/dists/scripts/debian-add_ip.sh Sat Sep 25 14:20:09 2010 -0400 +++ b/vz/dists/scripts/debian-add_ip.sh Mon Sep 27 09:20:05 2010 -0400 @@ -77,13 +77,14 @@ function create_config() { local ip=$1 - local ifnum=$2 + local netmask=$2 + local ifnum=$3 if [ "${ip#*:}" = "${ip}" ]; then echo -e "auto ${VENET_DEV}:${ifnum} iface ${VENET_DEV}:${ifnum} inet static address ${ip} - netmask 255.255.255.255 + netmask ${netmask} broadcast 0.0.0.0 " >> ${CFGFILE}.bak @@ -111,9 +112,31 @@ done } +function get_netmask() +{ + NETMASK="" + + local i + local full_octets=$(($1/8)) + local partial_octet=$(($1%8)) + + for ((i=0;i<4;i+=1)); do + if [ $i -lt $full_octets ]; then + NETMASK+=255 + elif [ $i -eq $full_octets ]; then + NETMASK+=$((256 - 2**(8-$partial_octet))) + else + NETMASK+=0 + fi + test $i -lt 3 && NETMASK+=. + done +} + function add_ip() { + local ip_cidr local ip + local cidr local found local add local iface @@ -131,13 +154,20 @@ mv ${CFGFILE}.bak ${CFGFILE} fi cp -f ${CFGFILE} ${CFGFILE}.bak - for ip in ${IP_ADDR}; do + for ip_cidr in ${IP_ADDR}; do + ip=${ip_cidr%/*} + if [ "${ip}" = "${ip_cidr}" ]; then + cidr=32 + else + cidr=${ip_cidr##*/} + fi found= if grep -e "\\<${ip}\\>" >/dev/null 2>&1 ${CFGFILE}.bak; then continue fi get_free_aliasid - create_config ${ip} ${IFNUM} + get_netmask ${cidr} + create_config ${ip} ${NETMASK} ${IFNUM} done mv -f ${CFGFILE}.bak ${CFGFILE} if [ "x${VE_STATE}" = "xrunning" ]; then