[CORD-1779] Fix directlyConnected function
Check circuit ID format to determind the option added by ONOS or not
instead of using giaddr.
Change-Id: Ibb20059d37fe036a21c71d38ac771b0613441f2d
diff --git a/utils/misc/src/main/java/org/onlab/packet/dhcp/CircuitId.java b/utils/misc/src/main/java/org/onlab/packet/dhcp/CircuitId.java
index 3b819e1..1b53a5b 100644
--- a/utils/misc/src/main/java/org/onlab/packet/dhcp/CircuitId.java
+++ b/utils/misc/src/main/java/org/onlab/packet/dhcp/CircuitId.java
@@ -17,6 +17,7 @@
package org.onlab.packet.dhcp;
import com.google.common.collect.Lists;
+import com.google.common.primitives.UnsignedLongs;
import org.onlab.packet.VlanId;
import java.nio.charset.StandardCharsets;
@@ -31,6 +32,7 @@
public class CircuitId {
private static final String SEPARATOR = ":";
private static final String CIRCUIT_ID_FORMAT = "%s" + SEPARATOR + "%s";
+ private static final String DEVICE_PORT_SEPARATOR = "/";
private String connectPoint;
private VlanId vlanId;
@@ -65,11 +67,22 @@
*/
public static CircuitId deserialize(byte[] circuitId) {
String cIdString = new String(circuitId, StandardCharsets.US_ASCII);
- List<String> split = Lists.newArrayList(cIdString.split(SEPARATOR));
- checkArgument(split.size() > 1, "Illegal circuit id.");
+ List<String> splittedCircuitId = Lists.newArrayList(cIdString.split(SEPARATOR));
+ checkArgument(splittedCircuitId.size() > 1, "Illegal circuit id.");
// remove last element (vlan id)
- String vlanId = split.remove(split.size() - 1);
- String connectPoint = String.join(SEPARATOR, split);
+ String vlanId = splittedCircuitId.remove(splittedCircuitId.size() - 1);
+
+ // Reconstruct device Id
+ String connectPoint = String.join(SEPARATOR, splittedCircuitId);
+
+ String[] splittedConnectPoint = connectPoint.split(DEVICE_PORT_SEPARATOR);
+ // Check connect point is valid or not
+ checkArgument(splittedConnectPoint.length == 2,
+ "Connect point must be in \"deviceUri/portNumber\" format");
+
+ // Check the port number is a number or not
+ UnsignedLongs.decode(splittedConnectPoint[1]);
+
return new CircuitId(connectPoint, VlanId.vlanId(vlanId));
}