From 3d74115769c11918576138164c526a2f3947e245 Mon Sep 17 00:00:00 2001 From: anthony Date: Wed, 23 May 2012 18:42:53 -0700 Subject: [PATCH] CS-14784, CS-15065 , after release IP, reapply other IPs in the same eth device, to prevent secondary IPs are removed when primary IP is removed --- .../systemvm/debian/config/root/ipassoc.sh | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/patches/systemvm/debian/config/root/ipassoc.sh b/patches/systemvm/debian/config/root/ipassoc.sh index 7087e7f4dae..cfaa46f71b0 100644 --- a/patches/systemvm/debian/config/root/ipassoc.sh +++ b/patches/systemvm/debian/config/root/ipassoc.sh @@ -135,12 +135,7 @@ copy_routes_from_main() { ip_addr_add() { local dev="$1" local ip="$2" - local ipNoMask=$(echo $ip | awk -F'/' '{print $1}') - local mask=$(echo $ip | awk -F'/' '{print $2}') - local subnet=`TERM=linux ipcalc $ip | grep Network | awk -F' ' '{print $2}' | awk -F'/' '{print $1}'` - local brd=`TERM=linux ipcalc $ip|grep Broadcast|awk -F' ' '{print $2}'` - sudo ip addr add dev $dev $subnet/$mask broadcast $brd > /dev/null - sudo ip addr add dev $dev $ipNoMask/32 + sudo ip addr add dev $dev $ip > /dev/null } @@ -286,18 +281,20 @@ add_an_ip () { remove_an_ip () { local pubIp=$1 logger -t cloud "$(basename $0):Removing ip $pubIp on interface $ethDev" - local ipNoMask=$(echo $1 | awk -F'/' '{print $1}') - local mask=$(echo $1 | awk -F'/' '{print $2}') - local existingIpMask=$(sudo ip addr show dev $ethDev | grep inet | awk '{print $2}' | grep -w $ipNoMask) - [ "$existingIpMask" == "" ] && return 0 remove_snat $1 - sudo ip addr del dev $ethDev $existingIpMask + local existingIpMask=$(sudo ip addr show dev $ethDev | grep "inet " | awk '{print $2}') + + sudo ip addr del dev $ethDev $pubIp + + for ipMask in $existingIpMask + do + if [ "$ipMask" == "$pubIp" ] + then + continue + fi + sudo ip addr add dev $ethDev $ipMask + done - if [ $result -gt 0 -a $result -ne 2 ] - then - remove_routing $1 - return 1 - fi remove_routing $1 return 0 }