Ayaka Koshibe | 04a1a4e | 2014-09-11 14:31:29 -0700 | [diff] [blame] | 1 | package org.onlab.packet; |
2 | |||||
3 | /** | ||||
4 | * Representation of a VLAN ID. | ||||
5 | */ | ||||
Ayaka Koshibe | a9c199f | 2014-09-16 16:21:40 -0700 | [diff] [blame] | 6 | public class VlanId { |
Ayaka Koshibe | 04a1a4e | 2014-09-11 14:31:29 -0700 | [diff] [blame] | 7 | |
Ayaka Koshibe | 3a25aec | 2014-09-12 11:52:53 -0700 | [diff] [blame] | 8 | private final short value; |
tom | 545708e | 2014-10-09 17:10:02 -0700 | [diff] [blame] | 9 | |
Ayaka Koshibe | 1a10098 | 2014-09-13 19:32:19 -0700 | [diff] [blame] | 10 | // Based on convention used elsewhere? Check and change if needed |
Ayaka Koshibe | 16698a3 | 2014-09-13 22:19:02 -0700 | [diff] [blame] | 11 | public static final short UNTAGGED = (short) 0xffff; |
tom | 545708e | 2014-10-09 17:10:02 -0700 | [diff] [blame] | 12 | |
13 | public static final VlanId NONE = VlanId.vlanId(UNTAGGED); | ||||
14 | |||||
Ayaka Koshibe | 3a25aec | 2014-09-12 11:52:53 -0700 | [diff] [blame] | 15 | // A VLAN ID is actually 12 bits of a VLAN tag. |
Ayaka Koshibe | 16698a3 | 2014-09-13 22:19:02 -0700 | [diff] [blame] | 16 | public static final short MAX_VLAN = 4095; |
Ayaka Koshibe | 3a25aec | 2014-09-12 11:52:53 -0700 | [diff] [blame] | 17 | |
Ayaka Koshibe | a9c199f | 2014-09-16 16:21:40 -0700 | [diff] [blame] | 18 | protected VlanId() { |
Ayaka Koshibe | 1a10098 | 2014-09-13 19:32:19 -0700 | [diff] [blame] | 19 | this.value = UNTAGGED; |
20 | } | ||||
21 | |||||
Ayaka Koshibe | a9c199f | 2014-09-16 16:21:40 -0700 | [diff] [blame] | 22 | protected VlanId(short value) { |
Ayaka Koshibe | 04a1a4e | 2014-09-11 14:31:29 -0700 | [diff] [blame] | 23 | this.value = value; |
24 | } | ||||
25 | |||||
Ayaka Koshibe | a9c199f | 2014-09-16 16:21:40 -0700 | [diff] [blame] | 26 | public static VlanId vlanId() { |
27 | return new VlanId(UNTAGGED); | ||||
Ayaka Koshibe | 3a25aec | 2014-09-12 11:52:53 -0700 | [diff] [blame] | 28 | } |
29 | |||||
Ayaka Koshibe | a9c199f | 2014-09-16 16:21:40 -0700 | [diff] [blame] | 30 | public static VlanId vlanId(short value) { |
Ayaka Koshibe | 1a10098 | 2014-09-13 19:32:19 -0700 | [diff] [blame] | 31 | if (value == UNTAGGED) { |
Ayaka Koshibe | a9c199f | 2014-09-16 16:21:40 -0700 | [diff] [blame] | 32 | return new VlanId(); |
Ayaka Koshibe | 1a10098 | 2014-09-13 19:32:19 -0700 | [diff] [blame] | 33 | } |
34 | |||||
35 | if (value > MAX_VLAN) { | ||||
Ayaka Koshibe | 3a25aec | 2014-09-12 11:52:53 -0700 | [diff] [blame] | 36 | throw new IllegalArgumentException( |
37 | "value exceeds allowed maximum VLAN ID value (4095)"); | ||||
38 | } | ||||
Ayaka Koshibe | a9c199f | 2014-09-16 16:21:40 -0700 | [diff] [blame] | 39 | return new VlanId(value); |
Ayaka Koshibe | 3a25aec | 2014-09-12 11:52:53 -0700 | [diff] [blame] | 40 | } |
41 | |||||
Ayaka Koshibe | 04a1a4e | 2014-09-11 14:31:29 -0700 | [diff] [blame] | 42 | public short toShort() { |
43 | return this.value; | ||||
44 | } | ||||
45 | |||||
46 | @Override | ||||
47 | public boolean equals(Object obj) { | ||||
48 | if (this == obj) { | ||||
49 | return true; | ||||
50 | } | ||||
51 | |||||
Ayaka Koshibe | a9c199f | 2014-09-16 16:21:40 -0700 | [diff] [blame] | 52 | if (obj instanceof VlanId) { |
Ayaka Koshibe | 04a1a4e | 2014-09-11 14:31:29 -0700 | [diff] [blame] | 53 | |
Ayaka Koshibe | a9c199f | 2014-09-16 16:21:40 -0700 | [diff] [blame] | 54 | VlanId other = (VlanId) obj; |
Ayaka Koshibe | 50ee924 | 2014-09-12 16:37:46 -0700 | [diff] [blame] | 55 | |
56 | if (this.value == other.value) { | ||||
57 | return true; | ||||
58 | } | ||||
Ayaka Koshibe | 04a1a4e | 2014-09-11 14:31:29 -0700 | [diff] [blame] | 59 | } |
60 | |||||
61 | return false; | ||||
62 | } | ||||
63 | |||||
64 | @Override | ||||
65 | public int hashCode() { | ||||
66 | return this.value; | ||||
67 | } | ||||
Ayaka Koshibe | 3a25aec | 2014-09-12 11:52:53 -0700 | [diff] [blame] | 68 | |
69 | @Override | ||||
70 | public String toString() { | ||||
71 | return String.valueOf(this.value); | ||||
72 | } | ||||
Ayaka Koshibe | 04a1a4e | 2014-09-11 14:31:29 -0700 | [diff] [blame] | 73 | } |
74 |