blob: 531f87817327109b5f58ec0b8cae8ce4bccf717a [file] [log] [blame]
Andreas Wundsam40e14f72013-05-06 14:49:08 -07001package org.openflow.types;
2
Yotam Harchol161a5d52013-07-25 17:17:48 -07003import org.jboss.netty.buffer.ChannelBuffer;
4import org.openflow.exceptions.OFParseError;
Andreas Wundsam40e14f72013-05-06 14:49:08 -07005
Yotam Harchol5c9d6f42013-08-01 11:09:20 -07006public class VlanPcp implements OFValueType<VlanPcp> {
Yotam Harchol161a5d52013-07-25 17:17:48 -07007
8 private static final byte VALIDATION_MASK = 0x07;
9 static final int LENGTH = 1;
10
11 private final byte pcp;
12
13 private VlanPcp(byte pcp) {
14 this.pcp = pcp;
15 }
16
17 public static VlanPcp of(byte pcp) {
18 if ((pcp & VALIDATION_MASK) != pcp)
19 throw new IllegalArgumentException("Illegal VLAN PCP value: " + pcp);
20 return new VlanPcp(pcp);
21 }
22
23 @Override
24 public boolean equals(Object obj) {
25 if (!(obj instanceof VlanPcp))
26 return false;
27 VlanPcp other = (VlanPcp)obj;
28 if (other.pcp != this.pcp)
29 return false;
30 return true;
31 }
32
33 @Override
34 public int hashCode() {
35 int prime = 20173;
36 return this.pcp * prime;
37 }
38
39 @Override
40 public String toString() {
41 return "0x" + Integer.toHexString(pcp);
42 }
43
44 public byte getValue() {
45 return pcp;
46 }
47
48 @Override
49 public int getLength() {
50 return LENGTH;
51 }
Yotam Harchold7b84202013-07-26 16:08:10 -070052
53 public void writeByte(ChannelBuffer c) {
54 c.writeShort(this.pcp);
Yotam Harchol161a5d52013-07-25 17:17:48 -070055 }
Yotam Harchol161a5d52013-07-25 17:17:48 -070056
Yotam Harchold7b84202013-07-26 16:08:10 -070057 public static VlanPcp readByte(ChannelBuffer c) throws OFParseError {
58 return VlanPcp.of((byte)(c.readUnsignedByte() & 0xFF));
Yotam Harchol161a5d52013-07-25 17:17:48 -070059 }
Yotam Harchol5c9d6f42013-08-01 11:09:20 -070060
61 @Override
62 public VlanPcp applyMask(VlanPcp mask) {
63 return VlanPcp.of((byte)(this.pcp & mask.pcp));
64 }
Yotam Harchol161a5d52013-07-25 17:17:48 -070065
Andreas Wundsam40e14f72013-05-06 14:49:08 -070066}