Fix: allow to specify duplicated gateways for different subnets

Change-Id: I846b045c346ca328744803c2e72a5a549a95f860
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
index f64adc0..2c18f03 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
@@ -277,6 +277,21 @@
     private void setFakeGatewayArpRule(Subnet osSubnet, boolean install, OpenstackNode osNode) {
 
         if (ARP_BROADCAST_MODE.equals(getArpMode())) {
+
+            // do not remove fake gateway ARP rules, if there is another gateway
+            // which has the same subnet that to be removed
+            // this only occurs if we have duplicated subnets associated with
+            // different networks
+            if (!install) {
+                long numOfDupGws = osNetworkService.subnets().stream()
+                        .filter(s -> !s.getId().equals(osSubnet.getId()))
+                        .filter(s -> s.getGateway().equals(osSubnet.getGateway()))
+                        .count();
+                if (numOfDupGws > 0) {
+                    return;
+                }
+            }
+
             String gateway = osSubnet.getGateway();
 
             TrafficSelector selector = DefaultTrafficSelector.builder()