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.match.NiciraMatchCodecs;
+import org.opendaylight.ovs.nx.ofjava.codec.match.NspCodec;
import com.google.common.base.Preconditions;
registrator.registerActionDeserializer(SetNsiCodec.DESERIALIZER_KEY, NiciraActionCodecs.SET_NSI_CODEC);
registrator.registerActionSerializer(SetNsiCodec.SERIALIZER_KEY, NiciraActionCodecs.SET_NSI_CODEC);
+
+ registrator.registerMatchEntrySerializer(NspCodec.SERIALIZER_KEY, NiciraMatchCodecs.NSP_CODEC);
+ registrator.registerMatchEntryDeserializer(NspCodec.DESERIALIZER_KEY, NiciraMatchCodecs.NSP_CODEC);
}
public void unregisterExtensions() {
registrator.unregisterActionSerializer(SetNsiCodec.SERIALIZER_KEY);
registrator.unregisterActionDeserializer(SetNspCodec.DESERIALIZER_KEY);
registrator.unregisterActionSerializer(SetNspCodec.SERIALIZER_KEY);
+
+ registrator.unregisterMatchEntrySerializer(NspCodec.SERIALIZER_KEY);
+ registrator.unregisterMatchEntryDeserializer(NspCodec.DESERIALIZER_KEY);
}
@Override
*
* Authors : Madhu Venugopal
*/
-package org.opendaylight.ovs.nx.ofjava;
+package org.opendaylight.ovs.nx.ofjava.codec.match;
public class NiciraMatchCodecs {
+ public static final NspCodec NSP_CODEC = new NspCodec();
}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * 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 : Madhu Venugopal
+ */
+
+package org.opendaylight.ovs.nx.ofjava.codec.match;
+import io.netty.buffer.ByteBuf;
+
+import org.opendaylight.openflowjava.nx.codec.match.AbstractMatchCodec;
+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.openflow.oxm.rev130731.MatchField;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Nxm1Class;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmClassBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.NxmNxNsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.OfjAugNxMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.OfjAugNxMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.ofj.nxm.nx.match.nsp.grouping.NspValuesBuilder;
+
+public class NspCodec extends AbstractMatchCodec {
+
+ private static final int VALUE_LENGTH = 4;
+ private static final int NXM_FIELD_CODE = 37;
+ public static final MatchEntrySerializerKey<Nxm1Class, NxmNxNsp> SERIALIZER_KEY = new MatchEntrySerializerKey<>(
+ EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNsp.class);
+ public static final MatchEntryDeserializerKey DESERIALIZER_KEY = new MatchEntryDeserializerKey(
+ EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, NXM_FIELD_CODE);
+
+ @Override
+ public void serialize(MatchEntries input, ByteBuf outBuffer) {
+ serializeHeader(input, outBuffer);
+ Long nsp = input.getAugmentation(OfjAugNxMatch.class).getNspValues().getNsp();
+ outBuffer.writeInt(nsp.intValue());
+ }
+
+ @Override
+ public MatchEntries deserialize(ByteBuf message) {
+ MatchEntriesBuilder matchEntriesBuilder = deserializeHeader(message);
+ OfjAugNxMatchBuilder augNxMatchBuilder = new OfjAugNxMatchBuilder();
+ augNxMatchBuilder.setNspValues(new NspValuesBuilder().setNsp(message.readUnsignedInt()).build());
+ matchEntriesBuilder.addAugmentation(OfjAugNxMatch.class, augNxMatchBuilder.build());
+ return matchEntriesBuilder.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<? extends MatchField> getNxmField() {
+ return NxmNxNsp.class;
+ }
+
+ @Override
+ public Class<? extends OxmClassBase> getOxmClass() {
+ return Nxm1Class.class;
+ }
+}
yang-version 1;
namespace "urn:opendaylight:ovs:nx:match";
- prefix "nx-match";
+ prefix "ovs-nx-match";
import openflow-extensible-match {prefix ofoxm;}
import openflow-types {prefix oft;}
import yang-ext {prefix ext; revision-date "2013-07-09";}
description
- "Nicira openflow match extensions";
+ "OVS Openflow NX match extensions";
revision "2014-04-21" {
description "Initial revision";
}
-}
+
+ identity nxm-nx-nsp {
+ base ofoxm:match-field;
+ }
+
+ grouping ofj-nxm-nx-match-nsp-grouping {
+ container nsp-values {
+ leaf nsp {
+ type uint32;
+ }
+ }
+ }
+
+ augment "/ofoxm:oxm-container/ofoxm:match-entries" {
+ ext:augment-identifier "ofj-aug_nx_match";
+ uses ofj-nxm-nx-match-nsp-grouping;
+ }
+}
\ No newline at end of file
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.match.NspConvertor;
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.match.NspCodec;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowplugin.extension.api.ConverterExtensionKey;
import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava;
import org.opendaylight.openflowplugin.extension.api.ExtensionConverterRegistrator;
import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
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.match.rev140714.NxmNxNspKey;
import org.opendaylight.yangtools.concepts.ObjectRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 NspConvertor NSP_CONVERTOR = new NspConvertor();
@Override
public void close() {
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.registerMatchConvertor(new ConverterExtensionKey<>(NxmNxNspKey.class, EncodeConstants.OF13_VERSION_ID), NSP_CONVERTOR));
+ registrations.add(extensionConverterRegistrator.registerMatchConvertor(NspCodec.SERIALIZER_KEY, NSP_CONVERTOR));
}
private void registerAction13(
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * 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 : Madhu Venugopal
+ */
+package org.opendaylight.ovs.nx.sal.convertor.match;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.opendaylight.openflowjava.nx.api.NiciraConstants;
+import org.opendaylight.openflowplugin.extension.api.GroupingResolver;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmClassBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.OfjAugNxMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.Extension;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchNodesNodeTableFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchNotifPacketIn;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchNotifSwitchFlowRemoved;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchNotifUpdateFlowStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchRpcAddFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchRpcRemoveFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchRpcUpdateFlowOriginal;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchRpcUpdateFlowUpdated;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxmNxNspGrouping;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+
+public class MatchUtil {
+
+ private final static Set<Class<? extends Augmentation<Extension>>> augmentationsOfExtension = new HashSet<>();
+ public final static GroupingResolver<NxmNxNspGrouping, Extension> nspResolver = new GroupingResolver<>(
+ NxmNxNspGrouping.class);
+ public final static ExperimenterIdMatchEntry EXPERIMENTER_ID_MATCH_ENTRY;
+
+ static {
+ augmentationsOfExtension.add(NxAugMatchRpcAddFlow.class);
+ augmentationsOfExtension.add(NxAugMatchRpcRemoveFlow.class);
+ augmentationsOfExtension.add(NxAugMatchRpcUpdateFlowOriginal.class);
+ augmentationsOfExtension.add(NxAugMatchRpcUpdateFlowUpdated.class);
+ augmentationsOfExtension.add(NxAugMatchNodesNodeTableFlow.class);
+ augmentationsOfExtension.add(NxAugMatchNotifSwitchFlowRemoved.class);
+ augmentationsOfExtension.add(NxAugMatchNotifPacketIn.class);
+ augmentationsOfExtension.add(NxAugMatchNotifUpdateFlowStats.class);
+ nspResolver.setAugmentations(augmentationsOfExtension);
+ ExperimenterIdMatchEntryBuilder experimenterIdMatchEntryBuilder = new ExperimenterIdMatchEntryBuilder();
+ experimenterIdMatchEntryBuilder.setExperimenter(new ExperimenterId(NiciraConstants.NX_VENDOR_ID));
+ EXPERIMENTER_ID_MATCH_ENTRY = experimenterIdMatchEntryBuilder.build();
+ }
+
+ public static MatchEntries createNiciraMatchEntries(Class<? extends OxmClassBase> oxmClass,
+ Class<? extends MatchField> oxmMatchField, boolean hasMask, OfjAugNxMatch augNxMatch) {
+ MatchEntriesBuilder matchEntriesBuilder = new MatchEntriesBuilder();
+ matchEntriesBuilder.setOxmClass(oxmClass).setOxmMatchField(oxmMatchField).setHasMask(hasMask);
+ matchEntriesBuilder.addAugmentation(ExperimenterIdMatchEntry.class, EXPERIMENTER_ID_MATCH_ENTRY);
+ matchEntriesBuilder.addAugmentation(OfjAugNxMatch.class, augNxMatch);
+ return matchEntriesBuilder.build();
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * 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 : Madhu Venugopal
+ */
+package org.opendaylight.ovs.nx.sal.convertor.match;
+
+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.rev130731.Nxm1Class;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.OfjAugNxMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.OfjAugNxMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.ofj.nxm.nx.match.nsp.grouping.NspValues;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.ofj.nxm.nx.match.nsp.grouping.NspValuesBuilder;
+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.ovs.nx.sal.match.rev140714.NxAugMatchNotifPacketIn;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchNotifPacketInBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchNotifSwitchFlowRemoved;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchNotifSwitchFlowRemovedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchNotifUpdateFlowStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxAugMatchNotifUpdateFlowStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.NxmNxNspGrouping;
+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.nxm.nx.nsp.grouping.NxmNxNsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.match.rev140714.nxm.nx.nsp.grouping.NxmNxNspBuilder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+
+import com.google.common.base.Optional;
+public class NspConvertor implements ConvertorToOFJava<MatchEntries>, ConvertorFromOFJava<MatchEntries, MatchPath> {
+ @Override
+ public ExtensionAugment<? extends Augmentation<Extension>> convert(MatchEntries input, MatchPath path) {
+ NspValues values = input.getAugmentation(OfjAugNxMatch.class).getNspValues();
+ return resolveAugmentation(new NxmNxNspBuilder().setValue(values.getNsp()).build(), path,
+ NxmNxNspKey.class);
+ }
+
+ private static ExtensionAugment<? extends Augmentation<Extension>> resolveAugmentation(NxmNxNsp value,
+ MatchPath path, Class<? extends ExtensionKey> key) {
+ switch (path) {
+ case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_MATCH:
+ return new ExtensionAugment<>(NxAugMatchNotifUpdateFlowStats.class,
+ new NxAugMatchNotifUpdateFlowStatsBuilder().setNxmNxNsp(value).build(), key);
+ case PACKETRECEIVED_MATCH:
+ return new ExtensionAugment<>(NxAugMatchNotifPacketIn.class, new NxAugMatchNotifPacketInBuilder()
+ .setNxmNxNsp(value).build(), key);
+ case SWITCHFLOWREMOVED_MATCH:
+ return new ExtensionAugment<>(NxAugMatchNotifSwitchFlowRemoved.class,
+ new NxAugMatchNotifSwitchFlowRemovedBuilder().setNxmNxNsp(value).build(), key);
+ default:
+ throw new CodecPreconditionException(path);
+ }
+ }
+
+ @Override
+ public MatchEntries convert(Extension extension) {
+ Optional<NxmNxNspGrouping> matchGrouping = MatchUtil.nspResolver.getExtension(extension);
+ if (!matchGrouping.isPresent()) {
+ throw new CodecPreconditionException(extension);
+ }
+ Long value = matchGrouping.get().getNxmNxNsp().getValue();
+ OfjAugNxMatchBuilder augNxMatchBuilder = new OfjAugNxMatchBuilder().setNspValues(new NspValuesBuilder()
+ .setNsp(value).build());
+ return MatchUtil
+ .createNiciraMatchEntries(
+ Nxm1Class.class,
+ org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.match.rev140421.NxmNxNsp.class,
+ false, augNxMatchBuilder.build());
+ }
+
+}
namespace "urn:opendaylight:ovs:nx:sal:match";
prefix "ovs-nx-sal-match";
+ 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";}
+ import sal-flow {prefix sal-flow;revision-date "2013-08-19";}
+ import packet-processing {prefix sal-packet;revision-date "2013-07-09";}
+ import openflowplugin-extension-general {prefix ext-gen;revision-date "2014-07-14";}
+ import opendaylight-flow-statistics {prefix odl-flow-stats;revision-date "2013-08-19";}
+ import nicira-match {prefix nicira-match;revision-date "2014-04-21";}
+ import ietf-inet-types {prefix inet; revision-date "2010-09-24";}
+ import ietf-yang-types {prefix yang; revision-date "2010-09-24";}
+
description
- "Nicira openflow match extensions.";
+ "OVS Openflow NX match extensions.";
revision "2014-07-14" {
description "Initial revision";
}
-}
+
+ identity nxm-nx-nsp-key {
+ base ext-gen:extension-key;
+ }
+
+ grouping nxm-nx-nsp-grouping {
+ container nxm-nx-nsp {
+ leaf value {
+ type uint32;
+ }
+ }
+ }
+
+ grouping all-matches-grouping {
+ uses nxm-nx-nsp-grouping;
+ }
+
+ // MATCH augmentations
+ // RPCS
+ augment "/sal-flow:add-flow/sal-flow:input/sal-flow:match/ext-gen:extension-list/ext-gen:extension" {
+ ext:augment-identifier "nx-aug-match-rpc-add-flow";
+ uses all-matches-grouping;
+ }
+ augment "/sal-flow:remove-flow/sal-flow:input/sal-flow:match/ext-gen:extension-list/ext-gen:extension" {
+ ext:augment-identifier "nx-aug-match-rpc-remove-flow";
+ uses all-matches-grouping;
+ }
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:original-flow/sal-flow:match/ext-gen:extension-list/ext-gen:extension" {
+ ext:augment-identifier "nx-aug-match-rpc-update-flow-original";
+ uses all-matches-grouping;
+ }
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:updated-flow/sal-flow:match/ext-gen:extension-list/ext-gen:extension" {
+ 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";
+ uses all-matches-grouping;
+ }
+ augment "/sal-packet:packet-received/sal-packet:match/ext-gen:extension-list/ext-gen:extension" {
+ ext:augment-identifier "nx-aug-match-notif-packet-in";
+ uses all-matches-grouping;
+ }
+ augment "/odl-flow-stats:flows-statistics-update/odl-flow-stats:flow-and-statistics-map-list/odl-flow-stats:match/ext-gen:extension-list/ext-gen:extension" {
+ ext:augment-identifier "nx-aug-match-notif-update-flow-stats";
+ uses all-matches-grouping;
+ }
+}
\ No newline at end of file