Merge "Action redesign: convert set_tunnel_{src,dest}_ip"
authorDavid Suarez <david.suarez.fuentes@ericsson.com>
Thu, 12 Jan 2017 11:07:11 +0000 (11:07 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 12 Jan 2017 11:07:11 +0000 (11:07 +0000)
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ActionType.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelDestinationIp.java [new file with mode: 0644]
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelSourceIp.java [new file with mode: 0644]

index 6b76ac6e49904ed83e21b8c096bdfae5f6fd6884..9ab995e9d81916bc11a59dc108484140c106f2e5 100755 (executable)
@@ -35,6 +35,8 @@ import org.opendaylight.genius.mdsalutil.actions.ActionPushVlan;
 import org.opendaylight.genius.mdsalutil.actions.ActionRegLoad;
 import org.opendaylight.genius.mdsalutil.actions.ActionSetFieldTunnelId;
 import org.opendaylight.genius.mdsalutil.actions.ActionSetFieldVlanVid;
+import org.opendaylight.genius.mdsalutil.actions.ActionSetTunnelDestinationIp;
+import org.opendaylight.genius.mdsalutil.actions.ActionSetTunnelSourceIp;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
@@ -344,14 +346,10 @@ public class IfmUtil {
 
                 IfTunnel ifTunnel = interfaceInfo.getAugmentation(IfTunnel.class);
                 if(BooleanUtils.isTrue(ifTunnel.isTunnelRemoteIpFlow())) {
-                    BigInteger destIp = MDSALUtil.getBigIntIpFromIpAddress(ifTunnel.getTunnelDestination());
-                    result.add(new ActionInfo(ActionType.set_tunnel_dest_ip, new BigInteger[]{destIp},
-                            actionKeyStart++));
+                    result.add(new ActionSetTunnelDestinationIp(actionKeyStart++, ifTunnel.getTunnelDestination()));
                 }
                 if(BooleanUtils.isTrue(ifTunnel.isTunnelSourceIpFlow())) {
-                    BigInteger sourceIp = MDSALUtil.getBigIntIpFromIpAddress(ifTunnel.getTunnelSource());
-                    result.add(new ActionInfo(ActionType.set_tunnel_src_ip, new BigInteger[]{sourceIp},
-                            actionKeyStart++));
+                    result.add(new ActionSetTunnelSourceIp(actionKeyStart++, ifTunnel.getTunnelSource()));
                 }
                 result.add(new ActionOutput(actionKeyStart++, new Uri(portNo)));
                 break;
index 53cafb2db2810775245b7af0f8a427d880cdd26e..f8120e29ac50036321baa5719ea7f0343a3d7275 100644 (file)
@@ -26,6 +26,8 @@ import org.opendaylight.genius.mdsalutil.actions.ActionSetFieldMplsLabel;
 import org.opendaylight.genius.mdsalutil.actions.ActionSetFieldPbbIsid;
 import org.opendaylight.genius.mdsalutil.actions.ActionSetFieldTunnelId;
 import org.opendaylight.genius.mdsalutil.actions.ActionSetFieldVlanVid;
+import org.opendaylight.genius.mdsalutil.actions.ActionSetTunnelDestinationIp;
+import org.opendaylight.genius.mdsalutil.actions.ActionSetTunnelSourceIp;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
@@ -55,8 +57,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxArpShaCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxArpThaCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxOfInPortCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxTunIpv4DstCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxTunIpv4SrcCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfArpOpCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfArpSpaCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfArpTpaCaseBuilder;
@@ -65,7 +65,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.Dst;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegMoveNodesNodeGroupBucketsBucketActionsCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegMoveNodesNodeTableFlowApplyActionsCaseBuilder;
@@ -236,63 +235,32 @@ public enum ActionType {
                 return new ActionSetFieldTunnelId(actionInfo).buildAction(newActionKey);
             }
         }
-
     },
 
+    @Deprecated
     set_tunnel_src_ip {
         @Override
         public Action buildAction(int newActionKey, ActionInfo actionInfo) {
-            BigInteger[] actionValues = actionInfo.getBigActionValues();
-            NxRegLoadBuilder nxRegLoadBuilder = new NxRegLoadBuilder();
-            Dst dst = new DstBuilder()
-                .setDstChoice(new DstNxTunIpv4SrcCaseBuilder().setNxTunIpv4Src(Boolean.TRUE).build())
-                .setStart(0)
-                .setEnd(31)
-                .build();
-            nxRegLoadBuilder.setDst(dst);
-            nxRegLoadBuilder.setValue(actionValues[0]);
-            ActionBuilder ab = new ActionBuilder();
-
-            boolean groupBucket = (actionValues.length > 1);
-            if (groupBucket) {
-                ab.setAction(new NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder()
-                    .setNxRegLoad(nxRegLoadBuilder.build()).build());
+            if (actionInfo instanceof ActionSetTunnelSourceIp) {
+                return ((ActionSetTunnelSourceIp) actionInfo).buildAction(newActionKey);
             } else {
-                ab.setAction(new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder()
-                    .setNxRegLoad(nxRegLoadBuilder.build()).build());
+                // TODO Migrate all users to ActionSetTunnelSourceIp
+                return new ActionSetTunnelSourceIp(actionInfo).buildAction(newActionKey);
             }
-            ab.setKey(new ActionKey(actionInfo.getActionKey()));
-            return ab.build();
         }
-
     },
 
+    @Deprecated
     set_tunnel_dest_ip {
         @Override
         public Action buildAction(int newActionKey, ActionInfo actionInfo) {
-            BigInteger[] actionValues = actionInfo.getBigActionValues();
-            NxRegLoadBuilder nxRegLoadBuilder = new NxRegLoadBuilder();
-            Dst dst = new DstBuilder()
-                .setDstChoice(new DstNxTunIpv4DstCaseBuilder().setNxTunIpv4Dst(Boolean.TRUE).build())
-                .setStart(0)
-                .setEnd(31)
-                .build();
-            nxRegLoadBuilder.setDst(dst);
-            nxRegLoadBuilder.setValue(actionValues[0]);
-            ActionBuilder ab = new ActionBuilder();
-
-            boolean groupBucket = (actionValues.length > 1);
-            if (groupBucket) {
-                ab.setAction(new NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder()
-                    .setNxRegLoad(nxRegLoadBuilder.build()).build());
+            if (actionInfo instanceof ActionSetTunnelDestinationIp) {
+                return ((ActionSetTunnelDestinationIp) actionInfo).buildAction(newActionKey);
             } else {
-                ab.setAction(new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder()
-                    .setNxRegLoad(nxRegLoadBuilder.build()).build());
+                // TODO Migrate all users to ActionSetTunnelDestinationIp
+                return new ActionSetTunnelDestinationIp(actionInfo).buildAction(newActionKey);
             }
-            ab.setKey(new ActionKey(actionInfo.getActionKey()));
-            return ab.build();
         }
-
     },
 
     set_field_eth_dest {
diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelDestinationIp.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelDestinationIp.java
new file mode 100644 (file)
index 0000000..b5c82f1
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright © 2016 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,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.genius.mdsalutil.actions;
+
+import java.math.BigInteger;
+import org.opendaylight.genius.mdsalutil.ActionInfo;
+import org.opendaylight.genius.mdsalutil.ActionType;
+import org.opendaylight.genius.mdsalutil.MDSALUtil;
+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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxTunIpv4DstCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.Dst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder;
+
+/**
+ * Set tunnel destination IP action.
+ */
+public class ActionSetTunnelDestinationIp extends ActionInfo {
+    private final BigInteger destIp;
+    private final boolean groupBucket;
+
+    public ActionSetTunnelDestinationIp(BigInteger destIp) {
+        this(0, destIp);
+    }
+
+    public ActionSetTunnelDestinationIp(IpAddress destIp) {
+        this(0, destIp);
+    }
+
+    public ActionSetTunnelDestinationIp(int actionKey, BigInteger destIp) {
+        super(ActionType.set_tunnel_dest_ip, new BigInteger[] {destIp}, actionKey);
+        this.destIp = destIp;
+        this.groupBucket = false;
+    }
+
+    public ActionSetTunnelDestinationIp(int actionKey, IpAddress destIp) {
+        this(actionKey, MDSALUtil.getBigIntIpFromIpAddress(destIp));
+    }
+
+    @Deprecated
+    public ActionSetTunnelDestinationIp(ActionInfo actionInfo) {
+        super(ActionType.set_tunnel_dest_ip, actionInfo.getBigActionValues(), actionInfo.getActionKey());
+        BigInteger[] bigActionValues = actionInfo.getBigActionValues();
+        this.destIp = bigActionValues[0];
+        this.groupBucket = bigActionValues.length > 1;
+    }
+
+    @Override
+    public Action buildAction() {
+        return buildAction(getActionKey());
+    }
+
+    public Action buildAction(int newActionKey) {
+        NxRegLoadBuilder nxRegLoadBuilder = new NxRegLoadBuilder();
+        Dst dst = new DstBuilder()
+            .setDstChoice(new DstNxTunIpv4DstCaseBuilder().setNxTunIpv4Dst(Boolean.TRUE).build())
+            .setStart(0)
+            .setEnd(31)
+            .build();
+        nxRegLoadBuilder.setDst(dst);
+        nxRegLoadBuilder.setValue(destIp);
+        ActionBuilder ab = new ActionBuilder();
+
+        if (groupBucket) {
+            ab.setAction(new NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder()
+                .setNxRegLoad(nxRegLoadBuilder.build()).build());
+        } else {
+            ab.setAction(new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder()
+                .setNxRegLoad(nxRegLoadBuilder.build()).build());
+        }
+        ab.setKey(new ActionKey(newActionKey));
+        return ab.build();
+    }
+}
diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelSourceIp.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelSourceIp.java
new file mode 100644 (file)
index 0000000..860dd7c
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright © 2016 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,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.genius.mdsalutil.actions;
+
+import java.math.BigInteger;
+import org.opendaylight.genius.mdsalutil.ActionInfo;
+import org.opendaylight.genius.mdsalutil.ActionType;
+import org.opendaylight.genius.mdsalutil.MDSALUtil;
+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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxTunIpv4SrcCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.Dst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder;
+
+/**
+ * Set tunnel source IP action.
+ */
+public class ActionSetTunnelSourceIp extends ActionInfo {
+    private final BigInteger sourceIp;
+    private final boolean groupBucket;
+
+    public ActionSetTunnelSourceIp(BigInteger sourceIp) {
+        this(0, sourceIp);
+    }
+
+    public ActionSetTunnelSourceIp(IpAddress sourceIp) {
+        this(0, sourceIp);
+    }
+
+    public ActionSetTunnelSourceIp(int actionKey, BigInteger sourceIp) {
+        super(ActionType.set_tunnel_src_ip, new BigInteger[] {sourceIp}, actionKey);
+        this.sourceIp = sourceIp;
+        this.groupBucket = false;
+    }
+
+    public ActionSetTunnelSourceIp(int actionKey, IpAddress sourceIp) {
+        this(actionKey, MDSALUtil.getBigIntIpFromIpAddress(sourceIp));
+    }
+
+    @Deprecated
+    public ActionSetTunnelSourceIp(ActionInfo actionInfo) {
+        super(ActionType.set_tunnel_src_ip, actionInfo.getBigActionValues(), actionInfo.getActionKey());
+        BigInteger[] bigActionValues = actionInfo.getBigActionValues();
+        this.sourceIp = bigActionValues[0];
+        this.groupBucket = bigActionValues.length > 1;
+    }
+
+    @Override
+    public Action buildAction() {
+        return buildAction(getActionKey());
+    }
+
+    public Action buildAction(int newActionKey) {
+        NxRegLoadBuilder nxRegLoadBuilder = new NxRegLoadBuilder();
+        Dst dst = new DstBuilder()
+            .setDstChoice(new DstNxTunIpv4SrcCaseBuilder().setNxTunIpv4Src(Boolean.TRUE).build())
+            .setStart(0)
+            .setEnd(31)
+            .build();
+        nxRegLoadBuilder.setDst(dst);
+        nxRegLoadBuilder.setValue(sourceIp);
+        ActionBuilder ab = new ActionBuilder();
+
+        if (groupBucket) {
+            ab.setAction(new NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder()
+                .setNxRegLoad(nxRegLoadBuilder.build()).build());
+        } else {
+            ab.setAction(new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder()
+                .setNxRegLoad(nxRegLoadBuilder.build()).build());
+        }
+        ab.setKey(new ActionKey(newActionKey));
+        return ab.build();
+    }
+}