blob: 654df0194a8439fe991ba217bb5a6d66a6f4d9c1 [file] [log] [blame]
package org.projectfloodlight.openflow.types;
import org.jboss.netty.buffer.ChannelBuffer;
import org.projectfloodlight.openflow.exceptions.OFParseError;
import com.google.common.hash.PrimitiveSink;
public enum IpEcn implements OFValueType<IpEcn> {
ECN_00((byte)0),
ECN_01((byte)1),
ECN_10((byte)2),
ECN_11((byte)3),
ECN_NO_MASK((byte)0xFF);
public static final IpEcn NONE = ECN_00;
public static final IpEcn NO_MASK = ECN_NO_MASK;
public static final IpEcn FULL_MASK = ECN_00;
static final int LENGTH = 1;
private final byte ecn;
private IpEcn(byte ecn) {
this.ecn = ecn;
}
public static IpEcn of(byte ecn) {
switch (ecn) {
case 0:
return ECN_00;
case 1:
return ECN_01;
case 2:
return ECN_10;
case 3:
return ECN_11;
default:
throw new IllegalArgumentException("Illegal IP ECN value: " + ecn);
}
}
@Override
public int getLength() {
return LENGTH;
}
@Override
public String toString() {
return (ecn < 3 ? "0" : "") + Integer.toBinaryString(ecn);
}
public void writeByte(ChannelBuffer c) {
c.writeByte(this.ecn);
}
public static IpEcn readByte(ChannelBuffer c) throws OFParseError {
return IpEcn.of((byte)(c.readUnsignedByte()));
}
@Override
public IpEcn applyMask(IpEcn mask) {
return IpEcn.of((byte)(this.ecn & mask.ecn));
}
public byte getEcnValue() {
return ecn;
}
@Override
public void putTo(PrimitiveSink sink) {
sink.putByte(ecn);
}
}