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/util/RulePopulatorUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/RulePopulatorUtil.java
index 77a66ab..bc7ecba 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/RulePopulatorUtil.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/RulePopulatorUtil.java
@@ -36,6 +36,8 @@
import java.util.List;
import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_LOAD;
+import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_MOV_ARP_SHA_TO_THA;
+import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_MOV_ARP_SPA_TO_TPA;
import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_MOV_ETH_SRC_TO_DST;
import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_MOV_IP_SRC_TO_DST;
import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_POP_NSH;
@@ -140,8 +142,7 @@
DeviceId deviceId,
Ip4Address remoteIp) {
Device device = deviceService.getDevice(deviceId);
- if (device != null && !device.is(ExtensionTreatmentResolver.class)) {
- log.error("The extension treatment is not supported");
+ if (!checkTreatmentResolver(device)) {
return null;
}
@@ -202,8 +203,7 @@
public static ExtensionTreatment buildLoadExtension(Device device,
long field,
long value) {
- if (device == null || !device.is(ExtensionTreatmentResolver.class)) {
- log.warn("Nicira extension treatment is not supported");
+ if (!checkTreatmentResolver(device)) {
return null;
}
@@ -232,8 +232,7 @@
* @return push extension treatment
*/
public static ExtensionTreatment buildPushExtension(Device device) {
- if (device == null || !device.is(ExtensionTreatmentResolver.class)) {
- log.warn("Nicira extension treatment is not supported");
+ if (!checkTreatmentResolver(device)) {
return null;
}
@@ -248,8 +247,7 @@
* @return pop extension treatment
*/
public static ExtensionTreatment buildPopExtension(Device device) {
- if (device == null || !device.is(ExtensionTreatmentResolver.class)) {
- log.warn("Nicira extension treatment is not supported");
+ if (!checkTreatmentResolver(device)) {
return null;
}
@@ -264,8 +262,7 @@
* @return move extension treatment
*/
public static ExtensionTreatment buildMoveEthSrcToDstExtension(Device device) {
- if (device == null || !device.is(ExtensionTreatmentResolver.class)) {
- log.warn("Nicira extension treatment is not supported");
+ if (!checkTreatmentResolver(device)) {
return null;
}
@@ -280,8 +277,7 @@
* @return move extension treatment
*/
public static ExtensionTreatment buildMoveIpSrcToDstExtension(Device device) {
- if (device == null || !device.is(ExtensionTreatmentResolver.class)) {
- log.warn("Nicira extension treatment is not supported");
+ if (!checkTreatmentResolver(device)) {
return null;
}
@@ -290,6 +286,36 @@
}
/**
+ * Returns the nicira move ARP SHA to THA extension treatment.
+ *
+ * @param device device instance
+ * @return move extension treatment
+ */
+ public static ExtensionTreatment buildMoveArpShaToThaExtension(Device device) {
+ if (!checkTreatmentResolver(device)) {
+ return null;
+ }
+
+ ExtensionTreatmentResolver resolver = device.as(ExtensionTreatmentResolver.class);
+ return resolver.getExtensionInstruction(NICIRA_MOV_ARP_SHA_TO_THA.type());
+ }
+
+ /**
+ * Returns the nicira move ARP SPA to TPA extension treatment.
+ *
+ * @param device device instance
+ * @return move extension treatment
+ */
+ public static ExtensionTreatment buildMoveArpSpaToTpaExtension(Device device) {
+ if (!checkTreatmentResolver(device)) {
+ return null;
+ }
+
+ ExtensionTreatmentResolver resolver = device.as(ExtensionTreatmentResolver.class);
+ return resolver.getExtensionInstruction(NICIRA_MOV_ARP_SPA_TO_TPA.type());
+ }
+
+ /**
* Computes ConnTack State flag values.
*
* @param isTracking true for +trk, false for -trk
@@ -349,6 +375,15 @@
return ctMaskFlag;
}
+ private static boolean checkTreatmentResolver(Device device) {
+ if (device == null || !device.is(ExtensionTreatmentResolver.class)) {
+ log.warn("Nicira extension treatment is not supported");
+ return false;
+ }
+
+ return true;
+ }
+
/**
* Builder class for OVS Connection Tracking feature actions.
*/