From: Anil Vishnoi Date: Fri, 25 Dec 2015 06:15:24 +0000 (+0000) Subject: Merge "Added Conntrack Support in Nicira Extenstion." X-Git-Tag: release/beryllium~29 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=d91dabeb009582eb8a84bcc6287d626b4ae79999;hp=9b739fdca6ca96aa84bb12e8eb51381422aa38c6;p=openflowplugin.git Merge "Added Conntrack Support in Nicira Extenstion." --- diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/NiciraExtensionsRegistrator.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/NiciraExtensionsRegistrator.java index f88ecd320b..761dc649cf 100644 --- a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/NiciraExtensionsRegistrator.java +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/NiciraExtensionsRegistrator.java @@ -9,6 +9,7 @@ package org.opendaylight.openflowjava.nx; import org.opendaylight.openflowjava.nx.api.NiciraExtensionCodecRegistrator; +import org.opendaylight.openflowjava.nx.codec.action.ConntrackCodec; import org.opendaylight.openflowjava.nx.codec.action.MultipathCodec; import org.opendaylight.openflowjava.nx.codec.action.NiciraActionCodecs; import org.opendaylight.openflowjava.nx.codec.action.OutputRegCodec; @@ -26,6 +27,8 @@ import org.opendaylight.openflowjava.nx.codec.match.ArpShaCodec; import org.opendaylight.openflowjava.nx.codec.match.ArpSpaCodec; import org.opendaylight.openflowjava.nx.codec.match.ArpThaCodec; import org.opendaylight.openflowjava.nx.codec.match.ArpTpaCodec; +import org.opendaylight.openflowjava.nx.codec.match.CtStateCodec; +import org.opendaylight.openflowjava.nx.codec.match.CtZoneCodec; import org.opendaylight.openflowjava.nx.codec.match.EthDstCodec; import org.opendaylight.openflowjava.nx.codec.match.EthSrcCodec; import org.opendaylight.openflowjava.nx.codec.match.EthTypeCodec; @@ -88,6 +91,8 @@ public class NiciraExtensionsRegistrator implements AutoCloseable { registrator.registerActionSerializer(SetNshc4Codec.SERIALIZER_KEY, NiciraActionCodecs.SET_NSC4_CODEC); registrator.registerActionDeserializer(SetNsiCodec.DESERIALIZER_KEY, NiciraActionCodecs.SET_NSI_CODEC); registrator.registerActionSerializer(SetNsiCodec.SERIALIZER_KEY, NiciraActionCodecs.SET_NSI_CODEC); + registrator.registerActionSerializer(ConntrackCodec.SERIALIZER_KEY, NiciraActionCodecs.CONNTRACK_CODEC); + registrator.registerActionDeserializer(ConntrackCodec.DESERIALIZER_KEY, NiciraActionCodecs.CONNTRACK_CODEC); registrator.registerMatchEntrySerializer(Reg0Codec.SERIALIZER_KEY, NiciraMatchCodecs.REG0_CODEC); registrator.registerMatchEntryDeserializer(Reg0Codec.DESERIALIZER_KEY, NiciraMatchCodecs.REG0_CODEC); @@ -147,6 +152,10 @@ public class NiciraExtensionsRegistrator implements AutoCloseable { registrator.registerMatchEntryDeserializer(UdpSrcCodec.DESERIALIZER_KEY, NiciraMatchCodecs.UDP_SRC_CODEC); registrator.registerMatchEntrySerializer(UdpDstCodec.SERIALIZER_KEY, NiciraMatchCodecs.UDP_DST_CODEC); registrator.registerMatchEntryDeserializer(UdpDstCodec.DESERIALIZER_KEY, NiciraMatchCodecs.UDP_DST_CODEC); + registrator.registerMatchEntrySerializer(CtStateCodec.SERIALIZER_KEY, NiciraMatchCodecs.CT_ST_CODEC); + registrator.registerMatchEntryDeserializer(CtStateCodec.DESERIALIZER_KEY, NiciraMatchCodecs.CT_ST_CODEC); + registrator.registerMatchEntrySerializer(CtZoneCodec.SERIALIZER_KEY, NiciraMatchCodecs.CT_ZONE_CODEC); + registrator.registerMatchEntryDeserializer(CtZoneCodec.DESERIALIZER_KEY, NiciraMatchCodecs.CT_ZONE_CODEC); } public void unregisterExtensions() { @@ -172,6 +181,8 @@ public class NiciraExtensionsRegistrator implements AutoCloseable { registrator.unregisterActionSerializer(SetNshc3Codec.SERIALIZER_KEY); registrator.unregisterActionDeserializer(SetNshc4Codec.DESERIALIZER_KEY); registrator.unregisterActionSerializer(SetNshc4Codec.SERIALIZER_KEY); + registrator.unregisterActionSerializer(ConntrackCodec.SERIALIZER_KEY); + registrator.unregisterActionDeserializer(ConntrackCodec.DESERIALIZER_KEY); registrator.unregisterMatchEntrySerializer(Reg0Codec.SERIALIZER_KEY); registrator.unregisterMatchEntryDeserializer(Reg0Codec.DESERIALIZER_KEY); @@ -231,6 +242,10 @@ public class NiciraExtensionsRegistrator implements AutoCloseable { registrator.unregisterMatchEntryDeserializer(UdpSrcCodec.DESERIALIZER_KEY); registrator.unregisterMatchEntrySerializer(UdpDstCodec.SERIALIZER_KEY); registrator.unregisterMatchEntryDeserializer(UdpDstCodec.DESERIALIZER_KEY); + registrator.unregisterMatchEntrySerializer(CtStateCodec.SERIALIZER_KEY); + registrator.unregisterMatchEntryDeserializer(CtStateCodec.DESERIALIZER_KEY); + registrator.unregisterMatchEntrySerializer(CtZoneCodec.SERIALIZER_KEY); + registrator.unregisterMatchEntryDeserializer(CtZoneCodec.DESERIALIZER_KEY); } @Override diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/NiciraMatchCodecs.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/NiciraMatchCodecs.java index 6f850a83ba..c730a128a3 100644 --- a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/NiciraMatchCodecs.java +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/NiciraMatchCodecs.java @@ -12,6 +12,8 @@ import org.opendaylight.openflowjava.nx.codec.match.ArpShaCodec; import org.opendaylight.openflowjava.nx.codec.match.ArpSpaCodec; import org.opendaylight.openflowjava.nx.codec.match.ArpThaCodec; import org.opendaylight.openflowjava.nx.codec.match.ArpTpaCodec; +import org.opendaylight.openflowjava.nx.codec.match.CtStateCodec; +import org.opendaylight.openflowjava.nx.codec.match.CtZoneCodec; import org.opendaylight.openflowjava.nx.codec.match.EthDstCodec; import org.opendaylight.openflowjava.nx.codec.match.EthSrcCodec; import org.opendaylight.openflowjava.nx.codec.match.EthTypeCodec; @@ -72,4 +74,6 @@ public class NiciraMatchCodecs { public static final TcpDstCodec TCP_DST_CODEC = new TcpDstCodec(); public static final UdpSrcCodec UDP_SRC_CODEC = new UdpSrcCodec(); public static final UdpDstCodec UDP_DST_CODEC = new UdpDstCodec(); + public static final CtStateCodec CT_ST_CODEC = new CtStateCodec(); + public static final CtZoneCodec CT_ZONE_CODEC = new CtZoneCodec(); } diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/ConntrackCodec.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/ConntrackCodec.java new file mode 100644 index 0000000000..d44074d475 --- /dev/null +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/ConntrackCodec.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2015 Hewlett-Packard Enterprise and others. All rights reserved. + * + * 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.openflowjava.nx.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.common.action.rev150203.actions.grouping.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrack; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrackBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.NxActionConntrackBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Aswin Suryanarayanan. + */ + +public class ConntrackCodec extends AbstractActionCodec { + private static final Logger logger = LoggerFactory.getLogger(ConntrackCodec.class); + + public static final int LENGTH = 24; + public static final byte NXAST_CONNTRACK_SUBTYPE = 35; + public static final NiciraActionSerializerKey SERIALIZER_KEY = + new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionConntrack.class); + public static final NiciraActionDeserializerKey DESERIALIZER_KEY = + new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, NXAST_CONNTRACK_SUBTYPE); + + @Override + public void serialize(final Action input, final ByteBuf outBuffer) { + ActionConntrack action = ((ActionConntrack) input.getActionChoice()); //getAugmentation(OfjAugNxAction.class).getActionConntrack(); + serializeHeader(LENGTH, NXAST_CONNTRACK_SUBTYPE, outBuffer); + + outBuffer.writeShort(action.getNxActionConntrack().getFlags().shortValue()); + outBuffer.writeInt(action.getNxActionConntrack().getZoneSrc().intValue()); + outBuffer.writeShort(action.getNxActionConntrack().getConntrackZone().shortValue()); + outBuffer.writeByte(action.getNxActionConntrack().getRecircTable().byteValue()); + outBuffer.writeZero(5); + } + + @Override + public Action deserialize(final ByteBuf message) { + ActionBuilder actionBuilder = deserializeHeader(message); + ActionConntrackBuilder actionConntrackBuilder = new ActionConntrackBuilder(); + + NxActionConntrackBuilder nxActionConntrackBuilder = new NxActionConntrackBuilder(); + nxActionConntrackBuilder.setFlags(message.readUnsignedShort()); + nxActionConntrackBuilder.setZoneSrc(message.readUnsignedInt()); + nxActionConntrackBuilder.setConntrackZone(message.readUnsignedShort()); + nxActionConntrackBuilder.setRecircTable(message.readUnsignedByte()); + message.skipBytes(5); + actionConntrackBuilder.setNxActionConntrack(nxActionConntrackBuilder.build()); + actionBuilder.setActionChoice(actionConntrackBuilder.build()); + + return actionBuilder.build(); + } +} diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/NiciraActionCodecs.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/NiciraActionCodecs.java index a701a22a90..695de74b1e 100644 --- a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/NiciraActionCodecs.java +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/NiciraActionCodecs.java @@ -24,4 +24,5 @@ public class NiciraActionCodecs { public static final SetNshc2Codec SET_NSC2_CODEC = new SetNshc2Codec(); public static final SetNshc3Codec SET_NSC3_CODEC = new SetNshc3Codec(); public static final SetNshc4Codec SET_NSC4_CODEC = new SetNshc4Codec(); + public static final ConntrackCodec CONNTRACK_CODEC = new ConntrackCodec(); } diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/CtStateCodec.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/CtStateCodec.java new file mode 100644 index 0000000000..6480716947 --- /dev/null +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/CtStateCodec.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2015 Hewlett-Packard Enterprise and others. All rights reserved. + * + * 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.openflowjava.nx.codec.match; + +import io.netty.buffer.ByteBuf; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm1Class; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder; +import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey; +import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey; +import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants; +import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxCtState; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.ct.state.grouping.CtStateValuesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.CtStateCaseValue; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.CtStateCaseValueBuilder; + +/** + * @author Aswin Suryanarayanan. + */ + +public class CtStateCodec extends AbstractMatchCodec { + + private static final int VALUE_LENGTH = 8; + private static final int NXM_FIELD_CODE = 105; + public static final MatchEntrySerializerKey SERIALIZER_KEY = new MatchEntrySerializerKey<>( + EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxCtState.class); + public static final MatchEntryDeserializerKey DESERIALIZER_KEY = new MatchEntryDeserializerKey( + EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, NXM_FIELD_CODE); + + @Override + public void serialize(MatchEntry input, ByteBuf outBuffer) { + serializeHeader(input, outBuffer); + CtStateCaseValue ctStateCase = ((CtStateCaseValue) input.getMatchEntryValue()); + outBuffer.writeInt(ctStateCase.getCtStateValues().getCtState().intValue()); + outBuffer.writeInt(ctStateCase.getCtStateValues().getMask().intValue()); + } + + @Override + public MatchEntry deserialize(ByteBuf message) { + MatchEntryBuilder matchEntryBuilder = deserializeHeader(message); + CtStateCaseValueBuilder caseBuilder = new CtStateCaseValueBuilder(); + CtStateValuesBuilder ctStateValuesBuilder = new CtStateValuesBuilder(); + ctStateValuesBuilder.setCtState(message.readUnsignedInt()); + ctStateValuesBuilder.setMask(message.readUnsignedInt()); + caseBuilder.setCtStateValues(ctStateValuesBuilder.build()); + matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); + matchEntryBuilder.setHasMask(true); + return matchEntryBuilder.build(); + } + + @Override + public int getNxmFieldCode() { + return NXM_FIELD_CODE; + } + + @Override + public int getOxmClassCode() { + return OxmMatchConstants.NXM_1_CLASS; + } + + @Override + public int getValueLength() { + return VALUE_LENGTH; + } + + @Override + public Class getNxmField() { + return NxmNxCtState.class; + } + + @Override + public Class getOxmClass() { + return Nxm1Class.class; + } + +} diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/CtZoneCodec.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/CtZoneCodec.java new file mode 100644 index 0000000000..be0f84053b --- /dev/null +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/CtZoneCodec.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2015 Hewlett-Packard Enterprise and others. All rights reserved. + * + * 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.openflowjava.nx.codec.match; + +import io.netty.buffer.ByteBuf; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm1Class; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder; +import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey; +import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey; +import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants; +import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxCtZone; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.ct.zone.grouping.CtZoneValuesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.CtZoneCaseValue; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.CtZoneCaseValueBuilder; + +/** + * @author Aswin Suryanarayanan. + */ + +public class CtZoneCodec extends AbstractMatchCodec { + + private static final int VALUE_LENGTH = 2; + private static final int NXM_FIELD_CODE = 106; + public static final MatchEntrySerializerKey SERIALIZER_KEY = new MatchEntrySerializerKey<>( + EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxCtZone.class); + public static final MatchEntryDeserializerKey DESERIALIZER_KEY = new MatchEntryDeserializerKey( + EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, NXM_FIELD_CODE); + + @Override + public void serialize(MatchEntry input, ByteBuf outBuffer) { + serializeHeader(input, outBuffer); + CtZoneCaseValue ctZoneCase = ((CtZoneCaseValue) input.getMatchEntryValue()); + outBuffer.writeShort(ctZoneCase.getCtZoneValues().getCtZone()); + } + + @Override + public MatchEntry deserialize(ByteBuf message) { + MatchEntryBuilder matchEntryBuilder = deserializeHeader(message); + CtZoneCaseValueBuilder caseBuilder = new CtZoneCaseValueBuilder(); + CtZoneValuesBuilder ctZoneValuesBuilder = new CtZoneValuesBuilder(); + ctZoneValuesBuilder.setCtZone(message.readUnsignedShort()); + caseBuilder.setCtZoneValues(ctZoneValuesBuilder.build()); + matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); + return matchEntryBuilder.build(); + } + + @Override + public int getNxmFieldCode() { + return NXM_FIELD_CODE; + } + + @Override + public int getOxmClassCode() { + return OxmMatchConstants.NXM_1_CLASS; + } + + @Override + public int getValueLength() { + return VALUE_LENGTH; + } + + @Override + public Class getNxmField() { + return NxmNxCtZone.class; + } + + @Override + public Class getOxmClass() { + return Nxm1Class.class; + } + +} diff --git a/extension/openflowjava-extension-nicira/src/main/yang/nicira-action.yang b/extension/openflowjava-extension-nicira/src/main/yang/nicira-action.yang index ad59196ae7..c14774827b 100644 --- a/extension/openflowjava-extension-nicira/src/main/yang/nicira-action.yang +++ b/extension/openflowjava-extension-nicira/src/main/yang/nicira-action.yang @@ -8,13 +8,13 @@ module nicira-action { import openflow-types {prefix oft;} import yang-ext {prefix ext; revision-date "2013-07-09";} - description + description "Nicira openflow extensions of action."; revision "2014-04-21" { description "Initial revision"; } - + identity nxm-nx-reg-load { base ofaction:experimenter-action-sub-type; } @@ -36,6 +36,9 @@ module nicira-action { identity nxm-nx-set-nsi { base ofaction:experimenter-action-sub-type; } + identity nxm-nx-conntrack { + base ofaction:experimenter-action-sub-type; + } grouping ofj-nx-action-reg-load-grouping { container nx-action-reg-load { @@ -191,7 +194,7 @@ module nicira-action { } } } - + grouping ofj-nx-action-set-nshc-grouping { leaf nshc { type uint32; @@ -200,7 +203,7 @@ module nicira-action { type oft:experimenter-id; } } - + grouping ofj-nx-action-set-nshc-1-grouping { container nx-action-set-nshc-1 { uses ofj-nx-action-set-nshc-grouping; @@ -222,6 +225,26 @@ module nicira-action { } } + grouping ofj-nx-action-conntrack-grouping { + container nx-action-conntrack { + leaf flags { + type uint16; + } + leaf zone-src { + type uint32; + } + leaf conntrack-zone { + type uint16; + } + leaf recirc-table { + type uint8; + } + leaf experimenter-id { + type oft:experimenter-id; + } + } + } + augment "/ofaction:action-container/ofaction:action-choice" { ext:augment-identifier "ofj-aug-nx-action"; case action-reg-load { @@ -257,5 +280,8 @@ module nicira-action { case action-set-nshc-4 { uses ofj-nx-action-set-nshc-4-grouping; } + case action-conntrack { + uses ofj-nx-action-conntrack-grouping; + } } } diff --git a/extension/openflowjava-extension-nicira/src/main/yang/nicira-match.yang b/extension/openflowjava-extension-nicira/src/main/yang/nicira-match.yang index 79c98f4eab..07f9962a0e 100644 --- a/extension/openflowjava-extension-nicira/src/main/yang/nicira-match.yang +++ b/extension/openflowjava-extension-nicira/src/main/yang/nicira-match.yang @@ -108,6 +108,12 @@ module nicira-match { identity nxm-of-udp-dst { base ofoxm:match-field; } + identity nxm-nx-ct-state { + base ofoxm:match-field; + } + identity nxm-nx-ct-zone { + base ofoxm:match-field; + } grouping ofj-nxm-nx-match-reg-grouping { container reg-values { @@ -209,13 +215,13 @@ module nicira-match { } } } - + grouping ofj-nxm-nx-match-nshc-grouping { leaf nshc { type uint32; } } - + grouping ofj-nxm-nx-match-nshc-1-grouping { container nshc-1-values { uses ofj-nxm-nx-match-nshc-grouping; @@ -276,7 +282,23 @@ module nicira-match { } } } - + grouping ofj-nxm-nx-match-ct-state-grouping{ + container ct-state-values { + leaf ct-state { + type uint32; + } + leaf mask { + type uint32; + } + } + } + grouping ofj-nxm-nx-match-ct-zone-grouping{ + container ct-zone-values { + leaf ct-zone { + type uint16; + } + } + } augment "/ofoxm:oxm-container/ofoxm:match-entry-value" { ext:augment-identifier "ofj-aug-nx-match"; case reg-case-value { @@ -346,6 +368,12 @@ module nicira-match { case udp-dst-case-value { uses ofj-nxm-of-match-udp-dst-grouping; } + case ct-state-case-value { + uses ofj-nxm-nx-match-ct-state-grouping; + } + case ct-zone-case-value { + uses ofj-nxm-nx-match-ct-zone-grouping; + } } diff --git a/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/NiciraExtensionProvider.java b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/NiciraExtensionProvider.java index f9fcf81b99..a7ec257fcd 100644 --- a/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/NiciraExtensionProvider.java +++ b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/NiciraExtensionProvider.java @@ -15,6 +15,7 @@ import com.google.common.base.Preconditions; import java.util.HashSet; import java.util.Set; import org.opendaylight.openflowjava.nx.api.NiciraUtil; +import org.opendaylight.openflowjava.nx.codec.action.ConntrackCodec; import org.opendaylight.openflowjava.nx.codec.action.MultipathCodec; import org.opendaylight.openflowjava.nx.codec.action.OutputRegCodec; import org.opendaylight.openflowjava.nx.codec.action.RegLoadCodec; @@ -31,6 +32,8 @@ import org.opendaylight.openflowjava.nx.codec.match.ArpShaCodec; import org.opendaylight.openflowjava.nx.codec.match.ArpSpaCodec; import org.opendaylight.openflowjava.nx.codec.match.ArpThaCodec; import org.opendaylight.openflowjava.nx.codec.match.ArpTpaCodec; +import org.opendaylight.openflowjava.nx.codec.match.CtStateCodec; +import org.opendaylight.openflowjava.nx.codec.match.CtZoneCodec; import org.opendaylight.openflowjava.nx.codec.match.EthDstCodec; import org.opendaylight.openflowjava.nx.codec.match.EthSrcCodec; import org.opendaylight.openflowjava.nx.codec.match.EthTypeCodec; @@ -62,6 +65,7 @@ import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava; import org.opendaylight.openflowplugin.extension.api.ExtensionConverterRegistrator; import org.opendaylight.openflowplugin.extension.api.TypeVersionKey; import org.opendaylight.openflowplugin.extension.api.path.ActionPath; +import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.action.ConntrackConvertor; import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.action.MultipathConvertor; import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.action.OutputRegConvertor; import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.action.RegLoadConvertor; @@ -78,6 +82,8 @@ import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.A import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.ArpSpaConvertor; import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.ArpThaConvertor; import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.ArpTpaConvertor; +import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.CtStateConvertor; +import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.CtZoneConvertor; import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.EthDstConvertor; import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.EthSrcConvertor; import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.EthTypeConvertor; @@ -96,6 +102,7 @@ import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.U import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.UdpSrcConvertor; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.ActionChoice; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrack; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionMultipath; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionOutputReg; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionRegLoad; @@ -103,6 +110,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev1 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionResubmit; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionSetNsi; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionSetNsp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionConntrackRpcAddFlowApplyActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionMultipathRpcAddFlowApplyActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionOutputRegRpcAddFlowApplyActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegLoadRpcAddFlowApplyActionsCase; @@ -114,6 +122,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionSetNshc4RpcAddFlowApplyActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionSetNsiRpcAddFlowApplyActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionSetNspRpcAddFlowApplyActionsCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionConntrackRpcAddFlowWriteActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionMultipathRpcAddFlowWriteActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionOutputRegRpcAddFlowWriteActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionRegLoadRpcAddFlowWriteActionsCase; @@ -125,6 +134,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionSetNshc4RpcAddFlowWriteActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionSetNsiRpcAddFlowWriteActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.flow.input.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionSetNspRpcAddFlowWriteActionsCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionConntrackRpcAddGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionMultipathRpcAddGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionOutputRegRpcAddGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionRegLoadRpcAddGroupCase; @@ -136,6 +146,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionSetNshc4RpcAddGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionSetNsiRpcAddGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionSetNspRpcAddGroupCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionConntrackNodesNodeGroupBucketsBucketActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionMultipathNodesNodeGroupBucketsBucketActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionOutputRegNodesNodeGroupBucketsBucketActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegLoadNodesNodeGroupBucketsBucketActionsCase; @@ -147,6 +158,7 @@ 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.NxActionSetNshc4NodesNodeGroupBucketsBucketActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionSetNsiNodesNodeGroupBucketsBucketActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionSetNspNodesNodeGroupBucketsBucketActionsCase; +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.NxActionConntrackNodesNodeTableFlowApplyActionsCase; 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.NxActionMultipathNodesNodeTableFlowApplyActionsCase; 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.NxActionOutputRegNodesNodeTableFlowApplyActionsCase; 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.NxActionRegLoadNodesNodeTableFlowApplyActionsCase; @@ -158,6 +170,7 @@ 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.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionSetNshc4NodesNodeTableFlowApplyActionsCase; 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.NxActionSetNsiNodesNodeTableFlowApplyActionsCase; 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.NxActionSetNspNodesNodeTableFlowApplyActionsCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionConntrackNodesNodeTableFlowWriteActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.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.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionOutputRegNodesNodeTableFlowWriteActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionRegLoadNodesNodeTableFlowWriteActionsCase; @@ -169,6 +182,7 @@ 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.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionSetNshc4NodesNodeTableFlowWriteActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionSetNsiNodesNodeTableFlowWriteActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionSetNspNodesNodeTableFlowWriteActionsCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionConntrackRpcRemoveGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionMultipathRpcRemoveGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionOutputRegRpcRemoveGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionRegLoadRpcRemoveGroupCase; @@ -180,6 +194,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionSetNshc4RpcRemoveGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionSetNsiRpcRemoveGroupCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionSetNspRpcRemoveGroupCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionConntrackRpcUpdateGroupOriginalCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionMultipathRpcUpdateGroupOriginalCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionOutputRegRpcUpdateGroupOriginalCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionRegLoadRpcUpdateGroupOriginalCase; @@ -191,6 +206,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionSetNshc4RpcUpdateGroupOriginalCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionSetNsiRpcUpdateGroupOriginalCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionSetNspRpcUpdateGroupOriginalCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionConntrackRpcUpdateGroupUpdatedCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionMultipathRpcUpdateGroupUpdatedCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionOutputRegRpcUpdateGroupUpdatedCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionRegLoadRpcUpdateGroupUpdatedCase; @@ -204,6 +220,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionSetNspRpcUpdateGroupUpdatedCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpShaKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpThaKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtStateKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtZoneKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc1Key; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc2Key; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc3Key; @@ -278,6 +296,9 @@ public class NiciraExtensionProvider implements AutoCloseable { private final static TcpDstConvertor TCP_DST_CONVERTOR = new TcpDstConvertor(); private final static UdpSrcConvertor UDP_SRC_CONVERTOR = new UdpSrcConvertor(); private final static UdpDstConvertor UDP_DST_CONVERTOR = new UdpDstConvertor(); + private final static ConntrackConvertor CONNTRACK_CONVERTOR = new ConntrackConvertor(); + private final static CtStateConvertor CT_STATE_CONVERTOR = new CtStateConvertor(); + private final static CtZoneConvertor CT_ZONE_CONVERTOR = new CtZoneConvertor(); @Override public void close() { @@ -317,6 +338,7 @@ public class NiciraExtensionProvider implements AutoCloseable { registerAction13(NxActionSetNshc2NodesNodeTableFlowApplyActionsCase.class, SET_NSC2_CONVERTOR); registerAction13(NxActionSetNshc3NodesNodeTableFlowApplyActionsCase.class, SET_NSC3_CONVERTOR); registerAction13(NxActionSetNshc4NodesNodeTableFlowApplyActionsCase.class, SET_NSC4_CONVERTOR); + registerAction13(NxActionConntrackNodesNodeTableFlowApplyActionsCase.class, CONNTRACK_CONVERTOR); registerAction13(NxActionRegLoadNodesNodeTableFlowWriteActionsCase.class, REG_LOAD_CONVERTOR); registerAction13(NxActionRegMoveNodesNodeTableFlowWriteActionsCase.class, REG_MOVE_CONVERTOR); @@ -329,6 +351,7 @@ public class NiciraExtensionProvider implements AutoCloseable { registerAction13(NxActionSetNshc2NodesNodeTableFlowWriteActionsCase.class, SET_NSC2_CONVERTOR); registerAction13(NxActionSetNshc3NodesNodeTableFlowWriteActionsCase.class, SET_NSC3_CONVERTOR); registerAction13(NxActionSetNshc4NodesNodeTableFlowWriteActionsCase.class, SET_NSC4_CONVERTOR); + registerAction13(NxActionConntrackNodesNodeTableFlowWriteActionsCase.class, CONNTRACK_CONVERTOR); registerAction13(NxActionRegLoadNodesNodeGroupBucketsBucketActionsCase.class, REG_LOAD_CONVERTOR); registerAction13(NxActionRegMoveNodesNodeGroupBucketsBucketActionsCase.class, REG_MOVE_CONVERTOR); @@ -341,6 +364,7 @@ public class NiciraExtensionProvider implements AutoCloseable { registerAction13(NxActionSetNshc2NodesNodeGroupBucketsBucketActionsCase.class, SET_NSC2_CONVERTOR); registerAction13(NxActionSetNshc3NodesNodeGroupBucketsBucketActionsCase.class, SET_NSC3_CONVERTOR); registerAction13(NxActionSetNshc4NodesNodeGroupBucketsBucketActionsCase.class, SET_NSC4_CONVERTOR); + registerAction13(NxActionConntrackNodesNodeGroupBucketsBucketActionsCase.class, CONNTRACK_CONVERTOR); // src=rpc-addFlow registerAction13(NxActionRegLoadRpcAddFlowApplyActionsCase.class, REG_LOAD_CONVERTOR); @@ -354,6 +378,7 @@ public class NiciraExtensionProvider implements AutoCloseable { registerAction13(NxActionSetNshc2RpcAddFlowApplyActionsCase.class, SET_NSC2_CONVERTOR); registerAction13(NxActionSetNshc3RpcAddFlowApplyActionsCase.class, SET_NSC3_CONVERTOR); registerAction13(NxActionSetNshc4RpcAddFlowApplyActionsCase.class, SET_NSC4_CONVERTOR); + registerAction13(NxActionConntrackRpcAddFlowApplyActionsCase.class, CONNTRACK_CONVERTOR); registerAction13(NxActionRegLoadRpcAddFlowWriteActionsCase.class, REG_LOAD_CONVERTOR); registerAction13(NxActionRegMoveRpcAddFlowWriteActionsCase.class, REG_MOVE_CONVERTOR); @@ -366,6 +391,7 @@ public class NiciraExtensionProvider implements AutoCloseable { registerAction13(NxActionSetNshc2RpcAddFlowWriteActionsCase.class, SET_NSC2_CONVERTOR); registerAction13(NxActionSetNshc3RpcAddFlowWriteActionsCase.class, SET_NSC3_CONVERTOR); registerAction13(NxActionSetNshc4RpcAddFlowWriteActionsCase.class, SET_NSC4_CONVERTOR); + registerAction13(NxActionConntrackRpcAddFlowWriteActionsCase.class, CONNTRACK_CONVERTOR); registerAction13(NxActionRegLoadRpcAddGroupCase.class, REG_LOAD_CONVERTOR); registerAction13(NxActionRegLoadRpcRemoveGroupCase.class, REG_LOAD_CONVERTOR); @@ -411,6 +437,10 @@ public class NiciraExtensionProvider implements AutoCloseable { registerAction13(NxActionSetNshc4RpcRemoveGroupCase.class, SET_NSC4_CONVERTOR); registerAction13(NxActionSetNshc4RpcUpdateGroupOriginalCase.class, SET_NSC4_CONVERTOR); registerAction13(NxActionSetNshc4RpcUpdateGroupUpdatedCase.class, SET_NSC4_CONVERTOR); + registerAction13(NxActionConntrackRpcAddGroupCase.class, CONNTRACK_CONVERTOR); + registerAction13(NxActionConntrackRpcRemoveGroupCase.class, CONNTRACK_CONVERTOR); + registerAction13(NxActionConntrackRpcUpdateGroupOriginalCase.class, CONNTRACK_CONVERTOR); + registerAction13(NxActionConntrackRpcUpdateGroupUpdatedCase.class, CONNTRACK_CONVERTOR); registerAction13(ActionRegLoad.class, REG_LOAD_CONVERTOR); @@ -420,6 +450,7 @@ public class NiciraExtensionProvider implements AutoCloseable { registerAction13(ActionMultipath.class, MULTIPATH_CONVERTOR); registerAction13(ActionSetNsp.class, SET_NSP_CONVERTOR); registerAction13(ActionSetNsi.class, SET_NSI_CONVERTOR); + registerAction13(ActionConntrack.class, CONNTRACK_CONVERTOR); registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(RegLoadCodec.SERIALIZER_KEY), REG_LOAD_CONVERTOR)); registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(RegMoveCodec.SERIALIZER_KEY), REG_MOVE_CONVERTOR)); @@ -432,6 +463,7 @@ public class NiciraExtensionProvider implements AutoCloseable { registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(SetNshc2Codec.SERIALIZER_KEY), SET_NSC2_CONVERTOR)); registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(SetNshc3Codec.SERIALIZER_KEY), SET_NSC3_CONVERTOR)); registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(SetNshc4Codec.SERIALIZER_KEY), SET_NSC4_CONVERTOR)); + registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(ConntrackCodec.SERIALIZER_KEY), CONNTRACK_CONVERTOR)); registrations.add(extensionConverterRegistrator.registerMatchConvertor(new ConverterExtensionKey<>(NxmNxReg0Key.class, EncodeConstants.OF13_VERSION_ID), REG_CONVERTOR)); registrations.add(extensionConverterRegistrator.registerMatchConvertor(new ConverterExtensionKey<>(NxmNxReg1Key.class, EncodeConstants.OF13_VERSION_ID), REG_CONVERTOR)); @@ -492,6 +524,10 @@ public class NiciraExtensionProvider implements AutoCloseable { registrations.add(extensionConverterRegistrator.registerMatchConvertor(UdpSrcCodec.SERIALIZER_KEY, UDP_SRC_CONVERTOR)); registrations.add(extensionConverterRegistrator.registerMatchConvertor(new ConverterExtensionKey<>(NxmOfUdpDstKey.class, EncodeConstants.OF13_VERSION_ID), UDP_DST_CONVERTOR)); registrations.add(extensionConverterRegistrator.registerMatchConvertor(UdpDstCodec.SERIALIZER_KEY, UDP_DST_CONVERTOR)); + registrations.add(extensionConverterRegistrator.registerMatchConvertor(new ConverterExtensionKey<>(NxmNxCtStateKey.class, EncodeConstants.OF13_VERSION_ID), CT_STATE_CONVERTOR)); + registrations.add(extensionConverterRegistrator.registerMatchConvertor(CtStateCodec.SERIALIZER_KEY, CT_STATE_CONVERTOR)); + registrations.add(extensionConverterRegistrator.registerMatchConvertor(new ConverterExtensionKey<>(NxmNxCtZoneKey.class, EncodeConstants.OF13_VERSION_ID), CT_ZONE_CONVERTOR)); + registrations.add(extensionConverterRegistrator.registerMatchConvertor(CtZoneCodec.SERIALIZER_KEY, CT_ZONE_CONVERTOR)); } /** diff --git a/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/action/ConntrackConvertor.java b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/action/ConntrackConvertor.java new file mode 100644 index 0000000000..33fdde2509 --- /dev/null +++ b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/action/ConntrackConvertor.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2015 Hewlett-Packard Enterprise and others. All rights reserved. + * + * 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.openflowplugin.extension.vendor.nicira.convertor.action; + +import com.google.common.base.Preconditions; +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.rev150203.actions.grouping.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrack; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrackBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.NxActionConntrack; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.NxActionConntrackBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.NxActionConntrackGrouping; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionConntrackNotifFlowsStatisticsUpdateApplyActionsCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionConntrackNotifFlowsStatisticsUpdateWriteActionsCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.group.desc.stats.updated.group.desc.stats.buckets.bucket.action.action.NxActionConntrackNotifGroupDescStatsUpdatedCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionConntrackNodesNodeTableFlowWriteActionsCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.NxConntrack; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.NxConntrackBuilder; + +/** + * @author Aswin Suryanarayanan. + */ + +public class ConntrackConvertor implements + ConvertorActionToOFJava, + ConvertorActionFromOFJava { + + @Override + public org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action convert(final Action input, final ActionPath path) { + NxActionConntrack action = ((ActionConntrack) input.getActionChoice()).getNxActionConntrack(); + NxConntrackBuilder builder = new NxConntrackBuilder(); + builder.setFlags(action.getFlags()); + builder.setZoneSrc(action.getZoneSrc()); + builder.setRecircTable(action.getRecircTable()); + builder.setConntrackZone(action.getConntrackZone()); + return resolveAction(builder.build(), path); + } + + private static int resolveStart(final int ofsNBints) { + return extractSub(ofsNBints, 10, 6); + } + + private static int resolveEnd(final int ofsNBints) { + int ofs = extractSub(ofsNBints, 10, 6); + int nBits = extractSub(ofsNBints, 6, 0); + return ofs + nBits; + } + + private static int extractSub(final int l, final int nrBits, final int offset) { + final int rightShifted = l >>> offset; + final int mask = (1 << nrBits) - 1; + return rightShifted & mask; + } + + private static org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action resolveAction(final NxConntrack value, final ActionPath path) { + switch (path) { + case NODES_NODE_TABLE_FLOW_INSTRUCTIONS_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION_EXTENSIONLIST_EXTENSION: + return new NxActionConntrackNodesNodeTableFlowWriteActionsCaseBuilder().setNxConntrack(value).build(); + case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION: + return new NxActionConntrackNotifFlowsStatisticsUpdateWriteActionsCaseBuilder().setNxConntrack(value).build(); + case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION: + return new NxActionConntrackNotifFlowsStatisticsUpdateApplyActionsCaseBuilder().setNxConntrack(value).build(); + case GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION: + return new NxActionConntrackNotifGroupDescStatsUpdatedCaseBuilder().setNxConntrack(value).build(); + default: + throw new CodecPreconditionException(path); + } + } + + @Override + public Action convert(final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action nxActionArg) { + Preconditions.checkArgument(nxActionArg instanceof NxActionConntrackGrouping); + NxActionConntrackGrouping nxAction = (NxActionConntrackGrouping) nxActionArg; + + NxActionConntrackBuilder nxActionConntrackBuilder = new NxActionConntrackBuilder(); + nxActionConntrackBuilder.setFlags(nxAction.getNxConntrack().getFlags()); + nxActionConntrackBuilder.setZoneSrc(nxAction.getNxConntrack().getZoneSrc()); + nxActionConntrackBuilder.setRecircTable(nxAction.getNxConntrack().getRecircTable()); + nxActionConntrackBuilder.setConntrackZone(nxAction.getNxConntrack().getConntrackZone()); + ActionConntrackBuilder actionConntrackBuilder = new ActionConntrackBuilder(); + actionConntrackBuilder.setNxActionConntrack(nxActionConntrackBuilder.build()); + return ActionUtil.createAction(actionConntrackBuilder.build()); + } + +} diff --git a/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/CtStateConvertor.java b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/CtStateConvertor.java new file mode 100644 index 0000000000..135897b685 --- /dev/null +++ b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/CtStateConvertor.java @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2015 Hewlett-Packard Enterprise and others. All rights reserved. + * + * 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.openflowplugin.extension.vendor.nicira.convertor.match; + +import com.google.common.base.Optional; + +import org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava; +import org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava; +import org.opendaylight.openflowplugin.extension.api.ExtensionAugment; +import org.opendaylight.openflowplugin.extension.api.path.MatchPath; +import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPreconditionException; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm1Class; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.ExtensionKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.Extension; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketIn; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketInBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemoved; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemovedBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifUpdateFlowStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifUpdateFlowStatsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtStateGrouping; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtStateKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.nxm.nx.ct.state.grouping.NxmNxCtState; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.nxm.nx.ct.state.grouping.NxmNxCtStateBuilder; +import org.opendaylight.yangtools.yang.binding.Augmentation; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.ct.state.grouping.CtStateValuesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.CtStateCaseValue; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.CtStateCaseValueBuilder; + +/** + * @author Aswin Suryanarayanan. + */ + +public class CtStateConvertor implements ConvertorToOFJava, ConvertorFromOFJava { + + /* + * (non-Javadoc) + * + * @see + * org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava#convert + * (org.opendaylight.yangtools.yang.binding.DataContainer, + * org.opendaylight.openflowplugin.extension.api.path.AugmentationPath) + */ + @Override + public ExtensionAugment> convert(MatchEntry input, MatchPath path) { + CtStateCaseValue ctStateCaseValue = ((CtStateCaseValue) input.getMatchEntryValue()); + NxmNxCtStateBuilder ctStateBuilder = new NxmNxCtStateBuilder(); + ctStateBuilder.setCtState(ctStateCaseValue.getCtStateValues().getCtState()); + ctStateBuilder.setMask(ctStateCaseValue.getCtStateValues().getMask()); + return resolveAugmentation(ctStateBuilder.build(), path, + NxmNxCtStateKey.class); + } + + /* + * (non-Javadoc) + * + * @see + * org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava#convert + * (org + * .opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general + * .rev140714.general.extension.grouping.Extension) + */ + @Override + public MatchEntry convert(Extension extension) { + Optional matchGrouping = MatchUtil.ctStateResolver.getExtension(extension); + if (!matchGrouping.isPresent()) { + throw new CodecPreconditionException(extension); + } + CtStateCaseValueBuilder ctStateCaseValueBuilder = new CtStateCaseValueBuilder(); + CtStateValuesBuilder ctStateValuesBuilder = new CtStateValuesBuilder(); + ctStateValuesBuilder.setCtState(matchGrouping.get().getNxmNxCtState().getCtState()); + ctStateValuesBuilder.setMask(matchGrouping.get().getNxmNxCtState().getMask()); + ctStateCaseValueBuilder.setCtStateValues(ctStateValuesBuilder.build()); + MatchEntryBuilder ofMatch = MatchUtil + .createDefaultMatchEntryBuilder(org.opendaylight.yang.gen.v1.urn + .opendaylight.openflowjava.nx.match.rev140421.NxmNxCtState.class, + Nxm1Class.class, ctStateCaseValueBuilder.build()); + ofMatch.setHasMask(true); + return ofMatch.build(); + } + + private static ExtensionAugment> resolveAugmentation(NxmNxCtState value, + MatchPath path, Class key) { + switch (path) { + case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_MATCH: + return new ExtensionAugment<>(NxAugMatchNotifUpdateFlowStats.class, + new NxAugMatchNotifUpdateFlowStatsBuilder().setNxmNxCtState(value).build(), key); + case PACKETRECEIVED_MATCH: + return new ExtensionAugment<>(NxAugMatchNotifPacketIn.class, new NxAugMatchNotifPacketInBuilder() + .setNxmNxCtState(value).build(), key); + case SWITCHFLOWREMOVED_MATCH: + return new ExtensionAugment<>(NxAugMatchNotifSwitchFlowRemoved.class, + new NxAugMatchNotifSwitchFlowRemovedBuilder().setNxmNxCtState(value).build(), key); + default: + throw new CodecPreconditionException(path); + } + } +} diff --git a/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/CtZoneConvertor.java b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/CtZoneConvertor.java new file mode 100644 index 0000000000..1f332a9722 --- /dev/null +++ b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/CtZoneConvertor.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2015 Hewlett-Packard Enterprise and others. All rights reserved. + * + * 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.openflowplugin.extension.vendor.nicira.convertor.match; + +import com.google.common.base.Optional; + +import org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava; +import org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava; +import org.opendaylight.openflowplugin.extension.api.ExtensionAugment; +import org.opendaylight.openflowplugin.extension.api.path.MatchPath; +import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPreconditionException; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm1Class; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.ExtensionKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.Extension; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketIn; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketInBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemoved; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemovedBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifUpdateFlowStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifUpdateFlowStatsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtZoneGrouping; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtZoneKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.nxm.nx.ct.zone.grouping.NxmNxCtZone; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.nxm.nx.ct.zone.grouping.NxmNxCtZoneBuilder; +import org.opendaylight.yangtools.yang.binding.Augmentation; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.ct.zone.grouping.CtZoneValuesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.CtZoneCaseValue; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.CtZoneCaseValueBuilder; + +/** + * @author Aswin Suryanarayanan. + */ + +public class CtZoneConvertor implements ConvertorToOFJava, ConvertorFromOFJava { + + /* + * (non-Javadoc) + * + * @see + * org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava#convert + * (org.opendaylight.yangtools.yang.binding.DataContainer, + * org.opendaylight.openflowplugin.extension.api.path.AugmentationPath) + */ + @Override + public ExtensionAugment> convert(MatchEntry input, MatchPath path) { + CtZoneCaseValue ctZoneCaseValue = ((CtZoneCaseValue) input.getMatchEntryValue()); + NxmNxCtZoneBuilder ctZoneBuilder = new NxmNxCtZoneBuilder(); + ctZoneBuilder.setCtZone(ctZoneCaseValue.getCtZoneValues().getCtZone()); + return resolveAugmentation(ctZoneBuilder.build(), path, + NxmNxCtZoneKey.class); + } + + /* + * (non-Javadoc) + * + * @see + * org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava#convert + * (org + * .opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general + * .rev140714.general.extension.grouping.Extension) + */ + @Override + public MatchEntry convert(Extension extension) { + Optional matchGrouping = MatchUtil.ctZoneResolver.getExtension(extension); + if (!matchGrouping.isPresent()) { + throw new CodecPreconditionException(extension); + } + CtZoneCaseValueBuilder ctZoneCaseValueBuilder = new CtZoneCaseValueBuilder(); + CtZoneValuesBuilder ctZoneValuesBuilder = new CtZoneValuesBuilder(); + ctZoneValuesBuilder.setCtZone(matchGrouping.get().getNxmNxCtZone().getCtZone()); + ctZoneCaseValueBuilder.setCtZoneValues(ctZoneValuesBuilder.build()); + MatchEntryBuilder ofMatch = MatchUtil + .createDefaultMatchEntryBuilder(org.opendaylight.yang.gen.v1.urn + .opendaylight.openflowjava.nx.match.rev140421.NxmNxCtZone.class, + Nxm1Class.class, ctZoneCaseValueBuilder.build()); + return ofMatch.build(); + } + + private static ExtensionAugment> resolveAugmentation(NxmNxCtZone value, + MatchPath path, Class key) { + switch (path) { + case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_MATCH: + return new ExtensionAugment<>(NxAugMatchNotifUpdateFlowStats.class, + new NxAugMatchNotifUpdateFlowStatsBuilder().setNxmNxCtZone(value).build(), key); + case PACKETRECEIVED_MATCH: + return new ExtensionAugment<>(NxAugMatchNotifPacketIn.class, new NxAugMatchNotifPacketInBuilder() + .setNxmNxCtZone(value).build(), key); + case SWITCHFLOWREMOVED_MATCH: + return new ExtensionAugment<>(NxAugMatchNotifSwitchFlowRemoved.class, + new NxAugMatchNotifSwitchFlowRemovedBuilder().setNxmNxCtZone(value).build(), key); + default: + throw new CodecPreconditionException(path); + } + } +} diff --git a/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/MatchUtil.java b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/MatchUtil.java index 92d92e81f6..2029b02578 100644 --- a/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/MatchUtil.java +++ b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/MatchUtil.java @@ -32,6 +32,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcUpdateFlowUpdated; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpShaGrouping; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpThaGrouping; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtStateGrouping; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtZoneGrouping; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc1Grouping; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc2Grouping; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc3Grouping; @@ -107,6 +109,10 @@ public class MatchUtil { NxmOfUdpSrcGrouping.class); public final static GroupingResolver udpDstResolver = new GroupingResolver<>( NxmOfUdpDstGrouping.class); + public final static GroupingResolver ctStateResolver = new GroupingResolver<>( + NxmNxCtStateGrouping.class); + public final static GroupingResolver ctZoneResolver = new GroupingResolver<>( + NxmNxCtZoneGrouping.class); static { @@ -140,6 +146,8 @@ public class MatchUtil { tcpDstResolver.setAugmentations(augmentationsOfExtension); udpSrcResolver.setAugmentations(augmentationsOfExtension); udpDstResolver.setAugmentations(augmentationsOfExtension); + ctStateResolver.setAugmentations(augmentationsOfExtension); + ctZoneResolver.setAugmentations(augmentationsOfExtension); } diff --git a/extension/openflowplugin-extension-nicira/src/main/yang/openflowplugin-extension-nicira-action.yang b/extension/openflowplugin-extension-nicira/src/main/yang/openflowplugin-extension-nicira-action.yang index bcba625f43..21e7d444d4 100644 --- a/extension/openflowplugin-extension-nicira/src/main/yang/openflowplugin-extension-nicira-action.yang +++ b/extension/openflowplugin-extension-nicira/src/main/yang/openflowplugin-extension-nicira-action.yang @@ -3,7 +3,7 @@ module openflowplugin-extension-nicira-action { namespace "urn:opendaylight:openflowplugin:extension:nicira:action"; prefix "openflowplugin-nicira-action"; - + import yang-ext {prefix ext; revision-date "2013-07-09";} import flow-node-inventory {prefix fni; revision-date 2013-08-19; } import opendaylight-inventory {prefix inv;revision-date "2013-08-19";} @@ -17,13 +17,13 @@ module openflowplugin-extension-nicira-action { import openflow-action {prefix ofaction;revision-date "2015-02-03";} import nicira-action {prefix nicira-action;revision-date "2014-04-21";} - description + description "Nicira openflow action extensions."; revision "2014-07-14" { description "Initial revision"; } - + identity nx-action-reg-load-key { base ext-gen:extension-key; } @@ -179,7 +179,7 @@ module openflowplugin-extension-nicira-action { } } } - + grouping src-choice-grouping { choice src-choice { case src-nx-reg-case { @@ -238,7 +238,7 @@ module openflowplugin-extension-nicira-action { } } } - + grouping range-grouping { leaf start { description "Include value."; @@ -249,7 +249,7 @@ module openflowplugin-extension-nicira-action { type uint16; } } - + grouping nx-action-reg-load-grouping { container nx-reg-load { container dst { @@ -262,7 +262,7 @@ module openflowplugin-extension-nicira-action { } } } - + grouping nx-action-reg-move-grouping { container nx-reg-move { container src { @@ -280,7 +280,7 @@ module openflowplugin-extension-nicira-action { grouping nx-action-output-reg-grouping { container nx-output-reg { container src { - description "Choose the register with the OpenFlow output port, using the number of + description "Choose the register with the OpenFlow output port, using the number of bits specified from the register."; uses src-choice-grouping; leaf ofs_nbits { @@ -355,13 +355,13 @@ bits specified from the register."; } } } - + grouping nx-action-set-nshc-grouping { leaf nshc { type uint32; } } - + grouping nx-action-set-nshc-1-grouping { container nx-set-nshc-1 { description "Sets NSC1 header"; @@ -390,6 +390,22 @@ bits specified from the register."; } } + grouping nx-action-conntrack-grouping { + container nx-conntrack { + leaf flags { + type uint16; + } + leaf zone-src { + type uint32; + } + leaf conntrack-zone { + type uint16; + } + leaf recirc-table { + type uint8; + } + } + } // ACTION augmentations // RPCS 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" { @@ -447,6 +463,11 @@ bits specified from the register."; uses nx-action-set-nsi-grouping; } } + 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-conntrack-rpc-add-flow-write-actions-case { + uses nx-action-conntrack-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-reg-load-rpc-add-flow-apply-actions-case { @@ -493,19 +514,24 @@ bits specified from the register."; uses nx-action-set-nshc-3-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-set-nshc-4-rpc-add-flow-apply-actions-case { uses nx-action-set-nshc-4-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-conntrack-rpc-add-flow-apply-actions-case { + uses nx-action-conntrack-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-set-nsi-rpc-add-flow-apply-actions-case { uses nx-action-set-nsi-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-reg-load-rpc-remove-flow-write-actions-case" { uses nx-action-reg-load-grouping; @@ -561,6 +587,11 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-rpc-remove-flow-write-actions-case { + uses nx-action-conntrack-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-reg-load-rpc-remove-flow-apply-actions-case" { @@ -617,7 +648,12 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-rpc-remove-flow-apply-actions-case { + uses nx-action-conntrack-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-reg-load-rpc-update-flow-original-write-actions-case" { uses nx-action-reg-load-grouping; @@ -673,6 +709,11 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-rpc-update-flow-original-write-actions-case" { + uses nx-action-conntrack-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-reg-load-rpc-update-flow-original-apply-actions-case" { @@ -729,6 +770,11 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-rpc-update-flow-original-apply-actions-case" { + uses nx-action-conntrack-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-reg-load-rpc-update-flow-updated-write-actions-case" { @@ -785,6 +831,11 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-rpc-update-flow-updated-write-actions-case" { + uses nx-action-conntrack-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-reg-load-rpc-update-flow-updated-apply-actions-case" { @@ -841,7 +892,12 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-rpc-update-flow-updated-apply-actions-case" { + uses nx-action-conntrack-grouping; + } + } + augment "/sal-group:add-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" { case "nx-action-reg-load-rpc-add-group-case" { uses nx-action-reg-load-grouping; @@ -897,7 +953,12 @@ bits specified from the register."; uses nx-action-set-nsi-grouping; } } - + augment "/sal-group:add-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" { + case "nx-action-conntrack-rpc-add-group-case" { + uses nx-action-conntrack-grouping; + } + } + augment "/sal-group:remove-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" { case "nx-action-reg-load-rpc-remove-group-case" { uses nx-action-reg-load-grouping; @@ -953,7 +1014,12 @@ bits specified from the register."; uses nx-action-set-nsi-grouping; } } - + augment "/sal-group:remove-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" { + case "nx-action-conntrack-rpc-remove-group-case" { + uses nx-action-conntrack-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-reg-load-rpc-update-group-original-case" { uses nx-action-reg-load-grouping; @@ -1009,6 +1075,11 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-rpc-update-group-original-case" { + uses nx-action-conntrack-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-reg-load-rpc-update-group-updated-case" { @@ -1065,7 +1136,12 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-rpc-update-group-updated-case" { + uses nx-action-conntrack-grouping; + } + } + augment "/sal-packet:transmit-packet/sal-packet:input/sal-packet:action/sal-packet:action" { case "nx-action-reg-load-rpc-transmit-packet-case" { uses nx-action-reg-load-grouping; @@ -1121,7 +1197,12 @@ bits specified from the register."; uses nx-action-set-nsi-grouping; } } - + augment "/sal-packet:transmit-packet/sal-packet:input/sal-packet:action/sal-packet:action" { + case "nx-action-conntrack-rpc-transmit-packet-case" { + uses nx-action-conntrack-grouping; + } + } + // DATA 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-reg-load-nodes-node-table-flow-write-actions-case" { @@ -1178,6 +1259,11 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-nodes-node-table-flow-write-actions-case" { + uses nx-action-conntrack-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-reg-load-nodes-node-table-flow-apply-actions-case" { @@ -1234,7 +1320,12 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-nodes-node-table-flow-apply-actions-case" { + uses nx-action-conntrack-grouping; + } + } + augment "/inv:nodes/inv:node/fni:group/fni:buckets/fni:bucket/fni:action/fni:action" { case "nx-action-reg-load-nodes-node-group-buckets-bucket-actions-case" { uses nx-action-reg-load-grouping; @@ -1290,7 +1381,12 @@ bits specified from the register."; uses nx-action-set-nsi-grouping; } } - + augment "/inv:nodes/inv:node/fni:group/fni:buckets/fni:bucket/fni:action/fni:action" { + case "nx-action-conntrack-nodes-node-group-buckets-bucket-actions-case" { + uses nx-action-conntrack-grouping; + } + } + // NOTIFICATIONS 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-reg-load-notif-flows-statistics-update-write-actions-case" { @@ -1347,6 +1443,11 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-notif-flows-statistics-update-write-actions-case" { + uses nx-action-conntrack-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-reg-load-notif-flows-statistics-update-apply-actions-case" { @@ -1403,7 +1504,12 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-notif-flows-statistics-update-apply-actions-case" { + uses nx-action-conntrack-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-reg-load-notif-group-desc-stats-updated-case" { uses nx-action-reg-load-grouping; @@ -1459,4 +1565,9 @@ bits specified from the register."; uses nx-action-set-nsi-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-conntrack-notif-group-desc-stats-updated-case" { + uses nx-action-conntrack-grouping; + } + } } diff --git a/extension/openflowplugin-extension-nicira/src/main/yang/openflowplugin-extension-nicira-match.yang b/extension/openflowplugin-extension-nicira/src/main/yang/openflowplugin-extension-nicira-match.yang index 3f0ce81372..7e148a5d83 100644 --- a/extension/openflowplugin-extension-nicira/src/main/yang/openflowplugin-extension-nicira-match.yang +++ b/extension/openflowplugin-extension-nicira/src/main/yang/openflowplugin-extension-nicira-match.yang @@ -15,13 +15,13 @@ module openflowplugin-extension-nicira-match { import ietf-inet-types {prefix inet; revision-date "2010-09-24";} import ietf-yang-types {prefix yang; revision-date "2010-09-24";} - description + description "Nicira openflow match extensions."; revision "2014-07-14" { description "Initial revision"; } - + identity nxm-nx-reg0-key { base ext-gen:extension-key; } @@ -109,6 +109,12 @@ module openflowplugin-extension-nicira-match { identity nxm-of-udp-dst-key { base ext-gen:extension-key; } + identity nxm-nx-ct-state-key { + base ext-gen:extension-key; + } + identity nxm-nx-ct-zone-key { + base ext-gen:extension-key; + } grouping ipv4-address-grouping { leaf ipv4-address { type inet:ipv4-address; @@ -176,7 +182,7 @@ module openflowplugin-extension-nicira-match { grouping nxm-of-tcp-dst-grouping { container nxm-of-tcp-dst { leaf port { - type inet:port-number; + type inet:port-number; } leaf mask { type uint16; @@ -278,8 +284,25 @@ module openflowplugin-extension-nicira-match { } } } + grouping nxm-nx-ct-state-grouping { + container nxm-nx-ct-state { + leaf ct-state { + type uint32; + } + leaf mask { + type uint32; + } + } + } + grouping nxm-nx-ct-zone-grouping { + container nxm-nx-ct-zone { + leaf ct-zone { + type uint16; + } + } + } + - grouping all-matches-grouping { uses nxm-nx-reg-grouping; uses nxm-nx-tun-id-grouping; @@ -303,6 +326,8 @@ module openflowplugin-extension-nicira-match { uses nxm-of-tcp-dst-grouping; uses nxm-of-udp-src-grouping; uses nxm-of-udp-dst-grouping; + uses nxm-nx-ct-state-grouping; + uses nxm-nx-ct-zone-grouping; } // MATCH augmentations @@ -323,13 +348,13 @@ module openflowplugin-extension-nicira-match { ext:augment-identifier "nx-aug-match-rpc-update-flow-updated"; uses all-matches-grouping; } - + // DATA augment "/inv:nodes/inv:node/fni:table/fni:flow/fni:match/ext-gen:extension-list/ext-gen:extension" { ext:augment-identifier "nx-aug-match-nodes-node-table-flow"; uses all-matches-grouping; } - + // NOTIFICATIONS augment "/sal-flow:switch-flow-removed/sal-flow:match/ext-gen:extension-list/ext-gen:extension" { ext:augment-identifier "nx-aug-match-notif-switch-flow-removed";