CORD-248 Provide host management network connectivity to a VM
Change-Id: I6f632e118bd11f4f469aae0476d2d35fc2b7c3eb
diff --git a/src/main/java/org/opencord/cordvtn/impl/CordVtnNodeManager.java b/src/main/java/org/opencord/cordvtn/impl/CordVtnNodeManager.java
index df3d336..c45fef3 100644
--- a/src/main/java/org/opencord/cordvtn/impl/CordVtnNodeManager.java
+++ b/src/main/java/org/opencord/cordvtn/impl/CordVtnNodeManager.java
@@ -28,6 +28,7 @@
import org.onosproject.cluster.ClusterService;
import org.onosproject.cluster.LeadershipService;
import org.onosproject.cluster.NodeId;
+import org.onosproject.net.AnnotationKeys;
import org.onosproject.net.behaviour.BridgeDescription;
import org.onosproject.net.behaviour.DefaultBridgeDescription;
import org.onosproject.net.behaviour.InterfaceConfig;
@@ -73,6 +74,7 @@
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
@@ -314,12 +316,9 @@
log.warn("Failed to get node for {}", deviceId);
return null;
}
- Port port = deviceService.getPorts(deviceId).stream()
- .filter(p -> portName(p).contains(node.dataIface()) &&
- p.isEnabled())
- .findFirst().orElse(null);
- return port == null ? null : port.number();
+ Optional<PortNumber> port = getPortNumber(deviceId, node.dataIface());
+ return port.isPresent() ? port.get() : null;
}
/**
@@ -344,11 +343,39 @@
* @return port number
*/
public PortNumber tunnelPort(DeviceId deviceId) {
- Port port = deviceService.getPorts(deviceId).stream()
- .filter(p -> portName(p).contains(DEFAULT_TUNNEL))
- .findFirst().orElse(null);
+ Optional<PortNumber> port = getPortNumber(deviceId, DEFAULT_TUNNEL);
+ return port.isPresent() ? port.get() : null;
+ }
- return port == null ? null : port.number();
+ /**
+ * Returns host management interface port number if exists.
+ *
+ * @param deviceId integration bridge device id
+ * @return port number; null if it does not exist
+ */
+ public PortNumber hostManagementPort(DeviceId deviceId) {
+ CordVtnNode node = nodeByBridgeId(deviceId);
+ if (node == null) {
+ log.warn("Failed to get node for {}", deviceId);
+ return null;
+ }
+
+ if (node.hostMgmtIface().isPresent()) {
+ Optional<PortNumber> port = getPortNumber(deviceId, node.hostMgmtIface().get());
+ return port.isPresent() ? port.get() : null;
+ } else {
+ return null;
+ }
+ }
+
+ private Optional<PortNumber> getPortNumber(DeviceId deviceId, String portName) {
+ PortNumber port = deviceService.getPorts(deviceId).stream()
+ .filter(p -> p.annotations().value(AnnotationKeys.PORT_NAME).equals(portName) &&
+ p.isEnabled())
+ .map(Port::number)
+ .findAny()
+ .orElse(null);
+ return Optional.ofNullable(port);
}
/**
@@ -398,8 +425,7 @@
ovsdbClient.disconnect();
}
- pipeline.initPipeline(node, dataPort(node.integrationBridgeId()),
- tunnelPort(node.integrationBridgeId()));
+ pipeline.initPipeline(node);
// adds existing instances to the host list
deviceService.getPorts(node.integrationBridgeId()).stream()