<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>applications</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>bulk-o-matic</artifactId>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>features-parent</artifactId>
- <version>1.7.2-SNAPSHOT</version>
+ <version>1.7.3-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.opendaylight.openflowplugin</groupId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<artifactId>features-flow</artifactId>
<packaging>jar</packaging>
<properties>
- <yangtools.version>1.0.2-SNAPSHOT</yangtools.version>
- <config.version>0.5.2-SNAPSHOT</config.version>
- <mdsal.version>1.4.2-SNAPSHOT</mdsal.version>
- <openflowjava.version>0.8.2-SNAPSHOT</openflowjava.version>
- <lldp.version>0.11.2-SNAPSHOT</lldp.version>
+ <yangtools.version>1.0.3-SNAPSHOT</yangtools.version>
+ <config.version>0.5.3-SNAPSHOT</config.version>
+ <mdsal.version>1.4.3-SNAPSHOT</mdsal.version>
+ <openflowjava.version>0.8.3-SNAPSHOT</openflowjava.version>
+ <lldp.version>0.11.3-SNAPSHOT</lldp.version>
<config.configfile.directory>etc/opendaylight/karaf</config.configfile.directory>
<config.statistics.manager.configfile>30-statistics-manager.xml</config.statistics.manager.configfile>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>applications</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>forwardingrules-manager</artifactId>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>applications</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>forwardingrules-sync</artifactId>
<parent>
<groupId>org.opendaylight.controller</groupId>
<artifactId>config-parent</artifactId>
- <version>0.5.2-SNAPSHOT</version>
+ <version>0.5.3-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>inventory-manager</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<packaging>bundle</packaging>
<dependencyManagement>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>applications</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>lldp-speaker</artifactId>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>applications</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>notification-supplier</artifactId>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>applications</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>of-switch-config-pusher</artifactId>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>applications</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>statistics-manager</artifactId>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>applications</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>table-miss-enforcer</artifactId>
<parent>
<groupId>org.opendaylight.controller</groupId>
<artifactId>config-parent</artifactId>
- <version>0.5.2-SNAPSHOT</version>
+ <version>0.5.3-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>topology-lldp-discovery</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<packaging>bundle</packaging>
<dependencyManagement>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>liblldp</artifactId>
- <version>0.11.2-SNAPSHOT</version>
+ <version>0.11.3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.opendaylight.openflowplugin.model</groupId>
<parent>
<groupId>org.opendaylight.controller</groupId>
<artifactId>config-parent</artifactId>
- <version>0.5.2-SNAPSHOT</version>
+ <version>0.5.3-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.opendaylight.openflowplugin.applications</groupId>
<artifactId>topology-manager</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<packaging>bundle</packaging>
<dependencyManagement>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>1.7.2-SNAPSHOT</version>
+ <version>1.7.3-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-artifacts</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>karaf-parent</artifactId>
- <version>1.7.2-SNAPSHOT</version>
+ <version>1.7.3-SNAPSHOT</version>
<relativePath></relativePath>
</parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-karaf</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<packaging>pom</packaging>
<prerequisites>
<maven>3.0</maven>
</prerequisites>
<properties>
- <openflowplugin.version>0.3.2-SNAPSHOT</openflowplugin.version>
+ <openflowplugin.version>0.3.3-SNAPSHOT</openflowplugin.version>
</properties>
<dependencyManagement>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>drop-test-karaf</artifactId>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>drop-test</artifactId>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>features-parent</artifactId>
- <version>1.7.2-SNAPSHOT</version>
+ <version>1.7.3-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.opendaylight.openflowplugin</groupId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<artifactId>features-openflowplugin-extension-he</artifactId>
<packaging>jar</packaging>
<properties>
- <openflowplugin.version>0.3.2-SNAPSHOT</openflowplugin.version>
+ <openflowplugin.version>0.3.3-SNAPSHOT</openflowplugin.version>
</properties>
<dependencyManagement>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>features-parent</artifactId>
- <version>1.7.2-SNAPSHOT</version>
+ <version>1.7.3-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.opendaylight.openflowplugin</groupId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<artifactId>features-openflowplugin-extension</artifactId>
<packaging>jar</packaging>
<properties>
- <openflowplugin.version>0.3.2-SNAPSHOT</openflowplugin.version>
+ <openflowplugin.version>0.3.3-SNAPSHOT</openflowplugin.version>
</properties>
<dependencyManagement>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-extension-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<artifactId>openflowjava-extension-nicira-api</artifactId>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-extension-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<artifactId>openflowjava-extension-nicira</artifactId>
import org.opendaylight.openflowjava.nx.codec.match.UdpDstCodec;
import org.opendaylight.openflowjava.nx.codec.match.UdpSrcCodec;
import org.opendaylight.openflowjava.nx.codec.match.InPortCodec;
+import org.opendaylight.openflowjava.nx.codec.match.MplsLabelCodec;
import com.google.common.base.Preconditions;
registrator.registerMatchEntryDeserializer(ArpTpaCodec.DESERIALIZER_KEY, NiciraMatchCodecs.ARP_TPA_CODEC);
registrator.registerMatchEntrySerializer(InPortCodec.SERIALIZER_KEY, NiciraMatchCodecs.NXM_OF_IN_PORT_CODEC);
registrator.registerMatchEntryDeserializer(InPortCodec.DESERIALIZER_KEY, NiciraMatchCodecs.NXM_OF_IN_PORT_CODEC);
+ registrator.registerMatchEntrySerializer(MplsLabelCodec.SERIALIZER_KEY, NiciraMatchCodecs.OXM_OF_MPLS_LABEL);
+ registrator.registerMatchEntryDeserializer(MplsLabelCodec.DESERIALIZER_KEY, NiciraMatchCodecs.OXM_OF_MPLS_LABEL);
registrator.registerMatchEntrySerializer(EthDstCodec.SERIALIZER_KEY, NiciraMatchCodecs.ETH_DST_CODEC);
registrator.registerMatchEntryDeserializer(EthDstCodec.DESERIALIZER_KEY, NiciraMatchCodecs.ETH_DST_CODEC);
registrator.registerMatchEntrySerializer(EthSrcCodec.SERIALIZER_KEY, NiciraMatchCodecs.ETH_SRC_CODEC);
registrator.unregisterMatchEntryDeserializer(ArpTpaCodec.DESERIALIZER_KEY);
registrator.unregisterMatchEntrySerializer(InPortCodec.SERIALIZER_KEY);
registrator.unregisterMatchEntryDeserializer(InPortCodec.DESERIALIZER_KEY);
+ registrator.unregisterMatchEntrySerializer(MplsLabelCodec.SERIALIZER_KEY);
+ registrator.unregisterMatchEntryDeserializer(MplsLabelCodec.DESERIALIZER_KEY);
registrator.unregisterMatchEntrySerializer(EthDstCodec.SERIALIZER_KEY);
registrator.unregisterMatchEntryDeserializer(EthDstCodec.DESERIALIZER_KEY);
registrator.unregisterMatchEntrySerializer(EthSrcCodec.SERIALIZER_KEY);
import org.opendaylight.openflowjava.nx.codec.match.IpSrcCodec;
import org.opendaylight.openflowjava.nx.codec.match.IpDstCodec;
import org.opendaylight.openflowjava.nx.codec.match.InPortCodec;
+import org.opendaylight.openflowjava.nx.codec.match.MplsLabelCodec;
import org.opendaylight.openflowjava.nx.codec.match.Nshc1Codec;
import org.opendaylight.openflowjava.nx.codec.match.Nshc2Codec;
import org.opendaylight.openflowjava.nx.codec.match.Nshc3Codec;
public static final ArpThaCodec ARP_THA_CODEC = new ArpThaCodec();
public static final ArpTpaCodec ARP_TPA_CODEC = new ArpTpaCodec();
public static final InPortCodec NXM_OF_IN_PORT_CODEC = new InPortCodec();
+ public static final MplsLabelCodec OXM_OF_MPLS_LABEL = new MplsLabelCodec();
public static final EthDstCodec ETH_DST_CODEC = new EthDstCodec();
public static final EthSrcCodec ETH_SRC_CODEC = new EthSrcCodec();
public static final TunIpv4DstCodec TUN_IPV4_DST_CODEC = new TunIpv4DstCodec();
--- /dev/null
+/*
+ * Copyright (c) 2016 Ericsson, Inc. 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 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.rev150225.MatchField;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm0Class;
+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.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmOfMplsLabel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.oxm.of.mpls.label.grouping.MplsLabelValuesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.OfMplsLabelCaseValue;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.OfMplsLabelCaseValueBuilder;
+
+import io.netty.buffer.ByteBuf;
+
+public class MplsLabelCodec extends AbstractMatchCodec {
+
+ private static final int VALUE_LENGTH = 4;
+ private static final int NXM_FIELD_CODE = 34;
+
+ public static final MatchEntrySerializerKey<Nxm0Class, NxmOfMplsLabel> SERIALIZER_KEY = new MatchEntrySerializerKey<>(
+ EncodeConstants.OF13_VERSION_ID, Nxm0Class.class,
+ NxmOfMplsLabel.class);
+
+ public static final MatchEntryDeserializerKey DESERIALIZER_KEY = new MatchEntryDeserializerKey(
+ EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_0_CLASS,
+ NXM_FIELD_CODE);
+
+ @Override
+ public void serialize(MatchEntry input, ByteBuf outBuffer) {
+ serializeHeader(input, outBuffer);
+ OfMplsLabelCaseValue value = (OfMplsLabelCaseValue) input.getMatchEntryValue();
+ outBuffer.writeInt(value.getMplsLabelValues().getMplsLabel().intValue());
+ }
+
+ @Override
+ public MatchEntry deserialize(ByteBuf message) {
+ MatchEntryBuilder matchEntryBuilder = deserializeHeader(message);
+ OfMplsLabelCaseValueBuilder caseBuilder = new OfMplsLabelCaseValueBuilder();
+ MplsLabelValuesBuilder valuesBuilder = new MplsLabelValuesBuilder();
+ valuesBuilder.setMplsLabel(message.readLong()).build();
+ caseBuilder.setMplsLabelValues(valuesBuilder.build());
+ matchEntryBuilder.setMatchEntryValue(caseBuilder.build());
+ return matchEntryBuilder.build();
+ }
+
+ @Override
+ public int getNxmFieldCode() {
+ return NXM_FIELD_CODE;
+ }
+
+ @Override
+ public int getOxmClassCode() {
+ return OxmMatchConstants.NXM_0_CLASS;
+ }
+
+ @Override
+ public int getValueLength() {
+ return VALUE_LENGTH;
+ }
+
+ @Override
+ public Class<? extends MatchField> getNxmField() {
+ return NxmOfMplsLabel.class;
+ }
+
+ @Override
+ public Class<? extends OxmClassBase> getOxmClass() {
+ return Nxm0Class.class;
+ }
+}
identity nxm-nx-tun-gpe-np {
base ofoxm:match-field;
}
+ identity nxm-of-mpls-label {
+ base ofoxm:match-field;
+ }
grouping ofj-nxm-nx-match-reg-grouping {
}
}
}
+ grouping ofj-oxm-of-mpls-label-grouping {
+ container mpls-label-values {
+ leaf mpls-label {
+ type uint32;
+ }
+ }
+ }
+
grouping ofj-nxm-nx-match-tun-id-grouping {
container tun-id-values {
leaf value {
case eth-src-case-value {
uses ofj-nxm-of-match-eth-src-grouping;
}
+ case of-mpls-label-case-value {
+ uses ofj-oxm-of-mpls-label-grouping;
+ }
case eth-dst-case-value {
uses ofj-nxm-of-match-eth-dst-grouping;
}
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-extension-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-extension-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-extension-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfIpDstCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfIpSrcCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfIpSrcCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfMplsLabelCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfMplsLabelCaseBuilder;
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.NxActionRegMoveNotifFlowsStatisticsUpdateApplyActionsCaseBuilder;
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.NxActionRegMoveNotifFlowsStatisticsUpdateWriteActionsCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.group.desc.stats.updated.group.desc.stats.buckets.bucket.action.action.NxActionRegMoveNotifGroupDescStatsUpdatedCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxNshMdtypeCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxNshNpCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxNshNpCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxOfMplsLabelCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxTunGpeNpCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxTunGpeNpCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxRegCase;
if (dstValue == NiciraMatchCodecs.NXM_OF_IN_PORT_CODEC.getHeaderWithoutHasMask().toLong()) {
return new DstNxOfInPortCaseBuilder().setOfInPort(true).build();
}
+ if (dstValue == NiciraMatchCodecs.OXM_OF_MPLS_LABEL.getHeaderWithoutHasMask().toLong()) {
+ return new DstOfMplsLabelCaseBuilder().setOfMplsLabel(true).build();
+ }
if (dstValue == NiciraMatchCodecs.ETH_DST_CODEC.getHeaderWithoutHasMask().toLong()) {
return new DstOfEthDstCaseBuilder().setOfEthDst(true).build();
}
if (dstChoice instanceof DstNxOfInPortCase) {
return NiciraMatchCodecs.NXM_OF_IN_PORT_CODEC.getHeaderWithoutHasMask().toLong();
}
+ if (dstChoice instanceof DstOfMplsLabelCase) {
+ return NiciraMatchCodecs.OXM_OF_MPLS_LABEL.getHeaderWithoutHasMask().toLong();
+ }
if (dstChoice instanceof DstNxTunIpv4DstCase) {
return NiciraMatchCodecs.TUN_IPV4_DST_CODEC.getHeaderWithoutHasMask().toLong();
}
if (srcChoice instanceof SrcNxOfInPortCase) {
return NiciraMatchCodecs.NXM_OF_IN_PORT_CODEC.getHeaderWithoutHasMask().toLong();
}
+ if (srcChoice instanceof SrcNxOfMplsLabelCase) {
+ return NiciraMatchCodecs.OXM_OF_MPLS_LABEL.getHeaderWithoutHasMask().toLong();
+ }
if (srcChoice instanceof SrcNxTunIpv4DstCase) {
return NiciraMatchCodecs.TUN_IPV4_DST_CODEC.getHeaderWithoutHasMask().toLong();
}
type empty;
}
}
+ grouping oxm-of-mpls-label-grouping {
+ leaf of-mpls-label {
+ type empty;
+ }
+ }
grouping nxm-of-arp-op-grouping {
leaf of-arp-op {
type empty;
case dst-nx-tun-id-case {
uses nxm-nx-tun-id-grouping;
}
+ case dst-of-mpls-label-case {
+ uses oxm-of-mpls-label-grouping;
+ }
case dst-nx-arp-sha-case {
uses nxm-nx-arp-sha-grouping;
}
case src-nx-tun-id-case {
uses nxm-nx-tun-id-grouping;
}
+ case src-nx-of-mpls-label-case {
+ uses oxm-of-mpls-label-grouping;
+ }
case src-nx-arp-sha-case {
uses nxm-nx-arp-sha-grouping;
}
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-extension-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<artifactId>test-extension</artifactId>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>features-parent</artifactId>
- <version>1.7.2-SNAPSHOT</version>
+ <version>1.7.3-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>features-openflowplugin-he</artifactId>
<packaging>jar</packaging>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<properties>
- <yangtools.version>1.0.2-SNAPSHOT</yangtools.version>
- <config.version>0.5.2-SNAPSHOT</config.version>
- <mdsal.version>1.4.2-SNAPSHOT</mdsal.version>
- <openflowjava.version>0.8.2-SNAPSHOT</openflowjava.version>
- <openflowplugin.version>0.3.2-SNAPSHOT</openflowplugin.version>
- <dlux.version>0.4.2-SNAPSHOT</dlux.version>
- <lldp.version>0.11.2-SNAPSHOT</lldp.version>
+ <yangtools.version>1.0.3-SNAPSHOT</yangtools.version>
+ <config.version>0.5.3-SNAPSHOT</config.version>
+ <mdsal.version>1.4.3-SNAPSHOT</mdsal.version>
+ <openflowjava.version>0.8.3-SNAPSHOT</openflowjava.version>
+ <openflowplugin.version>0.3.3-SNAPSHOT</openflowplugin.version>
+ <dlux.version>0.4.3-SNAPSHOT</dlux.version>
+ <lldp.version>0.11.3-SNAPSHOT</lldp.version>
<config.configfile.directory>etc/opendaylight/karaf</config.configfile.directory>
- <restconf.version>1.4.2-SNAPSHOT</restconf.version>
- <mdsal.model.version>0.9.2-SNAPSHOT</mdsal.model.version>
+ <restconf.version>1.4.3-SNAPSHOT</restconf.version>
+ <mdsal.model.version>0.9.3-SNAPSHOT</mdsal.model.version>
</properties>
<dependencyManagement>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>features-parent</artifactId>
- <version>1.7.2-SNAPSHOT</version>
+ <version>1.7.3-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>features-openflowplugin</artifactId>
<packaging>jar</packaging>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<properties>
- <yangtools.version>1.0.2-SNAPSHOT</yangtools.version>
- <config.version>0.5.2-SNAPSHOT</config.version>
- <mdsal.version>1.4.2-SNAPSHOT</mdsal.version>
- <openflowjava.version>0.8.2-SNAPSHOT</openflowjava.version>
- <openflowplugin.version>0.3.2-SNAPSHOT</openflowplugin.version>
- <dlux.version>0.4.2-SNAPSHOT</dlux.version>
- <lldp.version>0.11.2-SNAPSHOT</lldp.version>
+ <yangtools.version>1.0.3-SNAPSHOT</yangtools.version>
+ <config.version>0.5.3-SNAPSHOT</config.version>
+ <mdsal.version>1.4.3-SNAPSHOT</mdsal.version>
+ <openflowjava.version>0.8.3-SNAPSHOT</openflowjava.version>
+ <openflowplugin.version>0.3.3-SNAPSHOT</openflowplugin.version>
+ <dlux.version>0.4.3-SNAPSHOT</dlux.version>
+ <lldp.version>0.11.3-SNAPSHOT</lldp.version>
<config.configfile.directory>etc/opendaylight/karaf</config.configfile.directory>
- <restconf.version>1.4.2-SNAPSHOT</restconf.version>
- <mdsal.model.version>0.9.2-SNAPSHOT</mdsal.model.version>
+ <restconf.version>1.4.3-SNAPSHOT</restconf.version>
+ <mdsal.model.version>0.9.3-SNAPSHOT</mdsal.model.version>
</properties>
<dependencyManagement>
<parent>
<groupId>org.opendaylight.openflowplugin.model</groupId>
<artifactId>model-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<artifactId>model-flow-base</artifactId>
<packaging>bundle</packaging>
<parent>
<groupId>org.opendaylight.openflowplugin.model</groupId>
<artifactId>model-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<artifactId>model-flow-service</artifactId>
<packaging>bundle</packaging>
<parent>
<groupId>org.opendaylight.openflowplugin.model</groupId>
<artifactId>model-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
</parent>
<artifactId>model-flow-statistics</artifactId>
<packaging>bundle</packaging>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<groupId>org.opendaylight.openflowplugin.model</groupId>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
flowDescriptor.getTableKey().getId(), flowDescriptor.getFlowId().getValue(), flowRegistryKey.hashCode());
flowRegistry.put(flowRegistryKey, flowDescriptor);
} catch (IllegalArgumentException ex) {
- LOG.error("Flow with flowId {} already exists in table {}", flowDescriptor.getFlowId().getValue(),
+ LOG.warn("Flow with flowId {} already exists in table {}", flowDescriptor.getFlowId().getValue(),
flowDescriptor.getTableKey().getId());
final FlowId newFlowId = createAlienFlowId(flowDescriptor.getTableKey().getId());
final FlowDescriptor newFlowDescriptor = FlowDescriptorFactory.
import com.google.common.collect.Iterables;
import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.FutureFallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.JdkFutureAdapters;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.Collections;
import java.util.Date;
import java.util.List;
-import java.util.Objects;
import javax.annotation.Nullable;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceRegistry;
import org.opendaylight.openflowplugin.api.openflow.device.TxFacade;
import org.opendaylight.openflowplugin.api.openflow.registry.flow.DeviceFlowRegistry;
-import org.opendaylight.openflowplugin.api.openflow.registry.flow.FlowDescriptor;
import org.opendaylight.openflowplugin.api.openflow.registry.flow.FlowRegistryKey;
import org.opendaylight.openflowplugin.api.openflow.registry.group.DeviceGroupRegistry;
import org.opendaylight.openflowplugin.api.openflow.registry.meter.DeviceMeterRegistry;
import org.slf4j.LoggerFactory;
/**
- * Utils for gatherig statistics
+ * Utils for gathering statistics.
*/
public final class StatisticsGatheringUtils {
}
//TODO: Flow-,Group- and Meter- registry should be not in device context, consider move it in separate class
- static ListenableFuture<Boolean> gatherStatistics(final StatisticsGatherer statisticsGatheringService,
- final DeviceInfo deviceInfo,
- final MultipartType type,
- final TxFacade txFacade,
- final DeviceRegistry registry,
- final Boolean initial,
- final SinglePurposeMultipartReplyTranslator multipartReplyTranslator) {
+ static ListenableFuture<Boolean> gatherStatistics(
+ final StatisticsGatherer statisticsGatheringService,
+ final DeviceInfo deviceInfo,
+ final MultipartType type,
+ final TxFacade txFacade,
+ final DeviceRegistry registry,
+ final Boolean initial,
+ final SinglePurposeMultipartReplyTranslator multipartReplyTranslator) {
EventIdentifier wholeProcessEventIdentifier = null;
if (MultipartType.OFPMPFLOW.equals(type)) {
wholeProcessEventIdentifier = new EventIdentifier(type.toString(), deviceInfo.getNodeId().getValue());
EventsTimeCounter.markStart(wholeProcessEventIdentifier);
}
- final EventIdentifier ofpQueuToRequestContextEventIdentifier = new EventIdentifier(QUEUE2_REQCTX + type.toString(), deviceInfo.getNodeId().toString());
+ final EventIdentifier ofpQueueToRequestContextEventIdentifier
+ = new EventIdentifier(QUEUE2_REQCTX + type.toString(), deviceInfo.getNodeId().toString());
final ListenableFuture<RpcResult<List<MultipartReply>>> statisticsDataInFuture =
JdkFutureAdapters.listenInPoolThread(statisticsGatheringService.getStatisticsOfType(
- ofpQueuToRequestContextEventIdentifier, type));
- return transformAndStoreStatisticsData(statisticsDataInFuture, deviceInfo, wholeProcessEventIdentifier, type, txFacade, registry, initial, multipartReplyTranslator);
+ ofpQueueToRequestContextEventIdentifier, type));
+ return transformAndStoreStatisticsData(
+ statisticsDataInFuture,
+ deviceInfo,
+ wholeProcessEventIdentifier,
+ type,
+ txFacade,
+ registry,
+ initial,
+ multipartReplyTranslator);
}
- private static ListenableFuture<Boolean> transformAndStoreStatisticsData(final ListenableFuture<RpcResult<List<MultipartReply>>> statisticsDataInFuture,
- final DeviceInfo deviceInfo,
- final EventIdentifier eventIdentifier,
- final MultipartType type,
- final TxFacade txFacade,
- final DeviceRegistry registry,
- final boolean initial,
- final SinglePurposeMultipartReplyTranslator multipartReplyTranslator) {
+ private static ListenableFuture<Boolean> transformAndStoreStatisticsData(
+ final ListenableFuture<RpcResult<List<MultipartReply>>> statisticsDataInFuture,
+ final DeviceInfo deviceInfo,
+ final EventIdentifier eventIdentifier,
+ final MultipartType type,
+ final TxFacade txFacade,
+ final DeviceRegistry registry,
+ final boolean initial,
+ final SinglePurposeMultipartReplyTranslator multipartReplyTranslator) {
return Futures.transform(statisticsDataInFuture, new AsyncFunction<RpcResult<List<MultipartReply>>, Boolean>() {
@Nullable
@Override
public ListenableFuture<Boolean> apply(final RpcResult<List<MultipartReply>> rpcResult) {
boolean isMultipartProcessed = Boolean.TRUE;
if (rpcResult.isSuccessful()) {
- LOG.debug("Stats reply successfully received for node {} of type {}", deviceInfo.getNodeId(), type);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Stats reply successfully received for node {} of type {}",
+ deviceInfo.getNodeId(), type);
+ }
// TODO: in case the result value is null then multipart data probably got processed on the fly -
// TODO: this contract should by clearly stated and enforced - now simple true value is returned
multipartData = multipartDataList.get(0);
allMultipartData = Iterables.concat(allMultipartData, multipartDataList);
}
- } catch (final Exception e) {
- LOG.warn("stats processing of type {} for node {} failed during transfomation step",
+ } catch (final TransactionChainClosedException e) {
+ LOG.warn("stats processing of type {} for node {} failed during transformation step",
type, deviceInfo.getNodeId(), e);
return Futures.immediateFailedFuture(e);
}
try {
if (multipartData instanceof GroupStatisticsUpdated) {
- processGroupStatistics((Iterable<GroupStatisticsUpdated>) allMultipartData, deviceInfo, txFacade);
+ processGroupStatistics(
+ (Iterable<GroupStatisticsUpdated>) allMultipartData,
+ deviceInfo,
+ txFacade);
} else if (multipartData instanceof MeterStatisticsUpdated) {
- processMetersStatistics((Iterable<MeterStatisticsUpdated>) allMultipartData, deviceInfo, txFacade);
+ processMetersStatistics(
+ (Iterable<MeterStatisticsUpdated>) allMultipartData,
+ deviceInfo,
+ txFacade);
} else if (multipartData instanceof NodeConnectorStatisticsUpdate) {
- processNodeConnectorStatistics((Iterable<NodeConnectorStatisticsUpdate>) allMultipartData, deviceInfo, txFacade);
+ processNodeConnectorStatistics(
+ (Iterable<NodeConnectorStatisticsUpdate>) allMultipartData,
+ deviceInfo,
+ txFacade);
} else if (multipartData instanceof FlowTableStatisticsUpdate) {
- processFlowTableStatistics((Iterable<FlowTableStatisticsUpdate>) allMultipartData, deviceInfo, txFacade);
+ processFlowTableStatistics(
+ (Iterable<FlowTableStatisticsUpdate>) allMultipartData,
+ deviceInfo,
+ txFacade);
} else if (multipartData instanceof QueueStatisticsUpdate) {
- processQueueStatistics((Iterable<QueueStatisticsUpdate>) allMultipartData, deviceInfo, txFacade);
+ processQueueStatistics(
+ (Iterable<QueueStatisticsUpdate>) allMultipartData,
+ deviceInfo,
+ txFacade);
} else if (multipartData instanceof FlowsStatisticsUpdate) {
- /* FlowStat Processing is realized by NettyThread only by initPhase, otherwise it is realized
+ /* FlowStat Processing is realized by NettyThread only by initPhase,
+ * otherwise it is realized
* by MD-SAL thread */
- return processFlowStatistics((Iterable<FlowsStatisticsUpdate>) allMultipartData, deviceInfo, txFacade, registry.getDeviceFlowRegistry(), initial, eventIdentifier);
+ return processFlowStatistics(
+ (Iterable<FlowsStatisticsUpdate>) allMultipartData,
+ deviceInfo,
+ txFacade,
+ registry.getDeviceFlowRegistry(),
+ initial,
+ eventIdentifier);
} else if (multipartData instanceof GroupDescStatsUpdated) {
- processGroupDescStats((Iterable<GroupDescStatsUpdated>) allMultipartData, deviceInfo, txFacade, registry.getDeviceGroupRegistry());
+ processGroupDescStats(
+ (Iterable<GroupDescStatsUpdated>) allMultipartData,
+ deviceInfo,
+ txFacade,
+ registry.getDeviceGroupRegistry());
} else if (multipartData instanceof MeterConfigStatsUpdated) {
- processMeterConfigStatsUpdated((Iterable<MeterConfigStatsUpdated>) allMultipartData, deviceInfo, txFacade, registry.getDeviceMeterRegistry());
+ processMeterConfigStatsUpdated(
+ (Iterable<MeterConfigStatsUpdated>) allMultipartData,
+ deviceInfo,
+ txFacade,
+ registry.getDeviceMeterRegistry());
} else {
isMultipartProcessed = Boolean.FALSE;
}
- } catch (final Exception e) {
+ } catch (final TransactionChainClosedException e) {
LOG.warn("stats processing of type {} for node {} failed during write-to-tx step",
type, deviceInfo.getNodeId(), e);
return Futures.immediateFailedFuture(e);
}
- LOG.debug("Stats reply added to transaction for node {} of type {}", deviceInfo.getNodeId(), type);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Stats reply added to transaction for node {} of type {}",
+ deviceInfo.getNodeId(), type);
+ }
//TODO : implement experimenter
} else {
- LOG.debug("Stats reply was empty for node {} of type {}", deviceInfo.getNodeId(), type);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Stats reply was empty for node {} of type {}",
+ deviceInfo.getNodeId(), type);
+ }
}
} else {
- LOG.debug("Stats reply FAILED for node {} of type {}: {}", deviceInfo.getNodeId(), type, rpcResult.getErrors());
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Stats reply FAILED for node {} of type {}: {}",
+ deviceInfo.getNodeId(), type, rpcResult.getErrors());
+ }
isMultipartProcessed = Boolean.FALSE;
}
return Futures.immediateFuture(isMultipartProcessed);
private static void processMeterConfigStatsUpdated(final Iterable<MeterConfigStatsUpdated> data,
final DeviceInfo deviceInfo,
final TxFacade txFacade,
- final DeviceMeterRegistry meterRegistry) throws Exception {
+ final DeviceMeterRegistry meterRegistry)
+ throws TransactionChainClosedException {
final InstanceIdentifier<FlowCapableNode> fNodeIdent = assembleFlowCapableNodeInstanceIdentifier(deviceInfo);
deleteAllKnownMeters(meterRegistry, fNodeIdent, txFacade);
for (final MeterConfigStatsUpdated meterConfigStatsUpdated : data) {
for (final MeterConfigStats meterConfigStats : meterConfigStatsUpdated.getMeterConfigStats()) {
final MeterId meterId = meterConfigStats.getMeterId();
- final InstanceIdentifier<Meter> meterInstanceIdentifier = fNodeIdent.child(Meter.class, new MeterKey(meterId));
+ final InstanceIdentifier<Meter> meterInstanceIdentifier
+ = fNodeIdent.child(Meter.class, new MeterKey(meterId));
final MeterBuilder meterBuilder = new MeterBuilder(meterConfigStats);
meterBuilder.setKey(new MeterKey(meterId));
meterBuilder.addAugmentation(NodeMeterStatistics.class, new NodeMeterStatisticsBuilder().build());
meterRegistry.store(meterId);
- txFacade.writeToTransaction(LogicalDatastoreType.OPERATIONAL, meterInstanceIdentifier, meterBuilder.build());
+ txFacade.writeToTransaction(
+ LogicalDatastoreType.OPERATIONAL,
+ meterInstanceIdentifier,
+ meterBuilder.build());
}
}
txFacade.submitTransaction();
final DeviceFlowRegistry flowRegistry,
final boolean initial,
final EventIdentifier eventIdentifier) {
- final ListenableFuture<Void> deleteFuture = initial ? Futures.immediateFuture(null) : deleteAllKnownFlows(deviceInfo,
+ final ListenableFuture<Void> deleteFuture
+ = initial ? Futures.immediateFuture(null) : deleteAllKnownFlows(deviceInfo,
flowRegistry, txFacade);
- return Futures.transform(deleteFuture, new Function<Void, Boolean>() {
-
- @Override
- public Boolean apply(final Void input) {
- writeFlowStatistics(data, deviceInfo, flowRegistry, txFacade);
- txFacade.submitTransaction();
- EventsTimeCounter.markEnd(eventIdentifier);
- return Boolean.TRUE;
- }
+ return Futures.transform(deleteFuture, (Function<Void, Boolean>) input -> {
+ writeFlowStatistics(data, deviceInfo, flowRegistry, txFacade);
+ txFacade.submitTransaction();
+ EventsTimeCounter.markEnd(eventIdentifier);
+ return Boolean.TRUE;
});
}
for (final FlowsStatisticsUpdate flowsStatistics : data) {
for (final FlowAndStatisticsMapList flowStat : flowsStatistics.getFlowAndStatisticsMapList()) {
final FlowBuilder flowBuilder = new FlowBuilder(flowStat);
- flowBuilder.addAugmentation(FlowStatisticsData.class, refineFlowStatisticsAugmentation(flowStat).build());
+ flowBuilder.addAugmentation(
+ FlowStatisticsData.class,
+ refineFlowStatisticsAugmentation(flowStat).build());
final short tableId = flowStat.getTableId();
final FlowRegistryKey flowRegistryKey = FlowRegistryKeyFactory.create(flowBuilder.build());
final FlowKey flowKey = new FlowKey(flowId);
flowBuilder.setKey(flowKey);
final TableKey tableKey = new TableKey(tableId);
- final InstanceIdentifier<Flow> flowIdent = fNodeIdent.child(Table.class, tableKey).child(Flow.class, flowKey);
+ final InstanceIdentifier<Flow> flowIdent
+ = fNodeIdent.child(Table.class, tableKey).child(Flow.class, flowKey);
txFacade.writeToTransaction(LogicalDatastoreType.OPERATIONAL, flowIdent, flowBuilder.build());
}
}
- } catch (Exception e) {
+ } catch (TransactionChainClosedException e) {
LOG.warn("Not able to write to transaction: {}", e.getMessage());
}
}
/**
- * Method extracts flow statistics out of flowAndStatistics model
+ * Method extracts flow statistics out of flowAndStatistics model.
*
- * @param flowAndStats
+ * @param flowAndStats flow statistics map list
*/
- private static FlowStatisticsDataBuilder refineFlowStatisticsAugmentation(final FlowAndStatisticsMapList flowAndStats) {
+ private static FlowStatisticsDataBuilder refineFlowStatisticsAugmentation(
+ final FlowAndStatisticsMapList flowAndStats) {
final FlowStatisticsBuilder flowStatisticsBuilder = new FlowStatisticsBuilder(flowAndStats);
final FlowStatisticsDataBuilder flowStatisticsDataBld = new FlowStatisticsDataBuilder();
flowStatisticsDataBld.setFlowStatistics(flowStatisticsBuilder.build());
public static ListenableFuture<Void> deleteAllKnownFlows(final DeviceInfo deviceInfo,
final DeviceFlowRegistry registry,
final TxFacade txFacade) {
- final InstanceIdentifier<FlowCapableNode> flowCapableNodePath = assembleFlowCapableNodeInstanceIdentifier(deviceInfo);
+ final InstanceIdentifier<FlowCapableNode> flowCapableNodePath
+ = assembleFlowCapableNodeInstanceIdentifier(deviceInfo);
final ReadOnlyTransaction readTx = txFacade.getReadTransaction();
final CheckedFuture<Optional<FlowCapableNode>, ReadFailedException> flowCapableNodeFuture = readTx.read(
LogicalDatastoreType.OPERATIONAL, flowCapableNodePath);
/* we wish to close readTx for fallBack */
- Futures.withFallback(flowCapableNodeFuture, new FutureFallback<Optional<FlowCapableNode>>() {
-
- @Override
- public ListenableFuture<Optional<FlowCapableNode>> create(final Throwable t) throws Exception {
- readTx.close();
- return Futures.immediateFailedFuture(t);
- }
+ Futures.withFallback(flowCapableNodeFuture, t -> {
+ readTx.close();
+ return Futures.immediateFailedFuture(t);
});
/*
* we have to read actual tables with all information before we set empty Flow list, merge is expensive and
* not applicable for lists
*/
- return Futures.transform(flowCapableNodeFuture, new AsyncFunction<Optional<FlowCapableNode>, Void>() {
-
- @Override
- public ListenableFuture<Void> apply(final Optional<FlowCapableNode> flowCapNodeOpt) throws Exception {
+ return Futures.transform(
+ flowCapableNodeFuture, (AsyncFunction<Optional<FlowCapableNode>, Void>) flowCapNodeOpt -> {
if (flowCapNodeOpt.isPresent()) {
for (final Table tableData : flowCapNodeOpt.get().getTable()) {
final Table table = new TableBuilder(tableData).setFlow(Collections.<Flow>emptyList()).build();
- final InstanceIdentifier<Table> iiToTable = flowCapableNodePath.child(Table.class, tableData.getKey());
+ final InstanceIdentifier<Table> iiToTable
+ = flowCapableNodePath.child(Table.class, tableData.getKey());
txFacade.writeToTransaction(LogicalDatastoreType.OPERATIONAL, iiToTable, table);
}
}
readTx.close();
return Futures.immediateFuture(null);
- }
-
- });
+ });
}
- private static void processQueueStatistics(final Iterable<QueueStatisticsUpdate> data, final DeviceInfo deviceInfo, final TxFacade txFacade) throws Exception {
+ private static void processQueueStatistics(
+ final Iterable<QueueStatisticsUpdate> data,
+ final DeviceInfo deviceInfo,
+ final TxFacade txFacade) throws TransactionChainClosedException {
// TODO: clean all queues of all node-connectors before writing up-to-date stats
final InstanceIdentifier<Node> nodeIdent = deviceInfo.getNodeInstanceIdentifier();
for (final QueueStatisticsUpdate queueStatisticsUpdate : data) {
final QueueBuilder queueBuilder = new QueueBuilder()
.setKey(qKey)
.setQueueId(queueStat.getQueueId())
- // node-connector-id is already contained in parent node and the port-id here is of incompatible format
+ // node-connector-id is already contained in parent node
+ // and the port-id here is of incompatible format
.addAugmentation(FlowCapableNodeConnectorQueueStatisticsData.class, statBuild.build());
txFacade.writeToTransaction(LogicalDatastoreType.OPERATIONAL, queueIdent, queueBuilder.build());
}
txFacade.submitTransaction();
}
- private static void processFlowTableStatistics(final Iterable<FlowTableStatisticsUpdate> data, final DeviceInfo deviceInfo, final TxFacade txFacade) throws Exception {
+ private static void processFlowTableStatistics(
+ final Iterable<FlowTableStatisticsUpdate> data,
+ final DeviceInfo deviceInfo,
+ final TxFacade txFacade) throws TransactionChainClosedException {
final InstanceIdentifier<FlowCapableNode> fNodeIdent = assembleFlowCapableNodeInstanceIdentifier(deviceInfo);
for (final FlowTableStatisticsUpdate flowTableStatisticsUpdate : data) {
for (final FlowTableAndStatisticsMap tableStat : flowTableStatisticsUpdate.getFlowTableAndStatisticsMap()) {
- final InstanceIdentifier<FlowTableStatistics> tStatIdent = fNodeIdent.child(Table.class, new TableKey(tableStat.getTableId().getValue()))
+ final InstanceIdentifier<FlowTableStatistics> tStatIdent
+ = fNodeIdent.child(Table.class, new TableKey(tableStat.getTableId().getValue()))
.augmentation(FlowTableStatisticsData.class).child(FlowTableStatistics.class);
final FlowTableStatistics stats = new FlowTableStatisticsBuilder(tableStat).build();
txFacade.writeToTransaction(LogicalDatastoreType.OPERATIONAL, tStatIdent, stats);
txFacade.submitTransaction();
}
- private static void processNodeConnectorStatistics(final Iterable<NodeConnectorStatisticsUpdate> data, final DeviceInfo deviceInfo, final TxFacade txFacade) throws Exception {
+ private static void processNodeConnectorStatistics(
+ final Iterable<NodeConnectorStatisticsUpdate> data,
+ final DeviceInfo deviceInfo,
+ final TxFacade txFacade) throws TransactionChainClosedException {
final InstanceIdentifier<Node> nodeIdent = deviceInfo.getNodeInstanceIdentifier();
for (final NodeConnectorStatisticsUpdate nodeConnectorStatisticsUpdate : data) {
- for (final NodeConnectorStatisticsAndPortNumberMap nConnectPort : nodeConnectorStatisticsUpdate.getNodeConnectorStatisticsAndPortNumberMap()) {
- final FlowCapableNodeConnectorStatistics stats = new FlowCapableNodeConnectorStatisticsBuilder(nConnectPort).build();
- final NodeConnectorKey key = new NodeConnectorKey(nConnectPort.getNodeConnectorId());
+ for (final NodeConnectorStatisticsAndPortNumberMap nodeConnectPort :
+ nodeConnectorStatisticsUpdate.getNodeConnectorStatisticsAndPortNumberMap()) {
+ final FlowCapableNodeConnectorStatistics stats
+ = new FlowCapableNodeConnectorStatisticsBuilder(nodeConnectPort).build();
+ final NodeConnectorKey key = new NodeConnectorKey(nodeConnectPort.getNodeConnectorId());
final InstanceIdentifier<NodeConnector> nodeConnectorIdent = nodeIdent.child(NodeConnector.class, key);
final InstanceIdentifier<FlowCapableNodeConnectorStatisticsData> nodeConnStatIdent = nodeConnectorIdent
.augmentation(FlowCapableNodeConnectorStatisticsData.class);
private static void processMetersStatistics(final Iterable<MeterStatisticsUpdated> data,
final DeviceInfo deviceInfo,
- final TxFacade txFacade) throws Exception {
+ final TxFacade txFacade) throws TransactionChainClosedException {
final InstanceIdentifier<FlowCapableNode> fNodeIdent = assembleFlowCapableNodeInstanceIdentifier(deviceInfo);
for (final MeterStatisticsUpdated meterStatisticsUpdated : data) {
- for (final MeterStats mStat : meterStatisticsUpdated.getMeterStats()) {
- final MeterStatistics stats = new MeterStatisticsBuilder(mStat).build();
- final MeterId meterId = mStat.getMeterId();
+ for (final MeterStats meterStats : meterStatisticsUpdated.getMeterStats()) {
+ final MeterStatistics stats = new MeterStatisticsBuilder(meterStats).build();
+ final MeterId meterId = meterStats.getMeterId();
final InstanceIdentifier<Meter> meterIdent = fNodeIdent.child(Meter.class, new MeterKey(meterId));
final InstanceIdentifier<NodeMeterStatistics> nodeMeterStatIdent = meterIdent
.augmentation(NodeMeterStatistics.class);
txFacade.submitTransaction();
}
- private static void deleteAllKnownMeters(final DeviceMeterRegistry meterRegistry, final InstanceIdentifier<FlowCapableNode> fNodeIdent, final TxFacade txFacade) throws Exception {
+ private static void deleteAllKnownMeters(
+ final DeviceMeterRegistry meterRegistry,
+ final InstanceIdentifier<FlowCapableNode> flowNodeIdent,
+ final TxFacade txFacade) throws TransactionChainClosedException {
for (final MeterId meterId : meterRegistry.getAllMeterIds()) {
- final InstanceIdentifier<Meter> meterIdent = fNodeIdent.child(Meter.class, new MeterKey(meterId));
+ final InstanceIdentifier<Meter> meterIdent = flowNodeIdent.child(Meter.class, new MeterKey(meterId));
txFacade.addDeleteToTxChain(LogicalDatastoreType.OPERATIONAL, meterIdent);
}
meterRegistry.removeMarked();
}
- private static void processGroupDescStats(final Iterable<GroupDescStatsUpdated> data, final DeviceInfo deviceInfo, final TxFacade txFacade, final DeviceGroupRegistry groupRegistry) throws Exception {
+ private static void processGroupDescStats(
+ final Iterable<GroupDescStatsUpdated> data,
+ final DeviceInfo deviceInfo,
+ final TxFacade txFacade,
+ final DeviceGroupRegistry groupRegistry) throws TransactionChainClosedException {
final InstanceIdentifier<FlowCapableNode> fNodeIdent = assembleFlowCapableNodeInstanceIdentifier(deviceInfo);
deleteAllKnownGroups(txFacade, fNodeIdent, groupRegistry);
txFacade.submitTransaction();
}
- private static void deleteAllKnownGroups(final TxFacade txFacade, final InstanceIdentifier<FlowCapableNode> fNodeIdent, final DeviceGroupRegistry groupRegistry) throws Exception {
+ private static void deleteAllKnownGroups(
+ final TxFacade txFacade,
+ final InstanceIdentifier<FlowCapableNode> flowNodeIdent,
+ final DeviceGroupRegistry groupRegistry) throws TransactionChainClosedException {
for (final GroupId groupId : groupRegistry.getAllGroupIds()) {
- final InstanceIdentifier<Group> groupIdent = fNodeIdent.child(Group.class, new GroupKey(groupId));
+ final InstanceIdentifier<Group> groupIdent = flowNodeIdent.child(Group.class, new GroupKey(groupId));
txFacade.addDeleteToTxChain(LogicalDatastoreType.OPERATIONAL, groupIdent);
}
groupRegistry.removeMarked();
}
- private static void processGroupStatistics(final Iterable<GroupStatisticsUpdated> data, final DeviceInfo deviceInfo, final TxFacade txFacade) throws Exception {
+ private static void processGroupStatistics(
+ final Iterable<GroupStatisticsUpdated> data,
+ final DeviceInfo deviceInfo,
+ final TxFacade txFacade) throws TransactionChainClosedException {
final InstanceIdentifier<FlowCapableNode> fNodeIdent = assembleFlowCapableNodeInstanceIdentifier(deviceInfo);
for (final GroupStatisticsUpdated groupStatistics : data) {
for (final GroupStats groupStats : groupStatistics.getGroupStats()) {
- final InstanceIdentifier<Group> groupIdent = fNodeIdent.child(Group.class, new GroupKey(groupStats.getGroupId()));
+ final InstanceIdentifier<Group> groupIdent
+ = fNodeIdent.child(Group.class, new GroupKey(groupStats.getGroupId()));
final InstanceIdentifier<NodeGroupStatistics> nGroupStatIdent = groupIdent
.augmentation(NodeGroupStatistics.class);
txFacade.submitTransaction();
}
- private static InstanceIdentifier<FlowCapableNode> assembleFlowCapableNodeInstanceIdentifier(final DeviceInfo deviceInfo) {
+ private static InstanceIdentifier<FlowCapableNode> assembleFlowCapableNodeInstanceIdentifier(
+ final DeviceInfo deviceInfo) {
return deviceInfo.getNodeInstanceIdentifier().augmentation(FlowCapableNode.class);
}
/**
- * Writes snapshot gathering start timestamp + cleans end mark
+ * Writes snapshot gathering start timestamp + cleans end mark.
*
* @param deviceContext txManager + node path keeper
*/
}
/**
- * Writes snapshot gathering end timestamp + outcome
+ * Writes snapshot gathering end timestamp + outcome.
*
* @param deviceContext txManager + node path keeper
* @param succeeded outcome of currently finished gathering
import org.opendaylight.openflowplugin.api.openflow.registry.meter.DeviceMeterRegistry;
import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.EventIdentifier;
import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.StatisticsGatherer;
-import org.opendaylight.openflowplugin.impl.registry.flow.FlowRegistryKeyFactory;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
fireAndCheck(type, statsData);
final InstanceIdentifier<GroupStatistics> groupPath = dummyNodePath.augmentation(FlowCapableNode.class)
- .child(Group.class, new GroupKey(new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId(groupIdValue)))
+ .child(Group.class, new GroupKey(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId(groupIdValue)))
.augmentation(NodeGroupStatistics.class)
.child(GroupStatistics.class);
verify(txFacade).writeToTransaction(Matchers.eq(LogicalDatastoreType.OPERATIONAL),
fireAndCheck(type, statsData);
- final org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId storedGroupId = new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId(groupIdValue);
- final KeyedInstanceIdentifier<Group, GroupKey> groupPath = dummyNodePath.augmentation(FlowCapableNode.class).child(Group.class, new GroupKey(storedGroupId));
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId storedGroupId
+ = new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId(groupIdValue);
+ final KeyedInstanceIdentifier<Group, GroupKey> groupPath
+ = dummyNodePath.augmentation(FlowCapableNode.class).child(Group.class, new GroupKey(storedGroupId));
- verify(deviceContext, Mockito.never()).addDeleteToTxChain(Matchers.eq(LogicalDatastoreType.OPERATIONAL), Matchers.<InstanceIdentifier<?>> any());
+ verify(deviceContext, Mockito.never()).addDeleteToTxChain(
+ Matchers.eq(LogicalDatastoreType.OPERATIONAL), Matchers.<InstanceIdentifier<?>>any());
verify(deviceGroupRegistry).removeMarked();
verify(deviceGroupRegistry).store(storedGroupId);
verify(txFacade).writeToTransaction(
fireAndCheck(type, statsData);
final InstanceIdentifier<MeterStatistics> meterPath = dummyNodePath.augmentation(FlowCapableNode.class)
- .child(Meter.class, new MeterKey(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(meterIdValue)))
+ .child(Meter.class, new MeterKey(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(meterIdValue)))
.augmentation(NodeMeterStatistics.class)
.child(MeterStatistics.class);
verify(txFacade).writeToTransaction(Matchers.eq(LogicalDatastoreType.OPERATIONAL),
fireAndCheck(type, statsData);
final InstanceIdentifier<FlowCapableNodeConnectorStatistics> portPath = dummyNodePath
- .child(NodeConnector.class, new NodeConnectorKey(new NodeConnectorId("openflow:" + DUMMY_NODE_ID_VALUE + ":11")))
+ .child(NodeConnector.class, new NodeConnectorKey(
+ new NodeConnectorId("openflow:" + DUMMY_NODE_ID_VALUE + ":11")))
.augmentation(FlowCapableNodeConnectorStatisticsData.class)
.child(FlowCapableNodeConnectorStatistics.class);
verify(txFacade).writeToTransaction(
fireAndCheck(type, statsData);
final KeyedInstanceIdentifier<Queue, QueueKey> queuePath = dummyNodePath
- .child(NodeConnector.class, new NodeConnectorKey(new NodeConnectorId("openflow:" + DUMMY_NODE_ID_VALUE + ":11")))
+ .child(NodeConnector.class, new NodeConnectorKey(
+ new NodeConnectorId("openflow:" + DUMMY_NODE_ID_VALUE + ":11")))
.augmentation(FlowCapableNodeConnector.class)
.child(Queue.class, new QueueKey(new QueueId(queueIdValue)));
verify(txFacade).writeToTransaction(
final short tableId = 0;
final MultipartType type = MultipartType.OFPMPFLOW;
- final InstanceIdentifier<FlowCapableNode> nodePath = deviceInfo.getNodeInstanceIdentifier().augmentation(FlowCapableNode.class);
+ final InstanceIdentifier<FlowCapableNode> nodePath
+ = deviceInfo.getNodeInstanceIdentifier().augmentation(FlowCapableNode.class);
final TableBuilder tableDataBld = new TableBuilder();
tableDataBld.setId(tableId);
final FlowCapableNodeBuilder flowNodeBuilder = new FlowCapableNodeBuilder();
flowNodeBuilder.setTable(Collections.singletonList(tableDataBld.build()));
final Optional<FlowCapableNode> flowNodeOpt = Optional.of(flowNodeBuilder.build());
- final CheckedFuture<Optional<FlowCapableNode>, ReadFailedException> flowNodeFuture = Futures.immediateCheckedFuture(flowNodeOpt);
+ final CheckedFuture<Optional<FlowCapableNode>, ReadFailedException> flowNodeFuture
+ = Futures.immediateCheckedFuture(flowNodeOpt);
when(readTx.read(LogicalDatastoreType.OPERATIONAL, nodePath)).thenReturn(flowNodeFuture);
when(flowDescriptor.getFlowId()).thenReturn(flowId);
- final org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder matchBld =
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder
+ matchBld =
new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder()
.setMatchEntry(Collections.<MatchEntry>emptyList());
final FlowStatsBuilder flowStatsBld = new FlowStatsBuilder()
.child(Table.class, new TableKey((short) 0));
final KeyedInstanceIdentifier<Flow, FlowKey> flowPath = tablePath.child(Flow.class, new FlowKey(flowId));
- verify(deviceContext, Mockito.never()).addDeleteToTxChain(Matchers.eq(LogicalDatastoreType.OPERATIONAL), Matchers.<InstanceIdentifier<?>>any());
+ verify(deviceContext, Mockito.never()).addDeleteToTxChain(
+ Matchers.eq(LogicalDatastoreType.OPERATIONAL), Matchers.<InstanceIdentifier<?>>any());
final InOrder inOrder = Mockito.inOrder(txFacade);
- inOrder.verify(txFacade).writeToTransaction(Matchers.eq(LogicalDatastoreType.OPERATIONAL), Matchers.eq(tablePath), Matchers.any(Table.class));
+ inOrder.verify(txFacade).writeToTransaction(Matchers.eq(
+ LogicalDatastoreType.OPERATIONAL), Matchers.eq(tablePath), Matchers.any(Table.class));
}
@Test
final MultipartReplyMeterConfigBuilder mpReplyMeterConfigBld = new MultipartReplyMeterConfigBuilder();
mpReplyMeterConfigBld.setMeterConfig(Lists.newArrayList(meterConfigBld.build()));
- final MultipartReplyMeterConfigCaseBuilder mpReplyMeterConfigCaseBld = new MultipartReplyMeterConfigCaseBuilder();
+ final MultipartReplyMeterConfigCaseBuilder mpReplyMeterConfigCaseBld
+ = new MultipartReplyMeterConfigCaseBuilder();
mpReplyMeterConfigCaseBld.setMultipartReplyMeterConfig(mpReplyMeterConfigBld.build());
final MultipartReply meterConfigUpdated = assembleMPReplyMessage(type, mpReplyMeterConfigCaseBld.build());
new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(meterIdValue);
final KeyedInstanceIdentifier<Meter, MeterKey> meterPath = dummyNodePath.augmentation(FlowCapableNode.class)
.child(Meter.class, new MeterKey(meterId));
- verify(deviceContext, Mockito.never()).addDeleteToTxChain(Matchers.eq(LogicalDatastoreType.OPERATIONAL), Matchers.<InstanceIdentifier<?>>any());
+ verify(deviceContext, Mockito.never()).addDeleteToTxChain(
+ Matchers.eq(LogicalDatastoreType.OPERATIONAL), Matchers.<InstanceIdentifier<?>>any());
verify(deviceMeterRegistry).store(meterId);
- verify(txFacade).writeToTransaction(Matchers.eq(LogicalDatastoreType.OPERATIONAL), Matchers.eq(meterPath), Matchers.any(Meter.class));
+ verify(txFacade).writeToTransaction(
+ Matchers.eq(LogicalDatastoreType.OPERATIONAL), Matchers.eq(meterPath), Matchers.any(Meter.class));
}
- private void fireAndCheck(final MultipartType type, final List<MultipartReply> statsData) throws InterruptedException, ExecutionException, TimeoutException {
+ private void fireAndCheck(
+ final MultipartType type,
+ final List<MultipartReply> statsData) throws InterruptedException, ExecutionException, TimeoutException {
when(statisticsService.getStatisticsOfType(Matchers.any(EventIdentifier.class), Matchers.eq(type)))
.thenReturn(Futures.immediateFuture(RpcResultBuilder.success(statsData).build()));
deviceContext,
false,
singlePurposeMultipartReplyTranslator);
- Assert.assertTrue(gatherStatisticsResult.get(1, TimeUnit.SECONDS).booleanValue());
+ Assert.assertTrue(gatherStatisticsResult.get(1, TimeUnit.SECONDS));
verify(txFacade).submitTransaction();
}
- private static MultipartReplyMessage assembleMPReplyMessage(final MultipartType type, final MultipartReplyBody mpReplyGroupCaseBld) {
+ private static MultipartReplyMessage assembleMPReplyMessage(
+ final MultipartType type,
+ final MultipartReplyBody mpReplyGroupCaseBld) {
return new MultipartReplyMessageBuilder()
.setMultipartReplyBody(mpReplyGroupCaseBld)
.setType(type)
}
private static BucketStats createBucketStat(final long byteCount, final long packetCount) {
- return new BucketStatsBuilder().setByteCount(BigInteger.valueOf(byteCount)).setPacketCount(BigInteger.valueOf(packetCount)).build();
+ return new BucketStatsBuilder().setByteCount(
+ BigInteger.valueOf(byteCount)).setPacketCount(BigInteger.valueOf(packetCount)).build();
}
@Test
public void testDeleteAllKnownFlows() throws Exception {
final short tableId = 0;
- final InstanceIdentifier<FlowCapableNode> nodePath = deviceInfo.getNodeInstanceIdentifier().augmentation(FlowCapableNode.class);
+ final InstanceIdentifier<FlowCapableNode> nodePath
+ = deviceInfo.getNodeInstanceIdentifier().augmentation(FlowCapableNode.class);
final TableBuilder tableDataBld = new TableBuilder();
tableDataBld.setId(tableId);
final FlowCapableNodeBuilder flowNodeBuilder = new FlowCapableNodeBuilder();
flowNodeBuilder.setTable(Collections.singletonList(tableDataBld.build()));
final Optional<FlowCapableNode> flowNodeOpt = Optional.of(flowNodeBuilder.build());
- final CheckedFuture<Optional<FlowCapableNode>, ReadFailedException> flowNodeFuture = Futures.immediateCheckedFuture(flowNodeOpt);
+ final CheckedFuture<Optional<FlowCapableNode>, ReadFailedException> flowNodeFuture
+ = Futures.immediateCheckedFuture(flowNodeOpt);
when(readTx.read(LogicalDatastoreType.OPERATIONAL, nodePath)).thenReturn(flowNodeFuture);
final KeyedInstanceIdentifier<Table, TableKey> tablePath = deviceInfo.getNodeInstanceIdentifier()
.augmentation(FlowCapableNode.class).child(Table.class, new TableKey(tableId));
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent</artifactId>
- <version>1.7.2-SNAPSHOT</version>
+ <version>1.7.3-SNAPSHOT</version>
<relativePath/>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<packaging>pom</packaging>
<scm>
<properties>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
- <openflowjava.version>0.8.2-SNAPSHOT</openflowjava.version>
- <openflowplugin.version>0.3.2-SNAPSHOT</openflowplugin.version>
- <sal.api.version>0.11.2-SNAPSHOT</sal.api.version>
+ <openflowjava.version>0.8.3-SNAPSHOT</openflowjava.version>
+ <openflowplugin.version>0.3.3-SNAPSHOT</openflowplugin.version>
+ <sal.api.version>0.11.3-SNAPSHOT</sal.api.version>
<jmxGeneratorPath>target/generated-sources/config</jmxGeneratorPath>
<salGeneratorPath>target/generated-sources/sal</salGeneratorPath>
<exi.nagasena.version>0000.0002.0053.0</exi.nagasena.version>
- <controller.distribution.version>0.4.2-SNAPSHOT</controller.distribution.version>
+ <controller.distribution.version>0.4.3-SNAPSHOT</controller.distribution.version>
- <config.version>0.5.2-SNAPSHOT</config.version>
- <mdsal.version>1.4.2-SNAPSHOT</mdsal.version>
- <mdsal.model.version>0.9.2-SNAPSHOT</mdsal.model.version>
- <yangtools.version>1.0.2-SNAPSHOT</yangtools.version>
+ <config.version>0.5.3-SNAPSHOT</config.version>
+ <mdsal.version>1.4.3-SNAPSHOT</mdsal.version>
+ <mdsal.model.version>0.9.3-SNAPSHOT</mdsal.model.version>
+ <yangtools.version>1.0.3-SNAPSHOT</yangtools.version>
</properties>
<dependencyManagement>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>2.1.2-SNAPSHOT</version>
+ <version>2.1.3-SNAPSHOT</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>parent</relativePath>
</parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-aggregator</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<name>openflowplugin</name> <!-- Used by Sonar to set project name -->
<packaging>pom</packaging>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../../parent</relativePath>
</parent>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../../parent</relativePath>
</parent>
<artifactId>sample-consumer</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<packaging>bundle</packaging>
<build>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>test-common</artifactId>
<parent>
<groupId>org.opendaylight.openflowplugin</groupId>
<artifactId>openflowplugin-parent</artifactId>
- <version>0.3.2-SNAPSHOT</version>
+ <version>0.3.3-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>test-provider</artifactId>