blob: 266a67c4d16b7658fbfec5e2897667ab17c08c8b [file] [log] [blame]
Ayaka Koshibe04a1a4e2014-09-11 14:31:29 -07001package org.onlab.packet;
2
3/**
4 * Representation of a VLAN ID.
5 */
Ayaka Koshibea9c199f2014-09-16 16:21:40 -07006public class VlanId {
Ayaka Koshibe04a1a4e2014-09-11 14:31:29 -07007
Ayaka Koshibe3a25aec2014-09-12 11:52:53 -07008 private final short value;
tom545708e2014-10-09 17:10:02 -07009
Ayaka Koshibe1a100982014-09-13 19:32:19 -070010 // Based on convention used elsewhere? Check and change if needed
Ayaka Koshibe16698a32014-09-13 22:19:02 -070011 public static final short UNTAGGED = (short) 0xffff;
tom545708e2014-10-09 17:10:02 -070012
13 public static final VlanId NONE = VlanId.vlanId(UNTAGGED);
14
Ayaka Koshibe3a25aec2014-09-12 11:52:53 -070015 // A VLAN ID is actually 12 bits of a VLAN tag.
Ayaka Koshibe16698a32014-09-13 22:19:02 -070016 public static final short MAX_VLAN = 4095;
Ayaka Koshibe3a25aec2014-09-12 11:52:53 -070017
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070018 protected VlanId() {
Ayaka Koshibe1a100982014-09-13 19:32:19 -070019 this.value = UNTAGGED;
20 }
21
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070022 protected VlanId(short value) {
Ayaka Koshibe04a1a4e2014-09-11 14:31:29 -070023 this.value = value;
24 }
25
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070026 public static VlanId vlanId() {
27 return new VlanId(UNTAGGED);
Ayaka Koshibe3a25aec2014-09-12 11:52:53 -070028 }
29
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070030 public static VlanId vlanId(short value) {
Ayaka Koshibe1a100982014-09-13 19:32:19 -070031 if (value == UNTAGGED) {
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070032 return new VlanId();
Ayaka Koshibe1a100982014-09-13 19:32:19 -070033 }
34
35 if (value > MAX_VLAN) {
Ayaka Koshibe3a25aec2014-09-12 11:52:53 -070036 throw new IllegalArgumentException(
37 "value exceeds allowed maximum VLAN ID value (4095)");
38 }
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070039 return new VlanId(value);
Ayaka Koshibe3a25aec2014-09-12 11:52:53 -070040 }
41
Ayaka Koshibe04a1a4e2014-09-11 14:31:29 -070042 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 Koshibea9c199f2014-09-16 16:21:40 -070052 if (obj instanceof VlanId) {
Ayaka Koshibe04a1a4e2014-09-11 14:31:29 -070053
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070054 VlanId other = (VlanId) obj;
Ayaka Koshibe50ee9242014-09-12 16:37:46 -070055
56 if (this.value == other.value) {
57 return true;
58 }
Ayaka Koshibe04a1a4e2014-09-11 14:31:29 -070059 }
60
61 return false;
62 }
63
64 @Override
65 public int hashCode() {
66 return this.value;
67 }
Ayaka Koshibe3a25aec2014-09-12 11:52:53 -070068
69 @Override
70 public String toString() {
71 return String.valueOf(this.value);
72 }
Ayaka Koshibe04a1a4e2014-09-11 14:31:29 -070073}
74