Fix: specify the correct ARP THA and TPA for ARP reply packet

Change-Id: I3a2a100b50d1ea5875984fc31339df9ad75b53a1
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 0e09b03..6b96dfa 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
@@ -31,6 +31,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.mastership.MastershipService;
+import org.onosproject.net.Device;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.flow.DefaultTrafficSelector;
@@ -98,6 +99,9 @@
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.swapStaleLocation;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.tunnelPortNumByNetId;
 import static org.onosproject.openstacknetworking.util.RulePopulatorUtil.buildExtension;
+import static org.onosproject.openstacknetworking.util.RulePopulatorUtil.buildMoveArpShaToThaExtension;
+import static org.onosproject.openstacknetworking.util.RulePopulatorUtil.buildMoveArpSpaToTpaExtension;
+import static org.onosproject.openstacknetworking.util.RulePopulatorUtil.buildMoveEthSrcToDstExtension;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE;
 
 /**
@@ -338,24 +342,37 @@
                     .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);
-
             if (osNode == null) {
-                osNodeService.completeNodes(COMPUTE).forEach(n ->
-                        osFlowRuleService.setRule(
-                                appId,
-                                n.intgBridge(),
-                                sBuilder.build(),
-                                tBuilder.build(),
-                                PRIORITY_ARP_GATEWAY_RULE,
-                                ARP_TABLE,
-                                install
-                        )
-                );
+                osNodeService.completeNodes(COMPUTE).forEach(n -> {
+                    Device device = deviceService.getDevice(n.intgBridge());
+                    tBuilder.extension(buildMoveEthSrcToDstExtension(device), device.id())
+                            .extension(buildMoveArpShaToThaExtension(device), device.id())
+                            .extension(buildMoveArpSpaToTpaExtension(device), device.id())
+                            .setArpOp(ARP.OP_REPLY)
+                            .setArpSha(MacAddress.valueOf(gatewayMac))
+                            .setArpSpa(Ip4Address.valueOf(gateway))
+                            .setOutput(PortNumber.IN_PORT);
+
+                    osFlowRuleService.setRule(
+                            appId,
+                            n.intgBridge(),
+                            sBuilder.build(),
+                            tBuilder.build(),
+                            PRIORITY_ARP_GATEWAY_RULE,
+                            ARP_TABLE,
+                            install
+                    );
+                });
             } else {
+                Device device = deviceService.getDevice(osNode.intgBridge());
+                tBuilder.extension(buildMoveEthSrcToDstExtension(device), device.id())
+                        .extension(buildMoveArpShaToThaExtension(device), device.id())
+                        .extension(buildMoveArpSpaToTpaExtension(device), device.id())
+                        .setArpOp(ARP.OP_REPLY)
+                        .setArpSha(MacAddress.valueOf(gatewayMac))
+                        .setArpSpa(Ip4Address.valueOf(gateway))
+                        .setOutput(PortNumber.IN_PORT);
+
                 osFlowRuleService.setRule(
                         appId,
                         osNode.intgBridge(),
@@ -366,7 +383,6 @@
                         install
                 );
             }
-
         }
     }