Search in sources :

Example 26 with DHCP

use of org.onlab.packet.DHCP in project dhcpl2relay by opencord.

the class DhcpL2RelayTest method compareServerPackets.

public void compareServerPackets(Ethernet sent, Ethernet relayed, VlanId expectedVlan, short expectedPcp) {
    try {
        // modify sent packet to create expected packet
        sent.setDestinationMACAddress(CLIENT_MAC);
        sent.setQinQVID(NOT_PROVIDED);
        sent.setQinQPriorityCode((byte) NOT_PROVIDED);
        sent.setVlanID(expectedVlan.toShort());
        sent.setPriorityCode((byte) expectedPcp);
        DHCP d = ((DHCP) ((UDP) ((IPv4) sent.getPayload()).getPayload()).getPayload());
        List<DhcpOption> newOptions = d.getOptions().stream().filter(option -> option.getCode() != DHCP.DHCPOptionCode.OptionCode_CircuitID.getValue()).collect(Collectors.toList());
        d.setOptions(newOptions);
        final ByteBuffer byteBuffer = ByteBuffer.wrap(sent.serialize());
        Ethernet expectedPacket = Ethernet.deserializer().deserialize(byteBuffer.array(), 0, byteBuffer.array().length);
        assertEquals(expectedPacket, relayed);
    } catch (Exception e) {
        log.error(e.getMessage());
        fail();
    }
}
Also used : UDP(org.onlab.packet.UDP) DhcpL2RelayStoreDelegate(org.opencord.dhcpl2relay.DhcpL2RelayStoreDelegate) MoreExecutors(com.google.common.util.concurrent.MoreExecutors) ClusterServiceAdapter(org.onosproject.cluster.ClusterServiceAdapter) DhcpL2RelayEvent(org.opencord.dhcpl2relay.DhcpL2RelayEvent) ByteBuffer(java.nio.ByteBuffer) ConnectPoint(org.onosproject.net.ConnectPoint) Ethernet(org.onlab.packet.Ethernet) LeadershipServiceAdapter(org.onosproject.cluster.LeadershipServiceAdapter) ClusterCommunicationServiceAdapter(org.onosproject.store.cluster.messaging.ClusterCommunicationServiceAdapter) DhcpAllocationInfo(org.opencord.dhcpl2relay.DhcpAllocationInfo) Lists(com.google.common.collect.Lists) DeserializationException(org.onlab.packet.DeserializationException) Map(java.util.Map) After(org.junit.After) TestUtils(org.onlab.junit.TestUtils) Assert.fail(org.junit.Assert.fail) EasyMock.createMock(org.easymock.EasyMock.createMock) FlowObjectiveServiceAdapter(org.onosproject.net.flowobjective.FlowObjectiveServiceAdapter) Before(org.junit.Before) ComponentConfigService(org.onosproject.cfg.ComponentConfigService) TestStorageService(org.onosproject.store.service.TestStorageService) DhcpOption82Data(org.opencord.dhcpl2relay.impl.packet.DhcpOption82Data) Logger(org.slf4j.Logger) VlanId(org.onlab.packet.VlanId) Test(org.junit.Test) Collectors(java.util.stream.Collectors) UDP(org.onlab.packet.UDP) DhcpOption(org.onlab.packet.dhcp.DhcpOption) List(java.util.List) IPv4(org.onlab.packet.IPv4) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) MacAddress(org.onlab.packet.MacAddress) DHCP(org.onlab.packet.DHCP) Assert.assertEquals(org.junit.Assert.assertEquals) Ethernet(org.onlab.packet.Ethernet) DhcpOption(org.onlab.packet.dhcp.DhcpOption) ByteBuffer(java.nio.ByteBuffer) DHCP(org.onlab.packet.DHCP) DeserializationException(org.onlab.packet.DeserializationException)

Example 27 with DHCP

use of org.onlab.packet.DHCP in project dhcpl2relay by opencord.

the class DhcpL2Relay method activate.

@Activate
protected void activate(ComponentContext context) {
    // start the dhcp relay agent
    appId = coreService.registerApplication(DHCP_L2RELAY_APP);
    componentConfigService.registerProperties(getClass());
    eventDispatcher.addSink(DhcpL2RelayEvent.class, listenerRegistry);
    KryoNamespace serializer = KryoNamespace.newBuilder().register(KryoNamespaces.API).register(Instant.class).register(DHCP.MsgType.class).register(DhcpAllocationInfo.class).build();
    allocations = storageService.<String, DhcpAllocationInfo>consistentMapBuilder().withName("dhcpl2relay-allocations").withSerializer(Serializer.using(serializer)).withApplicationId(appId).build();
    dhcpL2RelayCounters.setDelegate(delegate);
    eventHandlerExecutor = newSingleThreadExecutor(groupedThreads("onos/dhcp", "dhcp-event-%d", log));
    cfgService.addListener(cfgListener);
    mastershipService.addListener(changeListener);
    deviceService.addListener(deviceListener);
    if (sadisService != null) {
        subsService = sadisService.getSubscriberInfoService();
    } else {
        log.warn(SADIS_NOT_RUNNING);
    }
    factories.forEach(cfgService::registerConfigFactory);
    // update the dhcp server configuration.
    updateConfig();
    if (context != null) {
        modified(context);
    }
    // add the packet services.
    packetService.addProcessor(dhcpRelayPacketProcessor, PacketProcessor.director(0));
    log.info("DHCP-L2-RELAY Started");
}
Also used : Instant(java.time.Instant) KryoNamespace(org.onlab.util.KryoNamespace) DhcpAllocationInfo(org.opencord.dhcpl2relay.DhcpAllocationInfo) DHCP(org.onlab.packet.DHCP) Activate(org.osgi.service.component.annotations.Activate)

Example 28 with DHCP

use of org.onlab.packet.DHCP in project dhcpl2relay by opencord.

the class DhcpL2RelayTestBase method constructEthernetPacket.

private Ethernet constructEthernetPacket(MacAddress srcMac, MacAddress dstMac, String dstIp, byte dhcpReqRsp, MacAddress clientHwAddress, Ip4Address dhcpClientIpAddress, VlanId clientVlan, short clientPbit) {
    // Ethernet Frame.
    Ethernet ethPkt = new Ethernet();
    ethPkt.setSourceMACAddress(srcMac);
    ethPkt.setDestinationMACAddress(dstMac);
    ethPkt.setEtherType(Ethernet.TYPE_IPV4);
    ethPkt.setVlanID(clientVlan.toShort());
    ethPkt.setPriorityCode((byte) clientPbit);
    if (DHCP.OPCODE_REPLY == dhcpReqRsp) {
        ethPkt.setQinQPriorityCode((byte) 3);
        ethPkt.setQinQVID((short) 4);
    }
    // IP Packet
    IPv4 ipv4Reply = new IPv4();
    ipv4Reply.setSourceAddress(0);
    ipv4Reply.setDestinationAddress(dstIp);
    ipv4Reply.setTtl((byte) 127);
    // UDP Datagram.
    UDP udpReply = new UDP();
    udpReply.setSourcePort((byte) UDP.DHCP_CLIENT_PORT);
    udpReply.setDestinationPort((byte) UDP.DHCP_SERVER_PORT);
    // DHCP Payload.
    DHCP dhcpReply = new DHCP();
    dhcpReply.setOpCode(dhcpReqRsp);
    dhcpReply.setYourIPAddress(dhcpClientIpAddress.toInt());
    dhcpReply.setServerIPAddress(0);
    final byte[] serverNameBytes = new byte[64];
    String result = new String(serverNameBytes, StandardCharsets.US_ASCII).trim();
    dhcpReply.setServerName(result);
    final byte[] bootFileBytes = new byte[128];
    String result1 = new String(bootFileBytes, StandardCharsets.US_ASCII).trim();
    dhcpReply.setBootFileName(result1);
    dhcpReply.setTransactionId(TRANSACTION_ID);
    dhcpReply.setClientHardwareAddress(clientHwAddress.toBytes());
    dhcpReply.setHardwareType(DHCP.HWTYPE_ETHERNET);
    dhcpReply.setHardwareAddressLength((byte) 6);
    udpReply.setPayload(dhcpReply);
    ipv4Reply.setPayload(udpReply);
    ethPkt.setPayload(ipv4Reply);
    return ethPkt;
}
Also used : UDP(org.onlab.packet.UDP) Ethernet(org.onlab.packet.Ethernet) IPv4(org.onlab.packet.IPv4) DHCP(org.onlab.packet.DHCP)

Example 29 with DHCP

use of org.onlab.packet.DHCP in project dhcpl2relay by opencord.

the class DhcpL2RelayTestBase method constructDhcpRequestPacket.

/**
 * Constructs DHCP Request Packet.
 *
 * @return Ethernet packet
 */
Ethernet constructDhcpRequestPacket(MacAddress clientMac) {
    Ethernet pkt = construcEthernetPacket(clientMac, MacAddress.BROADCAST, "255.255.255.255", DHCP.OPCODE_REQUEST, clientMac, Ip4Address.valueOf("0.0.0.0"));
    IPv4 ipv4Packet = (IPv4) pkt.getPayload();
    UDP udpPacket = (UDP) ipv4Packet.getPayload();
    DHCP dhcpPacket = (DHCP) udpPacket.getPayload();
    dhcpPacket.setOptions(constructDhcpOptions(DHCP.MsgType.DHCPREQUEST));
    return pkt;
}
Also used : UDP(org.onlab.packet.UDP) Ethernet(org.onlab.packet.Ethernet) IPv4(org.onlab.packet.IPv4) DHCP(org.onlab.packet.DHCP)

Example 30 with DHCP

use of org.onlab.packet.DHCP in project dhcpl2relay by opencord.

the class DhcpL2RelayTestBase method constructDhcpDiscoverPacket.

/**
 * Constructs DHCP Discover Packet with client VLAN information.
 *
 * @return Ethernet packet
 */
Ethernet constructDhcpDiscoverPacket(MacAddress clientMac, VlanId clientVlan, short clientPbit) {
    Ethernet pkt = constructEthernetPacket(clientMac, MacAddress.BROADCAST, "255.255.255.255", DHCP.OPCODE_REQUEST, clientMac, Ip4Address.valueOf("0.0.0.0"), clientVlan, clientPbit);
    IPv4 ipv4Packet = (IPv4) pkt.getPayload();
    UDP udpPacket = (UDP) ipv4Packet.getPayload();
    DHCP dhcpPacket = (DHCP) udpPacket.getPayload();
    dhcpPacket.setOptions(constructDhcpOptions(DHCP.MsgType.DHCPDISCOVER));
    return pkt;
}
Also used : UDP(org.onlab.packet.UDP) Ethernet(org.onlab.packet.Ethernet) IPv4(org.onlab.packet.IPv4) DHCP(org.onlab.packet.DHCP)

Aggregations

DHCP (org.onlab.packet.DHCP)33 Ethernet (org.onlab.packet.Ethernet)27 UDP (org.onlab.packet.UDP)23 IPv4 (org.onlab.packet.IPv4)22 DhcpOption (org.onlab.packet.dhcp.DhcpOption)12 ConnectPoint (org.onosproject.net.ConnectPoint)11 ArrayList (java.util.ArrayList)9 MacAddress (org.onlab.packet.MacAddress)9 Interface (org.onosproject.net.intf.Interface)9 ByteBuffer (java.nio.ByteBuffer)8 Ip4Address (org.onlab.packet.Ip4Address)8 VlanId (org.onlab.packet.VlanId)8 Preconditions.checkNotNull (com.google.common.base.Preconditions.checkNotNull)7 Lists (com.google.common.collect.Lists)7 Collection (java.util.Collection)7 List (java.util.List)7 Optional (java.util.Optional)7 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)7 Collectors (java.util.stream.Collectors)7 IpAddress (org.onlab.packet.IpAddress)7