* 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.openflow.md.core.sal.convertor.match;
-
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
-import org.opendaylight.openflowjava.util.ByteBufUtils;
import org.opendaylight.openflowplugin.api.OFConstants;
import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
import org.opendaylight.openflowplugin.extension.api.ConverterExtensionKey;
import org.opendaylight.openflowplugin.openflow.md.core.session.OFSessionUtil;
import org.opendaylight.openflowplugin.openflow.md.util.ByteUtil;
import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.IetfYangUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetField;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatch;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer4Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.PacketTypeMatch;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.ProtocolMatchFields;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TcpFlagsMatch;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatch;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.protocol.match.fields.Pbb;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.approved.extensions.rev160802.TcpFlags;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.approved.extensions.rev160802.TcpFlagsContainer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.approved.extensions.rev160802.TcpFlagsContainerBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.approved.extensions.rev160802.oxm.container.match.entry.value.experimenter.id._case.TcpFlagsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.oxm.container.match.entry.value.ExperimenterIdCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.oxm.container.match.entry.value.experimenter.id._case.ExperimenterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.approved.extensions.rev160802.tcp.flags.container.TcpFlagsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.experimenter.id.match.entry.ExperimenterIdCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.experimenter.id.match.entry.experimenter.id._case.ExperimenterBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PacketType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsBosCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsLabelCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsTcCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PacketTypeCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PbbIsidCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TunnelIdCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.bos._case.MplsBosBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.label._case.MplsLabelBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.tc._case.MplsTcBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.packet.type._case.PacketTypeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.pbb.isid._case.PbbIsidBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tunnel.id._case.TunnelIdBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.vid._case.VlanVidBuilder;
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.GeneralExtensionListGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.list.grouping.ExtensionList;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint8;
/**
- * Utility class for converting a MD-SAL Flow into the OF flow mod
+ * Utility class for converting a MD-SAL Flow into the OF flow mod.
*/
public class MatchConvertor extends Convertor<Match, List<MatchEntry>, VersionConvertorData> {
- private static final List<Class<?>> TYPES = Arrays.asList(
+ private static final List<Class<?>> TYPES = List.of(
Match.class,
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match.class,
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.mod.removed.Match.class,
org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received.Match.class,
org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.in.message.Match.class,
- org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match.class,
+ org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature
+ .prop.type.Match.class,
SetField.class);
- private static final ConvertorProcessor<Layer3Match, List<MatchEntry>, VersionConvertorData> LAYER3_PROCESSOR = new ConvertorProcessor<Layer3Match, List<MatchEntry>, VersionConvertorData>()
+ private static final ConvertorProcessor<Layer3Match, List<MatchEntry>, VersionConvertorData> LAYER3_PROCESSOR =
+ new ConvertorProcessor<Layer3Match, List<MatchEntry>, VersionConvertorData>()
.addCase(new SalToOfIpv4MatchArbitraryBitMaskCase())
.addCase(new SalToOfIpv4MatchCase())
.addCase(new SalToOfTunnelIpv4MatchCase())
.addCase(new SalToOfIpv6MatchArbitraryBitMaskCase())
.addCase(new SalToOfIpv6MatchCase());
- private static final ConvertorProcessor<Layer4Match, List<MatchEntry>, VersionConvertorData> LAYER4_PROCESSOR = new ConvertorProcessor<Layer4Match, List<MatchEntry>, VersionConvertorData>()
+ private static final ConvertorProcessor<Layer4Match, List<MatchEntry>, VersionConvertorData> LAYER4_PROCESSOR =
+ new ConvertorProcessor<Layer4Match, List<MatchEntry>, VersionConvertorData>()
.addCase(new SalToOfTcpMatchCase())
.addCase(new SalToOfUdpMatchCase())
.addCase(new SalToOfSctpMatchCase());
private static final byte[] VLAN_VID_MASK = new byte[]{16, 0};
private static void layer3Match(final List<MatchEntry> matchEntryList, final Layer3Match layer3Match,
- ConvertorExecutor converterExecutor,
+ final ConvertorExecutor converterExecutor,
final ExtensionConverterProvider extensionConvertorProvider) {
- java.util.Optional<List<MatchEntry>> result = LAYER3_PROCESSOR.process(layer3Match, converterExecutor
- );
-
- if (result.isPresent()) {
- matchEntryList.addAll(result.get());
- }
+ LAYER3_PROCESSOR.process(layer3Match, converterExecutor).ifPresent(matchEntryList::addAll);
}
private static void layer4Match(final List<MatchEntry> matchEntryList, final Layer4Match layer4Match,
- ConvertorExecutor converterExecutor, final ExtensionConverterProvider extensionConvertorProvider) {
- java.util.Optional<List<MatchEntry>> result = LAYER4_PROCESSOR.process(layer4Match, converterExecutor
- );
-
- if (result.isPresent()) {
- matchEntryList.addAll(result.get());
- }
+ final ConvertorExecutor converterExecutor, final ExtensionConverterProvider extensionConvertorProvider) {
+ LAYER4_PROCESSOR.process(layer4Match, converterExecutor).ifPresent(matchEntryList::addAll);
}
- private static void inPortMatch(final List<MatchEntry> matchEntryList, NodeConnectorId inPort) {
+ private static void inPortMatch(final List<MatchEntry> matchEntryList, final NodeConnectorId inPort) {
if (inPort == null) {
return;
}
//TODO: currently this matchconverter is mapped to OF1.3 in MatchInjector. Will need to revisit during 1.4+
- final long portNumber = InventoryDataServiceUtil.portNumberfromNodeConnectorId(OpenflowVersion.OF13, inPort);
+ final Uint32 portNumber = InventoryDataServiceUtil.portNumberfromNodeConnectorId(OpenflowVersion.OF13, inPort);
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(InPort.class);
+ matchEntryBuilder.setOxmMatchField(InPort.VALUE);
InPortCaseBuilder caseBuilder = new InPortCaseBuilder();
InPortBuilder portBuilder = new InPortBuilder();
portBuilder.setPortNumber(new PortNumber(portNumber));
matchEntryList.add(matchEntryBuilder.build());
}
- private static void inPhyPortMatch(final List<MatchEntry> matchEntryList, NodeConnectorId inPhyPort) {
+ private static void inPhyPortMatch(final List<MatchEntry> matchEntryList, final NodeConnectorId inPhyPort) {
if (inPhyPort == null) {
return;
}
//TODO: currently this matchconverter is mapped to OF1.3 in MatchInjector. Will need to revisit during 1.4+
- final long portNumber = InventoryDataServiceUtil.portNumberfromNodeConnectorId(OpenflowVersion.OF13, inPhyPort);
+ final Uint32 portNumber = InventoryDataServiceUtil.portNumberfromNodeConnectorId(OpenflowVersion.OF13,
+ inPhyPort);
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(InPhyPort.class);
+ matchEntryBuilder.setOxmMatchField(InPhyPort.VALUE);
InPhyPortCaseBuilder caseBuilder = new InPhyPortCaseBuilder();
InPhyPortBuilder portBuilder = new InPhyPortBuilder();
portBuilder.setPortNumber(new PortNumber(portNumber));
}
private static void metadataMatch(final List<MatchEntry> matchEntryList,
- final org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Metadata metadata) {
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Metadata metadata) {
if (metadata == null) {
return;
}
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- boolean hasmask = metadata.getMetadataMask() != null;
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setOxmMatchField(Metadata.class);
+ final boolean hasmask = metadata.getMetadataMask() != null;
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
+ matchEntryBuilder.setOxmMatchField(Metadata.VALUE);
MetadataCaseBuilder metadataCaseBuilder = new MetadataCaseBuilder();
- org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder metadataBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder();
- metadataBuilder.setMetadata(ByteUtil.convertBigIntegerToNBytes(metadata.getMetadata(), OFConstants.SIZE_OF_LONG_IN_BYTES));
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry
+ .value.metadata._case.MetadataBuilder metadataBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight
+ .openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder();
+ metadataBuilder.setMetadata(ByteUtil.uint64toBytes(metadata.getMetadata()));
if (hasmask) {
- metadataBuilder.setMask(ByteUtil.convertBigIntegerToNBytes(metadata.getMetadataMask(), OFConstants.SIZE_OF_LONG_IN_BYTES));
+ metadataBuilder.setMask(ByteUtil.uint64toBytes(metadata.getMetadataMask()));
}
metadataCaseBuilder.setMetadata(metadataBuilder.build());
matchEntryList.add(matchEntryBuilder.build());
}
+ private static void packetTypeMatch(final List<MatchEntry> matchEntryList, final PacketTypeMatch packetTypeMatch) {
+ if (packetTypeMatch == null) {
+ return;
+ }
+
+ MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
+ matchEntryBuilder.setOxmMatchField(PacketType.VALUE);
+ matchEntryBuilder.setHasMask(false);
+ PacketTypeCaseBuilder packetTypeCaseBuilder = new PacketTypeCaseBuilder();
+ PacketTypeBuilder packetTypeBuilder = new PacketTypeBuilder();
+ packetTypeBuilder.setPacketType(packetTypeMatch.getPacketType());
+ packetTypeCaseBuilder.setPacketType(packetTypeBuilder.build());
+ matchEntryBuilder.setMatchEntryValue(packetTypeCaseBuilder.build());
+ matchEntryList.add(matchEntryBuilder.build());
+ }
+
private static void tunnelMatch(final List<MatchEntry> matchEntryList,
- final org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Tunnel tunnel) {
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Tunnel tunnel) {
if (tunnel == null) {
return;
}
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();
TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();
boolean hasMask = tunnel.getTunnelMask() != null;
if (hasMask) {
- tunnelIdBuilder.setMask(ByteUtil.convertBigIntegerToNBytes(tunnel.getTunnelMask(), OFConstants.SIZE_OF_LONG_IN_BYTES));
+ tunnelIdBuilder.setMask(ByteUtil.uint64toBytes(tunnel.getTunnelMask()));
}
- tunnelIdBuilder.setTunnelId(ByteUtil.convertBigIntegerToNBytes(tunnel.getTunnelId(), OFConstants.SIZE_OF_LONG_IN_BYTES));
+ tunnelIdBuilder.setTunnelId(ByteUtil.uint64toBytes(tunnel.getTunnelId()));
tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());
+
+ MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
matchEntryBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());
matchEntryBuilder.setHasMask(hasMask);
- matchEntryBuilder.setOxmMatchField(TunnelId.class);
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
+ matchEntryBuilder.setOxmMatchField(TunnelId.VALUE);
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
matchEntryList.add(matchEntryBuilder.build());
}
if (vlanMatch.getVlanId() != null) {
VlanId vlanId = vlanMatch.getVlanId();
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setOxmMatchField(VlanVid.class);
- VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
+ matchEntryBuilder.setOxmMatchField(VlanVid.VALUE);
VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();
boolean setCfiBit = false;
- Integer vidEntryValue = 0;
+ Uint16 vidEntryValue = Uint16.ZERO;
boolean hasmask = false;
- if (Boolean.TRUE.equals(vlanId.isVlanIdPresent())) {
+ if (Boolean.TRUE.equals(vlanId.getVlanIdPresent())) {
setCfiBit = true;
if (vlanId.getVlanId() != null) {
vidEntryValue = vlanId.getVlanId().getValue();
}
- hasmask = vidEntryValue == 0;
+ hasmask = vidEntryValue.toJava() == 0;
if (hasmask) {
vlanVidBuilder.setMask(VLAN_VID_MASK);
}
vlanVidBuilder.setCfiBit(setCfiBit);
vlanVidBuilder.setVlanVid(vidEntryValue);
+ VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();
vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());
matchEntryBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());
matchEntryBuilder.setHasMask(hasmask);
EthernetDestination ethernetDestination = ethernetMatch.getEthernetDestination();
if (ethernetDestination != null) {
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setOxmMatchField(EthDst.class);
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
+ matchEntryBuilder.setOxmMatchField(EthDst.VALUE);
EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();
EthDstBuilder ethDstBuilder = new EthDstBuilder();
ethDstBuilder.setMacAddress(ethernetDestination.getAddress());
boolean hasMask = ethernetDestination.getMask() != null;
if (hasMask) {
- ethDstBuilder.setMask(ByteBufUtils.macAddressToBytes(ethernetDestination.getMask().getValue()));
+ ethDstBuilder.setMask(IetfYangUtil.INSTANCE.macAddressBytes(ethernetDestination.getMask()));
}
ethDstCaseBuilder.setEthDst(ethDstBuilder.build());
EthernetSource ethernetSource = ethernetMatch.getEthernetSource();
if (ethernetSource != null) {
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setOxmMatchField(EthSrc.class);
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
+ matchEntryBuilder.setOxmMatchField(EthSrc.VALUE);
EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();
EthSrcBuilder ethDstBuilder = new EthSrcBuilder();
ethDstBuilder.setMacAddress(ethernetSource.getAddress());
boolean hasMask = ethernetSource.getMask() != null;
if (hasMask) {
- ethDstBuilder.setMask(ByteBufUtils.macAddressToBytes(ethernetSource.getMask().getValue()));
+ ethDstBuilder.setMask(IetfYangUtil.INSTANCE.macAddressBytes(ethernetSource.getMask()));
}
ethSrcCaseBuilder.setEthSrc(ethDstBuilder.build());
}
}
- private static void tcpFlagsMatch(List<MatchEntry> matchEntryList, TcpFlagsMatch tcpFlagsMatch) {
+ private static void tcpFlagsMatch(final List<MatchEntry> matchEntryList, final TcpFlagsMatch tcpFlagsMatch) {
ExperimenterIdCaseBuilder expIdCaseBuilder = new ExperimenterIdCaseBuilder();
if (tcpFlagsMatch != null) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(ExperimenterClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(TcpFlags.class);
+ MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder()
+ .setOxmClass(ExperimenterClass.VALUE)
+ .setHasMask(false)
+ .setOxmMatchField(TcpFlags.VALUE);
TcpFlagsContainerBuilder tcpFlagsContainerBuilder = new TcpFlagsContainerBuilder();
TcpFlagsBuilder tcpFlagsBuilder = new TcpFlagsBuilder();
tcpFlagsBuilder.setFlags(tcpFlagsMatch.getTcpFlags());
- if(tcpFlagsMatch.getTcpFlagsMask() != null) {
+ if (tcpFlagsMatch.getTcpFlagsMask() != null) {
matchEntryBuilder.setHasMask(true);
tcpFlagsBuilder.setMask(ByteUtil.unsignedShortToBytes(tcpFlagsMatch.getTcpFlagsMask()));
}
tcpFlagsContainerBuilder.setTcpFlags(tcpFlagsBuilder.build());
//Set experimenter ID.
- ExperimenterBuilder experimenterBuilder = new ExperimenterBuilder();
- experimenterBuilder.setExperimenter(new ExperimenterId(OFApprovedExperimenterIds.MATCH_TCP_FLAGS_EXP_ID));
- expIdCaseBuilder.setExperimenter(experimenterBuilder.build());
+ expIdCaseBuilder.setExperimenter(new ExperimenterBuilder()
+ .setExperimenter(OFApprovedExperimenterIds.MATCH_TCP_FLAGS_EXP_ID)
+ .build());
- expIdCaseBuilder.addAugmentation(TcpFlagsContainer.class, tcpFlagsContainerBuilder.build());
+ expIdCaseBuilder.addAugmentation(tcpFlagsContainerBuilder.build());
matchEntryBuilder.setMatchEntryValue(expIdCaseBuilder.build());
matchEntryList.add(matchEntryBuilder.build());
}
private static MatchEntry toOfMplsPbb(final Pbb pbb) {
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- boolean hasmask = pbb.getPbbMask() != null;
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setOxmMatchField(PbbIsid.class);
+ final boolean hasmask = pbb.getPbbMask() != null;
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
+ matchEntryBuilder.setOxmMatchField(PbbIsid.VALUE);
PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();
PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();
pbbIsidBuilder.setIsid(pbb.getPbbIsid());
return matchEntryBuilder.build();
}
- private static MatchEntry toOfMplsTc(final Short mplsTc) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(MplsTc.class);
- MplsTcCaseBuilder mplsTcCaseBuilder = new MplsTcCaseBuilder();
- MplsTcBuilder mplsTcBuilder = new MplsTcBuilder();
- mplsTcBuilder.setTc(mplsTc);
- mplsTcCaseBuilder.setMplsTc(mplsTcBuilder.build());
- matchEntryBuilder.setMatchEntryValue(mplsTcCaseBuilder.build());
- return matchEntryBuilder.build();
+ private static MatchEntry toOfMplsTc(final Uint8 mplsTc) {
+ return new MatchEntryBuilder()
+ .setOxmClass(OpenflowBasicClass.VALUE)
+ .setHasMask(Boolean.FALSE)
+ .setOxmMatchField(MplsTc.VALUE)
+ .setMatchEntryValue(new MplsTcCaseBuilder()
+ .setMplsTc(new MplsTcBuilder().setTc(mplsTc).build())
+ .build())
+ .build();
}
- private static MatchEntry toOfMplsBos(final Short mplsBos) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(MplsBos.class);
- MplsBosCaseBuilder mplsBosCaseBuilder = new MplsBosCaseBuilder();
- MplsBosBuilder mplsBosBuilder = new MplsBosBuilder();
- mplsBosBuilder.setBos(mplsBos != 0);
- mplsBosCaseBuilder.setMplsBos(mplsBosBuilder.build());
- matchEntryBuilder.setMatchEntryValue(mplsBosCaseBuilder.build());
- return matchEntryBuilder.build();
+ private static MatchEntry toOfMplsBos(final Uint8 mplsBos) {
+ return new MatchEntryBuilder()
+ .setOxmClass(OpenflowBasicClass.VALUE)
+ .setHasMask(Boolean.FALSE)
+ .setOxmMatchField(MplsBos.VALUE)
+ .setMatchEntryValue(new MplsBosCaseBuilder()
+ .setMplsBos(new MplsBosBuilder().setBos(mplsBos.toJava() != 0).build())
+ .build())
+ .build();
}
- private static MatchEntry toOfMplsLabel(final Long mplsLabel) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(MplsLabel.class);
- MplsLabelCaseBuilder mplsLabelCaseBuilder = new MplsLabelCaseBuilder();
- MplsLabelBuilder mplsLabelBuilder = new MplsLabelBuilder();
- mplsLabelBuilder.setMplsLabel(mplsLabel);
- mplsLabelCaseBuilder.setMplsLabel(mplsLabelBuilder.build());
- matchEntryBuilder.setMatchEntryValue(mplsLabelCaseBuilder.build());
- return matchEntryBuilder.build();
+ private static MatchEntry toOfMplsLabel(final Uint32 mplsLabel) {
+ return new MatchEntryBuilder()
+ .setOxmClass(OpenflowBasicClass.VALUE)
+ .setHasMask(Boolean.FALSE)
+ .setOxmMatchField(MplsLabel.VALUE)
+ .setMatchEntryValue(new MplsLabelCaseBuilder()
+ .setMplsLabel(new MplsLabelBuilder().setMplsLabel(mplsLabel).build())
+ .build())
+ .build();
}
private static MatchEntry toOfEthernetType(final EthernetType ethernetType) {
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
+ matchEntryBuilder.setOxmClass(OpenflowBasicClass.VALUE);
matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(EthType.class);
+ matchEntryBuilder.setOxmMatchField(EthType.VALUE);
EthTypeCaseBuilder ethTypeCaseBuilder = new EthTypeCaseBuilder();
EthTypeBuilder ethTypeBuilder = new EthTypeBuilder();
- EtherType etherType = new EtherType(ethernetType.getType().getValue().intValue());
+ EtherType etherType = new EtherType(ethernetType.getType().getValue().toUint16());
ethTypeBuilder.setEthType(etherType);
ethTypeCaseBuilder.setEthType(ethTypeBuilder.build());
matchEntryBuilder.setMatchEntryValue(ethTypeCaseBuilder.build());
return matchEntryBuilder.build();
}
- private static MatchEntry toOfIcmpv4Type(final Short icmpv4Type) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(Icmpv4Type.class);
- Icmpv4TypeCaseBuilder icmpv4TypeCaseBuilder = new Icmpv4TypeCaseBuilder();
- Icmpv4TypeBuilder icmpv4TypeBuilder = new Icmpv4TypeBuilder();
- icmpv4TypeBuilder.setIcmpv4Type(icmpv4Type);
- icmpv4TypeCaseBuilder.setIcmpv4Type(icmpv4TypeBuilder.build());
- matchEntryBuilder.setMatchEntryValue(icmpv4TypeCaseBuilder.build());
- return matchEntryBuilder.build();
+ private static MatchEntry toOfIcmpv4Type(final Uint8 icmpv4Type) {
+ return new MatchEntryBuilder()
+ .setOxmClass(OpenflowBasicClass.VALUE)
+ .setHasMask(Boolean.FALSE)
+ .setOxmMatchField(Icmpv4Type.VALUE)
+ .setMatchEntryValue(new Icmpv4TypeCaseBuilder()
+ .setIcmpv4Type(new Icmpv4TypeBuilder().setIcmpv4Type(icmpv4Type).build())
+ .build())
+ .build();
}
- private static MatchEntry toOfIcmpv4Code(final Short icmpv4Code) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(Icmpv4Code.class);
- Icmpv4CodeCaseBuilder icmpv4CodeCaseBuilder = new Icmpv4CodeCaseBuilder();
- Icmpv4CodeBuilder icmpv4CodeBuilder = new Icmpv4CodeBuilder();
- icmpv4CodeBuilder.setIcmpv4Code(icmpv4Code);
- icmpv4CodeCaseBuilder.setIcmpv4Code(icmpv4CodeBuilder.build());
- matchEntryBuilder.setMatchEntryValue(icmpv4CodeCaseBuilder.build());
- return matchEntryBuilder.build();
+ private static MatchEntry toOfIcmpv4Code(final Uint8 icmpv4Code) {
+ return new MatchEntryBuilder()
+ .setOxmClass(OpenflowBasicClass.VALUE)
+ .setHasMask(Boolean.FALSE)
+ .setOxmMatchField(Icmpv4Code.VALUE)
+ .setMatchEntryValue(new Icmpv4CodeCaseBuilder()
+ .setIcmpv4Code(new Icmpv4CodeBuilder().setIcmpv4Code(icmpv4Code).build()).build())
+ .build();
}
- private static MatchEntry toOfIcmpv6Type(final Short icmpv6Type) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(Icmpv6Type.class);
- Icmpv6TypeCaseBuilder icmpv6TypeCaseBuilder = new Icmpv6TypeCaseBuilder();
- Icmpv6TypeBuilder icmpv6TypeBuilder = new Icmpv6TypeBuilder();
- icmpv6TypeBuilder.setIcmpv6Type(icmpv6Type);
- icmpv6TypeCaseBuilder.setIcmpv6Type(icmpv6TypeBuilder.build());
- matchEntryBuilder.setMatchEntryValue(icmpv6TypeCaseBuilder.build());
- return matchEntryBuilder.build();
+ private static MatchEntry toOfIcmpv6Type(final Uint8 icmpv6Type) {
+ return new MatchEntryBuilder()
+ .setOxmClass(OpenflowBasicClass.VALUE)
+ .setHasMask(Boolean.FALSE)
+ .setOxmMatchField(Icmpv6Type.VALUE)
+ .setMatchEntryValue(new Icmpv6TypeCaseBuilder()
+ .setIcmpv6Type(new Icmpv6TypeBuilder().setIcmpv6Type(icmpv6Type).build())
+ .build())
+ .build();
}
- private static MatchEntry toOfIcmpv6Code(final Short icmpv6Code) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(Icmpv6Code.class);
- Icmpv6CodeCaseBuilder icmpv6CodeCaseBuilder = new Icmpv6CodeCaseBuilder();
- Icmpv6CodeBuilder icmpv6CodeBuilder = new Icmpv6CodeBuilder();
- icmpv6CodeBuilder.setIcmpv6Code(icmpv6Code);
- icmpv6CodeCaseBuilder.setIcmpv6Code(icmpv6CodeBuilder.build());
- matchEntryBuilder.setMatchEntryValue(icmpv6CodeCaseBuilder.build());
- return matchEntryBuilder.build();
+ private static MatchEntry toOfIcmpv6Code(final Uint8 icmpv6Code) {
+ return new MatchEntryBuilder()
+ .setOxmClass(OpenflowBasicClass.VALUE)
+ .setHasMask(Boolean.FALSE)
+ .setOxmMatchField(Icmpv6Code.VALUE)
+ .setMatchEntryValue(new Icmpv6CodeCaseBuilder()
+ .setIcmpv6Code(new Icmpv6CodeBuilder().setIcmpv6Code(icmpv6Code).build())
+ .build())
+ .build();
}
- private static MatchEntry toOfIpProto(final Short ipProtocol) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(IpProto.class);
- IpProtoCaseBuilder ipProtoCaseBuilder = new IpProtoCaseBuilder();
- IpProtoBuilder ipProtoBuilder = new IpProtoBuilder();
- ipProtoBuilder.setProtocolNumber(ipProtocol);
- ipProtoCaseBuilder.setIpProto(ipProtoBuilder.build());
- matchEntryBuilder.setMatchEntryValue(ipProtoCaseBuilder.build());
- return matchEntryBuilder.build();
+ private static MatchEntry toOfIpProto(final Uint8 ipProtocol) {
+ return new MatchEntryBuilder()
+ .setOxmClass(OpenflowBasicClass.VALUE)
+ .setHasMask(Boolean.FALSE)
+ .setOxmMatchField(IpProto.VALUE)
+ .setMatchEntryValue(new IpProtoCaseBuilder()
+ .setIpProto(new IpProtoBuilder().setProtocolNumber(ipProtocol).build())
+ .build())
+ .build();
}
- private static MatchEntry toOfIpEcn(final Short ipEcn) {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
- matchEntryBuilder.setHasMask(false);
- matchEntryBuilder.setOxmMatchField(IpEcn.class);
- IpEcnCaseBuilder ipEcnCaseBuilder = new IpEcnCaseBuilder();
- IpEcnBuilder ipEcnBuilder = new IpEcnBuilder();
- ipEcnBuilder.setEcn(ipEcn);
- ipEcnCaseBuilder.setIpEcn(ipEcnBuilder.build());
- matchEntryBuilder.setMatchEntryValue(ipEcnCaseBuilder.build());
- return matchEntryBuilder.build();
+ private static MatchEntry toOfIpEcn(final Uint8 ipEcn) {
+ return new MatchEntryBuilder()
+ .setOxmClass(OpenflowBasicClass.VALUE)
+ .setHasMask(Boolean.FALSE)
+ .setOxmMatchField(IpEcn.VALUE)
+ .setMatchEntryValue(new IpEcnCaseBuilder().setIpEcn(new IpEcnBuilder().setEcn(ipEcn).build()).build())
+ .build();
}
/**
inPortMatch(result, source.getInPort());
inPhyPortMatch(result, source.getInPhyPort());
metadataMatch(result, source.getMetadata());
+ packetTypeMatch(result, source.getPacketTypeMatch());
ethernetMatch(result, source.getEthernetMatch());
vlanMatch(result, source.getVlanMatch());
ipMatch(result, source.getIpMatch());
tunnelMatch(result, source.getTunnel());
tcpFlagsMatch(result, source.getTcpFlagsMatch());
- /**
+ /*
* TODO: EXTENSION PROPOSAL (source, MD-SAL to OFJava)
* - we might need version for conversion and for key
*/
- Optional<GeneralExtensionListGrouping> extensionListOpt = ExtensionResolvers.getMatchExtensionResolver().getExtension(source);
+ Optional<GeneralExtensionListGrouping> extensionListOpt =
+ ExtensionResolvers.getMatchExtensionResolver().getExtension(source);
if (extensionListOpt.isPresent()) {
- List<ExtensionList> extensionListList = extensionListOpt.get().getExtensionList();
- for (ExtensionList extensionItem : extensionListList) {
+ for (ExtensionList extensionItem : extensionListOpt.orElseThrow().nonnullExtensionList().values()) {
// TODO: get real version
- ConverterExtensionKey<? extends ExtensionKey> key = new ConverterExtensionKey<>(extensionItem.getExtensionKey(), OFConstants.OFP_VERSION_1_3);
+ ConverterExtensionKey<? extends ExtensionKey> key =
+ new ConverterExtensionKey<>(extensionItem.getExtensionKey(), OFConstants.OFP_VERSION_1_3);
ConvertorToOFJava<MatchEntry> convertor = extensionConvertorProvider.getConverter(key);
if (convertor == null) {
throw new IllegalStateException("No converter found for key: " + key.toString());
}
- MatchEntry ofMatch = convertor.convert(extensionItem.getExtension());
- result.add(ofMatch);
+ result.add(convertor.convert(extensionItem.getExtension()));
}
}