Search in sources :

Example 31 with DHCP6

use of org.onlab.packet.DHCP6 in project onos by opennetworkinglab.

the class Dhcp6Test method deserializeAdvertise.

/**
 * Test deserialize advertise message.
 *
 * @throws Exception exception while deserialize the DHCPv6 payload
 */
@Test
public void deserializeAdvertise() throws Exception {
    byte[] data = Resources.toByteArray(getClass().getResource(ADVERTISE));
    Ethernet eth = Ethernet.deserializer().deserialize(data, 0, data.length);
    DHCP6 dhcp6 = (DHCP6) eth.getPayload().getPayload().getPayload();
    assertEquals(dhcp6.getMsgType(), DHCP6.MsgType.ADVERTISE.value());
    assertEquals(dhcp6.getTransactionId(), XID_1);
    assertEquals(dhcp6.getOptions().size(), 3);
    // IA NA
    Dhcp6Option option = dhcp6.getOptions().get(0);
    assertTrue(option instanceof Dhcp6IaNaOption);
    Dhcp6IaNaOption iaNaOption = (Dhcp6IaNaOption) option;
    assertEquals(iaNaOption.getCode(), DHCP6.OptionCode.IA_NA.value());
    assertEquals(iaNaOption.getLength(), 40);
    assertEquals(iaNaOption.getIaId(), IA_ID);
    assertEquals(iaNaOption.getT1(), T1_SERVER);
    assertEquals(iaNaOption.getT2(), T2_SERVER);
    assertEquals(iaNaOption.getOptions().size(), 1);
    // IA Address (in IA NA)
    assertTrue(iaNaOption.getOptions().get(0) instanceof Dhcp6IaAddressOption);
    Dhcp6IaAddressOption iaAddressOption = (Dhcp6IaAddressOption) iaNaOption.getOptions().get(0);
    assertEquals(iaAddressOption.getIp6Address(), IA_ADDRESS);
    assertEquals(iaAddressOption.getPreferredLifetime(), PREFFERRED_LT_SERVER);
    assertEquals(iaAddressOption.getValidLifetime(), VALID_LT_SERVER);
    assertNull(iaAddressOption.getOptions());
    // Client ID
    option = dhcp6.getOptions().get(1);
    assertTrue(option instanceof Dhcp6ClientIdOption);
    Dhcp6ClientIdOption clientIdOption = (Dhcp6ClientIdOption) option;
    assertEquals(clientIdOption.getCode(), DHCP6.OptionCode.CLIENTID.value());
    assertEquals(clientIdOption.getLength(), 14);
    assertEquals(clientIdOption.getDuid().getDuidType(), Dhcp6Duid.DuidType.DUID_LLT);
    assertEquals(clientIdOption.getDuid().getHardwareType(), 1);
    assertEquals(clientIdOption.getDuid().getDuidTime(), CLIENT_DUID_TIME);
    assertArrayEquals(clientIdOption.getDuid().getLinkLayerAddress(), CLIENT_MAC.toBytes());
    // Server ID
    option = dhcp6.getOptions().get(2);
    assertEquals(option.getCode(), DHCP6.OptionCode.SERVERID.value());
    assertEquals(option.getLength(), 14);
    Dhcp6Duid serverDuid = Dhcp6Duid.deserializer().deserialize(option.getData(), 0, option.getData().length);
    assertEquals(serverDuid.getDuidType(), Dhcp6Duid.DuidType.DUID_LLT);
    assertEquals(serverDuid.getDuidTime(), 0x211e5340);
    assertEquals(serverDuid.getHardwareType(), 1);
    assertArrayEquals(serverDuid.getLinkLayerAddress(), SERVER_MAC.toBytes());
    assertArrayEquals(data, eth.serialize());
}
Also used : Ethernet(org.onlab.packet.Ethernet) DHCP6(org.onlab.packet.DHCP6) Test(org.junit.Test)

Example 32 with DHCP6

use of org.onlab.packet.DHCP6 in project onos by opennetworkinglab.

the class Dhcp6Test method serializeRequest.

/**
 * Test serialize request message.
 *
 * @throws Exception exception while serialize the DHCPv6 payload
 */
@Test
public void serializeRequest() throws Exception {
    DHCP6 dhcp6 = new DHCP6();
    dhcp6.setMsgType(DHCP6.MsgType.REQUEST.value());
    dhcp6.setTransactionId(XID_2);
    List<Dhcp6Option> options = Lists.newArrayList();
    // Client ID
    Dhcp6Duid duid = new Dhcp6Duid();
    duid.setDuidType(Dhcp6Duid.DuidType.DUID_LLT);
    duid.setHardwareType((short) 1);
    duid.setDuidTime(CLIENT_DUID_TIME);
    duid.setLinkLayerAddress(CLIENT_MAC.toBytes());
    Dhcp6ClientIdOption clientIdOption = new Dhcp6ClientIdOption();
    clientIdOption.setDuid(duid);
    options.add(clientIdOption);
    // Server ID
    Dhcp6Option option = new Dhcp6Option();
    option.setCode(DHCP6.OptionCode.SERVERID.value());
    option.setLength((short) 14);
    Dhcp6Duid serverDuid = new Dhcp6Duid();
    serverDuid.setDuidType(Dhcp6Duid.DuidType.DUID_LLT);
    serverDuid.setLinkLayerAddress(SERVER_MAC.toBytes());
    serverDuid.setHardwareType((short) 1);
    serverDuid.setDuidTime(0x211e5340);
    option.setData(serverDuid.serialize());
    options.add(option);
    // Option request
    option = new Dhcp6Option();
    option.setCode(DHCP6.OptionCode.ORO.value());
    option.setLength((short) 8);
    option.setData(new byte[] { 0, 23, 0, 24, 0, 39, 0, 31 });
    options.add(option);
    // Elapsed Time
    option = new Dhcp6Option();
    option.setCode(DHCP6.OptionCode.ELAPSED_TIME.value());
    option.setLength((short) 2);
    option.setData(new byte[] { 0, 0 });
    options.add(option);
    // IA address
    Dhcp6IaAddressOption iaAddressOption = new Dhcp6IaAddressOption();
    iaAddressOption.setIp6Address(IA_ADDRESS);
    iaAddressOption.setPreferredLifetime(PREFFERRED_LT_REQ);
    iaAddressOption.setValidLifetime(VALID_LT_REQ_2);
    // IA NA
    Dhcp6IaNaOption iaNaOption = new Dhcp6IaNaOption();
    iaNaOption.setIaId(IA_ID);
    iaNaOption.setT1(T1_CLIENT);
    iaNaOption.setT2(T2_CLIENT);
    iaNaOption.setOptions(ImmutableList.of(iaAddressOption));
    options.add(iaNaOption);
    dhcp6.setOptions(options);
    Dhcp6RelayOption relayOption = new Dhcp6RelayOption();
    relayOption.setPayload(dhcp6);
    UDP udp = new UDP();
    udp.setSourcePort(UDP.DHCP_V6_CLIENT_PORT);
    udp.setDestinationPort(UDP.DHCP_V6_SERVER_PORT);
    udp.setPayload(dhcp6);
    udp.setChecksum((short) 0xffc1);
    IPv6 ipv6 = new IPv6();
    ipv6.setHopLimit((byte) 1);
    ipv6.setSourceAddress(CLIENT_LL.toOctets());
    ipv6.setDestinationAddress(DHCP6_BRC.toOctets());
    ipv6.setNextHeader(IPv6.PROTOCOL_UDP);
    ipv6.setTrafficClass((byte) 0);
    ipv6.setFlowLabel(0x000322ad);
    ipv6.setPayload(udp);
    Ethernet eth = new Ethernet();
    eth.setDestinationMACAddress(IPV6_MCAST);
    eth.setSourceMACAddress(CLIENT_MAC);
    eth.setEtherType(Ethernet.TYPE_IPV6);
    eth.setPayload(ipv6);
    assertArrayEquals(Resources.toByteArray(Dhcp6RelayTest.class.getResource(REQUEST)), eth.serialize());
}
Also used : UDP(org.onlab.packet.UDP) IPv6(org.onlab.packet.IPv6) Ethernet(org.onlab.packet.Ethernet) DHCP6(org.onlab.packet.DHCP6) Test(org.junit.Test)

Example 33 with DHCP6

use of org.onlab.packet.DHCP6 in project onos by opennetworkinglab.

the class Dhcp6Test method testDeserializeSolicit.

/**
 * Test DHCPv6 solicit message.
 *
 * @throws Exception exception while deserialize the DHCPv6 payload
 */
@Test
public void testDeserializeSolicit() throws Exception {
    byte[] data = Resources.toByteArray(Dhcp6RelayTest.class.getResource(SOLICIT));
    Ethernet eth = Ethernet.deserializer().deserialize(data, 0, data.length);
    DHCP6 dhcp6 = (DHCP6) eth.getPayload().getPayload().getPayload();
    assertEquals(dhcp6.getMsgType(), DHCP6.MsgType.SOLICIT.value());
    assertEquals(dhcp6.getTransactionId(), XID_1);
    assertEquals(dhcp6.getOptions().size(), 4);
    // Client ID
    Dhcp6Option option = dhcp6.getOptions().get(0);
    assertTrue(option instanceof Dhcp6ClientIdOption);
    Dhcp6ClientIdOption clientIdOption = (Dhcp6ClientIdOption) option;
    assertEquals(clientIdOption.getCode(), DHCP6.OptionCode.CLIENTID.value());
    assertEquals(clientIdOption.getLength(), 14);
    assertEquals(clientIdOption.getDuid().getDuidType(), Dhcp6Duid.DuidType.DUID_LLT);
    assertEquals(clientIdOption.getDuid().getHardwareType(), 1);
    assertEquals(clientIdOption.getDuid().getDuidTime(), CLIENT_DUID_TIME);
    assertArrayEquals(clientIdOption.getDuid().getLinkLayerAddress(), CLIENT_MAC.toBytes());
    // ORO
    option = dhcp6.getOptions().get(1);
    assertEquals(option.getCode(), DHCP6.OptionCode.ORO.value());
    assertEquals(option.getLength(), 8);
    assertArrayEquals(option.getData(), new byte[] { 0, 23, 0, 24, 0, 39, 0, 31 });
    // ELAPSED_TIME
    option = dhcp6.getOptions().get(2);
    assertEquals(option.getCode(), DHCP6.OptionCode.ELAPSED_TIME.value());
    assertEquals(option.getLength(), 2);
    assertArrayEquals(option.getData(), new byte[] { 0, 0 });
    // IA NA
    option = dhcp6.getOptions().get(3);
    assertTrue(option instanceof Dhcp6IaNaOption);
    Dhcp6IaNaOption iaNaOption = (Dhcp6IaNaOption) option;
    assertEquals(iaNaOption.getCode(), DHCP6.OptionCode.IA_NA.value());
    assertEquals(iaNaOption.getLength(), 40);
    assertEquals(iaNaOption.getIaId(), IA_ID);
    assertEquals(iaNaOption.getT1(), T1_CLIENT);
    assertEquals(iaNaOption.getT2(), T2_CLIENT);
    assertEquals(iaNaOption.getOptions().size(), 1);
    Dhcp6IaAddressOption subOption = (Dhcp6IaAddressOption) iaNaOption.getOptions().get(0);
    assertEquals(subOption.getIp6Address(), IA_ADDRESS);
    assertEquals(subOption.getPreferredLifetime(), PREFFERRED_LT_REQ);
    assertEquals(subOption.getValidLifetime(), VALID_LT_REQ);
    assertArrayEquals(data, eth.serialize());
}
Also used : Ethernet(org.onlab.packet.Ethernet) DHCP6(org.onlab.packet.DHCP6) Test(org.junit.Test)

Example 34 with DHCP6

use of org.onlab.packet.DHCP6 in project onos by opennetworkinglab.

the class Dhcp6Test method deserializeRequest.

/**
 * Test deserialize request message.
 *
 * @throws Exception exception while deserialize the DHCPv6 payload
 */
@Test
public void deserializeRequest() throws Exception {
    byte[] data = Resources.toByteArray(getClass().getResource(REQUEST));
    Ethernet eth = Ethernet.deserializer().deserialize(data, 0, data.length);
    DHCP6 dhcp6 = (DHCP6) eth.getPayload().getPayload().getPayload();
    assertEquals(dhcp6.getMsgType(), DHCP6.MsgType.REQUEST.value());
    assertEquals(dhcp6.getTransactionId(), XID_2);
    assertEquals(dhcp6.getOptions().size(), 5);
    // Client ID
    Dhcp6Option option = dhcp6.getOptions().get(0);
    assertTrue(option instanceof Dhcp6ClientIdOption);
    Dhcp6ClientIdOption clientIdOption = (Dhcp6ClientIdOption) option;
    assertEquals(clientIdOption.getCode(), DHCP6.OptionCode.CLIENTID.value());
    assertEquals(clientIdOption.getLength(), 14);
    assertEquals(clientIdOption.getDuid().getDuidType(), Dhcp6Duid.DuidType.DUID_LLT);
    assertEquals(clientIdOption.getDuid().getHardwareType(), 1);
    assertEquals(clientIdOption.getDuid().getDuidTime(), CLIENT_DUID_TIME);
    assertArrayEquals(clientIdOption.getDuid().getLinkLayerAddress(), CLIENT_MAC.toBytes());
    // Server ID
    option = dhcp6.getOptions().get(1);
    assertEquals(option.getCode(), DHCP6.OptionCode.SERVERID.value());
    assertEquals(option.getLength(), 14);
    Dhcp6Duid serverDuid = Dhcp6Duid.deserializer().deserialize(option.getData(), 0, option.getData().length);
    assertEquals(serverDuid.getDuidType(), Dhcp6Duid.DuidType.DUID_LLT);
    assertEquals(serverDuid.getDuidTime(), 0x211e5340);
    assertEquals(serverDuid.getHardwareType(), 1);
    assertArrayEquals(serverDuid.getLinkLayerAddress(), SERVER_MAC.toBytes());
    // Option Request
    option = dhcp6.getOptions().get(2);
    assertEquals(option.getCode(), DHCP6.OptionCode.ORO.value());
    assertEquals(option.getLength(), 8);
    assertArrayEquals(option.getData(), new byte[] { 0, 23, 0, 24, 0, 39, 0, 31 });
    // ELAPSED_TIME
    option = dhcp6.getOptions().get(3);
    assertEquals(option.getCode(), DHCP6.OptionCode.ELAPSED_TIME.value());
    assertEquals(option.getLength(), 2);
    assertArrayEquals(option.getData(), new byte[] { 0, 0 });
    // IA NA
    option = dhcp6.getOptions().get(4);
    assertTrue(option instanceof Dhcp6IaNaOption);
    Dhcp6IaNaOption iaNaOption = (Dhcp6IaNaOption) option;
    assertEquals(iaNaOption.getCode(), DHCP6.OptionCode.IA_NA.value());
    assertEquals(iaNaOption.getLength(), 40);
    assertEquals(iaNaOption.getIaId(), IA_ID);
    assertEquals(iaNaOption.getT1(), T1_CLIENT);
    assertEquals(iaNaOption.getT2(), T2_CLIENT);
    assertEquals(iaNaOption.getOptions().size(), 1);
    // IA Address (in IA NA)
    assertTrue(iaNaOption.getOptions().get(0) instanceof Dhcp6IaAddressOption);
    Dhcp6IaAddressOption iaAddressOption = (Dhcp6IaAddressOption) iaNaOption.getOptions().get(0);
    assertEquals(iaAddressOption.getIp6Address(), IA_ADDRESS);
    assertEquals(iaAddressOption.getPreferredLifetime(), PREFFERRED_LT_REQ);
    assertEquals(iaAddressOption.getValidLifetime(), VALID_LT_REQ_2);
    assertNull(iaAddressOption.getOptions());
    assertArrayEquals(data, eth.serialize());
}
Also used : Ethernet(org.onlab.packet.Ethernet) DHCP6(org.onlab.packet.DHCP6) Test(org.junit.Test)

Aggregations

DHCP6 (org.onlab.packet.DHCP6)34 Ethernet (org.onlab.packet.Ethernet)26 IPv6 (org.onlab.packet.IPv6)19 UDP (org.onlab.packet.UDP)19 Test (org.junit.Test)16 MacAddress (org.onlab.packet.MacAddress)11 Ip6Address (org.onlab.packet.Ip6Address)9 IpAddress (org.onlab.packet.IpAddress)9 VlanId (org.onlab.packet.VlanId)9 ConnectPoint (org.onosproject.net.ConnectPoint)9 ArrayList (java.util.ArrayList)8 MsgType (org.onlab.packet.DHCP6.MsgType)8 Dhcp6ClientIdOption (org.onlab.packet.dhcp.Dhcp6ClientIdOption)8 HostLocation (org.onosproject.net.HostLocation)8 Interface (org.onosproject.net.intf.Interface)8 BasePacket (org.onlab.packet.BasePacket)7 Dhcp6RelayOption (org.onlab.packet.dhcp.Dhcp6RelayOption)7 DhcpServerInfo (org.onosproject.dhcprelay.api.DhcpServerInfo)7 DhcpRecord (org.onosproject.dhcprelay.store.DhcpRecord)7 Host (org.onosproject.net.Host)7