--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;\r
+\r
+import java.math.BigInteger;\r
+import java.util.List;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6ExtHeaderBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6LabelBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv4MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv6MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.MetadataBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.ProtocolMatchFieldsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.protocol.match.fields.PbbBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTha;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTpa;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpDscp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Flabel;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdSll;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTll;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Metadata;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class MatchConvertorImpl2Test {\r
+\r
+ MatchConvertorImpl convertor = new MatchConvertorImpl();\r
+\r
+ /**\r
+ * Initializes OpenflowPortsUtil\r
+ */\r
+ @Before\r
+ public void startUp() {\r
+ OpenflowPortsUtil.init();\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testEmptyAndNullInput() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(null, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 0, entries.size());\r
+\r
+ entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 0, entries.size());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testConversion() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setInPort(new NodeConnectorId("openflow:42:1"));\r
+ builder.setInPhyPort(new NodeConnectorId("openflow:42:2"));\r
+ MetadataBuilder metadataBuilder = new MetadataBuilder();\r
+ metadataBuilder.setMetadata(new BigInteger("3"));\r
+ builder.setMetadata(metadataBuilder.build());\r
+ EthernetMatchBuilder ethernetBuilder = new EthernetMatchBuilder();\r
+ EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();\r
+ ethTypeBuilder.setType(new EtherType(4L));\r
+ ethernetBuilder.setEthernetType(ethTypeBuilder.build());\r
+ EthernetSourceBuilder ethSrcBuilder = new EthernetSourceBuilder();\r
+ ethSrcBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
+ ethernetBuilder.setEthernetSource(ethSrcBuilder.build());\r
+ EthernetDestinationBuilder ethDstBuilder = new EthernetDestinationBuilder();\r
+ ethDstBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
+ ethernetBuilder.setEthernetDestination(ethDstBuilder.build());\r
+ builder.setEthernetMatch(ethernetBuilder.build());\r
+ VlanMatchBuilder vlanBuilder = new VlanMatchBuilder();\r
+ VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();\r
+ vlanIdBuilder.setVlanId(new VlanId(7));\r
+ vlanIdBuilder.setVlanIdPresent(true);\r
+ vlanBuilder.setVlanId(vlanIdBuilder.build());\r
+ vlanBuilder.setVlanPcp(new VlanPcp((short) 7));\r
+ builder.setVlanMatch(vlanBuilder.build());\r
+ IpMatchBuilder ipMatchBuilder = new IpMatchBuilder();\r
+ ipMatchBuilder.setIpDscp(new Dscp((short) 8));\r
+ ipMatchBuilder.setIpEcn((short) 9);\r
+ ipMatchBuilder.setIpProtocol((short) 10);\r
+ builder.setIpMatch(ipMatchBuilder.build());\r
+ TcpMatchBuilder tcpMatchBuilder = new TcpMatchBuilder();\r
+ tcpMatchBuilder.setTcpSourcePort(new PortNumber(11));\r
+ tcpMatchBuilder.setTcpDestinationPort(new PortNumber(12));\r
+ builder.setLayer4Match(tcpMatchBuilder.build());\r
+ Icmpv4MatchBuilder icmpv4Builder = new Icmpv4MatchBuilder();\r
+ icmpv4Builder.setIcmpv4Type((short) 13);\r
+ icmpv4Builder.setIcmpv4Code((short) 14);\r
+ builder.setIcmpv4Match(icmpv4Builder.build());\r
+ Icmpv6MatchBuilder icmpv6Builder = new Icmpv6MatchBuilder();\r
+ icmpv6Builder.setIcmpv6Type((short) 15);\r
+ icmpv6Builder.setIcmpv6Code((short) 16);\r
+ builder.setIcmpv6Match(icmpv6Builder.build());\r
+ ProtocolMatchFieldsBuilder protoBuilder = new ProtocolMatchFieldsBuilder();\r
+ protoBuilder.setMplsLabel(17L);\r
+ protoBuilder.setMplsTc((short) 18);\r
+ protoBuilder.setMplsBos((short) 19);\r
+ PbbBuilder pbbBuilder = new PbbBuilder();\r
+ pbbBuilder.setPbbIsid(20L);\r
+ protoBuilder.setPbb(pbbBuilder.build());\r
+ builder.setProtocolMatchFields(protoBuilder.build());\r
+ TunnelBuilder tunnelBuilder = new TunnelBuilder();\r
+ tunnelBuilder.setTunnelId(new BigInteger("21"));\r
+ builder.setTunnel(tunnelBuilder.build());\r
+ Ipv4MatchBuilder ipv4MatchBuilder = new Ipv4MatchBuilder();\r
+ ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix("10.0.0.1"));\r
+ ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix("10.0.0.2"));\r
+ builder.setLayer3Match(ipv4MatchBuilder.build());\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 24, entries.size());\r
+ MatchEntries entry = entries.get(0);\r
+ checkEntryHeader(entry, InPort.class, false);\r
+ Assert.assertEquals("Wrong in port", 1, entry.getAugmentation(PortNumberMatchEntry.class)\r
+ .getPortNumber().getValue().intValue());\r
+ entry = entries.get(1);\r
+ checkEntryHeader(entry, InPhyPort.class, false);\r
+ Assert.assertEquals("Wrong in phy port", 2, entry.getAugmentation(PortNumberMatchEntry.class)\r
+ .getPortNumber().getValue().intValue());\r
+ entry = entries.get(2);\r
+ checkEntryHeader(entry, Metadata.class, false);\r
+ Assert.assertArrayEquals("Wrong metadata", new byte[]{0, 0, 0, 0, 0, 0, 0, 3},\r
+ entry.getAugmentation(MetadataMatchEntry.class).getMetadata());\r
+ entry = entries.get(3);\r
+ checkEntryHeader(entry, EthDst.class, false);\r
+ Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:06"),\r
+ entry.getAugmentation(MacAddressMatchEntry.class).getMacAddress());\r
+ entry = entries.get(4);\r
+ checkEntryHeader(entry, EthSrc.class, false);\r
+ Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:05"),\r
+ entry.getAugmentation(MacAddressMatchEntry.class).getMacAddress());\r
+ entry = entries.get(5);\r
+ checkEntryHeader(entry, EthType.class, false);\r
+ Assert.assertEquals("Wrong eth type", 4, entry.getAugmentation(EthTypeMatchEntry.class)\r
+ .getEthType().getValue().intValue());\r
+ entry = entries.get(6);\r
+ checkEntryHeader(entry, VlanVid.class, false);\r
+ Assert.assertEquals("Wrong vlan id", 7, entry.getAugmentation(VlanVidMatchEntry.class)\r
+ .getVlanVid().intValue());\r
+ Assert.assertEquals("Wrong cfi bit", true, entry.getAugmentation(VlanVidMatchEntry.class)\r
+ .isCfiBit());\r
+ entry = entries.get(7);\r
+ checkEntryHeader(entry, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp.class, false);\r
+ Assert.assertEquals("Wrong vlan pcp", 7, entry.getAugmentation(VlanPcpMatchEntry.class)\r
+ .getVlanPcp().intValue());\r
+ entry = entries.get(8);\r
+ checkEntryHeader(entry, IpDscp.class, false);\r
+ Assert.assertEquals("Wrong ip dscp", 8, entry.getAugmentation(DscpMatchEntry.class)\r
+ .getDscp().getValue().intValue());\r
+ entry = entries.get(9);\r
+ checkEntryHeader(entry, IpEcn.class, false);\r
+ Assert.assertEquals("Wrong ip ecn", 9, entry.getAugmentation(EcnMatchEntry.class)\r
+ .getEcn().intValue());\r
+ entry = entries.get(10);\r
+ checkEntryHeader(entry, IpProto.class, false);\r
+ Assert.assertEquals("Wrong ip proto", 10, entry.getAugmentation(ProtocolNumberMatchEntry.class)\r
+ .getProtocolNumber().intValue());\r
+ entry = entries.get(11);\r
+ checkEntryHeader(entry, TcpSrc.class, false);\r
+ Assert.assertEquals("Wrong tcp src", 11, entry.getAugmentation(PortMatchEntry.class)\r
+ .getPort().getValue().intValue());\r
+ entry = entries.get(12);\r
+ checkEntryHeader(entry, TcpDst.class, false);\r
+ Assert.assertEquals("Wrong tcp dst", 12, entry.getAugmentation(PortMatchEntry.class)\r
+ .getPort().getValue().intValue());\r
+ entry = entries.get(13);\r
+ checkEntryHeader(entry, Icmpv4Type.class, false);\r
+ Assert.assertEquals("Wrong icmpv4 type", 13, entry.getAugmentation(Icmpv4TypeMatchEntry.class)\r
+ .getIcmpv4Type().intValue());\r
+ entry = entries.get(14);\r
+ checkEntryHeader(entry, Icmpv4Code.class, false);\r
+ Assert.assertEquals("Wrong icmpv4 code", 14, entry.getAugmentation(Icmpv4CodeMatchEntry.class)\r
+ .getIcmpv4Code().intValue());\r
+ entry = entries.get(15);\r
+ checkEntryHeader(entry, Icmpv6Type.class, false);\r
+ Assert.assertEquals("Wrong icmpv6 type", 15, entry.getAugmentation(Icmpv6TypeMatchEntry.class)\r
+ .getIcmpv6Type().intValue());\r
+ entry = entries.get(16);\r
+ checkEntryHeader(entry, Icmpv6Code.class, false);\r
+ Assert.assertEquals("Wrong icmpv6 code", 16, entry.getAugmentation(Icmpv6CodeMatchEntry.class)\r
+ .getIcmpv6Code().intValue());\r
+ entry = entries.get(17);\r
+ checkEntryHeader(entry, Ipv4Src.class, false);\r
+ Assert.assertEquals("Wrong ipv4 src", "10.0.0.1", entry.getAugmentation(Ipv4AddressMatchEntry.class)\r
+ .getIpv4Address().getValue());\r
+ entry = entries.get(18);\r
+ checkEntryHeader(entry, Ipv4Dst.class, false);\r
+ Assert.assertEquals("Wrong ipv4 dst", "10.0.0.2", entry.getAugmentation(Ipv4AddressMatchEntry.class)\r
+ .getIpv4Address().getValue());\r
+ entry = entries.get(19);\r
+ checkEntryHeader(entry, MplsLabel.class, false);\r
+ Assert.assertEquals("Wrong mpls label", 17, entry.getAugmentation(MplsLabelMatchEntry.class)\r
+ .getMplsLabel().intValue());\r
+ entry = entries.get(20);\r
+ checkEntryHeader(entry, MplsBos.class, false);\r
+ Assert.assertEquals("Wrong mpls bos", true, entry.getAugmentation(BosMatchEntry.class).isBos());\r
+ entry = entries.get(21);\r
+ checkEntryHeader(entry, MplsTc.class, false);\r
+ Assert.assertEquals("Wrong mpls tc", 18, entry.getAugmentation(TcMatchEntry.class)\r
+ .getTc().intValue());\r
+ entry = entries.get(22);\r
+ checkEntryHeader(entry, PbbIsid.class, false);\r
+ Assert.assertEquals("Wrong pbb isid", 20, entry.getAugmentation(IsidMatchEntry.class)\r
+ .getIsid().intValue());\r
+ entry = entries.get(23);\r
+ checkEntryHeader(entry, TunnelId.class, false);\r
+ Assert.assertArrayEquals("Wrong tunnel id", new byte[]{0, 0, 0, 0, 0, 0, 0, 21},\r
+ entry.getAugmentation(MetadataMatchEntry.class).getMetadata());\r
+ }\r
+\r
+ private static void checkEntryHeader(MatchEntries entry, Class<? extends MatchField> field, boolean hasMask) {\r
+ Assert.assertEquals("Wrong oxm class", OpenflowBasicClass.class, entry.getOxmClass());\r
+ Assert.assertEquals("Wrong oxm field", field, entry.getOxmMatchField());\r
+ Assert.assertEquals("Wrong hasMask", hasMask, entry.isHasMask());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testUdpMatchConversion() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ UdpMatchBuilder udpMatchBuilder = new UdpMatchBuilder();\r
+ udpMatchBuilder.setUdpSourcePort(new PortNumber(11));\r
+ udpMatchBuilder.setUdpDestinationPort(new PortNumber(12));\r
+ builder.setLayer4Match(udpMatchBuilder.build());\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 2, entries.size());\r
+ MatchEntries entry = entries.get(0);\r
+ checkEntryHeader(entry, UdpSrc.class, false);\r
+ Assert.assertEquals("Wrong udp src", 11, entry.getAugmentation(PortMatchEntry.class)\r
+ .getPort().getValue().intValue());\r
+ entry = entries.get(1);\r
+ checkEntryHeader(entry, UdpDst.class, false);\r
+ Assert.assertEquals("Wrong udp dst", 12, entry.getAugmentation(PortMatchEntry.class)\r
+ .getPort().getValue().intValue());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testSctpMatchConversion() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ SctpMatchBuilder sctpMatchBuilder = new SctpMatchBuilder();\r
+ sctpMatchBuilder.setSctpSourcePort(new PortNumber(11));\r
+ sctpMatchBuilder.setSctpDestinationPort(new PortNumber(12));\r
+ builder.setLayer4Match(sctpMatchBuilder.build());\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 2, entries.size());\r
+ MatchEntries entry = entries.get(0);\r
+ checkEntryHeader(entry, SctpSrc.class, false);\r
+ Assert.assertEquals("Wrong sctp src", 11, entry.getAugmentation(PortMatchEntry.class)\r
+ .getPort().getValue().intValue());\r
+ entry = entries.get(1);\r
+ checkEntryHeader(entry, SctpDst.class, false);\r
+ Assert.assertEquals("Wrong sctp dst", 12, entry.getAugmentation(PortMatchEntry.class)\r
+ .getPort().getValue().intValue());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testArpMatchConversion() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ ArpMatchBuilder arpBuilder = new ArpMatchBuilder();\r
+ arpBuilder.setArpOp(5);\r
+ arpBuilder.setArpSourceTransportAddress(new Ipv4Prefix("10.0.0.3"));\r
+ arpBuilder.setArpTargetTransportAddress(new Ipv4Prefix("10.0.0.4"));\r
+ ArpSourceHardwareAddressBuilder srcHwBuilder = new ArpSourceHardwareAddressBuilder();\r
+ srcHwBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
+ arpBuilder.setArpSourceHardwareAddress(srcHwBuilder.build());\r
+ ArpTargetHardwareAddressBuilder dstHwBuilder = new ArpTargetHardwareAddressBuilder();\r
+ dstHwBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
+ arpBuilder.setArpTargetHardwareAddress(dstHwBuilder.build());\r
+ builder.setLayer3Match(arpBuilder.build());\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 5, entries.size());\r
+ MatchEntries entry = entries.get(0);\r
+ checkEntryHeader(entry, ArpOp.class, false);\r
+ Assert.assertEquals("Wrong arp op", 5, entry.getAugmentation(OpCodeMatchEntry.class)\r
+ .getOpCode().intValue());\r
+ entry = entries.get(1);\r
+ checkEntryHeader(entry, ArpSpa.class, false);\r
+ Assert.assertEquals("Wrong arp spa", "10.0.0.3", entry.getAugmentation(Ipv4AddressMatchEntry.class)\r
+ .getIpv4Address().getValue());\r
+ entry = entries.get(2);\r
+ checkEntryHeader(entry, ArpTpa.class, false);\r
+ Assert.assertEquals("Wrong arp tpa", "10.0.0.4", entry.getAugmentation(Ipv4AddressMatchEntry.class)\r
+ .getIpv4Address().getValue());\r
+ entry = entries.get(3);\r
+ checkEntryHeader(entry, ArpSha.class, false);\r
+ Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:05", entry.getAugmentation(MacAddressMatchEntry.class)\r
+ .getMacAddress().getValue());\r
+ entry = entries.get(4);\r
+ checkEntryHeader(entry, ArpTha.class, false);\r
+ Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:06", entry.getAugmentation(MacAddressMatchEntry.class)\r
+ .getMacAddress().getValue());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testArpMatchConversionWithMasks() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ ArpMatchBuilder arpBuilder = new ArpMatchBuilder();\r
+ arpBuilder.setArpSourceTransportAddress(new Ipv4Prefix("10.0.0.3/8"));\r
+ arpBuilder.setArpTargetTransportAddress(new Ipv4Prefix("10.0.0.4/32"));\r
+ ArpSourceHardwareAddressBuilder srcHwBuilder = new ArpSourceHardwareAddressBuilder();\r
+ srcHwBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
+ srcHwBuilder.setMask(new MacAddress("00:00:00:00:00:08"));\r
+ arpBuilder.setArpSourceHardwareAddress(srcHwBuilder.build());\r
+ ArpTargetHardwareAddressBuilder dstHwBuilder = new ArpTargetHardwareAddressBuilder();\r
+ dstHwBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
+ dstHwBuilder.setMask(new MacAddress("00:00:00:00:00:09"));\r
+ arpBuilder.setArpTargetHardwareAddress(dstHwBuilder.build());\r
+ builder.setLayer3Match(arpBuilder.build());\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 4, entries.size());\r
+ MatchEntries entry = entries.get(0);\r
+ entry = entries.get(0);\r
+ checkEntryHeader(entry, ArpSpa.class, true);\r
+ Assert.assertEquals("Wrong arp spa", "10.0.0.3", entry.getAugmentation(Ipv4AddressMatchEntry.class)\r
+ .getIpv4Address().getValue());\r
+ Assert.assertArrayEquals("Wrong arp spa mask", new byte[]{(byte) 255, 0, 0, 0},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(1);\r
+ checkEntryHeader(entry, ArpTpa.class, true);\r
+ Assert.assertEquals("Wrong arp tpa", "10.0.0.4", entry.getAugmentation(Ipv4AddressMatchEntry.class)\r
+ .getIpv4Address().getValue());\r
+ Assert.assertArrayEquals("Wrong arp tpa mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 255},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(2);\r
+ checkEntryHeader(entry, ArpSha.class, true);\r
+ Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:05", entry.getAugmentation(MacAddressMatchEntry.class)\r
+ .getMacAddress().getValue());\r
+ Assert.assertArrayEquals("Wrong arp sha mask", new byte[]{0, 0, 0, 0, 0, 8},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(3);\r
+ checkEntryHeader(entry, ArpTha.class, true);\r
+ Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:06", entry.getAugmentation(MacAddressMatchEntry.class)\r
+ .getMacAddress().getValue());\r
+ Assert.assertArrayEquals("Wrong arp tha mask", new byte[]{0, 0, 0, 0, 0, 9},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testIpv6MatchConversion() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();\r
+ ipv6Builder.setIpv6Source(new Ipv6Prefix("0000:0000:0000:0000:0000:0000:0000:0001"));\r
+ ipv6Builder.setIpv6Destination(new Ipv6Prefix("0000:0000:0000:0000:0000:0000:0000:0002"));\r
+ Ipv6LabelBuilder ipv6LabelBuilder = new Ipv6LabelBuilder();\r
+ ipv6LabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(3L));\r
+ ipv6Builder.setIpv6Label(ipv6LabelBuilder.build());\r
+ ipv6Builder.setIpv6NdTarget(new Ipv6Address("0000:0000:0000:0000:0000:0000:0000:0004"));\r
+ ipv6Builder.setIpv6NdSll(new MacAddress("00:00:00:00:00:05"));\r
+ ipv6Builder.setIpv6NdTll(new MacAddress("00:00:00:00:00:06"));\r
+ Ipv6ExtHeaderBuilder extHdrBuilder = new Ipv6ExtHeaderBuilder();\r
+ extHdrBuilder.setIpv6Exthdr(153);\r
+ ipv6Builder.setIpv6ExtHeader(extHdrBuilder.build());\r
+ builder.setLayer3Match(ipv6Builder.build());\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 7, entries.size());\r
+ MatchEntries entry = entries.get(0);\r
+ checkEntryHeader(entry, Ipv6Src.class, false);\r
+ Assert.assertEquals("Wrong ipv6 src", "0000:0000:0000:0000:0000:0000:0000:0001",\r
+ entry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue());\r
+ entry = entries.get(1);\r
+ checkEntryHeader(entry, Ipv6Dst.class, false);\r
+ Assert.assertEquals("Wrong ipv6 dst", "0000:0000:0000:0000:0000:0000:0000:0002",\r
+ entry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue());\r
+ entry = entries.get(2);\r
+ checkEntryHeader(entry, Ipv6Flabel.class, false);\r
+ Assert.assertEquals("Wrong ipv6 flabel", 3,\r
+ entry.getAugmentation(Ipv6FlabelMatchEntry.class).getIpv6Flabel().getValue().intValue());\r
+ entry = entries.get(3);\r
+ checkEntryHeader(entry, Ipv6NdTarget.class, false);\r
+ Assert.assertEquals("Wrong ipv6 nd target", "0000:0000:0000:0000:0000:0000:0000:0004",\r
+ entry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue());\r
+ entry = entries.get(4);\r
+ checkEntryHeader(entry, Ipv6NdSll.class, false);\r
+ Assert.assertEquals("Wrong ipv6 nd sll", "00:00:00:00:00:05",\r
+ entry.getAugmentation(MacAddressMatchEntry.class).getMacAddress().getValue());\r
+ entry = entries.get(5);\r
+ checkEntryHeader(entry, Ipv6NdTll.class, false);\r
+ Assert.assertEquals("Wrong ipv6 nd tll", "00:00:00:00:00:06",\r
+ entry.getAugmentation(MacAddressMatchEntry.class).getMacAddress().getValue());\r
+ entry = entries.get(6);\r
+ checkEntryHeader(entry, Ipv6Exthdr.class, false);\r
+ Assert.assertEquals("Wrong ipv6 ext hdr", new Ipv6ExthdrFlags(false, true, false, true, false,\r
+ true, false, true, false), entry.getAugmentation(PseudoFieldMatchEntry.class).getPseudoField());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testIpv6MatchConversionWithMasks() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();\r
+ ipv6Builder.setIpv6Source(new Ipv6Prefix("0000:0000:0000:0000:0000:0000:0000:0001/24"));\r
+ ipv6Builder.setIpv6Destination(new Ipv6Prefix("0000:0000:0000:0000:0000:0000:0000:0002/64"));\r
+ builder.setLayer3Match(ipv6Builder.build());\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 2, entries.size());\r
+ MatchEntries entry = entries.get(0);\r
+ checkEntryHeader(entry, Ipv6Src.class, true);\r
+ Assert.assertEquals("Wrong ipv6 src", "0000:0000:0000:0000:0000:0000:0000:0001",\r
+ entry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue());\r
+ Assert.assertArrayEquals("Wrong ipv6 src mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, 0, 0, 0, 0,\r
+ 0, 0, 0, 0, 0, 0, 0, 0, 0}, entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(1);\r
+ checkEntryHeader(entry, Ipv6Dst.class, true);\r
+ Assert.assertEquals("Wrong ipv6 dst", "0000:0000:0000:0000:0000:0000:0000:0002",\r
+ entry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue());\r
+ Assert.assertArrayEquals("Wrong ipv6 src mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 255,\r
+ (byte) 255, (byte) 255, (byte) 255, (byte) 255, 0, 0, 0, 0, 0, 0, 0, 0},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testIpv6ExtHeaderConversion() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();\r
+ Ipv6ExtHeaderBuilder extHdrBuilder = new Ipv6ExtHeaderBuilder();\r
+ extHdrBuilder.setIpv6Exthdr(358);\r
+ extHdrBuilder.setIpv6ExthdrMask(258);\r
+ ipv6Builder.setIpv6ExtHeader(extHdrBuilder.build());\r
+ builder.setLayer3Match(ipv6Builder.build());\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 1, entries.size());\r
+ MatchEntries entry = entries.get(0);\r
+ checkEntryHeader(entry, Ipv6Exthdr.class, true);\r
+ Assert.assertEquals("Wrong ipv6 ext hdr", new Ipv6ExthdrFlags(true, false, true, false, true, false,\r
+ true, false, true), entry.getAugmentation(PseudoFieldMatchEntry.class).getPseudoField());\r
+ Assert.assertArrayEquals("Wrong ipv6 ext hdr mask", new byte[]{1, 2}, entry.getAugmentation(MaskMatchEntry.class)\r
+ .getMask());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#convert(Match, BigInteger)\r
+ */\r
+ @Test\r
+ public void testConversionWithMasks() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ MetadataBuilder metadataBuilder = new MetadataBuilder();\r
+ metadataBuilder.setMetadata(new BigInteger("3"));\r
+ metadataBuilder.setMetadataMask(new BigInteger("15"));\r
+ builder.setMetadata(metadataBuilder.build());\r
+ EthernetMatchBuilder ethernetBuilder = new EthernetMatchBuilder();\r
+ EthernetSourceBuilder ethSrcBuilder = new EthernetSourceBuilder();\r
+ ethSrcBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
+ ethSrcBuilder.setMask(new MacAddress("00:00:00:00:00:08"));\r
+ ethernetBuilder.setEthernetSource(ethSrcBuilder.build());\r
+ EthernetDestinationBuilder ethDstBuilder = new EthernetDestinationBuilder();\r
+ ethDstBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
+ ethDstBuilder.setMask(new MacAddress("00:00:00:00:00:09"));\r
+ ethernetBuilder.setEthernetDestination(ethDstBuilder.build());\r
+ builder.setEthernetMatch(ethernetBuilder.build());\r
+ VlanMatchBuilder vlanBuilder = new VlanMatchBuilder();\r
+ VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();\r
+ vlanIdBuilder.setVlanId(new VlanId(0));\r
+ vlanIdBuilder.setVlanIdPresent(true);\r
+ vlanBuilder.setVlanId(vlanIdBuilder.build());\r
+ builder.setVlanMatch(vlanBuilder.build());\r
+ ProtocolMatchFieldsBuilder protoBuilder = new ProtocolMatchFieldsBuilder();\r
+ PbbBuilder pbbBuilder = new PbbBuilder();\r
+ pbbBuilder.setPbbIsid(20L);\r
+ pbbBuilder.setPbbMask(8L);\r
+ protoBuilder.setPbb(pbbBuilder.build());\r
+ builder.setProtocolMatchFields(protoBuilder.build());\r
+ TunnelBuilder tunnelBuilder = new TunnelBuilder();\r
+ tunnelBuilder.setTunnelId(new BigInteger("21"));\r
+ tunnelBuilder.setTunnelMask(new BigInteger("14"));\r
+ builder.setTunnel(tunnelBuilder.build());\r
+ Ipv4MatchBuilder ipv4MatchBuilder = new Ipv4MatchBuilder();\r
+ ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix("10.0.0.1/24"));\r
+ ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix("10.0.0.2/8"));\r
+ builder.setLayer3Match(ipv4MatchBuilder.build());\r
+ Match match = builder.build();\r
+\r
+ List<MatchEntries> entries = convertor.convert(match, new BigInteger("42"));\r
+ Assert.assertEquals("Wrong entries size", 8, entries.size());\r
+ MatchEntries entry = entries.get(0);\r
+ checkEntryHeader(entry, Metadata.class, true);\r
+ Assert.assertArrayEquals("Wrong metadata", new byte[]{0, 0, 0, 0, 0, 0, 0, 3},\r
+ entry.getAugmentation(MetadataMatchEntry.class).getMetadata());\r
+ Assert.assertArrayEquals("Wrong metadata mask", new byte[]{0, 0, 0, 0, 0, 0, 0, 15},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(1);\r
+ checkEntryHeader(entry, EthDst.class, true);\r
+ Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:06"),\r
+ entry.getAugmentation(MacAddressMatchEntry.class).getMacAddress());\r
+ Assert.assertArrayEquals("Wrong eth dst mask", new byte[]{0, 0, 0, 0, 0, 9},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(2);\r
+ checkEntryHeader(entry, EthSrc.class, true);\r
+ Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:05"),\r
+ entry.getAugmentation(MacAddressMatchEntry.class).getMacAddress());\r
+ Assert.assertArrayEquals("Wrong eth src mask", new byte[]{0, 0, 0, 0, 0, 8},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(3);\r
+ checkEntryHeader(entry, VlanVid.class, true);\r
+ Assert.assertEquals("Wrong vlan id", 0, entry.getAugmentation(VlanVidMatchEntry.class)\r
+ .getVlanVid().intValue());\r
+ Assert.assertEquals("Wrong cfi bit", true, entry.getAugmentation(VlanVidMatchEntry.class)\r
+ .isCfiBit());\r
+ Assert.assertArrayEquals("Wrong vlanId mask", new byte[]{16, 0},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(4);\r
+ checkEntryHeader(entry, Ipv4Src.class, true);\r
+ Assert.assertEquals("Wrong ipv4 src", "10.0.0.1", entry.getAugmentation(Ipv4AddressMatchEntry.class)\r
+ .getIpv4Address().getValue());\r
+ Assert.assertArrayEquals("Wrong ipv4 src mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, 0},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(5);\r
+ checkEntryHeader(entry, Ipv4Dst.class, true);\r
+ Assert.assertEquals("Wrong ipv4 dst", "10.0.0.2", entry.getAugmentation(Ipv4AddressMatchEntry.class)\r
+ .getIpv4Address().getValue());\r
+ Assert.assertArrayEquals("Wrong ipv4 dst mask", new byte[]{(byte) 255, 0, 0, 0},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(6);\r
+ checkEntryHeader(entry, PbbIsid.class, true);\r
+ Assert.assertEquals("Wrong pbb isid", 20, entry.getAugmentation(IsidMatchEntry.class)\r
+ .getIsid().intValue());\r
+ // FIXME - fix mask computation (length should be 3 instead of 4)\r
+// Assert.assertArrayEquals("Wrong pbb isid mask", new byte[]{0, 0, 8},\r
+// entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ entry = entries.get(7);\r
+ checkEntryHeader(entry, TunnelId.class, true);\r
+ Assert.assertArrayEquals("Wrong tunnel id", new byte[]{0, 0, 0, 0, 0, 0, 0, 21},\r
+ entry.getAugmentation(MetadataMatchEntry.class).getMetadata());\r
+ Assert.assertArrayEquals("Wrong tunnel id mask", new byte[]{0, 0, 0, 0, 0, 0, 0, 14},\r
+ entry.getAugmentation(MaskMatchEntry.class).getMask());\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;\r
+\r
+import java.math.BigInteger;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;\r
+import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatch;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntryBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTha;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTpa;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpDscp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Flabel;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdSll;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTll;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Metadata;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class MatchConvertorImplV13Test {\r
+\r
+ /**\r
+ * Initializes OpenflowPortsUtil\r
+ */\r
+ @Before\r
+ public void startUp() {\r
+ OpenflowPortsUtil.init();\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test(expected=NullPointerException.class)\r
+ public void testEmptyMatch() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ Match match = builder.build();\r
+\r
+ MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test\r
+ public void testEmptyMatchEntries() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setType(OxmMatchType.class);\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ builder.setMatchEntries(entries);\r
+ Match match = builder.build();\r
+\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
+ .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
+\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getEthernetMatch());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv4Match());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv6Match());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getInPhyPort());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getInPort());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getIpMatch());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer3Match());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer4Match());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getMetadata());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getProtocolMatchFields());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getVlanMatch());\r
+ Assert.assertEquals("Wrong match entries", null, builtMatch.getTunnel());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test\r
+ public void testWithMatchEntriesNoMasks() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setType(OxmMatchType.class);\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(InPort.class);\r
+ entriesBuilder.setHasMask(false);\r
+ PortNumberMatchEntryBuilder portNumberBuilder = new PortNumberMatchEntryBuilder();\r
+ portNumberBuilder.setPortNumber(new PortNumber(1L));\r
+ entriesBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(InPhyPort.class);\r
+ entriesBuilder.setHasMask(false);\r
+ portNumberBuilder = new PortNumberMatchEntryBuilder();\r
+ portNumberBuilder.setPortNumber(new PortNumber(2L));\r
+ entriesBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Metadata.class);\r
+ entriesBuilder.setHasMask(false);\r
+ MetadataMatchEntryBuilder metadataBuilder = new MetadataMatchEntryBuilder();\r
+ metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});\r
+ entriesBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(EthDst.class);\r
+ entriesBuilder.setHasMask(false);\r
+ MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(EthSrc.class);\r
+ entriesBuilder.setHasMask(false);\r
+ macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(EthType.class);\r
+ entriesBuilder.setHasMask(false);\r
+ EthTypeMatchEntryBuilder ethTypeBuilder = new EthTypeMatchEntryBuilder();\r
+ ethTypeBuilder.setEthType(new EtherType(3));\r
+ entriesBuilder.addAugmentation(EthTypeMatchEntry.class, ethTypeBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(VlanVid.class);\r
+ entriesBuilder.setHasMask(false);\r
+ VlanVidMatchEntryBuilder vlanVidBuilder = new VlanVidMatchEntryBuilder();\r
+ vlanVidBuilder.setVlanVid(4);\r
+ vlanVidBuilder.setCfiBit(true);\r
+ entriesBuilder.addAugmentation(VlanVidMatchEntry.class, vlanVidBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(VlanPcp.class);\r
+ entriesBuilder.setHasMask(false);\r
+ VlanPcpMatchEntryBuilder pcpBuilder = new VlanPcpMatchEntryBuilder();\r
+ pcpBuilder.setVlanPcp((short) 5);\r
+ entriesBuilder.addAugmentation(VlanPcpMatchEntry.class, pcpBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(IpDscp.class);\r
+ entriesBuilder.setHasMask(false);\r
+ DscpMatchEntryBuilder dscpBuilder = new DscpMatchEntryBuilder();\r
+ dscpBuilder.setDscp(new Dscp((short) 6));\r
+ entriesBuilder.addAugmentation(DscpMatchEntry.class, dscpBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(IpEcn.class);\r
+ entriesBuilder.setHasMask(false);\r
+ EcnMatchEntryBuilder ecnBuilder = new EcnMatchEntryBuilder();\r
+ ecnBuilder.setEcn((short) 7);\r
+ entriesBuilder.addAugmentation(EcnMatchEntry.class, ecnBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(IpProto.class);\r
+ entriesBuilder.setHasMask(false);\r
+ ProtocolNumberMatchEntryBuilder protoBuilder = new ProtocolNumberMatchEntryBuilder();\r
+ protoBuilder.setProtocolNumber((short) 8);\r
+ entriesBuilder.addAugmentation(ProtocolNumberMatchEntry.class, protoBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
+ entriesBuilder.setHasMask(false);\r
+ Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
+ ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));\r
+ entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
+ entriesBuilder.setHasMask(false);\r
+ ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
+ ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));\r
+ entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(TcpSrc.class);\r
+ entriesBuilder.setHasMask(false);\r
+ PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();\r
+ portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
+ .inet.types.rev100924.PortNumber(9));\r
+ entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(TcpDst.class);\r
+ entriesBuilder.setHasMask(false);\r
+ portBuilder = new PortMatchEntryBuilder();\r
+ portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
+ .inet.types.rev100924.PortNumber(10));\r
+ entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Icmpv4Type.class);\r
+ entriesBuilder.setHasMask(false);\r
+ Icmpv4TypeMatchEntryBuilder icmpv4TypeBuilder = new Icmpv4TypeMatchEntryBuilder();\r
+ icmpv4TypeBuilder.setIcmpv4Type((short) 15);\r
+ entriesBuilder.addAugmentation(Icmpv4TypeMatchEntry.class, icmpv4TypeBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Icmpv4Code.class);\r
+ entriesBuilder.setHasMask(false);\r
+ Icmpv4CodeMatchEntryBuilder icmpv4CodeBuilder = new Icmpv4CodeMatchEntryBuilder();\r
+ icmpv4CodeBuilder.setIcmpv4Code((short) 16);\r
+ entriesBuilder.addAugmentation(Icmpv4CodeMatchEntry.class, icmpv4CodeBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Icmpv6Type.class);\r
+ entriesBuilder.setHasMask(false);\r
+ Icmpv6TypeMatchEntryBuilder icmpv6TypeBuilder = new Icmpv6TypeMatchEntryBuilder();\r
+ icmpv6TypeBuilder.setIcmpv6Type((short) 19);\r
+ entriesBuilder.addAugmentation(Icmpv6TypeMatchEntry.class, icmpv6TypeBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Icmpv6Code.class);\r
+ entriesBuilder.setHasMask(false);\r
+ Icmpv6CodeMatchEntryBuilder icmpv6CodeBuilder = new Icmpv6CodeMatchEntryBuilder();\r
+ icmpv6CodeBuilder.setIcmpv6Code((short) 20);\r
+ entriesBuilder.addAugmentation(Icmpv6CodeMatchEntry.class, icmpv6CodeBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(MplsLabel.class);\r
+ entriesBuilder.setHasMask(false);\r
+ MplsLabelMatchEntryBuilder mplsLabelBuilder = new MplsLabelMatchEntryBuilder();\r
+ mplsLabelBuilder.setMplsLabel(21L);\r
+ entriesBuilder.addAugmentation(MplsLabelMatchEntry.class, mplsLabelBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(MplsTc.class);\r
+ entriesBuilder.setHasMask(false);\r
+ TcMatchEntryBuilder tcBuilder = new TcMatchEntryBuilder();\r
+ tcBuilder.setTc((short) 22);\r
+ entriesBuilder.addAugmentation(TcMatchEntry.class, tcBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(MplsBos.class);\r
+ entriesBuilder.setHasMask(false);\r
+ BosMatchEntryBuilder bosBuilder = new BosMatchEntryBuilder();\r
+ bosBuilder.setBos(true);\r
+ entriesBuilder.addAugmentation(BosMatchEntry.class, bosBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(PbbIsid.class);\r
+ entriesBuilder.setHasMask(false);\r
+ IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();\r
+ isidBuilder.setIsid(23L);\r
+ entriesBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(TunnelId.class);\r
+ entriesBuilder.setHasMask(false);\r
+ metadataBuilder = new MetadataMatchEntryBuilder();\r
+ metadataBuilder.setMetadata(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});\r
+ entriesBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ builder.setMatchEntries(entries);\r
+ Match match = builder.build();\r
+\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
+ .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
+\r
+ Assert.assertEquals("Wrong in port", "openflow:42:1", builtMatch.getInPort().getValue());\r
+ Assert.assertEquals("Wrong in phy port", "openflow:42:2", builtMatch.getInPhyPort().getValue());\r
+ Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());\r
+ Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());\r
+ Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());\r
+ Assert.assertEquals("Wrong eth type", 3, builtMatch.getEthernetMatch().getEthernetType().getType().getValue().intValue());\r
+ Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());\r
+ // TODO - finish implementation by setting the vlanIdPresent flag\r
+// Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());\r
+ Assert.assertEquals("Wrong vlan pcp", 5, builtMatch.getVlanMatch().getVlanPcp().getValue().intValue());\r
+ Assert.assertEquals("Wrong ip dscp", 6, builtMatch.getIpMatch().getIpDscp().getValue().intValue());\r
+ Assert.assertEquals("Wrong ip ecn", 7, builtMatch.getIpMatch().getIpEcn().intValue());\r
+ Assert.assertEquals("Wrong ip proto", null, builtMatch.getIpMatch().getIpProto());\r
+ Assert.assertEquals("Wrong ip protocol", 8, builtMatch.getIpMatch().getIpProtocol().intValue());\r
+ TcpMatch tcpMatch = (TcpMatch) builtMatch.getLayer4Match();\r
+ Assert.assertEquals("Wrong tcp src port", 9, tcpMatch.getTcpSourcePort().getValue().intValue());\r
+ Assert.assertEquals("Wrong tcp dst port", 10, tcpMatch.getTcpDestinationPort().getValue().intValue());\r
+ Assert.assertEquals("Wrong icmpv4 type", 15, builtMatch.getIcmpv4Match().getIcmpv4Type().intValue());\r
+ Assert.assertEquals("Wrong icmpv4 code", 16, builtMatch.getIcmpv4Match().getIcmpv4Code().intValue());\r
+ Assert.assertEquals("Wrong icmpv6 type", 19, builtMatch.getIcmpv6Match().getIcmpv6Type().intValue());\r
+ Assert.assertEquals("Wrong icmpv6 code", 20, builtMatch.getIcmpv6Match().getIcmpv6Code().intValue());\r
+ Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();\r
+ Assert.assertEquals("Wrong ipv4 src address", "10.0.0.1/32", ipv4Match.getIpv4Source().getValue());\r
+ Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.2/32", ipv4Match.getIpv4Destination().getValue());\r
+ Assert.assertEquals("Wrong mpls label", 21, builtMatch.getProtocolMatchFields().getMplsLabel().intValue());\r
+ Assert.assertEquals("Wrong mpls bos", 1, builtMatch.getProtocolMatchFields().getMplsBos().intValue());\r
+ Assert.assertEquals("Wrong mpls tc", 22, builtMatch.getProtocolMatchFields().getMplsTc().intValue());\r
+ Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());\r
+ Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),\r
+ builtMatch.getTunnel().getTunnelId());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test\r
+ public void testWithMatchEntriesWithMasks() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setType(OxmMatchType.class);\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Metadata.class);\r
+ entriesBuilder.setHasMask(true);\r
+ MetadataMatchEntryBuilder metadataBuilder = new MetadataMatchEntryBuilder();\r
+ metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});\r
+ entriesBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());\r
+ MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 1});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(EthDst.class);\r
+ entriesBuilder.setHasMask(true);\r
+ MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 2});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(EthSrc.class);\r
+ entriesBuilder.setHasMask(true);\r
+ macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 3});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(VlanVid.class);\r
+ entriesBuilder.setHasMask(true);\r
+ VlanVidMatchEntryBuilder vlanVidBuilder = new VlanVidMatchEntryBuilder();\r
+ vlanVidBuilder.setVlanVid(4);\r
+ vlanVidBuilder.setCfiBit(true);\r
+ entriesBuilder.addAugmentation(VlanVidMatchEntry.class, vlanVidBuilder.build());\r
+ maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{0, 4});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
+ entriesBuilder.setHasMask(true);\r
+ Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
+ ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));\r
+ entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());\r
+ maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
+ entriesBuilder.setHasMask(true);\r
+ ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
+ ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));\r
+ entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());\r
+ maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 240, 0});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ // FIXME - PbbIsid should check for mask length of 3 instead of 2\r
+// entriesBuilder = new MatchEntriesBuilder();\r
+// entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+// entriesBuilder.setOxmMatchField(PbbIsid.class);\r
+// entriesBuilder.setHasMask(true);\r
+// IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();\r
+// isidBuilder.setIsid(23L);\r
+// entriesBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());\r
+// maskBuilder = new MaskMatchEntryBuilder();\r
+// maskBuilder.setMask(new byte[]{0, 0, 7});\r
+// entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+// entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(TunnelId.class);\r
+ entriesBuilder.setHasMask(true);\r
+ metadataBuilder = new MetadataMatchEntryBuilder();\r
+ metadataBuilder.setMetadata(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});\r
+ entriesBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());\r
+ maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 8});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ builder.setMatchEntries(entries);\r
+ Match match = builder.build();\r
+\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
+ .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
+\r
+ Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());\r
+ Assert.assertEquals("Wrong metadata mask", new BigInteger(1, new byte[]{0, 0, 0, 0, 0, 0, 0, 1}),\r
+ builtMatch.getMetadata().getMetadataMask());\r
+ Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());\r
+// Assert.assertEquals("Wrong eth dst mask", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getMask());\r
+ Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());\r
+// Assert.assertEquals("Wrong eth src mask", new MacAddress("00:00:00:00:00:03"), builtMatch.getEthernetMatch().getEthernetSource().getMask());\r
+ Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());\r
+ // TODO - finish implementation by setting the vlanIdPresent flag\r
+// Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());\r
+ Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();\r
+ Assert.assertEquals("Wrong ipv4 src address", "10.0.0.1/24", ipv4Match.getIpv4Source().getValue());\r
+ Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.2/20", ipv4Match.getIpv4Destination().getValue());\r
+// Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());\r
+ Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),\r
+ builtMatch.getTunnel().getTunnelId());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test\r
+ public void testLayer4MatchUdp() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setType(OxmMatchType.class);\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(UdpSrc.class);\r
+ entriesBuilder.setHasMask(false);\r
+ PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();\r
+ portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
+ .inet.types.rev100924.PortNumber(11));\r
+ entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(UdpDst.class);\r
+ entriesBuilder.setHasMask(false);\r
+ portBuilder = new PortMatchEntryBuilder();\r
+ portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
+ .inet.types.rev100924.PortNumber(12));\r
+ entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ builder.setMatchEntries(entries);\r
+ \r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
+ .MatchBuilder builtMatch = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
+ \r
+ UdpMatch udpMatch = (UdpMatch) builtMatch.getLayer4Match();\r
+ Assert.assertEquals("Wrong udp src port", 11, udpMatch.getUdpSourcePort().getValue().intValue());\r
+ Assert.assertEquals("Wrong udp dst port", 12, udpMatch.getUdpDestinationPort().getValue().intValue());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test\r
+ public void testLayer4MatchSctp() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setType(OxmMatchType.class);\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(SctpSrc.class);\r
+ entriesBuilder.setHasMask(false);\r
+ PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();\r
+ portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
+ .inet.types.rev100924.PortNumber(13));\r
+ entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(SctpDst.class);\r
+ entriesBuilder.setHasMask(false);\r
+ portBuilder = new PortMatchEntryBuilder();\r
+ portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
+ .inet.types.rev100924.PortNumber(14));\r
+ entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ builder.setMatchEntries(entries);\r
+ \r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
+ .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
+ \r
+ SctpMatch udpMatch = (SctpMatch) builtMatch.getLayer4Match();\r
+ Assert.assertEquals("Wrong sctp src port", 13, udpMatch.getSctpSourcePort().getValue().intValue());\r
+ Assert.assertEquals("Wrong sctp dst port", 14, udpMatch.getSctpDestinationPort().getValue().intValue());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test\r
+ public void testLayer3MatchIpv6() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setType(OxmMatchType.class);\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv6Src.class);\r
+ entriesBuilder.setHasMask(false);\r
+ Ipv6AddressMatchEntryBuilder ipv6AddressBuilder = new Ipv6AddressMatchEntryBuilder();\r
+ ipv6AddressBuilder.setIpv6Address(new Ipv6Address("0000:0001:0002:0003:0004:0005:0006:0007"));\r
+ entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6AddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv6Dst.class);\r
+ entriesBuilder.setHasMask(false);\r
+ ipv6AddressBuilder = new Ipv6AddressMatchEntryBuilder();\r
+ ipv6AddressBuilder.setIpv6Address(new Ipv6Address("0001:0002:0003:0004:0005:0006:0007:0008"));\r
+ entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6AddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv6Flabel.class);\r
+ entriesBuilder.setHasMask(false);\r
+ Ipv6FlabelMatchEntryBuilder ipv6FlabelBuilder = new Ipv6FlabelMatchEntryBuilder();\r
+ ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(18L));\r
+ entriesBuilder.addAugmentation(Ipv6FlabelMatchEntry.class, ipv6FlabelBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv6NdTarget.class);\r
+ entriesBuilder.setHasMask(false);\r
+ ipv6AddressBuilder = new Ipv6AddressMatchEntryBuilder();\r
+ ipv6AddressBuilder.setIpv6Address(new Ipv6Address("0002:0003:0004:0005:0006:0007:0008:0009"));\r
+ entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6AddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv6NdSll.class);\r
+ entriesBuilder.setHasMask(false);\r
+ MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:05"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv6NdTll.class);\r
+ entriesBuilder.setHasMask(false);\r
+ macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:06"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);\r
+ entriesBuilder.setHasMask(false);\r
+ PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();\r
+ pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));\r
+ entriesBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());\r
+ builder.setMatchEntries(entries);\r
+ entries.add(entriesBuilder.build());\r
+\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
+ .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
+ \r
+ Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();\r
+ Assert.assertEquals("Wrong ipv6 src address", "0000:0001:0002:0003:0004:0005:0006:0007",\r
+ ipv6Match.getIpv6Source().getValue());\r
+ Assert.assertEquals("Wrong ipv6 dst address", "0001:0002:0003:0004:0005:0006:0007:0008",\r
+ ipv6Match.getIpv6Destination().getValue());\r
+ Assert.assertEquals("Wrong ipv6 nd target", "0002:0003:0004:0005:0006:0007:0008:0009",\r
+ ipv6Match.getIpv6NdTarget().getValue());\r
+ Assert.assertEquals("Wrong ipv6 flabel", 18, ipv6Match.getIpv6Label().getIpv6Flabel().getValue().intValue());\r
+ Assert.assertEquals("Wrong ipv6 nd sll", new MacAddress("00:00:00:00:00:05"), ipv6Match.getIpv6NdSll());\r
+ Assert.assertEquals("Wrong ipv6 nd tll", new MacAddress("00:00:00:00:00:06"), ipv6Match.getIpv6NdTll());\r
+ Assert.assertEquals("Wrong ipv6 ext header", 358, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test\r
+ public void testLayer3MatchIpv6ExtHeader2() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setType(OxmMatchType.class);\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);\r
+ entriesBuilder.setHasMask(true);\r
+ PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();\r
+ pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(false, true, false, true, false, true, false, true, false));\r
+ entriesBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());\r
+ MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{1, 2});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ builder.setMatchEntries(entries);\r
+\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
+ .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
+ \r
+ Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();\r
+ Assert.assertEquals("Wrong ipv6 ext header", 153, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());\r
+ Assert.assertEquals("Wrong ipv6 ext header mask", 258, ipv6Match.getIpv6ExtHeader().getIpv6ExthdrMask().intValue());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test\r
+ public void testLayer3MatchArp() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setType(OxmMatchType.class);\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(ArpOp.class);\r
+ entriesBuilder.setHasMask(false);\r
+ OpCodeMatchEntryBuilder opCodeBuilder = new OpCodeMatchEntryBuilder();\r
+ opCodeBuilder.setOpCode(17);\r
+ entriesBuilder.addAugmentation(OpCodeMatchEntry.class, opCodeBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(ArpSpa.class);\r
+ entriesBuilder.setHasMask(false);\r
+ Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
+ ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));\r
+ entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(ArpTpa.class);\r
+ entriesBuilder.setHasMask(false);\r
+ ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
+ ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));\r
+ entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(ArpSha.class);\r
+ entriesBuilder.setHasMask(false);\r
+ MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(ArpTha.class);\r
+ entriesBuilder.setHasMask(false);\r
+ macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ builder.setMatchEntries(entries);\r
+ \r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
+ .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
+ \r
+ ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();\r
+ Assert.assertEquals("Wrong arp op", 17, arpMatch.getArpOp().intValue());\r
+ Assert.assertEquals("Wrong arp spa", "10.0.0.3", arpMatch.getArpSourceTransportAddress().getValue());\r
+ Assert.assertEquals("Wrong arp tpa", "10.0.0.4", arpMatch.getArpTargetTransportAddress().getValue());\r
+ Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());\r
+ Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());\r
+ }\r
+\r
+ /**\r
+ * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}\r
+ */\r
+ @Test\r
+ public void testLayer3MatchArpWithMasks() {\r
+ MatchBuilder builder = new MatchBuilder();\r
+ builder.setType(OxmMatchType.class);\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(ArpSpa.class);\r
+ entriesBuilder.setHasMask(true);\r
+ Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
+ ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));\r
+ entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());\r
+ MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(ArpTpa.class);\r
+ entriesBuilder.setHasMask(true);\r
+ ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
+ ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));\r
+ entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());\r
+ maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{(byte) 255, (byte) 128, 0, 0});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(ArpSha.class);\r
+ entriesBuilder.setHasMask(true);\r
+ MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{0, 0, 1, 0, 4, 0});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(ArpTha.class);\r
+ entriesBuilder.setHasMask(true);\r
+ macAddressBuilder = new MacAddressMatchEntryBuilder();\r
+ macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));\r
+ entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());\r
+ maskBuilder = new MaskMatchEntryBuilder();\r
+ maskBuilder.setMask(new byte[]{1, 1, 1, 2, 2, 2});\r
+ entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
+ entries.add(entriesBuilder.build());\r
+ builder.setMatchEntries(entries);\r
+ \r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
+ .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
+ \r
+ ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();\r
+ // FIXME - fix mask computation\r
+// Assert.assertEquals("Wrong arp spa", "10.0.0.3/8", arpMatch.getArpSourceTransportAddress().getValue());\r
+// Assert.assertEquals("Wrong arp tpa", "10.0.0.4/9", arpMatch.getArpTargetTransportAddress().getValue());\r
+ Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());\r
+ Assert.assertEquals("Wrong arp sha mask", "00:00:01:00:04:00", arpMatch.getArpSourceHardwareAddress().getMask().getValue());\r
+ Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());\r
+ Assert.assertEquals("Wrong arp tha mask", "01:01:01:02:02:02", arpMatch.getArpTargetHardwareAddress().getMask().getValue());\r
+ }\r
+}
\ No newline at end of file