2 * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowplugin.impl.util;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNull;
14 import org.junit.Test;
15 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchArbitraryBitMaskBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchArbitraryBitMaskBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.TunnelIpv4Match;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.TunnelIpv4MatchBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.opendaylight.ipv6.arbitrary.bitmask.fields.rev160224.Ipv6ArbitraryMask;
41 public class MatchNormalizationUtilTest {
43 public void normalizeInPortMatch() {
46 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeInPortMatch(new MatchBuilder()
47 .setInPort(new NodeConnectorId("openflow:1:" + port)), EncodeConstants.OF13_VERSION_ID);
49 assertEquals(String.valueOf(port), matchBuilder.getInPort().getValue());
53 public void normalizeInPhyPortMatch() {
56 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeInPhyPortMatch(new MatchBuilder()
57 .setInPhyPort(new NodeConnectorId("openflow:1:" + port)), EncodeConstants.OF13_VERSION_ID);
59 assertEquals(String.valueOf(port), matchBuilder.getInPhyPort().getValue());
63 public void normalizeArpMatch() {
65 final String source = "192.168.1.2/24";
66 final String destination = "192.168.2.2/24";
67 final MacAddress sourceHw = new MacAddress("01:23:45:AB:CD:EF");
68 final MacAddress dstHw = new MacAddress("01:23:45:AB:C0:EF");
69 final MacAddress mask = new MacAddress("FF:FF:FF:FF:FF:FF");
71 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeArpMatch(new MatchBuilder()
72 .setLayer3Match(new ArpMatchBuilder()
74 .setArpSourceTransportAddress(new Ipv4Prefix(source))
75 .setArpTargetTransportAddress(new Ipv4Prefix(destination))
76 .setArpTargetHardwareAddress(new ArpTargetHardwareAddressBuilder()
80 .setArpSourceHardwareAddress(new ArpSourceHardwareAddressBuilder()
86 assertEquals(arpOp, ArpMatch.class.cast(matchBuilder.getLayer3Match()).getArpOp().intValue());
90 public void normalizeTunnelIpv4Match() {
91 final String source = "192.168.1.2/24";
92 final String destination = "192.168.2.2/24";
94 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeTunnelIpv4Match(new MatchBuilder()
95 .setLayer3Match(new TunnelIpv4MatchBuilder()
96 .setTunnelIpv4Source(new Ipv4Prefix(source))
97 .setTunnelIpv4Destination(new Ipv4Prefix(destination))
100 assertEquals("192.168.1.0/24",
101 TunnelIpv4Match.class.cast(matchBuilder.getLayer3Match()).getTunnelIpv4Source().getValue());
102 assertEquals("192.168.2.0/24",
103 TunnelIpv4Match.class.cast(matchBuilder.getLayer3Match()).getTunnelIpv4Destination().getValue());
107 public void normalizeIpv4Match() {
108 final String source = "192.168.1.2/24";
109 final String destination = "192.168.2.2/24";
111 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeIpv4Match(new MatchBuilder()
112 .setLayer3Match(new Ipv4MatchBuilder()
113 .setIpv4Source(new Ipv4Prefix(source))
114 .setIpv4Destination(new Ipv4Prefix(destination))
117 assertEquals("192.168.1.0/24", Ipv4Match.class.cast(matchBuilder.getLayer3Match()).getIpv4Source().getValue());
118 assertEquals("192.168.2.0/24",
119 Ipv4Match.class.cast(matchBuilder.getLayer3Match()).getIpv4Destination().getValue());
123 public void normalizeIpv4MatchArbitraryBitMask() {
124 final Ipv4Address leftAddress = new Ipv4Address("192.168.72.1");
125 final DottedQuad leftMask = new DottedQuad("255.255.0.0");
126 final Ipv4Prefix right = new Ipv4Prefix("192.168.0.0/16");
128 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeIpv4MatchArbitraryBitMask(new MatchBuilder()
129 .setLayer3Match(new Ipv4MatchArbitraryBitMaskBuilder()
130 .setIpv4SourceAddressNoMask(leftAddress)
131 .setIpv4SourceArbitraryBitmask(leftMask)
132 .setIpv4DestinationAddressNoMask(leftAddress)
133 .setIpv4DestinationArbitraryBitmask(leftMask)
136 assertEquals(right, Ipv4Match.class.cast(matchBuilder.getLayer3Match()).getIpv4Source());
137 assertEquals(right, Ipv4Match.class.cast(matchBuilder.getLayer3Match()).getIpv4Destination());
141 public void normalizeIpv6Match() {
142 final Ipv6Prefix leftPrefix = new Ipv6Prefix("1E3D:5678:9ABC::/24");
143 final Ipv6Prefix rightPrefix = new Ipv6Prefix("1e3d:5600:0:0:0:0:0:0/24");
144 final MacAddress leftMac = new MacAddress("01:23:45:AB:CD:EF");
145 final MacAddress rightMac = new MacAddress("01:23:45:ab:cd:ef");
146 final Ipv6Address leftAddress = new Ipv6Address("1E3D:5678:9ABC::");
147 final Ipv6Address rightAddress = new Ipv6Address("1e3d:5678:9abc:0:0:0:0:0");
149 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeIpv6Match(new MatchBuilder()
150 .setLayer3Match(new Ipv6MatchBuilder()
151 .setIpv6NdSll(leftMac)
152 .setIpv6NdTll(leftMac)
153 .setIpv6NdTarget(leftAddress)
154 .setIpv6Source(leftPrefix)
155 .setIpv6Destination(leftPrefix)
158 assertEquals(rightMac, Ipv6Match.class.cast(matchBuilder.getLayer3Match()).getIpv6NdSll());
159 assertEquals(rightMac, Ipv6Match.class.cast(matchBuilder.getLayer3Match()).getIpv6NdTll());
160 assertEquals(rightPrefix, Ipv6Match.class.cast(matchBuilder.getLayer3Match()).getIpv6Source());
161 assertEquals(rightPrefix, Ipv6Match.class.cast(matchBuilder.getLayer3Match()).getIpv6Destination());
162 assertEquals(rightAddress, Ipv6Match.class.cast(matchBuilder.getLayer3Match()).getIpv6NdTarget());
166 public void normalizeIpv6MatchArbitraryBitMask() {
167 final Ipv6Address leftAddress = new Ipv6Address("1E3D:5678:9ABC::");
168 final Ipv6ArbitraryMask leftMask = new Ipv6ArbitraryMask("FFFF:FF00::");
169 final Ipv6Prefix right = new Ipv6Prefix("1e3d:5600:0:0:0:0:0:0/24");
171 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeIpv6MatchArbitraryBitMask(new MatchBuilder()
172 .setLayer3Match(new Ipv6MatchArbitraryBitMaskBuilder()
173 .setIpv6SourceAddressNoMask(leftAddress)
174 .setIpv6SourceArbitraryBitmask(leftMask)
175 .setIpv6DestinationAddressNoMask(leftAddress)
176 .setIpv6DestinationArbitraryBitmask(leftMask)
179 assertEquals(right, Ipv6Match.class.cast(matchBuilder.getLayer3Match()).getIpv6Source());
180 assertEquals(right, Ipv6Match.class.cast(matchBuilder.getLayer3Match()).getIpv6Destination());
184 public void normalizeEthernetMatch() {
185 final MacAddress left = new MacAddress("01:23:45:AB:CD:EF");
186 final MacAddress leftMask = new MacAddress("FF:FF:FF:FF:FF:FF");
187 final MacAddress right = new MacAddress("01:23:45:ab:cd:ef");
189 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeEthernetMatch(new MatchBuilder()
190 .setEthernetMatch(new EthernetMatchBuilder()
191 .setEthernetSource(new EthernetSourceBuilder()
195 .setEthernetDestination(new EthernetDestinationBuilder()
201 assertEquals(right, matchBuilder.getEthernetMatch().getEthernetSource().getAddress());
202 assertEquals(right, matchBuilder.getEthernetMatch().getEthernetDestination().getAddress());
203 assertNull(matchBuilder.getEthernetMatch().getEthernetSource().getMask());
204 assertNull(matchBuilder.getEthernetMatch().getEthernetDestination().getMask());