blob: dd159fec3dc680194a32a7a8377a68b61fcd9a4a [file] [log] [blame]
package net.onrc.onos.ofcontroller.proxyarp;
import java.io.Serializable;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import net.floodlightcontroller.util.MACAddress;
import net.onrc.onos.ofcontroller.util.SwitchPort;
public class ArpMessage implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private final Type type;
private final InetAddress forAddress;
private final byte[] packetData;
//ARP reply message needs MAC info
private MACAddress mac;
//only send the ARP request message to the device attachment needs the attachement swith and port.
private long outSwitch=-1;
private short outPort=-1;
private final List<SwitchPort> switchPorts = new ArrayList<SwitchPort>();
public enum Type {
REQUEST,
REPLY
}
private ArpMessage(Type type, InetAddress address, byte[] eth) {
// TODO Auto-generated constructor stub
this.type = type;
this.forAddress = address;
this.packetData = eth;
}
private ArpMessage(Type type, InetAddress address) {
this.type = type;
this.forAddress = address;
this.packetData = null;
}
// the ARP reply message with MAC
private ArpMessage(Type type, InetAddress address, MACAddress mac) {
this.type = type;
this.forAddress = address;
this.packetData = null;
this.mac=mac;
}
// construct ARP request message with attachment switch and port
private ArpMessage(Type type, InetAddress address, byte[] arpRequest,
long outSwitch, short outPort) {
this.type = type;
this.forAddress = address;
this.packetData = arpRequest;
this.setOutSwitch(outSwitch);
this.setOutPort(outPort);
}
public static ArpMessage newRequest(InetAddress forAddress, byte[] arpRequest) {
return new ArpMessage(Type.REQUEST, forAddress, arpRequest);
}
public static ArpMessage newReply(InetAddress forAddress) {
return new ArpMessage(Type.REPLY, forAddress);
}
//ARP reply message with MAC
public static ArpMessage newReply(InetAddress forAddress, MACAddress mac) {
return new ArpMessage(Type.REPLY, forAddress, mac);
}
//ARP reqsuest message with attachment switch and port
public static ArpMessage newRequest(InetAddress forAddress, byte[] arpRequest, long outSwitch, short outPort ) {
return new ArpMessage(Type.REQUEST, forAddress, arpRequest, outSwitch, outPort);
}
public Type getType() {
return type;
}
public InetAddress getAddress() {
return forAddress;
}
public byte[] getPacket() {
return packetData;
}
public MACAddress getMAC() {
return mac;
}
public long getOutSwitch() {
return outSwitch;
}
public void setOutSwitch(long outSwitch) {
this.outSwitch = outSwitch;
}
public short getOutPort() {
return outPort;
}
public void setOutPort(short outPort) {
this.outPort = outPort;
}
}