[VOL-5463] Implementation of the feature to enable or disable a device
Change-Id: I6fa617542283520ac1d55df81a884b88b4baf8da
Signed-off-by: mgouda <madhumati.gouda@radisys.com>
Signed-off-by: madhumati.gouda <glpat-GfRGA4jxMLnDmB9zzfzu>
diff --git a/rw_core/core/device/agent.go b/rw_core/core/device/agent.go
index 38197e6..3bbebbc 100755
--- a/rw_core/core/device/agent.go
+++ b/rw_core/core/device/agent.go
@@ -22,6 +22,7 @@
"errors"
"fmt"
"reflect"
+ "strings"
"sync"
"time"
@@ -1796,3 +1797,383 @@
}
return fmt.Errorf("device-cannot-process-request-%s", agent.deviceID)
}
+
+func (agent *Agent) disableOnuDevice(ctx context.Context, adapterEndpoint string) error {
+ var err error
+ var desc string
+ var prevAdminState, currAdminState common.AdminState_Types
+ requestStatus := &common.OperationResp{Code: common.OperationResp_OPERATION_FAILURE}
+
+ defer func() {
+ agent.logDeviceUpdate(ctx, &prevAdminState, &currAdminState, requestStatus, err, desc)
+ }()
+
+ if err = agent.requestQueue.WaitForGreenLight(ctx); err != nil {
+ desc = "Failed while waiting for green light"
+ return err
+ }
+ logger.Debugw(ctx, "disable-child-device", log.Fields{"device-id": agent.deviceID, "serial-number": agent.device.SerialNumber})
+
+ prevAdminState = agent.device.AdminState
+
+ cloned, desc, err := agent.checkDisableEligibility()
+ if err != nil {
+ agent.requestQueue.RequestComplete()
+ return err
+ }
+
+ cloned.AdminState = voltha.AdminState_DISABLED
+
+ client, err := agent.adapterMgr.GetAdapterClient(ctx, adapterEndpoint)
+ if err != nil {
+ logger.Errorw(ctx, "grpc-client-nil",
+ log.Fields{
+ "error": err,
+ "device-id": agent.deviceID,
+ "device-type": agent.deviceType,
+ "adapter-endpoint": adapterEndpoint,
+ })
+ desc = fmt.Sprintf("failed to get adapter client for endpoint %s", adapterEndpoint)
+ agent.requestQueue.RequestComplete()
+ return err
+ }
+
+ subCtx, cancel := context.WithTimeout(coreutils.WithAllMetadataFromContext(ctx), agent.rpcTimeout)
+ defer cancel()
+ requestStatus.Code = common.OperationResp_OPERATION_IN_PROGRESS
+
+ resultCh := make(chan error, 1)
+
+ go func() {
+ if _, callErr := client.DisableOnuDevice(subCtx, cloned); callErr == nil {
+ logger.Infow(subCtx, "disable-child-device-success", log.Fields{"device-id": cloned.Id, "serial-number": cloned.SerialNumber})
+ agent.onSuccess(subCtx, nil, nil, true)
+ resultCh <- nil
+ } else {
+ logger.Errorw(subCtx, "disable-child-device-failed", log.Fields{"device-id": cloned.Id, "serial-number": cloned.SerialNumber, "error": callErr})
+ agent.onFailure(subCtx, callErr, nil, nil, true)
+ trimmedErr := extractLastRpcError(callErr)
+ desc = fmt.Sprintf("disableOnuDevice call failed: %s", trimmedErr)
+ resultCh <- fmt.Errorf("disable-child-device-failed: %s", trimmedErr)
+ }
+ }()
+
+ select {
+ case resultErr := <-resultCh:
+ if resultErr != nil {
+ agent.requestQueue.RequestComplete()
+ return resultErr
+ }
+ case <-ctx.Done():
+ err = fmt.Errorf("operation cancelled or timed out: %w", ctx.Err())
+ desc = "disable ONU device operation cancelled or timed out"
+ agent.requestQueue.RequestComplete()
+ return err
+ }
+
+ if updateErr := agent.updateDeviceAndReleaseLock(subCtx, cloned); updateErr != nil {
+ desc = "failed to update device after disabling ONU"
+ return fmt.Errorf("update-device-failed: %w", updateErr)
+ }
+
+ currAdminState = cloned.AdminState
+ return nil
+}
+
+func (agent *Agent) enableOnuDevice(ctx context.Context, adapterEndpoint string) error {
+ var err error
+ var desc string
+ var prevAdminState, currAdminState common.AdminState_Types
+ requestStatus := &common.OperationResp{Code: common.OperationResp_OPERATION_FAILURE}
+
+ defer func() { agent.logDeviceUpdate(ctx, &prevAdminState, &currAdminState, requestStatus, err, desc) }()
+
+ if err = agent.requestQueue.WaitForGreenLight(ctx); err != nil {
+ desc = "Failed while waiting for green light"
+ return err
+ }
+ logger.Debugw(ctx, "enable-child-device", log.Fields{"device-id": agent.deviceID, "serial-number": agent.device.SerialNumber})
+
+ prevAdminState = agent.device.AdminState
+
+ newDevice, desc, err := agent.checkEnableEligibility()
+ if err != nil {
+ agent.requestQueue.RequestComplete()
+ return err
+ }
+
+ // Update the Admin State and set the operational state to activating before sending the request to the Adapters
+ newDevice.AdminState = voltha.AdminState_ENABLED
+
+ client, err := agent.adapterMgr.GetAdapterClient(ctx, adapterEndpoint)
+ if err != nil {
+ logger.Errorw(ctx, "grpc-client-nil",
+ log.Fields{
+ "error": err,
+ "device-id": agent.deviceID,
+ "device-type": agent.deviceType,
+ "adapter-endpoint": adapterEndpoint,
+ })
+
+ desc = fmt.Sprintf("failed to get adapter client for endpoint %s", adapterEndpoint)
+ agent.requestQueue.RequestComplete()
+ return err
+ }
+ subCtx, cancel := context.WithTimeout(coreutils.WithAllMetadataFromContext(ctx), agent.rpcTimeout)
+ defer cancel()
+ requestStatus.Code = common.OperationResp_OPERATION_IN_PROGRESS
+
+ resultCh := make(chan error, 1)
+
+ go func() {
+ _, callErr := client.EnableOnuDevice(subCtx, newDevice)
+
+ if callErr == nil {
+ logger.Infow(subCtx, "enable-child-device-success", log.Fields{"device-id": newDevice.Id, "serial-number": newDevice.SerialNumber})
+ agent.onSuccess(subCtx, nil, nil, true)
+ resultCh <- nil
+ } else {
+ logger.Errorw(subCtx, "enable-child-device-failed", log.Fields{"device-id": newDevice.Id, "serial-number": newDevice.SerialNumber, "error": callErr})
+ agent.onFailure(subCtx, callErr, nil, nil, true)
+ trimmedErr := extractLastRpcError(callErr)
+ desc = fmt.Sprintf(" enableOnuDevice call failed: %s", trimmedErr)
+ resultCh <- fmt.Errorf("enable-child-device-failed: %s", trimmedErr)
+ }
+ }()
+
+ select {
+ case resultErr := <-resultCh:
+ if resultErr != nil {
+ agent.requestQueue.RequestComplete()
+ return resultErr
+ }
+ case <-ctx.Done():
+ err = fmt.Errorf("operation cancelled or timed out: %w", ctx.Err())
+ agent.requestQueue.RequestComplete()
+ desc = "enable ONU device operation cancelled or timed out"
+ return err
+ }
+
+ if updateErr := agent.updateDeviceAndReleaseLock(subCtx, newDevice); updateErr != nil {
+ desc = "failed to update device after enabling ONU"
+ return fmt.Errorf("update-device-failed: %w", updateErr)
+ }
+
+ currAdminState = newDevice.AdminState
+ return nil
+
+}
+
+func (agent *Agent) disableOnuSerialNumber(ctx context.Context, device *voltha.OnuSerialNumberOnOLTPon, adapterEndpoint string) error {
+ var err error
+ var desc string
+ var prevAdminState, currAdminState common.AdminState_Types
+ requestStatus := &common.OperationResp{Code: common.OperationResp_OPERATION_FAILURE}
+
+ defer func() {
+ agent.logDeviceUpdate(ctx, &prevAdminState, &currAdminState, requestStatus, err, desc)
+ }()
+
+ if err = agent.requestQueue.WaitForGreenLight(ctx); err != nil {
+ desc = "Failed while waiting for green light"
+ return err
+ }
+ logger.Debugw(ctx, "disable-child-serial-number", log.Fields{"device-id": agent.deviceID, "serial-number": agent.device.SerialNumber})
+
+ prevAdminState = agent.device.AdminState
+ cloned, desc, err := agent.checkDisableEligibility()
+ if err != nil {
+ agent.requestQueue.RequestComplete()
+ return err
+ }
+
+ cloned.AdminState = voltha.AdminState_DISABLED
+
+ client, err := agent.adapterMgr.GetAdapterClient(ctx, adapterEndpoint)
+ if err != nil {
+ logger.Errorw(ctx, "grpc-client-nil",
+ log.Fields{
+ "error": err,
+ "device-id": agent.deviceID,
+ "device-type": agent.deviceType,
+ "adapter-endpoint": adapterEndpoint,
+ })
+
+ desc = fmt.Sprintf("failed to get adapter client for endpoint %s", adapterEndpoint)
+ agent.requestQueue.RequestComplete()
+ return err
+ }
+
+ subCtx, cancel := context.WithTimeout(coreutils.WithAllMetadataFromContext(ctx), agent.rpcTimeout)
+ defer cancel()
+ requestStatus.Code = common.OperationResp_OPERATION_IN_PROGRESS
+
+ resultCh := make(chan error, 1)
+
+ go func() {
+ _, callErr := client.DisableOnuSerialNumber(subCtx, device)
+ if callErr == nil {
+ logger.Infow(subCtx, "disable-child-serial-number-success", log.Fields{"device-id": cloned.Id, "serial-number": device.SerialNumber})
+ agent.onSuccess(subCtx, nil, nil, true)
+ resultCh <- nil
+ } else {
+ logger.Errorw(subCtx, "disable-child-serial-number-failed", log.Fields{"device-id": cloned.Id, "serial-number": device.SerialNumber, "error": callErr})
+ agent.onFailure(subCtx, callErr, nil, nil, true)
+ trimmedErr := extractLastRpcError(callErr)
+ desc = fmt.Sprintf("disableOnuSerialNumber call failed: %s", trimmedErr)
+ resultCh <- fmt.Errorf("disable-child-serial-number-failed: %s", trimmedErr)
+ }
+ }()
+
+ select {
+ case resultErr := <-resultCh:
+ if resultErr != nil {
+ agent.requestQueue.RequestComplete()
+ return resultErr
+ }
+
+ case <-ctx.Done():
+ err = fmt.Errorf("operation cancelled or timed out: %w", ctx.Err())
+ agent.requestQueue.RequestComplete()
+ desc = "disable ONU serial number operation cancelled or timed out"
+ return err
+ }
+
+ if updateErr := agent.updateDeviceAndReleaseLock(subCtx, cloned); updateErr != nil {
+ desc = "failed to update device after disabling ONU serial number"
+ return fmt.Errorf("update-device-failed: %w", updateErr)
+ }
+ currAdminState = cloned.AdminState
+ return nil
+
+}
+
+func (agent *Agent) enableOnuSerialNumber(ctx context.Context, device *voltha.OnuSerialNumberOnOLTPon, adapterEndpoint string) error {
+ var err error
+ var desc string
+ var cloned *voltha.Device
+ var prevAdminState, currAdminState common.AdminState_Types
+ requestStatus := &common.OperationResp{Code: common.OperationResp_OPERATION_FAILURE}
+
+ defer func() {
+ agent.logDeviceUpdate(ctx, &prevAdminState, &currAdminState, requestStatus, err, desc)
+ }()
+
+ if err = agent.requestQueue.WaitForGreenLight(ctx); err != nil {
+ desc = "Failed while waiting for green light"
+ return err
+ }
+ logger.Debugw(ctx, "enable-child-serial-number", log.Fields{"serial-number": device.SerialNumber})
+
+ prevAdminState = agent.device.AdminState
+ cloned, desc, err = agent.checkEnableEligibility()
+ if err != nil {
+ agent.requestQueue.RequestComplete()
+ return err
+ }
+
+ cloned.AdminState = voltha.AdminState_ENABLED
+
+ client, err := agent.adapterMgr.GetAdapterClient(ctx, adapterEndpoint)
+ if err != nil {
+ logger.Errorw(ctx, "grpc-client-nil",
+ log.Fields{
+ "error": err,
+ "device-id": agent.deviceID,
+ "device-type": agent.deviceType,
+ "adapter-endpoint": agent.adapterEndpoint,
+ })
+
+ desc = fmt.Sprintf("failed to get adapter client for endpoint %s", adapterEndpoint)
+ agent.requestQueue.RequestComplete()
+ return err
+ }
+
+ subCtx, cancel := context.WithTimeout(coreutils.WithAllMetadataFromContext(ctx), agent.rpcTimeout)
+ defer cancel()
+ requestStatus.Code = common.OperationResp_OPERATION_IN_PROGRESS
+
+ resultCh := make(chan error, 1)
+
+ go func() {
+ _, callErr := client.EnableOnuSerialNumber(subCtx, device)
+ if callErr == nil {
+ logger.Infow(subCtx, "enable-child-serial-number-success", log.Fields{"serial number": device.SerialNumber})
+ agent.onSuccess(subCtx, nil, nil, true)
+ resultCh <- nil
+ } else {
+ logger.Errorw(subCtx, "enable-child-serial-number-failed", log.Fields{"serial number": device.SerialNumber, "error": callErr})
+ agent.onFailure(subCtx, callErr, nil, nil, true)
+ trimmedErr := extractLastRpcError(callErr)
+ desc = fmt.Sprintf("enableOnuSerialNumber call failed: %s", trimmedErr)
+ resultCh <- fmt.Errorf("enable-child-serial-number-failed: %s", trimmedErr)
+ }
+ }()
+
+ select {
+ case resultErr := <-resultCh:
+ if resultErr != nil {
+ agent.requestQueue.RequestComplete()
+ return resultErr
+ }
+
+ case <-ctx.Done():
+ err = fmt.Errorf("operation cancelled or timed out: %w", ctx.Err())
+ agent.requestQueue.RequestComplete()
+ desc = "enable ONU serial number operation cancelled or timed out"
+ return err
+ }
+
+ if updateErr := agent.updateDeviceAndReleaseLock(subCtx, cloned); updateErr != nil {
+ desc = "failed to update device after enabling ONU serial number"
+ return fmt.Errorf("update-device-failed: %w", updateErr)
+ }
+ currAdminState = cloned.AdminState
+ return nil
+}
+
+func (agent *Agent) checkDisableEligibility() (*voltha.Device, string, error) {
+ cloned := agent.cloneDeviceWithoutLock()
+
+ if !agent.proceedWithRequest(cloned) {
+ err := status.Errorf(codes.FailedPrecondition, "cannot complete operation as device deletion is in progress/failed: %s", agent.deviceID)
+ return nil, "device-deletion-in-progress", err
+ }
+
+ if cloned.AdminState == voltha.AdminState_DISABLED {
+ err := status.Errorf(codes.FailedPrecondition, "device-already-disabled: %s", agent.deviceID)
+ return nil, "device-already-disabled", err
+ }
+ if cloned.AdminState == voltha.AdminState_PREPROVISIONED {
+ err := status.Errorf(codes.FailedPrecondition, "deviceId:%s, invalid-admin-state:%s", agent.deviceID, cloned.AdminState)
+ return nil, "invalid-admin-state", err
+ }
+
+ return cloned, "", nil
+}
+
+func (agent *Agent) checkEnableEligibility() (*voltha.Device, string, error) {
+ device := agent.getDeviceReadOnlyWithoutLock()
+
+ if !agent.proceedWithRequest(device) {
+ err := status.Errorf(codes.FailedPrecondition, "cannot complete operation as device deletion is in progress or reconciling is in progress/failed: %s", agent.deviceID)
+ return nil, "device-deletion-in-progress", err
+ }
+
+ if device.AdminState == voltha.AdminState_ENABLED && device.OperStatus != voltha.OperStatus_FAILED {
+ err := status.Errorf(codes.FailedPrecondition, "device-already-enabled: %s", device.Id)
+ return nil, "device-already-enabled", err
+ }
+
+ cloned := agent.cloneDeviceWithoutLock()
+ return cloned, "", nil
+}
+
+// extracting only the error message from the rpc error
+func extractLastRpcError(err error) string {
+ s := err.Error()
+ if i := strings.LastIndex(s, "rpc error:"); i >= 0 {
+ return strings.TrimSpace(s[i:])
+ }
+ return s
+}
diff --git a/rw_core/core/device/manager.go b/rw_core/core/device/manager.go
index 0b5df56..e39d822 100755
--- a/rw_core/core/device/manager.go
+++ b/rw_core/core/device/manager.go
@@ -881,3 +881,20 @@
logger.Errorw(ctx, "restarted-adapter-not-found", log.Fields{"endpoint": endpoint})
return fmt.Errorf("restarted adapter at endpoint %s not found", endpoint)
}
+
+func (dMgr *Manager) GetOnuDeviceIdBySerial(ctx context.Context, device *voltha.OnuSerialNumberOnOLTPon) (string, error) {
+ var onuDeviceId string
+ dMgr.deviceAgents.Range(func(key, value interface{}) bool {
+ devAgent := value.(*Agent)
+ dev := devAgent.device
+ if dev.SerialNumber == device.GetSerialNumber() && dev.ParentId == device.GetOltDeviceId().Id {
+ onuDeviceId = dev.Id
+ return false
+ }
+ return true
+ })
+ if onuDeviceId != "" {
+ return onuDeviceId, nil
+ }
+ return "", fmt.Errorf("ONU with serial %s not found under OLT %s", device.GetSerialNumber(), device.GetOltDeviceId().Id)
+}
diff --git a/rw_core/core/device/manager_nbi.go b/rw_core/core/device/manager_nbi.go
index 1e0da90..2a8aeb8 100644
--- a/rw_core/core/device/manager_nbi.go
+++ b/rw_core/core/device/manager_nbi.go
@@ -951,3 +951,84 @@
func (dMgr *Manager) DeleteVoipSystemProfile(ctx context.Context, key *common.Key) (*empty.Empty, error) {
return nil, status.Error(codes.Unimplemented, "delete-voip-system-profile-not-implemented")
}
+
+func (dMgr *Manager) DisableOnuDevice(ctx context.Context, id *voltha.ID) (*empty.Empty, error) {
+ ctx = utils.WithRPCMetadataContext(ctx, "DisableOnuDevice")
+ log.EnrichSpan(ctx, log.Fields{"device-id": id.Id})
+
+ logger.Info(ctx, "disable-child-device", log.Fields{"device-id": id.Id})
+ agent := dMgr.getDeviceAgent(ctx, id.Id)
+ if agent == nil {
+ return nil, status.Errorf(codes.NotFound, "%s", id.Id)
+ }
+
+ oltAgent := dMgr.getDeviceAgent(ctx, agent.device.ParentId)
+ if oltAgent == nil {
+ return nil, status.Errorf(codes.NotFound, "%s", agent.device.ParentId)
+ }
+ logger.Debugw(ctx, "serial-no to be diabled", log.Fields{"serial-number": agent.device.SerialNumber})
+ return &empty.Empty{}, agent.disableOnuDevice(ctx, oltAgent.adapterEndpoint)
+}
+
+func (dMgr *Manager) EnableOnuDevice(ctx context.Context, id *voltha.ID) (*empty.Empty, error) {
+ ctx = utils.WithRPCMetadataContext(ctx, "EnableOnuDevice")
+ log.EnrichSpan(ctx, log.Fields{"device-id": id.Id})
+
+ logger.Info(ctx, "enable-child-device", log.Fields{"device-id": id.Id})
+ agent := dMgr.getDeviceAgent(ctx, id.Id)
+ if agent == nil {
+ return nil, status.Errorf(codes.NotFound, "%s", id.Id)
+ }
+
+ oltAgent := dMgr.getDeviceAgent(ctx, agent.device.ParentId)
+ if oltAgent == nil {
+ return nil, status.Errorf(codes.NotFound, "%s", agent.device.ParentId)
+ }
+ logger.Debugw(ctx, "serial-no to be enabled", log.Fields{"serial-number": agent.device.SerialNumber})
+ return &empty.Empty{}, agent.enableOnuDevice(ctx, oltAgent.adapterEndpoint)
+}
+
+func (dMgr *Manager) DisableOnuSerialNumber(ctx context.Context, device *voltha.OnuSerialNumberOnOLTPon) (*empty.Empty, error) {
+ ctx = utils.WithRPCMetadataContext(ctx, "DisableOnuSerialNumber")
+ log.EnrichSpan(ctx, log.Fields{"device-id": device.OltDeviceId})
+
+ logger.Infow(ctx, "disable-child serial number", log.Fields{"device-id": device.OltDeviceId, "serial-number": device.SerialNumber, "pon-port": device.Port})
+ oltAgent := dMgr.getDeviceAgent(ctx, device.OltDeviceId.GetId())
+ if oltAgent == nil {
+ return nil, status.Errorf(codes.NotFound, "%s", device.OltDeviceId)
+ }
+
+ onuDeviceID, err := dMgr.GetOnuDeviceIdBySerial(ctx, device)
+ if err != nil {
+ return nil, status.Errorf(codes.NotFound, "onu-device-id-not-found-for-serial-number-%s", device.SerialNumber)
+ }
+
+ agent := dMgr.getDeviceAgent(ctx, onuDeviceID)
+ if agent == nil {
+ return nil, status.Errorf(codes.NotFound, "%s", onuDeviceID)
+ }
+ return &empty.Empty{}, agent.disableOnuSerialNumber(ctx, device, oltAgent.adapterEndpoint)
+}
+
+func (dMgr *Manager) EnableOnuSerialNumber(ctx context.Context, device *voltha.OnuSerialNumberOnOLTPon) (*empty.Empty, error) {
+ ctx = utils.WithRPCMetadataContext(ctx, "EnableOnuSerialNumber")
+ log.EnrichSpan(ctx, log.Fields{"device-id": device.OltDeviceId})
+
+ logger.Info(ctx, "enable-child serial number", log.Fields{"device-id": device.OltDeviceId, "serial-number": device.SerialNumber, "pon-port": device.Port})
+ oltAgent := dMgr.getDeviceAgent(ctx, device.OltDeviceId.GetId())
+ if oltAgent == nil {
+ return nil, status.Errorf(codes.NotFound, "%s", device.OltDeviceId)
+ }
+
+ onuDeviceID, err := dMgr.GetOnuDeviceIdBySerial(ctx, device)
+ if err != nil {
+ return nil, status.Errorf(codes.NotFound, "onu-device-id-not-found-for-serial-number-%s", device.SerialNumber)
+ }
+
+ agent := dMgr.getDeviceAgent(ctx, onuDeviceID)
+ if agent == nil {
+ return nil, status.Errorf(codes.NotFound, "%s", onuDeviceID)
+ }
+
+ return &empty.Empty{}, agent.enableOnuSerialNumber(ctx, device, oltAgent.adapterEndpoint)
+}
diff --git a/rw_core/mocks/adapter_olt.go b/rw_core/mocks/adapter_olt.go
index 65c5503..9d4a4a6 100644
--- a/rw_core/mocks/adapter_olt.go
+++ b/rw_core/mocks/adapter_olt.go
@@ -489,3 +489,19 @@
}
}
+
+func (onuA *OLTAdapter) DisableOnuSerialNumber(ctx context.Context, in *voltha.OnuSerialNumberOnOLTPon) (*empty.Empty, error) {
+ return &empty.Empty{}, nil
+}
+
+func (onuA *OLTAdapter) EnableOnuSerialNumber(ctx context.Context, in *voltha.OnuSerialNumberOnOLTPon) (*empty.Empty, error) {
+ return &empty.Empty{}, nil
+}
+
+func (onuA *OLTAdapter) DisableOnuDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+ return &empty.Empty{}, nil
+}
+
+func (onuA *OLTAdapter) EnableOnuDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+ return &empty.Empty{}, nil
+}
diff --git a/rw_core/mocks/adapter_onu.go b/rw_core/mocks/adapter_onu.go
index b7309f6..c2e5a8f 100644
--- a/rw_core/mocks/adapter_onu.go
+++ b/rw_core/mocks/adapter_onu.go
@@ -338,3 +338,19 @@
logger.Errorw(ctx, "connection-down", log.Fields{"remote-client": remoteClient, "error": err, "initial-conn-time": initialRequestTime})
return err
}
+
+func (onuA *ONUAdapter) DisableOnuSerialNumber(ctx context.Context, in *voltha.OnuSerialNumberOnOLTPon) (*empty.Empty, error) {
+ return &empty.Empty{}, nil
+}
+
+func (onuA *ONUAdapter) EnableOnuSerialNumber(ctx context.Context, in *voltha.OnuSerialNumberOnOLTPon) (*empty.Empty, error) {
+ return &empty.Empty{}, nil
+}
+
+func (onuA *ONUAdapter) DisableOnuDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+ return &empty.Empty{}, nil
+}
+
+func (onuA *ONUAdapter) EnableOnuDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+ return &empty.Empty{}, nil
+}