From 65346202083e0ea8798ae2efc5b51e8a4c2811c8 Mon Sep 17 00:00:00 2001 From: keshav Date: Thu, 27 Oct 2011 15:09:28 -0700 Subject: [PATCH] When deleting proxy ARP entries, first check that no static/source/destination NAT rules use them --- .../network/resource/JuniperSrxResource.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/core/src/com/cloud/network/resource/JuniperSrxResource.java b/core/src/com/cloud/network/resource/JuniperSrxResource.java index 66ddddf602a..5bf1d0da92b 100644 --- a/core/src/com/cloud/network/resource/JuniperSrxResource.java +++ b/core/src/com/cloud/network/resource/JuniperSrxResource.java @@ -1546,17 +1546,16 @@ public class JuniperSrxResource implements ServerResource { return sendRequestAndCheckResponse(command, xml, "name", publicIp + "/32"); case CHECK_IF_IN_USE: - // Check if any static or destination NAT rules use this proxy ARP entry - List staticAndDestNatRules = getAllStaticAndDestNatRules(); - - for (String[] rule : staticAndDestNatRules) { - String rulePublicIp = rule[0]; - if (publicIp.equals(rulePublicIp)) { - return true; - } - } - - return false; + // Check if any NAT rules are using this proxy ARP entry + String poolName = genSourceNatPoolName(publicIp); + + String allStaticNatRules = sendRequest(SrxXml.STATIC_NAT_RULE_GETALL.getXml()); + String allDestNatRules = sendRequest(replaceXmlValue(SrxXml.DEST_NAT_RULE_GETALL.getXml(), "rule-set", _publicZone)); + String allSrcNatRules = sendRequest(SrxXml.SRC_NAT_RULE_GETALL.getXml()); + + return (allStaticNatRules.contains(publicIp) || + allDestNatRules.contains(publicIp) || + allSrcNatRules.contains(poolName)); case ADD: if (manageProxyArp(SrxCommand.CHECK_IF_EXISTS, publicVlanTag, publicIp)) {