[VOL-1778] : changes to derive onu adapter name dynamically

Change-Id: Ic446efab596a6d764f6a8ff7c1c1d1c154e8f9c0
diff --git a/rw_core/core/device_manager.go b/rw_core/core/device_manager.go
index 68ee082..43d21f2 100755
--- a/rw_core/core/device_manager.go
+++ b/rw_core/core/device_manager.go
@@ -751,7 +751,29 @@
 
 func (dMgr *DeviceManager) childDeviceDetected(parentDeviceId string, parentPortNo int64, deviceType string,
 	channelId int64, vendorId string, serialNumber string, onuId int64) (*voltha.Device, error) {
-	log.Debugw("childDeviceDetected", log.Fields{"parentDeviceId": parentDeviceId})
+	log.Debugw("childDeviceDetected", log.Fields{"parentDeviceId": parentDeviceId, "parentPortNo": parentPortNo, "deviceType": deviceType, "channelId": channelId, "vendorId": vendorId, "serialNumber": serialNumber, "onuId": onuId})
+
+	if deviceType == "" && vendorId != "" {
+		log.Debug("device-type-is-nil-fetching-device-type")
+		if deviceTypesIf := dMgr.adapterMgr.clusterDataProxy.List(context.Background(), "/device_types", 0, false, ""); deviceTypesIf != nil {
+		OLoop:
+			for _, deviceTypeIf := range deviceTypesIf.([]interface{}) {
+				if dType, ok := deviceTypeIf.(*voltha.DeviceType); ok {
+					for _, v := range dType.VendorIds {
+						if v == vendorId {
+							deviceType = dType.Adapter
+							break OLoop
+						}
+					}
+				}
+			}
+		}
+	}
+	//if no match found for the vendorid,report adapter with the custom error message
+	if deviceType == "" {
+		log.Errorw("failed-to-fetch-adapter-name ", log.Fields{"vendorId": vendorId})
+		return nil, status.Errorf(codes.NotFound, "%s", vendorId)
+	}
 
 	// Create the ONU device
 	childDevice := &voltha.Device{}