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