[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/OpenstackNetworkManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
index 94669ed..359d34e 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
@@ -69,6 +69,10 @@
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
+import static org.onosproject.openstacknetworking.api.Constants.DIRECT;
+import static org.onosproject.openstacknetworking.api.Constants.PCISLOT;
+import static org.onosproject.openstacknetworking.api.Constants.PORT_NAME_PREFIX_MAP;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -105,6 +109,8 @@
private static final String ERR_NOT_FOUND = " does not exist";
private static final String ERR_IN_USE = " still in use";
private static final String ERR_DUPLICATE = " already exists";
+ private static final String PORT_NAME_PREFIX_VM = "tap";
+
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected CoreService coreService;
@@ -312,11 +318,28 @@
if (Strings.isNullOrEmpty(portName)) {
return null;
}
- Optional<Port> osPort = osNetworkStore.ports()
- .stream()
- .filter(p -> p.getId().contains(portName.substring(3)))
- .findFirst();
- return osPort.orElse(null);
+
+ if (port.annotations().value(PORT_NAME).startsWith(PORT_NAME_PREFIX_VM)) {
+ Optional<Port> osPort = osNetworkStore.ports()
+ .stream()
+ .filter(p -> p.getId().contains(portName.substring(3)))
+ .findFirst();
+ return osPort.orElse(null);
+ } else if (isDirectPort(portName)) {
+ //Additional prefixes will be added
+ Optional<Port> osPort = osNetworkStore.ports()
+ .stream()
+ .filter(p -> p.getvNicType().equals(DIRECT) && p.getProfile().get(PCISLOT) != null)
+ .filter(p -> getIntfNameFromPciAddress(p).equals(portName))
+ .findFirst();
+ return osPort.orElse(null);
+ } else {
+ return null;
+ }
+ }
+
+ private boolean isDirectPort(String portName) {
+ return PORT_NAME_PREFIX_MAP.values().stream().filter(p -> portName.startsWith(p)).findAny().isPresent();
}
@Override