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