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 db7af99..a73946f 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
@@ -58,6 +58,7 @@
 import static org.onosproject.openstacknetworking.api.Constants.UNSUPPORTED_VENDOR;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.hasIntfAleadyInDevice;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.isSmartNicCapable;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.CONTROLLER;
 
@@ -148,6 +149,10 @@
                 return;
             }
 
+            if (!isSmartNicCapable(event.port())) {
+                return;
+            }
+
             if (event.port().getState() == State.DOWN) {
                 removePort(event.port());
             } else {
@@ -160,6 +165,10 @@
                 return;
             }
 
+            if (!isSmartNicCapable(event.port())) {
+                return;
+            }
+
             removePort(event.port());
         }
 
@@ -307,6 +316,7 @@
                     .filter(port -> port.getvNicType().equals(DIRECT))
                     .filter(port -> !port.getVifType().equals(UNBOUND))
                     .filter(port -> port.getHostId().equals(node.hostname()))
+                    .filter(OpenstackNetworkingUtil::isSmartNicCapable)
                     .collect(Collectors.toList());
 
             ports.forEach(port -> addIntfToDevice(node, port));
@@ -318,7 +328,7 @@
                 log.error("Failed to retrieve interface name from a port {}", port.getId());
             } else if (intfName.equals(UNSUPPORTED_VENDOR)) {
                 log.warn("Failed to retrieve interface name from a port {} " +
-                                "because of unsupported ovs-based sr-iov");
+                                "because of unsupported ovs-based sr-iov", port.getId());
                 return;
             }
 
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 615de0e..16dcc21 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
@@ -137,6 +137,7 @@
 import static org.onlab.packet.Ip4Address.valueOf;
 import static org.onosproject.net.AnnotationKeys.PORT_NAME;
 import static org.onosproject.openstacknetworking.api.Constants.DEFAULT_GATEWAY_MAC_STR;
+import static org.onosproject.openstacknetworking.api.Constants.DIRECT;
 import static org.onosproject.openstacknetworking.api.Constants.FLOATING_IP_FORMAT;
 import static org.onosproject.openstacknetworking.api.Constants.NETWORK_FORMAT;
 import static org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_REST_PATH;
@@ -399,6 +400,24 @@
     }
 
     /**
+     * Checks whether the given openstack port is smart NIC capable.
+     *
+     * @param port openstack port
+     * @return true if the given port is smart NIC capable, false otherwise
+     */
+    public static boolean isSmartNicCapable(Port port) {
+        if (port.getProfile() != null && port.getvNicType().equals(DIRECT)) {
+            String vendorInfo = String.valueOf(port.getProfile().get(PCI_VENDOR_INFO));
+            if (portNamePrefixMap().containsKey(vendorInfo)) {
+                log.debug("Port {} is a Smart NIC capable port.", port.getId());
+                return true;
+            }
+            return false;
+        }
+        return false;
+    }
+
+    /**
      * Extract the interface name with the supplied port.
      *
      * @param port port
