Marc De Leenheer

Full long value for port numbers. Fix port number serializer.

Change-Id: I106ce3d39533e22f5a9a0e6972b91f669068198b
...@@ -49,16 +49,19 @@ public final class PortNumber { ...@@ -49,16 +49,19 @@ public final class PortNumber {
49 49
50 private final long number; 50 private final long number;
51 private final String name; 51 private final String name;
52 + private final boolean hasName;
52 53
53 // Public creation is prohibited 54 // Public creation is prohibited
54 private PortNumber(long number) { 55 private PortNumber(long number) {
55 this.number = number; 56 this.number = number;
56 this.name = UnsignedLongs.toString(number); 57 this.name = UnsignedLongs.toString(number);
58 + this.hasName = false;
57 } 59 }
58 60
59 private PortNumber(long number, String name) { 61 private PortNumber(long number, String name) {
60 this.number = number; 62 this.number = number;
61 this.name = name; 63 this.name = name;
64 + this.hasName = true;
62 } 65 }
63 66
64 /** 67 /**
...@@ -99,7 +102,11 @@ public final class PortNumber { ...@@ -99,7 +102,11 @@ public final class PortNumber {
99 * @return true if logical port number 102 * @return true if logical port number
100 */ 103 */
101 public boolean isLogical() { 104 public boolean isLogical() {
102 - return number < 0 || number > MAX_NUMBER; 105 + if (hasName) {
106 + return false;
107 + } else {
108 + return (number < 0 || number > MAX_NUMBER);
109 + }
103 } 110 }
104 111
105 /** 112 /**
...@@ -120,6 +127,16 @@ public final class PortNumber { ...@@ -120,6 +127,16 @@ public final class PortNumber {
120 return name; 127 return name;
121 } 128 }
122 129
130 + /**
131 + * Indicates whether this port number was created with a port name,
132 + * or only with a number.
133 + *
134 + * @return true if port was created with name
135 + */
136 + public boolean hasName() {
137 + return hasName;
138 + }
139 +
123 private String decodeLogicalPort() { 140 private String decodeLogicalPort() {
124 if (number == CONTROLLER_NUMBER) { 141 if (number == CONTROLLER_NUMBER) {
125 return "CONTROLLER"; 142 return "CONTROLLER";
......
...@@ -38,12 +38,19 @@ public final class PortNumberSerializer extends ...@@ -38,12 +38,19 @@ public final class PortNumberSerializer extends
38 38
39 @Override 39 @Override
40 public void write(Kryo kryo, Output output, PortNumber object) { 40 public void write(Kryo kryo, Output output, PortNumber object) {
41 + output.writeBoolean(object.hasName());
41 output.writeLong(object.toLong()); 42 output.writeLong(object.toLong());
43 + if (object.hasName()) {
44 + output.writeString(object.name());
45 + }
42 } 46 }
43 47
44 @Override 48 @Override
45 - public PortNumber read(Kryo kryo, Input input, 49 + public PortNumber read(Kryo kryo, Input input, Class<PortNumber> type) {
46 - Class<PortNumber> type) { 50 + if (input.readBoolean()) {
47 - return PortNumber.portNumber(input.readLong()); 51 + return PortNumber.portNumber(input.readLong(), input.readString());
52 + } else {
53 + return PortNumber.portNumber(input.readLong());
54 + }
48 } 55 }
49 } 56 }
......