diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java
index 1a7b2ba..9f848ed 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java
@@ -290,6 +290,9 @@
             ImmutableByteSequence portByteSequence = packetMetadata.get().value();
             short s = portByteSequence.asReadOnlyBuffer().getShort();
             ConnectPoint receivedFrom = new ConnectPoint(deviceId, PortNumber.portNumber(s));
+            if (!receivedFrom.port().hasName()) {
+                receivedFrom = translateSwitchPort(receivedFrom);
+            }
             ByteBuffer rawData = ByteBuffer.wrap(packetIn.data().asArray());
             return new DefaultInboundPacket(receivedFrom, ethPkt, rawData);
         } else {
@@ -311,4 +314,19 @@
         }
         return capabilities.cpuPort();
     }
+
+    /* Connect point generated using sb metadata does not have port name
+       we use the device service as translation service */
+    private ConnectPoint translateSwitchPort(ConnectPoint connectPoint) {
+        final DeviceService deviceService = handler().get(DeviceService.class);
+        if (deviceService == null) {
+            log.warn("Unable to translate switch port due to DeviceService not available");
+            return connectPoint;
+        }
+        Port devicePort = deviceService.getPort(connectPoint);
+        if (devicePort != null) {
+            return new ConnectPoint(connectPoint.deviceId(), devicePort.number());
+        }
+        return connectPoint;
+    }
 }
diff --git a/providers/hostprobing/src/main/java/org/onosproject/provider/hostprobing/impl/DefaultHostProbingProvider.java b/providers/hostprobing/src/main/java/org/onosproject/provider/hostprobing/impl/DefaultHostProbingProvider.java
index 522ed20..079489e 100644
--- a/providers/hostprobing/src/main/java/org/onosproject/provider/hostprobing/impl/DefaultHostProbingProvider.java
+++ b/providers/hostprobing/src/main/java/org/onosproject/provider/hostprobing/impl/DefaultHostProbingProvider.java
@@ -29,6 +29,8 @@
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Host;
 import org.onosproject.net.HostLocation;
+import org.onosproject.net.Port;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.host.HostProbe;
@@ -84,6 +86,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     private MastershipService mastershipService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY)
+    private DeviceService deviceService;
+
     private HostProviderService providerService;
     private HostProbingProviderService hostProbingProviderService;
     private ExecutorService packetHandler;
@@ -170,16 +175,23 @@
                 case PROBE_FAIL:
                     // Remove this location if this is a verify probe.
                     if (hostProbe.mode() == ProbeMode.VERIFY) {
+                        ConnectPoint oldConnectPoint = hostProbe.connectPoint();
+                        if (!oldConnectPoint.port().hasName()) {
+                            oldConnectPoint = translateSwitchPort(oldConnectPoint);
+                        }
                         providerService.removeLocationFromHost(hostProbe.id(),
-                                new HostLocation(hostProbe.connectPoint(), 0L));
+                                new HostLocation(oldConnectPoint, 0L));
                     }
                     break;
                 case PROBE_COMPLETED:
                     // Add this location if this is a discover probe.
                     if (hostProbe.mode() == ProbeMode.DISCOVER) {
-                        HostLocation newLocation = new HostLocation(hostProbe.connectPoint(),
-                                System.currentTimeMillis());
-                        providerService.addLocationToHost(hostProbe.id(), newLocation);
+                        ConnectPoint newConnectPoint = hostProbe.connectPoint();
+                        if (!newConnectPoint.port().hasName()) {
+                            newConnectPoint = translateSwitchPort(newConnectPoint);
+                        }
+                        providerService.addLocationToHost(hostProbe.id(),
+                                new HostLocation(newConnectPoint, System.currentTimeMillis()));
                     }
                     break;
                 default:
@@ -247,4 +259,14 @@
                 treatment, ByteBuffer.wrap(probe.serialize()));
         packetService.emit(outboundPacket);
     }
+
+    /* Connect point generated from netcfg may not have port name
+       we use the device service as translation service */
+    private ConnectPoint translateSwitchPort(ConnectPoint connectPoint) {
+        Port devicePort = deviceService.getPort(connectPoint);
+        if (devicePort != null) {
+            return new ConnectPoint(connectPoint.deviceId(), devicePort.number());
+        }
+        return connectPoint;
+    }
 }
