[ONOS-7627] Support the creation of sr-iov port type for LiquidIO smart NIC
Change-Id: I6d55d1dfd26ec6ed0b9df9fdeea31749b0c49b7c
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
index 14ee117..538a5fd 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
@@ -64,6 +64,7 @@
import static org.onlab.util.Tools.groupedThreads;
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
import static org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_APP_ID;
+import static org.onosproject.openstacknetworking.api.Constants.PORT_NAME_PREFIX_MAP;
import static org.onosproject.openstacknetworking.impl.HostBasedInstancePort.ANNOTATION_CREATE_TIME;
import static org.onosproject.openstacknetworking.impl.HostBasedInstancePort.ANNOTATION_NETWORK_ID;
import static org.onosproject.openstacknetworking.impl.HostBasedInstancePort.ANNOTATION_PORT_ID;
@@ -75,6 +76,7 @@
private final Logger log = LoggerFactory.getLogger(getClass());
private static final String PORT_NAME_PREFIX_VM = "tap";
+ private static final String PORT_NAME_PREFIX_CAVIUM = "enp";
private static final String ERR_ADD_HOST = "Failed to add host: ";
private static final String ANNOTATION_SEGMENT_ID = "segId";
private static final String SONA_HOST_SCHEME = "sona";
@@ -229,11 +231,16 @@
String portName = port.annotations().value(PORT_NAME);
return !Strings.isNullOrEmpty(portName) &&
- portName.startsWith(PORT_NAME_PREFIX_VM);
+ (portName.startsWith(PORT_NAME_PREFIX_VM) || isDirectPort(portName));
+ }
+
+ private boolean isDirectPort(String portName) {
+ return PORT_NAME_PREFIX_MAP.values().stream().filter(p -> portName.startsWith(p)).findAny().isPresent();
}
@Override
public void event(DeviceEvent event) {
+ log.info("Device event occurred with type {}", event.type());
switch (event.type()) {
case PORT_UPDATED:
if (!event.port().isEnabled()) {
@@ -335,6 +342,19 @@
processPortAdded(port);
});
+ PORT_NAME_PREFIX_MAP.values().forEach(portNamePrefix -> {
+ deviceService.getPorts(osNode.intgBridge()).stream()
+ .filter(port -> port.annotations().value(PORT_NAME)
+ .startsWith(portNamePrefix) &&
+ port.isEnabled())
+ .forEach(port -> {
+ log.debug("Instance port {} is detected from {}",
+ port.annotations().value(portNamePrefix),
+ osNode.hostname());
+ processPortAdded(port);
+ });
+ });
+
Tools.stream(hostService.getHosts())
.filter(host -> deviceService.getPort(
host.location().deviceId(),