Fix: differentiate gateway ARP rule and floating ARP rule

Change-Id: Ic4b2173f2e7b34abf090eae7333b70d9096f8352
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
index b49ec74..084e969 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
@@ -477,6 +477,7 @@
     private void setArpRule(NetFloatingIP fip, MacAddress targetMac,
                             OpenstackNode gateway, boolean install) {
         TrafficSelector selector = DefaultTrafficSelector.builder()
+                .matchInPort(gateway.uplinkPortNum())
                 .matchEthType(EthType.EtherType.ARP.ethType().toShort())
                 .matchArpOp(ARP.OP_REQUEST)
                 .matchArpTpa(Ip4Address.valueOf(fip.getFloatingIpAddress()))
@@ -584,7 +585,8 @@
             // do not allow to proceed without leadership
             NodeId leader = leadershipService.getLeader(appId.name());
             return Objects.equals(localNodeId, leader) &&
-                    DEVICE_OWNER_ROUTER_GW.equals(osPort.getDeviceOwner());
+                    DEVICE_OWNER_ROUTER_GW.equals(osPort.getDeviceOwner()) &&
+                        ARP_BROADCAST_MODE.equals(getArpMode());
         }
 
         @Override
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
index beaa1f1..cbe22e0 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
@@ -894,8 +894,7 @@
                     if (fip != null) {
                         instancePortService.updateInstancePort(
                                             instPort.updateState(REMOVE_PENDING));
-                        eventExecutor.execute(() ->
-                                updateFipStore(instancePortService.instancePort(event.port().getId())));
+                        eventExecutor.execute(() -> updateFipStore(event.port().getId()));
                     } else {
                         // FIXME: we have dependency with security group, need to
                         // find a better way to remove this dependency
@@ -909,9 +908,9 @@
             }
         }
 
-        private void updateFipStore(InstancePort port) {
+        private void updateFipStore(String portId) {
 
-            if (port == null) {
+            if (portId == null) {
                 return;
             }
 
@@ -923,7 +922,7 @@
                 if (Strings.isNullOrEmpty(fip.getFloatingIpAddress())) {
                     continue;
                 }
-                if (fip.getFixedIpAddress().equals(port.ipAddress().toString())) {
+                if (fip.getPortId().equals(portId)) {
                     NeutronFloatingIP neutronFip = (NeutronFloatingIP) fip;
                     // invalidate bound fixed IP and port
                     neutronFip.setFixedIpAddress(null);