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 {
