From fe9a8c5aebbc32f4ae1000be52fb787fed691d50 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 2 Nov 2010 17:48:45 -0700 Subject: [PATCH] bug 6909: get the logic of removing ips from the second vif right status 6909: resolved fixed --- scripts/network/domr/ipassoc.sh | 31 ++++++++++++++++--- .../com/cloud/network/NetworkManagerImpl.java | 8 ++--- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/scripts/network/domr/ipassoc.sh b/scripts/network/domr/ipassoc.sh index 0d7551f758e..7c594a2d654 100755 --- a/scripts/network/domr/ipassoc.sh +++ b/scripts/network/domr/ipassoc.sh @@ -106,11 +106,32 @@ remove_an_ip () { local pubIp=$2 local ipNoMask=$(echo $2 | awk -F'/' '{print $1}') local mask=$(echo $2 | awk -F'/' '{print $2}') - [ "$mask" == "" ] && mask="32" - ssh -p 3922 -o StrictHostKeyChecking=no -i $cert root@$dRIp "\ - ip addr del dev $correctVif "$ipNoMask/$mask" - " - if [ $? -gt 0 -a $? -ne 2 ] + local existingIpMask=$(ssh -p 3922 -o StrictHostKeyChecking=no -i $cert root@$dRIp " + ip addr show dev $correctVif | grep inet | awk '{print \$2}' | grep -w $ipNoMask + ") + [ "$existingIpMask" == "" ] && return 0 + local existingMask=$(echo $existingIpMask | awk -F'/' '{print $2}') + if [ "$existingMask" == "32" ] + then + ssh -p 3922 -o StrictHostKeyChecking=no -i $cert root@$dRIp " + ip addr del dev $correctVif $existingIpMask + " + result=$? + fi + if [ "$existingMask" != "32" ] + then + ssh -p 3922 -o StrictHostKeyChecking=no -i $cert root@$dRIp " + replaceIpMask=\`ip addr show dev $correctVif | grep inet | grep -v $existingIpMask | awk '{print \$2}' | sort -t/ -k2 -n|tail -1\` + ip addr del dev $correctVif $existingIpMask; + if [ -n \"\$replaceIpMask\" ]; then + ip addr del dev $correctVif \$replaceIpMask; + replaceIp=\`echo \$replaceIpMask | awk -F/ '{print \$1}'\`; + ip addr add dev $correctVif \$replaceIp/$existingMask; + fi + " + result=$? + fi + if [ $result -gt 0 -a $result -ne 2 ] then return 1 fi diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index b30483e07a6..df3b9c467b8 100644 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1290,7 +1290,7 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager final Command [] cmds = new Command[ipAddrList.size()]; int i=0; boolean sourceNat = false; - Map> vlanIpMap = new HashMap>(); + Map> vlanIpMap = new HashMap>(); for (final String ipAddress: ipAddrList) { IPAddressVO ip = _ipAddressDao.findById(ipAddress); @@ -1300,9 +1300,9 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager ipList = new ArrayList(); } ipList.add(ip); - vlanIpMap.put(vlan, ipList); + vlanIpMap.put(vlan.getId(), ipList); } - for (Map.Entry> vlanAndIp: vlanIpMap.entrySet()) { + for (Map.Entry> vlanAndIp: vlanIpMap.entrySet()) { boolean firstIP = true; ArrayList ipList = vlanAndIp.getValue(); Collections.sort(ipList, new Comparator() { @@ -1313,7 +1313,7 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager for (final IPAddressVO ip: ipList) { sourceNat = ip.getSourceNat(); - VlanVO vlan = vlanAndIp.getKey(); + VlanVO vlan = _vlanDao.findById(vlanAndIp.getKey()); String vlanId = vlan.getVlanId(); String vlanGateway = vlan.getVlanGateway(); String vlanNetmask = vlan.getVlanNetmask();