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