blob: 27596b71f6cfd80b718ac3ef650cc933e99845ff [file] [log] [blame]
alshabib1f44e8e2014-08-14 15:19:57 -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 IpDscp implements OFValueType<IpDscp> {
9 DSCP_0((byte)0),
10 DSCP_1((byte)1),
11 DSCP_2((byte)2),
12 DSCP_3((byte)3),
13 DSCP_4((byte)4),
14 DSCP_5((byte)5),
15 DSCP_6((byte)6),
16 DSCP_7((byte)7),
17 DSCP_8((byte)8),
18 DSCP_9((byte)9),
19 DSCP_10((byte)10),
20 DSCP_11((byte)11),
21 DSCP_12((byte)12),
22 DSCP_13((byte)13),
23 DSCP_14((byte)14),
24 DSCP_15((byte)15),
25 DSCP_16((byte)16),
26 DSCP_17((byte)17),
27 DSCP_18((byte)18),
28 DSCP_19((byte)19),
29 DSCP_20((byte)20),
30 DSCP_21((byte)21),
31 DSCP_22((byte)22),
32 DSCP_23((byte)23),
33 DSCP_24((byte)24),
34 DSCP_25((byte)25),
35 DSCP_26((byte)26),
36 DSCP_27((byte)27),
37 DSCP_28((byte)28),
38 DSCP_29((byte)29),
39 DSCP_30((byte)30),
40 DSCP_31((byte)31),
41 DSCP_32((byte)32),
42 DSCP_33((byte)33),
43 DSCP_34((byte)34),
44 DSCP_35((byte)35),
45 DSCP_36((byte)36),
46 DSCP_37((byte)37),
47 DSCP_38((byte)38),
48 DSCP_39((byte)39),
49 DSCP_40((byte)40),
50 DSCP_41((byte)41),
51 DSCP_42((byte)42),
52 DSCP_43((byte)43),
53 DSCP_44((byte)44),
54 DSCP_45((byte)45),
55 DSCP_46((byte)46),
56 DSCP_47((byte)47),
57 DSCP_48((byte)48),
58 DSCP_49((byte)49),
59 DSCP_50((byte)50),
60 DSCP_51((byte)51),
61 DSCP_52((byte)52),
62 DSCP_53((byte)53),
63 DSCP_54((byte)54),
64 DSCP_55((byte)55),
65 DSCP_56((byte)56),
66 DSCP_57((byte)57),
67 DSCP_58((byte)58),
68 DSCP_59((byte)59),
69 DSCP_60((byte)60),
70 DSCP_61((byte)61),
71 DSCP_62((byte)62),
72 DSCP_63((byte)63),
73 DSCP_NO_MASK((byte)0xFF);
74
75 static final int LENGTH = 1;
76
77 public static final IpDscp NONE = DSCP_0;
78
79 public static final IpDscp NO_MASK = DSCP_NO_MASK;
80 public static final IpDscp FULL_MASK = DSCP_0;
81
82 private final byte dscp;
83
84 private IpDscp(byte dscp) {
85 this.dscp = dscp;
86 }
87
88 public static IpDscp of(byte dscp) {
89 switch (dscp) {
90 case 0:
91 return DSCP_0;
92 case 1:
93 return DSCP_1;
94 case 2:
95 return DSCP_2;
96 case 3:
97 return DSCP_3;
98 case 4:
99 return DSCP_4;
100 case 5:
101 return DSCP_5;
102 case 6:
103 return DSCP_6;
104 case 7:
105 return DSCP_7;
106 case 8:
107 return DSCP_8;
108 case 9:
109 return DSCP_9;
110 case 10:
111 return DSCP_10;
112 case 11:
113 return DSCP_11;
114 case 12:
115 return DSCP_12;
116 case 13:
117 return DSCP_13;
118 case 14:
119 return DSCP_14;
120 case 15:
121 return DSCP_15;
122 case 16:
123 return DSCP_16;
124 case 17:
125 return DSCP_17;
126 case 18:
127 return DSCP_18;
128 case 19:
129 return DSCP_19;
130 case 20:
131 return DSCP_20;
132 case 21:
133 return DSCP_21;
134 case 22:
135 return DSCP_22;
136 case 23:
137 return DSCP_23;
138 case 24:
139 return DSCP_24;
140 case 25:
141 return DSCP_25;
142 case 26:
143 return DSCP_26;
144 case 27:
145 return DSCP_27;
146 case 28:
147 return DSCP_28;
148 case 29:
149 return DSCP_29;
150 case 30:
151 return DSCP_30;
152 case 31:
153 return DSCP_31;
154 case 32:
155 return DSCP_32;
156 case 33:
157 return DSCP_33;
158 case 34:
159 return DSCP_34;
160 case 35:
161 return DSCP_35;
162 case 36:
163 return DSCP_36;
164 case 37:
165 return DSCP_37;
166 case 38:
167 return DSCP_38;
168 case 39:
169 return DSCP_39;
170 case 40:
171 return DSCP_40;
172 case 41:
173 return DSCP_41;
174 case 42:
175 return DSCP_42;
176 case 43:
177 return DSCP_43;
178 case 44:
179 return DSCP_44;
180 case 45:
181 return DSCP_45;
182 case 46:
183 return DSCP_46;
184 case 47:
185 return DSCP_47;
186 case 48:
187 return DSCP_48;
188 case 49:
189 return DSCP_49;
190 case 50:
191 return DSCP_50;
192 case 51:
193 return DSCP_51;
194 case 52:
195 return DSCP_52;
196 case 53:
197 return DSCP_53;
198 case 54:
199 return DSCP_54;
200 case 55:
201 return DSCP_55;
202 case 56:
203 return DSCP_56;
204 case 57:
205 return DSCP_57;
206 case 58:
207 return DSCP_58;
208 case 59:
209 return DSCP_59;
210 case 60:
211 return DSCP_60;
212 case 61:
213 return DSCP_61;
214 case 62:
215 return DSCP_62;
216 case 63:
217 return DSCP_63;
218 default:
219 throw new IllegalArgumentException("Illegal IPv4 DSCP value: " + dscp);
220 }
221 }
222
223 @Override
224 public int getLength() {
225 return LENGTH;
226 }
227
228 @Override
229 public String toString() {
230 return Integer.toHexString(dscp);
231 }
232
233 public void writeByte(ChannelBuffer c) {
234 c.writeByte(this.dscp);
235 }
236
237 public static IpDscp readByte(ChannelBuffer c) throws OFParseError {
238 return IpDscp.of((byte)(c.readUnsignedByte()));
239 }
240
241 @Override
242 public IpDscp applyMask(IpDscp mask) {
243 return IpDscp.of((byte)(this.dscp & mask.dscp));
244 }
245
246 public byte getDscpValue() {
247 return dscp;
248 }
249
250 @Override
251 public void putTo(PrimitiveSink sink) {
252 sink.putByte(dscp);
253 }
254}