blob: ca662f7c9af66a7d2a77c105de00b1dd2d199c9c [file] [log] [blame]
package org.projectfloodlight.openflow.types;
import org.jboss.netty.buffer.ChannelBuffer;
import org.projectfloodlight.openflow.exceptions.OFParseError;
import org.projectfloodlight.openflow.protocol.OFMessageReader;
import org.projectfloodlight.openflow.protocol.Writeable;
/**
* A wrapper around the OpenFlow physical port description. The interfaces to
* this object are version agnostic.
*
* @author capveg
*/
public class OFPhysicalPort implements OFValueType<OFPhysicalPort>, Writeable {
static final int LENGTH = 4;
private final int port;
public static final OFPhysicalPort NO_MASK = OFPhysicalPort.of(0xFFFFFFFF);
public static final OFPhysicalPort FULL_MASK = OFPhysicalPort.of(0x0);
private OFPhysicalPort(int port) {
this.port = port;
}
public static OFPhysicalPort of(int port) {
return new OFPhysicalPort(port);
}
@Override
public int getLength() {
return LENGTH;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof OFPhysicalPort))
return false;
OFPhysicalPort other = (OFPhysicalPort)obj;
if (other.port != this.port)
return false;
return true;
}
@Override
public int hashCode() {
final int prime = 59;
int result = 1;
result = prime * result + port;
return result;
}
@Override
public String toString() {
return Integer.toHexString(port);
}
public void write4Bytes(ChannelBuffer c) {
c.writeInt(this.port);
}
@Override
public void writeTo(ChannelBuffer bb) {
write4Bytes(bb);
}
public static OFPhysicalPort read4Bytes(ChannelBuffer c) throws OFParseError {
return OFPhysicalPort.of((int)(c.readUnsignedInt() & 0xFFFFFFFF));
}
@Override
public OFPhysicalPort applyMask(OFPhysicalPort mask) {
return OFPhysicalPort.of(this.port & mask.port);
}
public int getPortNumber() {
return port;
}
public final static Reader READER = new Reader();
private static class Reader implements OFMessageReader<OFPhysicalPort> {
@Override
public OFPhysicalPort readFrom(ChannelBuffer bb) throws OFParseError {
return OFPhysicalPort.read4Bytes(bb);
}
}
}