Minor code fixes on sriov-related classes.
Change-Id: I6027116c0e49ecc25e15b243784aebc863016b33
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackDirectPortAddCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackDirectPortAddCommand.java
index 974c2cc..c627a15 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackDirectPortAddCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackDirectPortAddCommand.java
@@ -72,7 +72,6 @@
log.error("Failed to retrieve interface name from a port {}", portId);
return;
} else if (intfName.equals(UNSUPPORTED_VENDOR)) {
- log.warn("Failed to retrieve interface name from a port {} because of unsupported ovs-based sr-iov");
return;
}
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenStackSwitchingDirectPortProvider.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenStackSwitchingDirectPortProvider.java
index f0b781a..642b686 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenStackSwitchingDirectPortProvider.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenStackSwitchingDirectPortProvider.java
@@ -122,95 +122,6 @@
log.info("Stopped");
}
- private void processPortAdded(Port port) {
- if (!port.getvNicType().equals(DIRECT)) {
- return;
- } else if (!port.isAdminStateUp() || port.getVifType().equals(UNBOUND)) {
- log.trace("processPortAdded skipped because of status: {}, adminStateUp: {}, vifType: {}",
- port.getState(), port.isAdminStateUp(), port.getVifType());
- return;
- } else {
- Optional<OpenstackNode> osNode = osNodeService.completeNodes(COMPUTE).stream()
- .filter(node -> node.hostname().equals(port.getHostId()))
- .findAny();
- if (!osNode.isPresent()) {
- log.error("processPortAdded failed because openstackNode doesn't exist that matches hostname {}",
- port.getHostId());
- return;
- }
- log.trace("Retrieved openstackNode: {}", osNode.get().toString());
-
- String intfName = getIntfNameFromPciAddress(port);
- if (intfName == null) {
- log.error("Failed to execute processPortAdded because of null interface name");
- return;
- } else if (intfName.equals(UNSUPPORTED_VENDOR)) {
- log.warn("Failed to execute processPortAdded because of unsupported vendor for ovs-based sr-iov");
- return;
- }
- log.trace("Retrieved interface name: {}", intfName);
-
- try {
- //If a VF port has been already added to the device for some reason, we remove it first,
- //and the add VF so that other handlers run their logic.
- if (hasIntfAleadyInDevice(osNode.get().intgBridge(),
- intfName, deviceService)) {
- log.trace("Device {} has already has VF interface {}, so remove first.",
- osNode.get().intgBridge(),
- intfName);
- osNodeService.removeVfPort(osNode.get(), intfName);
- //we wait 3000ms because the ovsdb client can't deal with removal/add at the same time.
- sleep(SLEEP_MS);
- }
- } catch (InterruptedException e) {
- log.error("Exception occurred because of {}", e.toString());
- }
-
- osNodeService.addVfPort(osNode.get(), intfName);
- }
- }
-
- private void processPortRemoved(Port port) {
- if (!port.getvNicType().equals(DIRECT)) {
- return;
- } else if (instancePortService.instancePort(port.getId()) == null) {
- log.trace("processPortRemoved skipped because no instance port exist for portId: {}", port.getId());
- return;
- } else {
- InstancePort instancePort = instancePortService.instancePort(port.getId());
- if (instancePort == null) {
- return;
- }
- DeviceId deviceId = instancePort.deviceId();
- if (deviceId == null) {
- return;
- }
- OpenstackNode osNode = osNodeService.node(deviceId);
- if (osNode == null) {
- return;
- }
-
- Optional<org.onosproject.net.Port> removedPort = deviceService.getPorts(deviceId).stream()
- .filter(p -> Objects.equals(p.number(), instancePort.portNumber()))
- .findAny();
-
- if (!removedPort.isPresent()) {
- log.error("Failed to execute processPortAdded because port number doesn't exist");
- return;
- }
-
- String intfName = removedPort.get().annotations().value(PORT_NAME);
-
- if (intfName == null) {
- log.error("Failed to execute processPortAdded because of null interface name");
- return;
- }
- log.trace("Retrieved interface name: {}", intfName);
-
- osNodeService.removeVfPort(osNode, intfName);
- }
- }
-
private class InternalOpenstackNetworkListener implements OpenstackNetworkListener {
private boolean isRelevantHelper() {
return Objects.equals(localNodeId, leadershipService.getLeader(appId.name()));
@@ -252,6 +163,95 @@
}
}
+
+ private void processPortAdded(Port port) {
+ if (!port.getvNicType().equals(DIRECT)) {
+ return;
+ } else if (!port.isAdminStateUp() || port.getVifType().equals(UNBOUND)) {
+ log.trace("processPortAdded skipped because of status: {}, adminStateUp: {}, vifType: {}",
+ port.getState(), port.isAdminStateUp(), port.getVifType());
+ return;
+ } else {
+ Optional<OpenstackNode> osNode = osNodeService.completeNodes(COMPUTE).stream()
+ .filter(node -> node.hostname().equals(port.getHostId()))
+ .findAny();
+ if (!osNode.isPresent()) {
+ log.error("processPortAdded failed because openstackNode doesn't exist that matches hostname {}",
+ port.getHostId());
+ return;
+ }
+ log.trace("Retrieved openstackNode: {}", osNode.get().toString());
+
+ String intfName = getIntfNameFromPciAddress(port);
+ if (intfName == null) {
+ log.error("Failed to execute processPortAdded because of null interface name");
+ return;
+ } else if (intfName.equals(UNSUPPORTED_VENDOR)) {
+ return;
+ }
+ log.trace("Retrieved interface name: {}", intfName);
+
+ try {
+ //If the VF port has been already added to the device for some reason, we remove it first,
+ //and then add VF so that other handlers run their logic.
+ if (hasIntfAleadyInDevice(osNode.get().intgBridge(),
+ intfName, deviceService)) {
+ log.trace("Device {} has already has VF interface {}, so remove first.",
+ osNode.get().intgBridge(),
+ intfName);
+ osNodeService.removeVfPort(osNode.get(), intfName);
+ //we wait 3000ms because the ovsdb client can't deal with removal/add at the same time.
+ sleep(SLEEP_MS);
+ }
+ } catch (InterruptedException e) {
+ log.error("Exception occurred because of {}", e.toString());
+ }
+
+ osNodeService.addVfPort(osNode.get(), intfName);
+ }
+ }
+
+ private void processPortRemoved(Port port) {
+ if (!port.getvNicType().equals(DIRECT)) {
+ return;
+ } else if (instancePortService.instancePort(port.getId()) == null) {
+ log.trace("processPortRemoved skipped because no instance port exist for portId: {}", port.getId());
+ return;
+ } else {
+ InstancePort instancePort = instancePortService.instancePort(port.getId());
+ if (instancePort == null) {
+ return;
+ }
+ DeviceId deviceId = instancePort.deviceId();
+ if (deviceId == null) {
+ return;
+ }
+ OpenstackNode osNode = osNodeService.node(deviceId);
+ if (osNode == null) {
+ return;
+ }
+
+ Optional<org.onosproject.net.Port> removedPort = deviceService.getPorts(deviceId).stream()
+ .filter(p -> Objects.equals(p.number(), instancePort.portNumber()))
+ .findAny();
+
+ if (!removedPort.isPresent()) {
+ log.error("Failed to execute processPortAdded because port number doesn't exist");
+ return;
+ }
+
+ String intfName = removedPort.get().annotations().value(PORT_NAME);
+
+ if (intfName == null) {
+ log.error("Failed to execute processPortAdded because of null interface name");
+ return;
+ }
+ log.trace("Retrieved interface name: {}", intfName);
+
+ osNodeService.removeVfPort(osNode, intfName);
+ }
+ }
+
}
private class InternalOpenstackNodeListener implements OpenstackNodeListener {
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
index 27e122d..f9791cd 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
@@ -363,6 +363,8 @@
* @return interface name
*/
public static String getIntfNameFromPciAddress(Port port) {
+ String intfName;
+
if (port.getProfile() == null || port.getProfile().isEmpty()) {
log.error("Port profile is not found");
return null;
@@ -374,6 +376,15 @@
return null;
}
+ String vendorInfoForPort = String.valueOf(port.getProfile().get(PCI_VENDOR_INFO));
+
+ if (!portNamePrefixMap().containsKey(vendorInfoForPort)) {
+ log.debug("{} is an non-smart NIC prefix.", vendorInfoForPort);
+ return UNSUPPORTED_VENDOR;
+ }
+
+ String portNamePrefix = portNamePrefixMap().get(vendorInfoForPort);
+
String busNumHex = port.getProfile().get(PCISLOT).toString().split(":")[1];
String busNumDecimal = String.valueOf(Integer.parseInt(busNumHex, HEX_RADIX));
@@ -387,17 +398,6 @@
.split("\\.")[1];
String functionNumDecimal = String.valueOf(Integer.parseInt(functionNumHex, HEX_RADIX));
- String intfName;
-
- String vendorInfoForPort = String.valueOf(port.getProfile().get(PCI_VENDOR_INFO));
-
- if (!portNamePrefixMap().containsKey(vendorInfoForPort)) {
- log.warn("Failed to retrieve the interface name because of unsupported prefix for vendor ID {}",
- vendorInfoForPort);
- return UNSUPPORTED_VENDOR;
- }
- String portNamePrefix = portNamePrefixMap().get(vendorInfoForPort);
-
if (functionNumDecimal.equals(ZERO_FUNCTION_NUMBER)) {
intfName = portNamePrefix + busNumDecimal + PREFIX_DEVICE_NUMBER + deviceNumDecimal;
} else {