Fix ActionNxConntrack.NxNat problems with xtendbeans (with a test)
[genius.git] / mdsalutil / mdsalutil-api / src / main / java / org / opendaylight / genius / mdsalutil / actions / ActionNxConntrack.java
index 655fc97cbf0d2616b1573afe628d2449db733dad..9f57b5c3ed34a040cc6e7b49144e0acfa7397fb5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2016 Red Hat, Inc. and others.
+ * Copyright © 2016, 2017 Red Hat, Inc. and others.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
@@ -11,7 +11,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
-
 import org.opendaylight.genius.mdsalutil.ActionInfo;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
@@ -21,14 +20,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.NxConntrackBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.nx.conntrack.CtActions;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.nx.conntrack.CtActionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionCtMarkCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionNatCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.ct.mark._case.NxActionCtMarkBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNatBuilder;
 
 /**
  * NX conntrack action.
  */
 public class ActionNxConntrack extends ActionInfo {
-    private static final long serialVersionUID = 1L;
 
     private final int flags;
     private final long zoneSrc;
@@ -151,6 +151,7 @@ public class ActionNxConntrack extends ActionInfo {
     }
 
     public static class NxNat implements NxCtAction {
+        private final int actionKey;
         private final int flags;
         private final int rangePresent;
         private final IpAddress ipAddressMin;
@@ -158,16 +159,21 @@ public class ActionNxConntrack extends ActionInfo {
         private final int portMin;
         private final int portMax;
 
-        public NxNat(int actionKey, int flags, int natType, IpAddress ipAddressMin,
+        public NxNat(int actionKey, int flags, int rangePresent, IpAddress ipAddressMin,
                 IpAddress ipAddressMax,int portMin, int portMax) {
+            this.actionKey = actionKey;
             this.flags = flags;
-            this.rangePresent = natType;
+            this.rangePresent = rangePresent;
             this.ipAddressMin = ipAddressMin;
             this.ipAddressMax = ipAddressMax;
             this.portMin = portMin;
             this.portMax = portMax;
         }
 
+        public int getActionKey() {
+            return actionKey;
+        }
+
         public int getFlags() {
             return flags;
         }
@@ -255,4 +261,47 @@ public class ActionNxConntrack extends ActionInfo {
                     + ", ipAddressMax=" + ipAddressMax + ", portMin=" + portMin + ", portMax=" + portMax + "]";
         }
     }
+
+    public static class NxCtMark implements NxCtAction {
+        private final long ctMark;
+
+        public NxCtMark(long ctMark) {
+            this.ctMark = ctMark;
+        }
+
+        public long getCtMark() {
+            return ctMark;
+        }
+
+        @Override
+        public CtActions buildCtActions() {
+            NxActionCtMarkBuilder nxActionCtMarkBuilder = new NxActionCtMarkBuilder()
+                    .setCtMark(ctMark);
+
+            CtActionsBuilder ctActionsBuilder = new CtActionsBuilder();
+            NxActionCtMarkCaseBuilder caseBuilder = new NxActionCtMarkCaseBuilder();
+            caseBuilder.setNxActionCtMark(nxActionCtMarkBuilder.build());
+            ctActionsBuilder.setOfpactActions(caseBuilder.build());
+            return ctActionsBuilder.build();
+        }
+
+        @Override
+        public boolean equals(Object other) {
+            if (this == other) {
+                return true;
+            }
+            if (other == null || getClass() != other.getClass()) {
+                return false;
+            }
+
+            NxCtMark that = (NxCtMark) other;
+
+            return ctMark == that.ctMark;
+        }
+
+        @Override
+        public int hashCode() {
+            return 31 * (int) (ctMark ^ ctMark >>> 32);
+        }
+    }
 }