blob: 654df0194a8439fe991ba217bb5a6d66a6f4d9c1 [file] [log] [blame]
tom0eb04ca2014-08-25 14:34:51 -07001package org.projectfloodlight.openflow.types;
2
3import org.jboss.netty.buffer.ChannelBuffer;
4import org.projectfloodlight.openflow.exceptions.OFParseError;
5
6import com.google.common.hash.PrimitiveSink;
7
8public enum IpEcn implements OFValueType<IpEcn> {
9 ECN_00((byte)0),
10 ECN_01((byte)1),
11 ECN_10((byte)2),
12 ECN_11((byte)3),
13 ECN_NO_MASK((byte)0xFF);
14
15 public static final IpEcn NONE = ECN_00;
16 public static final IpEcn NO_MASK = ECN_NO_MASK;
17 public static final IpEcn FULL_MASK = ECN_00;
18
19 static final int LENGTH = 1;
20
21 private final byte ecn;
22
23 private IpEcn(byte ecn) {
24 this.ecn = ecn;
25 }
26
27 public static IpEcn of(byte ecn) {
28 switch (ecn) {
29 case 0:
30 return ECN_00;
31 case 1:
32 return ECN_01;
33 case 2:
34 return ECN_10;
35 case 3:
36 return ECN_11;
37 default:
38 throw new IllegalArgumentException("Illegal IP ECN value: " + ecn);
39 }
40 }
41
42 @Override
43 public int getLength() {
44 return LENGTH;
45 }
46
47 @Override
48 public String toString() {
49 return (ecn < 3 ? "0" : "") + Integer.toBinaryString(ecn);
50 }
51
52 public void writeByte(ChannelBuffer c) {
53 c.writeByte(this.ecn);
54 }
55
56 public static IpEcn readByte(ChannelBuffer c) throws OFParseError {
57 return IpEcn.of((byte)(c.readUnsignedByte()));
58 }
59
60 @Override
61 public IpEcn applyMask(IpEcn mask) {
62 return IpEcn.of((byte)(this.ecn & mask.ecn));
63 }
64
65 public byte getEcnValue() {
66 return ecn;
67 }
68
69 @Override
70 public void putTo(PrimitiveSink sink) {
71 sink.putByte(ecn);
72 }
73}