Fix: resolve failure of E-W communication at ARP broadcast mode

Change-Id: I96b03a75f11a6904acd677fdf223f69e8a12b901
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 4e6054f..03700cf 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
@@ -618,17 +618,31 @@
             switch (event.type()) {
                 case OPENSTACK_NODE_COMPLETE:
                     setDefaultArpRule(osNode, true);
-                    setAllArpRules(true);
+                    setAllArpRules(osNode, true);
+                    addAllSubnetGateways();
                     break;
                 case OPENSTACK_NODE_INCOMPLETE:
                     setDefaultArpRule(osNode, false);
-                    setAllArpRules(false);
+                    setAllArpRules(osNode, false);
                     break;
                 default:
                     break;
             }
         }
 
+        private void addAllSubnetGateways() {
+            osNetworkService.networks().forEach(n -> {
+                if (n.getNetworkType() != NetworkType.FLAT) {
+                    osNetworkService.subnets()
+                            .stream()
+                            .filter(s -> s.getNetworkId().equals(n.getId()))
+                            .filter(s -> !Strings.isNullOrEmpty(s.getGateway()))
+                            .filter(s -> !gateways.contains(s.getGateway()))
+                            .forEach(OpenstackSwitchingArpHandler.this::addSubnetGateway);
+                }
+            });
+        }
+
         private void setDefaultArpRule(OpenstackNode osNode, boolean install) {
             switch (getArpMode()) {
                 case ARP_PROXY_MODE:
@@ -695,11 +709,13 @@
             );
         }
 
-        private void setAllArpRules(boolean install) {
+        private void setAllArpRules(OpenstackNode osNode, boolean install) {
             if (ARP_BROADCAST_MODE.equals(getArpMode())) {
-                instancePortService.instancePorts().forEach(p -> {
-                    setArpRequestRule(p, install);
-                    setArpReplyRule(p, install);
+                instancePortService.instancePorts().stream()
+                        .filter(p -> p.deviceId().equals(osNode.intgBridge()))
+                        .forEach(p -> {
+                            setArpRequestRule(p, install);
+                            setArpReplyRule(p, install);
                 });
             }
         }