Fixes ARP-related flow rules in VLAN case.

Change-Id: I1103ab8984789e62136f0e4c079f6532875ce660
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 a2d0013..06265bd 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
@@ -22,6 +22,7 @@
 import org.onlab.packet.Ip4Address;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 import org.onlab.util.Tools;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.cfg.ConfigProperty;
@@ -315,26 +316,32 @@
                 return;
             }
 
-            TrafficSelector selector = DefaultTrafficSelector.builder()
-                    .matchEthType(EthType.EtherType.ARP.ethType().toShort())
-                    .matchArpOp(ARP.OP_REQUEST)
-                    .matchArpTpa(Ip4Address.valueOf(gateway))
-                    .build();
+            TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
+            TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
 
-            TrafficTreatment treatment = DefaultTrafficTreatment.builder()
-                    .setArpOp(ARP.OP_REPLY)
+            NetworkType type = NetworkType.valueOf(osNetworkService.networkType(osSubnet.getNetworkId()));
+
+            if (type.equals(NetworkType.VLAN)) {
+                sBuilder.matchVlanId(VlanId.vlanId(osNetworkService.segmentId(osSubnet.getNetworkId())));
+                tBuilder.popVlan();
+            }
+
+            sBuilder.matchEthType(EthType.EtherType.ARP.ethType().toShort())
+                    .matchArpOp(ARP.OP_REQUEST)
+                    .matchArpTpa(Ip4Address.valueOf(gateway));
+
+            tBuilder.setArpOp(ARP.OP_REPLY)
                     .setArpSha(MacAddress.valueOf(gatewayMac))
                     .setArpSpa(Ip4Address.valueOf(gateway))
-                    .setOutput(PortNumber.IN_PORT)
-                    .build();
+                    .setOutput(PortNumber.IN_PORT);
 
             if (osNode == null) {
                 osNodeService.completeNodes(COMPUTE).forEach(n ->
                         osFlowRuleService.setRule(
                                 appId,
                                 n.intgBridge(),
-                                selector,
-                                treatment,
+                                sBuilder.build(),
+                                tBuilder.build(),
                                 PRIORITY_ARP_GATEWAY_RULE,
                                 ARP_TABLE,
                                 install
@@ -344,8 +351,8 @@
                 osFlowRuleService.setRule(
                         appId,
                         osNode.intgBridge(),
-                        selector,
-                        treatment,
+                        sBuilder.build(),
+                        tBuilder.build(),
                         PRIORITY_ARP_GATEWAY_RULE,
                         ARP_TABLE,
                         install