X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fsal%2Fapi%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fpacket%2FIPv4Test.java;h=f5298711b677a64ef9c80863580743ce2c394e52;hp=429272f22769dc2ef36a17510cfe09910189a607;hb=3ce420ccd45e7530c2c2158bd57462fd5859a879;hpb=50516efa1c2dcb3d2ac3a9c57b373d18231f6c12 diff --git a/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/packet/IPv4Test.java b/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/packet/IPv4Test.java index 429272f227..f5298711b6 100644 --- a/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/packet/IPv4Test.java +++ b/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/packet/IPv4Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2013-2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -15,6 +15,8 @@ import java.util.Arrays; import junit.framework.Assert; import org.junit.Test; +import org.opendaylight.controller.sal.match.Match; +import org.opendaylight.controller.sal.match.MatchType; import org.opendaylight.controller.sal.utils.EtherTypes; import org.opendaylight.controller.sal.utils.IPProtocols; import org.opendaylight.controller.sal.utils.NetUtils; @@ -224,6 +226,126 @@ public class IPv4Test { Assert.assertTrue(destinationAddress[3] == 110); } + @Test + public void testOptions() throws Exception { + IPv4 ip = new IPv4(); + Assert.assertEquals(20, ip.getHeaderLen()); + Assert.assertEquals(160, ip.getHeaderSize()); + Assert.assertEquals(0, ip.getfieldnumBits("Options")); + + byte[][] options = { + new byte[] { + (byte)0x01, + }, + new byte[] { + (byte)0x01, (byte)0x02, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + }, + null, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + (byte)0x05, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + (byte)0x05, (byte)0x06, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + (byte)0x05, (byte)0x06, (byte)0x07, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + (byte)0x05, (byte)0x06, (byte)0x07, (byte)0x08, + }, + new byte[0], + }; + + byte[][] expected = { + new byte[] { + (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x00, (byte)0x00, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x00, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + }, + null, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + (byte)0x05, (byte)0x00, (byte)0x00, (byte)0x00, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + (byte)0x05, (byte)0x06, (byte)0x00, (byte)0x00, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + (byte)0x05, (byte)0x06, (byte)0x07, (byte)0x00, + }, + new byte[] { + (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, + (byte)0x05, (byte)0x06, (byte)0x07, (byte)0x08, + }, + null, + }; + + byte[] echo = { + (byte)0x11, (byte)0x22, (byte)0x33, (byte)0x44, + (byte)0x55, (byte)0x66, (byte)0x77, (byte)0x88, + (byte)0x99, (byte)0xaa, + }; + ICMP icmp = new ICMP(); + icmp.setType((byte)8); + icmp.setCode((byte)0); + icmp.setIdentifier((short)0xabcd); + icmp.setSequenceNumber((short)7777); + icmp.setRawPayload(echo); + + ip.setSourceAddress(InetAddress.getByName("192.168.10.20")); + ip.setDestinationAddress(InetAddress.getByName("192.168.30.40")); + ip.setProtocol(IPProtocols.ICMP.byteValue()); + + for (int i = 0; i < options.length; i++) { + byte[] opts = options[i]; + byte[] exp = expected[i]; + + // Set IPv4 options. + int hlen = 20; + int optlen; + if (exp != null) { + optlen = exp.length; + hlen += optlen; + } else { + optlen = 0; + } + ip.setOptions(opts); + Assert.assertTrue(Arrays.equals(exp, ip.getOptions())); + Assert.assertEquals(hlen, ip.getHeaderLen()); + Assert.assertEquals(hlen * 8, ip.getHeaderSize()); + Assert.assertEquals(optlen * 8, ip.getfieldnumBits("Options")); + + // Serialize/Deserialize test. + ip.setPayload(icmp); + + byte[] raw = ip.serialize(); + IPv4 newip = new IPv4(); + newip.deserialize(raw, 0, raw.length * 8); + Assert.assertEquals(ip, newip); + Assert.assertEquals(icmp, newip.getPayload()); + Assert.assertTrue(Arrays.equals(exp, newip.getOptions())); + } + } + @Test public void testChecksum() { byte header[] = { (byte) 0x45, 00, 00, (byte) 0x3c, (byte) 0x1c, @@ -332,4 +454,31 @@ public class IPv4Test { Assert.assertFalse(decIcmp.isCorrupted()); Assert.assertTrue(Arrays.equals(icmpRawPayload, decIcmp.getRawPayload())); } + + @Test + public void testGetMatch() throws Exception { + IPv4 ip = new IPv4(); + InetAddress sourceAddress = InetAddress.getByName("172.168.190.15"); + InetAddress destintationAddress = InetAddress.getByName("23.128.0.11"); + byte protocol = IPProtocols.TCP.byteValue(); + byte tos = 7; + ip.setVersion((byte) 4); + ip.setIdentification((short) 5); + ip.setDiffServ(tos); + ip.setECN((byte) 0); + ip.setTotalLength((short) 84); + ip.setFlags((byte) 2); + ip.setFragmentOffset((short) 0); + ip.setTtl((byte) 64); + ip.setProtocol(protocol); + ip.setDestinationAddress(destintationAddress); + ip.setSourceAddress(sourceAddress); + + Match match = ip.getMatch(); + + Assert.assertEquals(sourceAddress, match.getField(MatchType.NW_SRC).getValue()); + Assert.assertEquals(destintationAddress, match.getField(MatchType.NW_DST).getValue()); + Assert.assertEquals(protocol, (byte) match.getField(MatchType.NW_PROTO).getValue()); + Assert.assertEquals(tos, (byte) match.getField(MatchType.NW_TOS).getValue()); + } }