and utils.
Change-Id: Ia241fe5a728cf8f55449628a36a5bd2b160c7f61
Signed-off-by: Srini Seetharaman <srini.seetharaman@gmail.com>
import org.opendaylight.ovs.nx.ofjava.codec.action.ResubmitCodec;
import org.opendaylight.ovs.nx.ofjava.codec.action.SetNsiCodec;
import org.opendaylight.ovs.nx.ofjava.codec.action.SetNspCodec;
+import org.opendaylight.ovs.nx.ofjava.codec.action.MultipathCodec;
import org.opendaylight.ovs.nx.ofjava.codec.match.NiciraMatchCodecs;
import org.opendaylight.ovs.nx.ofjava.codec.match.NspCodec;
import org.opendaylight.ovs.nx.ofjava.codec.match.NsiCodec;
registrator.registerActionDeserializer(SetNsiCodec.DESERIALIZER_KEY, NiciraActionCodecs.SET_NSI_CODEC);
registrator.registerActionSerializer(SetNsiCodec.SERIALIZER_KEY, NiciraActionCodecs.SET_NSI_CODEC);
+ registrator.registerActionDeserializer(MultipathCodec.DESERIALIZER_KEY, NiciraActionCodecs.MULTIPATH_CODEC);
+ registrator.registerActionSerializer(MultipathCodec.SERIALIZER_KEY, NiciraActionCodecs.MULTIPATH_CODEC);
+
registrator.registerMatchEntrySerializer(NspCodec.SERIALIZER_KEY, NiciraMatchCodecs.NSP_CODEC);
registrator.registerMatchEntryDeserializer(NspCodec.DESERIALIZER_KEY, NiciraMatchCodecs.NSP_CODEC);
registrator.unregisterActionSerializer(SetNsiCodec.SERIALIZER_KEY);
registrator.unregisterActionDeserializer(SetNspCodec.DESERIALIZER_KEY);
registrator.unregisterActionSerializer(SetNspCodec.SERIALIZER_KEY);
+ registrator.unregisterActionDeserializer(MultipathCodec.DESERIALIZER_KEY);
+ registrator.unregisterActionSerializer(MultipathCodec.SERIALIZER_KEY);
registrator.unregisterMatchEntrySerializer(NspCodec.SERIALIZER_KEY);
registrator.unregisterMatchEntryDeserializer(NspCodec.DESERIALIZER_KEY);
--- /dev/null
+/*
+ * Copyright (C) 2014 SDN Hub, LLC.
+ *
+ * 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
+ *
+ * Authors : Srini Seetharaman
+ */
+
+package org.opendaylight.ovs.nx.ofjava.codec.action;
+
+import io.netty.buffer.ByteBuf;
+
+import org.opendaylight.openflowjava.nx.api.NiciraActionDeserializerKey;
+import org.opendaylight.openflowjava.nx.api.NiciraActionSerializerKey;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder;
+import org.opendaylight.openflowjava.nx.codec.action.AbstractActionCodec;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.NxmNxMultipath;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjNxMpAlgorithm;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjNxHashFields;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjAugNxAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjAugNxActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.multipath.grouping.ActionMultipath;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.multipath.grouping.ActionMultipathBuilder;
+
+/**
+ * Codec for the NX_MULTIPATH
+ */
+public class MultipathCodec extends AbstractActionCodec {
+ public static final int LENGTH = 32;
+ public static final byte NXAST_MULTIPATH_SUBTYPE = 10;
+ public static final NiciraActionSerializerKey SERIALIZER_KEY =
+ new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, NxmNxMultipath.class);
+ public static final NiciraActionDeserializerKey DESERIALIZER_KEY =
+ new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, NXAST_MULTIPATH_SUBTYPE);
+
+ @Override
+ public void serialize(Action input, ByteBuf outBuffer) {
+ ActionMultipath action = input.getAugmentation(OfjAugNxAction.class).getActionMultipath();
+ serializeHeader(LENGTH, NXAST_MULTIPATH_SUBTYPE, outBuffer);
+
+ outBuffer.writeShort(action.getFields().getIntValue());
+ outBuffer.writeShort(action.getBasis().shortValue());
+ outBuffer.writeZero(2);
+
+ outBuffer.writeShort(action.getAlgorithm().getIntValue());
+ outBuffer.writeShort(action.getMaxLink().shortValue());
+ outBuffer.writeInt(action.getArg().intValue());
+ outBuffer.writeZero(2);
+
+ outBuffer.writeShort(action.getOfsNbits());
+ outBuffer.writeInt(action.getDst().intValue());
+ }
+
+ @Override
+ public Action deserialize(ByteBuf message) {
+ ActionBuilder actionBuilder = deserializeHeader(message);
+ ActionMultipathBuilder builder = new ActionMultipathBuilder();
+ builder.setFields(OfjNxHashFields.forValue(message.readUnsignedShort()));
+ builder.setBasis(message.readUnsignedShort());
+ message.skipBytes(2); //two bytes
+
+ builder.setAlgorithm(OfjNxMpAlgorithm.forValue(message.readUnsignedShort()));
+ builder.setMaxLink(message.readUnsignedShort());
+ builder.setArg(message.readUnsignedInt());
+ message.skipBytes(2); //two bytes
+
+ builder.setOfsNbits(message.readUnsignedShort());
+ builder.setDst(message.readUnsignedInt());
+
+ OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
+ augNxActionBuilder.setActionMultipath(builder.build());
+ actionBuilder.addAugmentation(ExperimenterIdAction.class,
+ createExperimenterIdAction(NxmNxMultipath.class));
+ actionBuilder.addAugmentation(OfjAugNxAction.class, augNxActionBuilder.build());
+ return actionBuilder.build();
+ }
+}
public static final ResubmitCodec RESUBMIT_CODEC = new ResubmitCodec();
public static final SetNspCodec SET_NSP_CODEC = new SetNspCodec();
public static final SetNsiCodec SET_NSI_CODEC = new SetNsiCodec();
+ public static final MultipathCodec MULTIPATH_CODEC = new MultipathCodec();
}
base ofaction:experimenter-action-sub-type;
}
+ identity nxm-nx-multipath {
+ base ofaction:experimenter-action-sub-type;
+ }
+
grouping ofj-nx-action-resubmit-grouping {
container action-resubmit {
leaf in-port {
}
}
+ typedef ofj-nx-hash-fields {
+ type enumeration {
+ enum NX_HASH_FIELDS_ETH_SRC {
+ value 0;
+ description "eth src address only";
+ }
+ enum NX_HASH_FIELDS_SYMMETRIC_L4 {
+ value 1;
+ description "L2 through L4 fields";
+ }
+ }
+ }
+
+ typedef ofj-nx-mp-algorithm {
+ type enumeration {
+ enum NX_MP_ALG_MODULO_N {
+ value 0;
+ }
+ enum NX_MP_ALG_HASH_THRESHOLD {
+ value 1;
+ }
+ enum NX_MP_ALG_HRW {
+ value 2;
+ }
+ enum NX_MP_ALG_ITER_HASH {
+ value 3;
+ }
+ }
+ }
+
+ grouping ofj-nx-action-multipath-grouping {
+ container action-multipath {
+ leaf fields {
+ type ofj-nx-hash-fields;
+ }
+ leaf basis {
+ type uint16;
+ default 0x400;
+ }
+ leaf algorithm {
+ type ofj-nx-mp-algorithm;
+ }
+ leaf max-link {
+ type uint16;
+ }
+ leaf arg {
+ type uint32;
+ }
+ leaf ofs-nbits {
+ type uint16;
+ }
+ leaf dst {
+ type uint32;
+ }
+ }
+ }
+
augment "/ofaction:actions-container/ofaction:action" {
ext:augment-identifier "ofj-aug-nx-action";
uses ofj-nx-action-resubmit-grouping;
uses ofj-nx-action-set-nsp-grouping;
uses ofj-nx-action-set-nsi-grouping;
+ uses ofj-nx-action-multipath-grouping;
}
}
import org.opendaylight.ovs.nx.sal.convertor.action.ResubmitConvertor;
import org.opendaylight.ovs.nx.sal.convertor.action.SetNsiConvertor;
import org.opendaylight.ovs.nx.sal.convertor.action.SetNspConvertor;
+import org.opendaylight.ovs.nx.sal.convertor.action.MultipathConvertor;
import org.opendaylight.ovs.nx.sal.convertor.match.NspConvertor;
import org.opendaylight.ovs.nx.sal.convertor.match.NsiConvertor;
import org.opendaylight.ovs.nx.ofjava.codec.action.ResubmitCodec;
import org.opendaylight.ovs.nx.ofjava.codec.action.SetNsiCodec;
import org.opendaylight.ovs.nx.ofjava.codec.action.SetNspCodec;
+import org.opendaylight.ovs.nx.ofjava.codec.action.MultipathCodec;
import org.opendaylight.ovs.nx.ofjava.codec.match.NspCodec;
import org.opendaylight.ovs.nx.ofjava.codec.match.NsiCodec;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionSetNsiRpcRemoveGroupCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionSetNsiRpcUpdateGroupOriginalCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionSetNsiRpcUpdateGroupUpdatedCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionMultipathRpcAddFlowApplyActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.add.flow.input.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionMultipathRpcAddFlowWriteActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionMultipathRpcAddGroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionMultipathNodesNodeGroupBucketsBucketActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionMultipathNodesNodeTableFlowApplyActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionMultipathNodesNodeTableFlowWriteActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionMultipathRpcRemoveGroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionMultipathRpcUpdateGroupOriginalCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionMultipathRpcUpdateGroupUpdatedCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxmNxNspKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxmNxNsiKey;
import org.opendaylight.yangtools.concepts.ObjectRegistration;
private final static ResubmitConvertor RESUBMIT_CONVERTOR = new ResubmitConvertor();
private final static SetNspConvertor SET_NSP_CONVERTOR = new SetNspConvertor();
private final static SetNsiConvertor SET_NSI_CONVERTOR = new SetNsiConvertor();
+ private final static MultipathConvertor MULTIPATH_CONVERTOR = new MultipathConvertor();
private final static NspConvertor NSP_CONVERTOR = new NspConvertor();
private final static NsiConvertor NSI_CONVERTOR = new NsiConvertor();
registerAction13(NxActionSetNspRpcUpdateGroupOriginalCase.class, SET_NSP_CONVERTOR);
registerAction13(NxActionSetNspRpcUpdateGroupUpdatedCase.class, SET_NSP_CONVERTOR);
+
+ registerAction13(NxActionMultipathNodesNodeTableFlowApplyActionsCase.class, MULTIPATH_CONVERTOR);
+ registerAction13(NxActionMultipathNodesNodeTableFlowWriteActionsCase.class, MULTIPATH_CONVERTOR);
+ registerAction13(NxActionMultipathNodesNodeGroupBucketsBucketActionsCase.class, MULTIPATH_CONVERTOR);
+
+
+ registerAction13(NxActionMultipathRpcAddFlowApplyActionsCase.class, MULTIPATH_CONVERTOR);
+ registerAction13(NxActionMultipathRpcAddFlowWriteActionsCase.class, MULTIPATH_CONVERTOR);
+ registerAction13(NxActionMultipathRpcAddGroupCase.class, MULTIPATH_CONVERTOR);
+ registerAction13(NxActionMultipathRpcRemoveGroupCase.class, MULTIPATH_CONVERTOR);
+ registerAction13(NxActionMultipathRpcUpdateGroupOriginalCase.class, MULTIPATH_CONVERTOR);
+ registerAction13(NxActionMultipathRpcUpdateGroupUpdatedCase.class, MULTIPATH_CONVERTOR);
+
registerAction13(NxActionSetNsiNodesNodeTableFlowApplyActionsCase.class, SET_NSI_CONVERTOR);
registerAction13(NxActionSetNsiNodesNodeTableFlowWriteActionsCase.class, SET_NSI_CONVERTOR);
registerAction13(NxActionSetNsiNodesNodeGroupBucketsBucketActionsCase.class, SET_NSI_CONVERTOR);
registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(ResubmitCodec.SERIALIZER_KEY), RESUBMIT_CONVERTOR));
registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(SetNspCodec.SERIALIZER_KEY), SET_NSP_CONVERTOR));
registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(SetNsiCodec.SERIALIZER_KEY), SET_NSI_CONVERTOR));
+ registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(MultipathCodec.SERIALIZER_KEY), MULTIPATH_CONVERTOR));
registrations.add(extensionConverterRegistrator.registerMatchConvertor(new ConverterExtensionKey<>(NxmNxNspKey.class, EncodeConstants.OF13_VERSION_ID), NSP_CONVERTOR));
registrations.add(extensionConverterRegistrator.registerMatchConvertor(NspCodec.SERIALIZER_KEY, NSP_CONVERTOR));
--- /dev/null
+/*
+ * Copyright (C) 2014 SDN Hub, LLC.
+ *
+ * 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
+ *
+ * Authors : Srini Seetharaman
+ */
+package org.opendaylight.ovs.nx.sal.convertor.action;
+
+import org.opendaylight.openflowplugin.extension.api.ConvertorActionFromOFJava;
+import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava;
+import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
+import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPreconditionException;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.NxmNxMultipath;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjAugNxAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjAugNxActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.multipath.grouping.ActionMultipath;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.multipath.grouping.ActionMultipathBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.NxActionMultipathGrouping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionMultipathNotifFlowsStatisticsUpdateApplyActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionMultipathNotifFlowsStatisticsUpdateWriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.group.desc.stats.updated.group.desc.stats.buckets.bucket.action.action.NxActionMultipathNotifGroupDescStatsUpdatedCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionMultipathNodesNodeTableFlowWriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.multipath.grouping.NxMultipath;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.multipath.grouping.NxMultipathBuilder;
+
+import com.google.common.base.Preconditions;
+
+public class MultipathConvertor implements
+ConvertorActionToOFJava<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, Action>,
+ConvertorActionFromOFJava<Action, ActionPath> {
+
+ @Override
+ public org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action convert(Action input, ActionPath path) {
+ ActionMultipath action = input.getAugmentation(OfjAugNxAction.class).getActionMultipath();
+ NxMultipathBuilder builder = new NxMultipathBuilder();
+ builder.setFields(action.getFields());
+ builder.setBasis(action.getBasis());
+ builder.setAlgorithm(action.getAlgorithm());
+ builder.setMaxLink(action.getMaxLink());
+ builder.setArg(action.getArg());
+ builder.setOfsNbits(action.getOfsNbits());
+ return resolveAction(builder.build(), path);
+ }
+
+ private static org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action resolveAction(NxMultipath value, ActionPath path) {
+ switch (path) {
+ case NODES_NODE_TABLE_FLOW_INSTRUCTIONS_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION_EXTENSIONLIST_EXTENSION:
+ return new NxActionMultipathNodesNodeTableFlowWriteActionsCaseBuilder().setNxMultipath(value).build();
+ case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION:
+ return new NxActionMultipathNotifFlowsStatisticsUpdateWriteActionsCaseBuilder().setNxMultipath(value).build();
+ case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION:
+ return new NxActionMultipathNotifFlowsStatisticsUpdateApplyActionsCaseBuilder().setNxMultipath(value).build();
+ case GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION:
+ return new NxActionMultipathNotifGroupDescStatsUpdatedCaseBuilder().setNxMultipath(value).build();
+ default:
+ throw new CodecPreconditionException(path);
+ }
+ }
+
+ @Override
+ public Action convert(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action nxActionArg) {
+ Preconditions.checkArgument(nxActionArg instanceof NxActionMultipathGrouping);
+ NxActionMultipathGrouping nxAction = (NxActionMultipathGrouping) nxActionArg;
+ ActionMultipathBuilder builder = new ActionMultipathBuilder();
+
+ builder.setFields(nxAction.getNxMultipath().getFields());
+ builder.setBasis(nxAction.getNxMultipath().getBasis());
+ builder.setAlgorithm(nxAction.getNxMultipath().getAlgorithm());
+ builder.setMaxLink(nxAction.getNxMultipath().getMaxLink());
+ builder.setArg(nxAction.getNxMultipath().getArg());
+ builder.setOfsNbits(nxAction.getNxMultipath().getOfsNbits());
+
+ OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
+ augNxActionBuilder.setActionMultipath(builder.build());
+ return ActionUtil.createNiciraAction(augNxActionBuilder.build(), NxmNxMultipath.class);
+ }
+
+}
import nicira-match {prefix nicira-match;revision-date "2014-04-21";}
import openflowplugin-extension-general {prefix ext-gen;revision-date "2014-07-14";}
import openflow-action {prefix ofaction;revision-date "2013-07-31";}
+ import ovs-nx-action {prefix ovsnx-action;revision-date "2014-04-21";}
description
"Nicira openflow action extensions.";
}
}
+ grouping nx-action-multipath-grouping {
+ container nx-multipath {
+ leaf fields {
+ type ovsnx-action:ofj-nx-hash-fields;
+ }
+ leaf basis {
+ type uint16;
+ default 0x400;
+ }
+ leaf algorithm {
+ type ovsnx-action:ofj-nx-mp-algorithm;
+ }
+ leaf max-link {
+ type uint16;
+ }
+ leaf arg {
+ type uint32;
+ }
+ leaf ofs-nbits {
+ type uint16;
+ }
+ }
+ }
+
// ACTION augmentations
augment "/sal-flow:add-flow/sal-flow:input/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:write-actions-case/sal-flow:write-actions/sal-flow:action/sal-flow:action" {
uses nx-action-set-nsi-grouping;
}
}
+
+// Multipath
+
+ augment "/sal-flow:add-flow/sal-flow:input/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:write-actions-case/sal-flow:write-actions/sal-flow:action/sal-flow:action" {
+ case nx-action-multipath-rpc-add-flow-write-actions-case {
+ uses nx-action-multipath-grouping;
+ }
+ }
+
+ augment "/sal-flow:add-flow/sal-flow:input/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:apply-actions-case/sal-flow:apply-actions/sal-flow:action/sal-flow:action" {
+ case nx-action-multipath-rpc-add-flow-apply-actions-case {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/sal-flow:remove-flow/sal-flow:input/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:write-actions-case/sal-flow:write-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-multipath-rpc-remove-flow-write-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/sal-flow:remove-flow/sal-flow:input/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:apply-actions-case/sal-flow:apply-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-multipath-rpc-remove-flow-apply-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:original-flow/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:write-actions-case/sal-flow:write-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-multipath-rpc-update-flow-original-write-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:original-flow/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:apply-actions-case/sal-flow:apply-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-multipath-rpc-update-flow-original-apply-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:updated-flow/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:write-actions-case/sal-flow:write-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-multipath-rpc-update-flow-updated-write-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:updated-flow/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:apply-actions-case/sal-flow:apply-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-multipath-rpc-update-flow-updated-apply-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/sal-group:add-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+ case "nx-action-multipath-rpc-add-group-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/sal-group:remove-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+ case "nx-action-multipath-rpc-remove-group-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/sal-group:update-group/sal-group:input/sal-group:original-group/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+ case "nx-action-multipath-rpc-update-group-original-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/sal-group:update-group/sal-group:input/sal-group:updated-group/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+ case "nx-action-multipath-rpc-update-group-updated-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/sal-packet:transmit-packet/sal-packet:input/sal-packet:action/sal-packet:action" {
+ case "nx-action-multipath-rpc-transmit-packet-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/inv:nodes/inv:node/fni:table/fni:flow/fni:instructions/fni:instruction/fni:instruction/fni:write-actions-case/fni:write-actions/fni:action/fni:action" {
+ case "nx-action-multipath-nodes-node-table-flow-write-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/inv:nodes/inv:node/fni:table/fni:flow/fni:instructions/fni:instruction/fni:instruction/fni:apply-actions-case/fni:apply-actions/fni:action/fni:action" {
+ case "nx-action-multipath-nodes-node-table-flow-apply-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/inv:nodes/inv:node/fni:group/fni:buckets/fni:bucket/fni:action/fni:action" {
+ case "nx-action-multipath-nodes-node-group-buckets-bucket-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/odl-flow-stats:flows-statistics-update/odl-flow-stats:flow-and-statistics-map-list/odl-flow-stats:instructions/odl-flow-stats:instruction/odl-flow-stats:instruction/odl-flow-stats:write-actions-case/odl-flow-stats:write-actions/odl-flow-stats:action/odl-flow-stats:action" {
+ case "nx-action-multipath-notif-flows-statistics-update-write-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/odl-flow-stats:flows-statistics-update/odl-flow-stats:flow-and-statistics-map-list/odl-flow-stats:instructions/odl-flow-stats:instruction/odl-flow-stats:instruction/odl-flow-stats:apply-actions-case/odl-flow-stats:apply-actions/odl-flow-stats:action/odl-flow-stats:action" {
+ case "nx-action-multipath-notif-flows-statistics-update-apply-actions-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
+ augment "/odl-group-stats:group-desc-stats-updated/odl-group-stats:group-desc-stats/odl-group-stats:buckets/odl-group-stats:bucket/odl-group-stats:action/odl-group-stats:action" {
+ case "nx-action-multipath-notif-group-desc-stats-updated-case" {
+ uses nx-action-multipath-grouping;
+ }
+ }
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxRegCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcOfArpSpaCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcOfEthSrcCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjNxHashFields;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjNxMpAlgorithm;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionMultipathNodesNodeTableFlowApplyActionsCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionResubmitNodesNodeTableFlowApplyActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.multipath.grouping.NxMultipath;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.multipath.grouping.NxMultipathBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.resubmit.grouping.NxResubmit;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.resubmit.grouping.NxResubmitBuilder;
-
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionSetNspNodesNodeTableFlowApplyActionsCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsp.grouping.NxSetNsp;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsp.grouping.NxSetNspBuilder;
-
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionSetNsiNodesNodeTableFlowApplyActionsCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsi.grouping.NxSetNsi;
import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsi.grouping.NxSetNsiBuilder;
return new NxActionSetNsiNodesNodeTableFlowApplyActionsCaseBuilder().setNxSetNsi(r).build();
}
+ public static Action nxMultipathAction(OfjNxHashFields fields, Integer basis,
+ OfjNxMpAlgorithm algorithm, Integer maxLink, Long arg) {
+ NxMultipathBuilder builder = new NxMultipathBuilder();
+ if (fields != null) {
+ builder.setFields(fields);
+ }
+ if (basis != null) {
+ builder.setBasis(basis);
+ }
+ if (algorithm != null) {
+ builder.setAlgorithm(algorithm);
+ }
+ if (maxLink != null) {
+ builder.setMaxLink(maxLink);
+ }
+ if (arg != null) {
+ builder.setArg(arg);
+ }
+ NxMultipath r = builder.build();
+ return new NxActionMultipathNodesNodeTableFlowApplyActionsCaseBuilder().setNxMultipath(r).build();
+ }
}