2 * Copyright (c) 2013, 2015 Cisco Systems, Inc. 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
9 package org.opendaylight.vpnservice.mdsalutil.packet;
11 import java.util.HashMap;
12 import java.util.LinkedHashMap;
15 import org.apache.commons.lang3.tuple.ImmutablePair;
16 import org.apache.commons.lang3.tuple.Pair;
17 import org.opendaylight.controller.liblldp.BitBufferHelper;
18 import org.opendaylight.controller.liblldp.Packet;
21 * Class that represents the ARP packet objects
22 * taken from opendaylight(helium) adsal bundle
26 public class ARP extends Packet {
27 private static final String HWTYPE = "HardwareType";
28 private static final String PTYPE = "ProtocolType";
29 private static final String HWADDRLENGTH = "HardwareAddressLength";
30 private static final String PADDRLENGTH = "ProtocolAddressLength";
31 private static final String OPCODE = "OpCode";
32 private static final String SENDERHWADDR = "SenderHardwareAddress";
33 private static final String SENDERPADDR = "SenderProtocolAddress";
34 private static final String TARGETHWADDR = "TargetHardwareAddress";
35 private static final String TARGETPADDR = "TargetProtocolAddress";
37 public static short HW_TYPE_ETHERNET = (short) 0x1;
38 public static short REQUEST = (short) 0x1;
39 public static short REPLY = (short) 0x2;
41 public static short PROTO_TYPE_IP = 0x800;
43 private static Map<String, Pair<Integer, Integer>> fieldCoordinates = new LinkedHashMap<String, Pair<Integer, Integer>>() {
44 private static final long serialVersionUID = 1L;
46 put(HWTYPE, new ImmutablePair<Integer, Integer>(0, 16));
47 put(PTYPE, new ImmutablePair<Integer, Integer>(16, 16));
48 put(HWADDRLENGTH, new ImmutablePair<Integer, Integer>(32, 8));
49 put(PADDRLENGTH, new ImmutablePair<Integer, Integer>(40, 8));
50 put(OPCODE, new ImmutablePair<Integer, Integer>(48, 16));
51 put(SENDERHWADDR, new ImmutablePair<Integer, Integer>(64, 48));
52 put(SENDERPADDR, new ImmutablePair<Integer, Integer>(112, 32));
53 put(TARGETHWADDR, new ImmutablePair<Integer, Integer>(144, 48));
54 put(TARGETPADDR, new ImmutablePair<Integer, Integer>(192, 32));
58 private Map<String, byte[]> fieldValues;
61 * Default constructor that creates and sets the HashMap
65 fieldValues = new HashMap<String, byte[]>();
66 hdrFieldCoordMap = fieldCoordinates;
67 hdrFieldsMap = fieldValues;
71 * Constructor that sets the access level for the packet and
72 * creates and sets the HashMap
74 public ARP(boolean writeAccess) {
76 fieldValues = new HashMap<String, byte[]>();
77 hdrFieldCoordMap = fieldCoordinates;
78 hdrFieldsMap = fieldValues;
81 public short getHardwareType() {
82 return (BitBufferHelper.getShort(fieldValues.get(HWTYPE)));
86 public short getProtocolType() {
87 return (BitBufferHelper.getShort(fieldValues.get(PTYPE)));
90 public byte getHardwareAddressLength() {
91 return (BitBufferHelper.getByte(fieldValues.get(HWADDRLENGTH)));
94 public byte getProtocolAddressLength() {
95 return (BitBufferHelper.getByte(fieldValues.get(PADDRLENGTH)));
98 public short getOpCode() {
99 return (BitBufferHelper.getShort(fieldValues.get(OPCODE)));
102 public byte[] getSenderHardwareAddress() {
103 return (fieldValues.get(SENDERHWADDR));
106 public byte[] getSenderProtocolAddress() {
107 return (fieldValues.get(SENDERPADDR));
110 public byte[] getTargetHardwareAddress() {
111 return (fieldValues.get(TARGETHWADDR));
114 public ARP setHardwareType(short hardwareType) {
115 byte[] hwType = BitBufferHelper.toByteArray(hardwareType);
116 fieldValues.put(HWTYPE, hwType);
120 public ARP setProtocolType(short protocolType) {
121 byte[] protType = BitBufferHelper.toByteArray(protocolType);
122 fieldValues.put(PTYPE, protType);
126 public ARP setHardwareAddressLength(byte hardwareAddressLength) {
127 byte[] hwAddressLength = BitBufferHelper
128 .toByteArray(hardwareAddressLength);
129 fieldValues.put(HWADDRLENGTH, hwAddressLength);
133 public ARP setProtocolAddressLength(byte protocolAddressLength) {
134 byte[] protocolAddrLength = BitBufferHelper
135 .toByteArray(protocolAddressLength);
136 fieldValues.put(PADDRLENGTH, protocolAddrLength);
140 public ARP setOpCode(short opCode) {
141 byte[] operationCode = BitBufferHelper.toByteArray(opCode);
142 fieldValues.put(OPCODE, operationCode);
146 public ARP setSenderHardwareAddress(byte[] senderHardwareAddress) {
147 fieldValues.put(SENDERHWADDR, senderHardwareAddress);
151 public ARP setTargetHardwareAddress(byte[] targetHardwareAddress) {
152 fieldValues.put(TARGETHWADDR, targetHardwareAddress);
156 public ARP setTargetProtocolAddress(byte[] targetProtocolAddress) {
157 fieldValues.put(TARGETPADDR, targetProtocolAddress);
161 public ARP setSenderProtocolAddress(byte[] senderIP) {
162 fieldValues.put(SENDERPADDR, senderIP);
166 public byte[] getTargetProtocolAddress() {
167 return fieldValues.get(TARGETPADDR);
171 public int hashCode() {
172 final int prime = 31;
173 int result = super.hashCode();
174 result = prime * result
175 + ((fieldValues == null) ? 0 : fieldValues.hashCode());
180 public boolean equals(Object obj) {
184 if (!super.equals(obj)) {
187 if (getClass() != obj.getClass()) {
190 ARP other = (ARP) obj;
191 if (fieldValues == null) {
192 if (other.fieldValues != null) {
195 } else if (!fieldValues.equals(other.fieldValues)) {