blob: 540ad1a131e9e8da450eac01bf64d4f8576f837c [file] [log] [blame]
Yotam Harcholf3f11152013-09-05 16:47:16 -07001package org.projectfloodlight.openflow.types;
2
3import org.jboss.netty.buffer.ChannelBuffer;
4import org.projectfloodlight.openflow.exceptions.OFParseError;
5
Andreas Wundsam85c961f2013-09-29 21:22:12 -07006import com.google.common.primitives.Ints;
7
Yotam Harcholf3f11152013-09-05 16:47:16 -07008/**
9 * Represents L4 (Transport Layer) port (TCP, UDP, etc.)
10 *
11 * @author Yotam Harchol (yotam.harchol@bigswitch.com)
12 */
13public class TransportPort implements OFValueType<TransportPort> {
14
15 static final int LENGTH = 2;
16 static final int MAX_PORT = 0xFFFF;
17 static final int MIN_PORT = 0;
18
Andreas Wundsamb75c4ad2013-09-23 14:45:35 -070019 private final static int NONE_VAL = 0;
20 public final static TransportPort NONE = new TransportPort(NONE_VAL);
21
Yotam Harcholf3f11152013-09-05 16:47:16 -070022 public static final TransportPort NO_MASK = new TransportPort(0xFFFFFFFF);
23 public static final TransportPort FULL_MASK = TransportPort.of(0x0);
24
25 private final int port;
26
27 private TransportPort(int port) {
28 this.port = port;
29 }
30
31 public static TransportPort of(int port) {
Andreas Wundsamb75c4ad2013-09-23 14:45:35 -070032 if(port == NONE_VAL)
33 return NONE;
34 else if (port < MIN_PORT || port > MAX_PORT) {
Yotam Harcholf3f11152013-09-05 16:47:16 -070035 throw new IllegalArgumentException("Illegal transport layer port number: " + port);
36 }
37 return new TransportPort(port);
38 }
39
40 @Override
41 public int getLength() {
42 return LENGTH;
43 }
44
45 public int getPort() {
46 return port;
47 }
48
49 @Override
50 public boolean equals(Object obj) {
51 if (!(obj instanceof TransportPort))
52 return false;
53 TransportPort other = (TransportPort)obj;
54 if (other.port != this.port)
55 return false;
56 return true;
57 }
58
59 @Override
60 public int hashCode() {
61 final int prime = 59;
62 int result = 1;
63 result = prime * result + port;
64 return result;
65 }
66
67 @Override
68 public String toString() {
69 return Integer.toString(port);
70 }
71
72 public void write2Bytes(ChannelBuffer c) {
73 c.writeShort(this.port);
74 }
75
76 public static TransportPort read2Bytes(ChannelBuffer c) throws OFParseError {
77 return TransportPort.of((c.readUnsignedShort() & 0x0FFFF));
78 }
79
80 @Override
81 public TransportPort applyMask(TransportPort mask) {
82 return TransportPort.of(this.port & mask.port);
83 }
84
Andreas Wundsam85c961f2013-09-29 21:22:12 -070085 @Override
86 public int compareTo(TransportPort o) {
87 return Ints.compare(port, o.port);
88 }
89
Yotam Harcholf3f11152013-09-05 16:47:16 -070090}