[VOL-3144] verification of explicit device/port disable/enable config processing

Signed-off-by: mpagenko <michael.pagenkopf@adtran.com>
Change-Id: I34dc2bf54755a1dd948da7258bf269de0c76fb7b
diff --git a/internal/pkg/onuadaptercore/onu_device_entry.go b/internal/pkg/onuadaptercore/onu_device_entry.go
index aa2d5f0..0e8ad16 100644
--- a/internal/pkg/onuadaptercore/onu_device_entry.go
+++ b/internal/pkg/onuadaptercore/onu_device_entry.go
@@ -129,16 +129,18 @@
 	UniLockStateDone OnuDeviceEvent = 4
 	// UniUnlockStateDone - Uni ports admin set to unlock
 	UniUnlockStateDone OnuDeviceEvent = 5
-	// UniAdminStateDone - Uni ports admin set done - general
-	UniAdminStateDone OnuDeviceEvent = 6
+	// UniDisableStateDone - Uni ports admin set to lock based on device disable
+	UniDisableStateDone OnuDeviceEvent = 6
+	// UniEnableStateDone - Uni ports admin set to unlock based on device re-enable
+	UniEnableStateDone OnuDeviceEvent = 7
 	// PortLinkUp - Port link state change
-	PortLinkUp OnuDeviceEvent = 7
+	PortLinkUp OnuDeviceEvent = 8
 	// PortLinkDw - Port link state change
-	PortLinkDw OnuDeviceEvent = 8
+	PortLinkDw OnuDeviceEvent = 9
 	// OmciAniConfigDone -  AniSide config according to TechProfile done
-	OmciAniConfigDone OnuDeviceEvent = 9
+	OmciAniConfigDone OnuDeviceEvent = 10
 	// OmciVlanFilterDone - Omci Vlan config according to flowConfig done
-	OmciVlanFilterDone OnuDeviceEvent = 10
+	OmciVlanFilterDone OnuDeviceEvent = 11
 	// Add other events here as needed (alarms separate???)
 )
 
@@ -223,7 +225,6 @@
 	baseDeviceHandler     *deviceHandler
 	coreProxy             adapterif.CoreProxy
 	adapterProxy          adapterif.AdapterProxy
-	started               bool
 	PDevOmciCC            *omciCC
 	pOnuDB                *onuDeviceDB
 	mibTemplateKVStore    *db.Backend
@@ -263,7 +264,6 @@
 	supportedFsmsPtr *OmciDeviceFsms) *OnuDeviceEntry {
 	logger.Infow("init-onuDeviceEntry", log.Fields{"device-id": deviceID})
 	var onuDeviceEntry OnuDeviceEntry
-	onuDeviceEntry.started = false
 	onuDeviceEntry.deviceID = deviceID
 	onuDeviceEntry.baseDeviceHandler = deviceHandler
 	onuDeviceEntry.coreProxy = coreProxy
@@ -433,37 +433,37 @@
 
 //start starts (logs) the omci agent
 func (oo *OnuDeviceEntry) start(ctx context.Context) error {
-	logger.Info("starting-OnuDeviceEntry")
-
-	oo.PDevOmciCC = newOmciCC(ctx, oo, oo.deviceID, oo.baseDeviceHandler,
-		oo.coreProxy, oo.adapterProxy)
+	logger.Infow("OnuDeviceEntry-starting", log.Fields{"for device-id": oo.deviceID})
 	if oo.PDevOmciCC == nil {
-		logger.Errorw("Could not create devOmciCc - abort", log.Fields{"for device-id": oo.deviceID})
-		return fmt.Errorf("could not create devOmciCc %s", oo.deviceID)
+		oo.PDevOmciCC = newOmciCC(ctx, oo, oo.deviceID, oo.baseDeviceHandler,
+			oo.coreProxy, oo.adapterProxy)
+		if oo.PDevOmciCC == nil {
+			logger.Errorw("Could not create devOmciCc - abort", log.Fields{"for device-id": oo.deviceID})
+			return fmt.Errorf("could not create devOmciCc %s", oo.deviceID)
+		}
 	}
-
-	oo.started = true
-	logger.Infow("OnuDeviceEntry-started", log.Fields{"for device-id": oo.deviceID})
 	return nil
 }
 
-//stop terminates the session
-func (oo *OnuDeviceEntry) stop(ctx context.Context) error {
-	logger.Infow("stopping-OnuDeviceEntry", log.Fields{"for device-id": oo.deviceID})
-	oo.started = false
-	//oo.exitChannel <- 1
-	// maybe also the omciCC should be stopped here - for now not as no real processing is expected here - maybe needs consolidation
-	logger.Infow("OnuDeviceEntry-stopped", log.Fields{"for device-id": oo.deviceID})
+//stop stops/resets the omciCC
+func (oo *OnuDeviceEntry) stop(ctx context.Context, abResetOmciCC bool) error {
+	logger.Debugw("OnuDeviceEntry-stopping", log.Fields{"for device-id": oo.deviceID})
+	if abResetOmciCC && (oo.PDevOmciCC != nil) {
+		_ = oo.PDevOmciCC.stop(ctx)
+	}
+	//to allow for all event notifications again when re-using the device and omciCC
+	oo.devState = DeviceStatusInit
 	return nil
 }
 
 func (oo *OnuDeviceEntry) reboot(ctx context.Context) error {
-	logger.Infow("reboot-OnuDeviceEntry", log.Fields{"for device-id": oo.deviceID})
-	if err := oo.PDevOmciCC.sendReboot(context.TODO(), ConstDefaultOmciTimeout, true, oo.omciRebootMessageReceivedChannel); err != nil {
-		logger.Errorw("onu didn't reboot", log.Fields{"for device-id": oo.deviceID})
-		return err
+	logger.Debugw("OnuDeviceEntry-rebooting", log.Fields{"for device-id": oo.deviceID})
+	if oo.PDevOmciCC != nil {
+		if err := oo.PDevOmciCC.sendReboot(ctx, ConstDefaultOmciTimeout, true, oo.omciRebootMessageReceivedChannel); err != nil {
+			logger.Errorw("onu didn't reboot", log.Fields{"for device-id": oo.deviceID})
+			return err
+		}
 	}
-	logger.Infow("OnuDeviceEntry-reboot", log.Fields{"for device-id": oo.deviceID})
 	return nil
 }