blob: 6efd8135f4bcc8767c3cdab4c4000a0288f3a805 [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
6/**
7 * Represents L4 (Transport Layer) port (TCP, UDP, etc.)
8 *
9 * @author Yotam Harchol (yotam.harchol@bigswitch.com)
10 */
11public class TransportPort implements OFValueType<TransportPort> {
12
13 static final int LENGTH = 2;
14 static final int MAX_PORT = 0xFFFF;
15 static final int MIN_PORT = 0;
16
Andreas Wundsamb75c4ad2013-09-23 14:45:35 -070017 private final static int NONE_VAL = 0;
18 public final static TransportPort NONE = new TransportPort(NONE_VAL);
19
Yotam Harcholf3f11152013-09-05 16:47:16 -070020 public static final TransportPort NO_MASK = new TransportPort(0xFFFFFFFF);
21 public static final TransportPort FULL_MASK = TransportPort.of(0x0);
22
23 private final int port;
24
25 private TransportPort(int port) {
26 this.port = port;
27 }
28
29 public static TransportPort of(int port) {
Andreas Wundsamb75c4ad2013-09-23 14:45:35 -070030 if(port == NONE_VAL)
31 return NONE;
32 else if (port < MIN_PORT || port > MAX_PORT) {
Yotam Harcholf3f11152013-09-05 16:47:16 -070033 throw new IllegalArgumentException("Illegal transport layer port number: " + port);
34 }
35 return new TransportPort(port);
36 }
37
38 @Override
39 public int getLength() {
40 return LENGTH;
41 }
42
43 public int getPort() {
44 return port;
45 }
46
47 @Override
48 public boolean equals(Object obj) {
49 if (!(obj instanceof TransportPort))
50 return false;
51 TransportPort other = (TransportPort)obj;
52 if (other.port != this.port)
53 return false;
54 return true;
55 }
56
57 @Override
58 public int hashCode() {
59 final int prime = 59;
60 int result = 1;
61 result = prime * result + port;
62 return result;
63 }
64
65 @Override
66 public String toString() {
67 return Integer.toString(port);
68 }
69
70 public void write2Bytes(ChannelBuffer c) {
71 c.writeShort(this.port);
72 }
73
74 public static TransportPort read2Bytes(ChannelBuffer c) throws OFParseError {
75 return TransportPort.of((c.readUnsignedShort() & 0x0FFFF));
76 }
77
78 @Override
79 public TransportPort applyMask(TransportPort mask) {
80 return TransportPort.of(this.port & mask.port);
81 }
82
83}