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
8 package org.opendaylight.openflowplugin.impl.util;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNull;
13 import org.junit.Test;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchArbitraryBitMaskBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchArbitraryBitMaskBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.TunnelIpv4Match;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.TunnelIpv4MatchBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.opendaylight.ipv6.arbitrary.bitmask.fields.rev160224.Ipv6ArbitraryMask;
38 import org.opendaylight.yangtools.yang.common.Uint16;
40 public class MatchNormalizationUtilTest {
42 public void normalizeInPortMatch() {
45 final MatchBuilder matchBuilder = MatchNormalizationUtil.VERSION_1_3.normalizeInPortMatch(new MatchBuilder()
46 .setInPort(new NodeConnectorId("openflow:1:" + port)));
48 assertEquals(String.valueOf(port), matchBuilder.getInPort().getValue());
52 public void normalizeInPhyPortMatch() {
55 final MatchBuilder matchBuilder = MatchNormalizationUtil.VERSION_1_3.normalizeInPhyPortMatch(new MatchBuilder()
56 .setInPhyPort(new NodeConnectorId("openflow:1:" + port)));
58 assertEquals(String.valueOf(port), matchBuilder.getInPhyPort().getValue());
62 public void normalizeArpMatch() {
64 final String source = "192.168.1.2/24";
65 final String destination = "192.168.2.2/24";
66 final MacAddress sourceHw = new MacAddress("01:23:45:AB:CD:EF");
67 final MacAddress dstHw = new MacAddress("01:23:45:AB:C0:EF");
68 final MacAddress mask = new MacAddress("FF:FF:FF:FF:FF:FF");
70 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeArpMatch(new MatchBuilder()
71 .setLayer3Match(new ArpMatchBuilder()
73 .setArpSourceTransportAddress(new Ipv4Prefix(source))
74 .setArpTargetTransportAddress(new Ipv4Prefix(destination))
75 .setArpTargetHardwareAddress(new ArpTargetHardwareAddressBuilder()
79 .setArpSourceHardwareAddress(new ArpSourceHardwareAddressBuilder()
85 assertEquals(arpOp, ((ArpMatch) matchBuilder.getLayer3Match()).getArpOp().intValue());
89 public void normalizeTunnelIpv4Match() {
90 final String source = "192.168.1.2/24";
91 final String destination = "192.168.2.2/24";
93 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeTunnelIpv4Match(new MatchBuilder()
94 .setLayer3Match(new TunnelIpv4MatchBuilder()
95 .setTunnelIpv4Source(new Ipv4Prefix(source))
96 .setTunnelIpv4Destination(new Ipv4Prefix(destination))
99 assertEquals("192.168.1.0/24",
100 ((TunnelIpv4Match) matchBuilder.getLayer3Match()).getTunnelIpv4Source().getValue());
101 assertEquals("192.168.2.0/24",
102 ((TunnelIpv4Match) matchBuilder.getLayer3Match()).getTunnelIpv4Destination().getValue());
106 public void normalizeIpv4Match() {
107 final String source = "192.168.1.2/24";
108 final String destination = "192.168.2.2/24";
110 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeIpv4Match(new MatchBuilder()
111 .setLayer3Match(new Ipv4MatchBuilder()
112 .setIpv4Source(new Ipv4Prefix(source))
113 .setIpv4Destination(new Ipv4Prefix(destination))
116 assertEquals("192.168.1.0/24", ((Ipv4Match) matchBuilder.getLayer3Match()).getIpv4Source().getValue());
117 assertEquals("192.168.2.0/24",
118 ((Ipv4Match) matchBuilder.getLayer3Match()).getIpv4Destination().getValue());
122 public void normalizeIpv4MatchArbitraryBitMask() {
123 final Ipv4Address leftAddress = new Ipv4Address("192.168.72.1");
124 final DottedQuad leftMask = new DottedQuad("255.255.0.0");
125 final Ipv4Prefix right = new Ipv4Prefix("192.168.0.0/16");
127 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeIpv4MatchArbitraryBitMask(new MatchBuilder()
128 .setLayer3Match(new Ipv4MatchArbitraryBitMaskBuilder()
129 .setIpv4SourceAddressNoMask(leftAddress)
130 .setIpv4SourceArbitraryBitmask(leftMask)
131 .setIpv4DestinationAddressNoMask(leftAddress)
132 .setIpv4DestinationArbitraryBitmask(leftMask)
135 assertEquals(right, ((Ipv4Match) matchBuilder.getLayer3Match()).getIpv4Source());
136 assertEquals(right, ((Ipv4Match) matchBuilder.getLayer3Match()).getIpv4Destination());
140 public void normalizeIpv6Match() {
141 final Ipv6Prefix leftPrefix = new Ipv6Prefix("1E3D:5678:9ABC::/24");
142 final Ipv6Prefix rightPrefix = new Ipv6Prefix("1e3d:5600:0:0:0:0:0:0/24");
143 final MacAddress leftMac = new MacAddress("01:23:45:AB:CD:EF");
144 final MacAddress rightMac = new MacAddress("01:23:45:ab:cd:ef");
145 final Ipv6Address leftAddress = new Ipv6Address("1E3D:5678:9ABC::");
146 final Ipv6Address rightAddress = new Ipv6Address("1e3d:5678:9abc:0:0:0:0:0");
148 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeIpv6Match(new MatchBuilder()
149 .setLayer3Match(new Ipv6MatchBuilder()
150 .setIpv6NdSll(leftMac)
151 .setIpv6NdTll(leftMac)
152 .setIpv6NdTarget(leftAddress)
153 .setIpv6Source(leftPrefix)
154 .setIpv6Destination(leftPrefix)
157 assertEquals(rightMac, ((Ipv6Match) matchBuilder.getLayer3Match()).getIpv6NdSll());
158 assertEquals(rightMac, ((Ipv6Match) matchBuilder.getLayer3Match()).getIpv6NdTll());
159 assertEquals(rightPrefix, ((Ipv6Match) matchBuilder.getLayer3Match()).getIpv6Source());
160 assertEquals(rightPrefix, ((Ipv6Match) matchBuilder.getLayer3Match()).getIpv6Destination());
161 assertEquals(rightAddress, ((Ipv6Match) matchBuilder.getLayer3Match()).getIpv6NdTarget());
165 public void normalizeIpv6MatchArbitraryBitMask() {
166 final Ipv6Address leftAddress = new Ipv6Address("1E3D:5678:9ABC::");
167 final Ipv6ArbitraryMask leftMask = new Ipv6ArbitraryMask("FFFF:FF00::");
168 final Ipv6Prefix right = new Ipv6Prefix("1e3d:5600:0:0:0:0:0:0/24");
170 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeIpv6MatchArbitraryBitMask(new MatchBuilder()
171 .setLayer3Match(new Ipv6MatchArbitraryBitMaskBuilder()
172 .setIpv6SourceAddressNoMask(leftAddress)
173 .setIpv6SourceArbitraryBitmask(leftMask)
174 .setIpv6DestinationAddressNoMask(leftAddress)
175 .setIpv6DestinationArbitraryBitmask(leftMask)
178 assertEquals(right, ((Ipv6Match) matchBuilder.getLayer3Match()).getIpv6Source());
179 assertEquals(right, ((Ipv6Match) matchBuilder.getLayer3Match()).getIpv6Destination());
183 public void normalizeEthernetMatch() {
184 final MacAddress left = new MacAddress("01:23:45:AB:CD:EF");
185 final MacAddress leftMask = new MacAddress("FF:FF:FF:FF:FF:FF");
186 final MacAddress right = new MacAddress("01:23:45:ab:cd:ef");
188 final MatchBuilder matchBuilder = MatchNormalizationUtil.normalizeEthernetMatch(new MatchBuilder()
189 .setEthernetMatch(new EthernetMatchBuilder()
190 .setEthernetSource(new EthernetSourceBuilder()
194 .setEthernetDestination(new EthernetDestinationBuilder()
200 assertEquals(right, matchBuilder.getEthernetMatch().getEthernetSource().getAddress());
201 assertEquals(right, matchBuilder.getEthernetMatch().getEthernetDestination().getAddress());
202 assertNull(matchBuilder.getEthernetMatch().getEthernetSource().getMask());
203 assertNull(matchBuilder.getEthernetMatch().getEthernetDestination().getMask());