From d9d2fa6c4cc1629801bc7c3790ffb28226fc11e9 Mon Sep 17 00:00:00 2001 From: Stephen Kitt Date: Thu, 8 Dec 2016 20:36:32 +0100 Subject: [PATCH] Action redesign: convert set_tunnel_{src,dest}_ip Change-Id: I286d333ef38fb3b59b2a41af9e52c755c96776b8 Signed-off-by: Stephen Kitt --- .../genius/interfacemanager/IfmUtil.java | 10 +-- .../genius/mdsalutil/ActionType.java | 56 +++---------- .../actions/ActionSetTunnelDestinationIp.java | 84 +++++++++++++++++++ .../actions/ActionSetTunnelSourceIp.java | 84 +++++++++++++++++++ 4 files changed, 184 insertions(+), 50 deletions(-) create mode 100644 mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelDestinationIp.java create mode 100644 mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelSourceIp.java diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java index 6b76ac6e4..9ab995e9d 100755 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java @@ -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; diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ActionType.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ActionType.java index 53cafb2db..f8120e29a 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ActionType.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ActionType.java @@ -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 index 000000000..b5c82f1a7 --- /dev/null +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelDestinationIp.java @@ -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 index 000000000..860dd7c83 --- /dev/null +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionSetTunnelSourceIp.java @@ -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(); + } +} -- 2.36.6