Used onlab.packet.Ethernet:VOL-391
Change-Id: Ifadb1c6bb4451a0834664fe181d7fa2deac80c60
diff --git a/src/main/java/org/opencord/dhcpl2relay/DhcpL2Relay.java b/src/main/java/org/opencord/dhcpl2relay/DhcpL2Relay.java
index 06a7f4f..209a5da 100755
--- a/src/main/java/org/opencord/dhcpl2relay/DhcpL2Relay.java
+++ b/src/main/java/org/opencord/dhcpl2relay/DhcpL2Relay.java
@@ -16,10 +16,9 @@
package org.opencord.dhcpl2relay;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -27,28 +26,23 @@
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onlab.packet.DeserializationException;
import org.onlab.packet.DHCP;
import org.onlab.packet.DHCPOption;
import org.onlab.packet.DHCPPacketType;
import org.onlab.packet.Ethernet;
-import org.onlab.packet.IpAddress;
import org.onlab.packet.IPv4;
+import org.onlab.packet.IpAddress;
import org.onlab.packet.MacAddress;
import org.onlab.packet.TpPort;
import org.onlab.packet.UDP;
import org.onlab.packet.VlanId;
-import org.onosproject.mastership.MastershipEvent;
-import org.onosproject.mastership.MastershipListener;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.opencord.dhcpl2relay.packet.DhcpEthernet;
-import org.opencord.dhcpl2relay.packet.DhcpOption82;
import org.onlab.util.Tools;
import org.onosproject.cfg.ComponentConfigService;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
+import org.onosproject.mastership.MastershipEvent;
+import org.onosproject.mastership.MastershipListener;
+import org.onosproject.mastership.MastershipService;
import org.onosproject.net.AnnotationKeys;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Host;
@@ -57,6 +51,8 @@
import org.onosproject.net.config.NetworkConfigEvent;
import org.onosproject.net.config.NetworkConfigListener;
import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.device.DeviceEvent;
+import org.onosproject.net.device.DeviceListener;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.DefaultTrafficTreatment;
@@ -69,7 +65,7 @@
import org.onosproject.net.packet.PacketPriority;
import org.onosproject.net.packet.PacketProcessor;
import org.onosproject.net.packet.PacketService;
-
+import org.opencord.dhcpl2relay.packet.DhcpOption82;
import org.opencord.sadis.SubscriberAndDeviceInformation;
import org.opencord.sadis.SubscriberAndDeviceInformationService;
import org.osgi.service.component.ComponentContext;
@@ -78,8 +74,8 @@
import java.nio.ByteBuffer;
import java.util.Dictionary;
-import java.util.Map;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@@ -92,7 +88,8 @@
* DHCP Relay Agent Application Component.
*/
@Component(immediate = true)
-public class DhcpL2Relay {
+public class
+DhcpL2Relay {
public static final String DHCP_L2RELAY_APP = "org.opencord.dhcpl2relay";
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -388,13 +385,7 @@
}
// process the packet and get the payload
- DhcpEthernet packet = null;
- ByteBuffer byteBuffer = context.inPacket().unparsed();
- try {
- packet = DhcpEthernet.deserializer().deserialize(byteBuffer.array(), 0, byteBuffer.array().length);
- } catch (DeserializationException e) {
- log.warn("Unable to deserialize packet");
- }
+ Ethernet packet = context.inPacket().parsed();
if (packet == null) {
log.warn("Packet is null");
@@ -403,7 +394,7 @@
log.debug("Got a packet ", packet);
- if (packet.getEtherType() == DhcpEthernet.TYPE_IPV4) {
+ if (packet.getEtherType() == Ethernet.TYPE_IPV4) {
IPv4 ipv4Packet = (IPv4) packet.getPayload();
if (ipv4Packet.getProtocol() == IPv4.PROTOCOL_UDP) {
@@ -419,7 +410,7 @@
}
//forward the packet to ConnectPoint where the DHCP server is attached.
- private void forwardPacket(DhcpEthernet packet) {
+ private void forwardPacket(Ethernet packet) {
if (dhcpServerConnectPoint.get() != null) {
TrafficTreatment t = DefaultTrafficTreatment.builder()
@@ -428,8 +419,8 @@
dhcpServerConnectPoint.get().deviceId(), t,
ByteBuffer.wrap(packet.serialize()));
if (log.isTraceEnabled()) {
- log.trace("Relaying packet to dhcp server {} at {}",
- packet, dhcpServerConnectPoint.get());
+ log.trace("Relaying packet to dhcp server {} at {}",
+ packet, dhcpServerConnectPoint.get());
}
packetService.emit(o);
} else {
@@ -450,7 +441,7 @@
}
//process the dhcp packet before sending to server
- private void processDhcpPacket(PacketContext context, DhcpEthernet packet,
+ private void processDhcpPacket(PacketContext context, Ethernet packet,
DHCP dhcpPayload) {
if (dhcpPayload == null) {
log.warn("DHCP payload is null");
@@ -463,7 +454,7 @@
switch (incomingPacketType) {
case DHCPDISCOVER:
- DhcpEthernet ethernetPacketDiscover =
+ Ethernet ethernetPacketDiscover =
processDhcpPacketFromClient(context, packet);
if (ethernetPacketDiscover != null) {
forwardPacket(ethernetPacketDiscover);
@@ -471,13 +462,13 @@
break;
case DHCPOFFER:
//reply to dhcp client.
- DhcpEthernet ethernetPacketOffer = processDhcpPacketFromServer(packet);
+ Ethernet ethernetPacketOffer = processDhcpPacketFromServer(packet);
if (ethernetPacketOffer != null) {
sendReply(ethernetPacketOffer, dhcpPayload);
}
break;
case DHCPREQUEST:
- DhcpEthernet ethernetPacketRequest =
+ Ethernet ethernetPacketRequest =
processDhcpPacketFromClient(context, packet);
if (ethernetPacketRequest != null) {
forwardPacket(ethernetPacketRequest);
@@ -485,7 +476,7 @@
break;
case DHCPACK:
//reply to dhcp client.
- DhcpEthernet ethernetPacketAck = processDhcpPacketFromServer(packet);
+ Ethernet ethernetPacketAck = processDhcpPacketFromServer(packet);
if (ethernetPacketAck != null) {
sendReply(ethernetPacketAck, dhcpPayload);
}
@@ -495,8 +486,8 @@
}
}
- private DhcpEthernet processDhcpPacketFromClient(PacketContext context,
- DhcpEthernet ethernetPacket) {
+ private Ethernet processDhcpPacketFromClient(PacketContext context,
+ Ethernet ethernetPacket) {
MacAddress relayAgentMac = relayAgentMacAddress(context);
if (relayAgentMac == null) {
@@ -504,7 +495,7 @@
return null;
}
- DhcpEthernet etherReply = ethernetPacket;
+ Ethernet etherReply = ethernetPacket;
IPv4 ipv4Packet = (IPv4) etherReply.getPayload();
UDP udpPacket = (UDP) ipv4Packet.getPayload();
@@ -539,22 +530,22 @@
ipv4Packet.setPayload(udpPacket);
etherReply.setPayload(ipv4Packet);
- etherReply.setSourceMacAddress(relayAgentMac);
- etherReply.setDestinationMacAddress(dhcpConnectMac);
+ etherReply.setSourceMACAddress(relayAgentMac);
+ etherReply.setDestinationMACAddress(dhcpConnectMac);
etherReply.setPriorityCode(ethernetPacket.getPriorityCode());
etherReply.setVlanID(cTag(context).toShort());
- etherReply.setQinQtpid(DhcpEthernet.TYPE_VLAN);
- etherReply.setQinQVid(sTag(context).toShort());
+ etherReply.setQinQTPID(Ethernet.TYPE_VLAN);
+ etherReply.setQinQVID(sTag(context).toShort());
log.info("Finished processing packet -- sending packet {}", etherReply);
return etherReply;
}
//build the DHCP offer/ack with proper client port.
- private DhcpEthernet processDhcpPacketFromServer(DhcpEthernet ethernetPacket) {
+ private Ethernet processDhcpPacketFromServer(Ethernet ethernetPacket) {
// get dhcp header.
- DhcpEthernet etherReply = (DhcpEthernet) ethernetPacket.clone();
+ Ethernet etherReply = (Ethernet) ethernetPacket.clone();
IPv4 ipv4Packet = (IPv4) etherReply.getPayload();
UDP udpPacket = (UDP) ipv4Packet.getPayload();
DHCP dhcpPayload = (DHCP) udpPacket.getPayload();
@@ -587,8 +578,8 @@
} // end storing of info
// we leave the srcMac from the original packet
- etherReply.setDestinationMacAddress(dstMac);
- etherReply.setQinQVid(sTag(subsCp).toShort());
+ etherReply.setDestinationMACAddress(dstMac);
+ etherReply.setQinQVID(sTag(subsCp).toShort());
etherReply.setPriorityCode(ethernetPacket.getPriorityCode());
etherReply.setVlanID((cTag(subsCp).toShort()));
@@ -611,7 +602,7 @@
Set<Host> hosts = hostService.getHostsByMac(dstMac);
if (hosts == null || hosts.isEmpty()) {
log.warn("Cannot determine host for DHCP client: {}. Aborting "
- + "relay for dhcp packet from server",
+ + "relay for dhcp packet from server",
dstMac);
return null;
}
@@ -630,7 +621,7 @@
}
//send the response to the requester host.
- private void sendReply(DhcpEthernet ethPacket, DHCP dhcpPayload) {
+ private void sendReply(Ethernet ethPacket, DHCP dhcpPayload) {
MacAddress descMac = valueOf(dhcpPayload.getClientHardwareAddress());
ConnectPoint subCp = getConnectPointOfClient(descMac);
@@ -660,9 +651,9 @@
option82.setAgentCircuitId(entry.circuitId());
option82.setAgentRemoteId(entry.remoteId());
DHCPOption option = new DHCPOption()
- .setCode(DHCP.DHCPOptionCode.OptionCode_CircuitID.getValue())
- .setData(option82.toByteArray())
- .setLength(option82.length());
+ .setCode(DHCP.DHCPOptionCode.OptionCode_CircuitID.getValue())
+ .setData(option82.toByteArray())
+ .setLength(option82.length());
options.add(options.size() - 1, option);
dhcpPacket.setOptions(options);