[VOL-4962] openonuAdapterGo - indication of compatibility issues of ONU during configuration
Change-Id: I02ff2d2fc122e6fb423334ceb935be6d57b51828
diff --git a/internal/pkg/common/defines.go b/internal/pkg/common/defines.go
index ae705e3..b9c9f17 100755
--- a/internal/pkg/common/defines.go
+++ b/internal/pkg/common/defines.go
@@ -364,6 +364,12 @@
OnuOmciCommunicationFailureSwUpgrade = "ONU_OMCI_COMMUNICATION_FAILURE_SW_UPGRADE"
OnuOmciCommunicationFailureSwUpgradeDesc = "OMCI communication during ONU SW upgrade failed"
+ OnuConfigFailureResponseErr = "ONU_CONFIG_FAILURE_RESPONSE_ERROR"
+ OnuConfigFailureResponseErrDesc = "ONU config failed - response error: "
+
+ OnuConfigFailureTimeout = "ONU_CONFIG_FAILURE_TIMEOUT"
+ OnuConfigFailureTimeoutDesc = "ONU config failed - timeout, OMCI ME: "
+
OnuConfigFailureMissingTcont = "ONU_CONFIG_FAILURE_MISSING_TCONT"
OnuConfigFailureMissingTcontDesc = "ONU config failed - no further TCONT resources available at ONU"
diff --git a/internal/pkg/common/omci_cc.go b/internal/pkg/common/omci_cc.go
index 25f34de..6cb15b7 100755
--- a/internal/pkg/common/omci_cc.go
+++ b/internal/pkg/common/omci_cc.go
@@ -117,6 +117,8 @@
coreClient *vgrpc.Client
supportExtMsg bool
rxOmciFrameError tOmciReceiveError
+ confFailMEs []me.ClassID
+ mutexConfFailMEs sync.RWMutex
mutexCounters sync.RWMutex
countersBase txRxCounters
@@ -168,6 +170,7 @@
omciCC.coreClient = coreClient
omciCC.supportExtMsg = false
omciCC.rxOmciFrameError = cOmciMessageReceiveNoError
+ omciCC.confFailMEs = nil
omciCC.countersBase = txRxCounters{0, 0, 0, 0}
omciCC.countersExt = txRxCounters{0, 0, 0, 0}
omciCC.txRetries = 0
@@ -213,6 +216,7 @@
oo.UploadSequNo = 0
oo.UploadNoOfCmds = 0
oo.rxOmciFrameError = cOmciMessageReceiveNoError
+ oo.ResetConfFailMEs()
//reset the stats counter
oo.mutexCounters.Lock()
@@ -5243,3 +5247,48 @@
defer oo.mutexCounters.Unlock()
oo.txTimeouts++
}
+
+// NotifyAboutOnuConfigFailure - trigger ONU DeviceEvent to notify about ONU config failure
+func (oo *OmciCC) NotifyAboutOnuConfigFailure(ctx context.Context, errID string, meClassID me.ClassID, meEntityID uint16,
+ meName string, meResult me.Results) {
+ var description string
+ if !oo.confFailMeAlreadyHandled(meClassID) {
+ switch errID {
+ case OnuConfigFailureResponseErr:
+ description = OnuConfigFailureResponseErrDesc + meResult.String() +
+ ", OMCI ME: " + meName + " / instance: " + fmt.Sprintf("%d", meEntityID) + " (only first instance reported)"
+ case OnuConfigFailureTimeout:
+ description = OnuConfigFailureTimeoutDesc + meName + " / instance: " + fmt.Sprintf("%d", meEntityID) +
+ " (only first instance reported)"
+ default:
+ logger.Warnw(ctx, "method called with undefined errID", log.Fields{"errID": errID, "device-id": oo.deviceID})
+ return
+ }
+ oo.pOnuDeviceEntry.SendOnuDeviceEvent(ctx, errID, description)
+ oo.appendConfFailMe(meClassID)
+ }
+}
+
+func (oo *OmciCC) confFailMeAlreadyHandled(meClassID me.ClassID) bool {
+ oo.mutexConfFailMEs.RLock()
+ defer oo.mutexConfFailMEs.RUnlock()
+ for _, v := range oo.confFailMEs {
+ if v == meClassID {
+ return true
+ }
+ }
+ return false
+}
+
+func (oo *OmciCC) appendConfFailMe(meClassID me.ClassID) {
+ oo.mutexConfFailMEs.Lock()
+ defer oo.mutexConfFailMEs.Unlock()
+ oo.confFailMEs = append(oo.confFailMEs, meClassID)
+}
+
+// ResetConfFailMEs - reset list of stored config failure MEs
+func (oo *OmciCC) ResetConfFailMEs() {
+ oo.mutexConfFailMEs.Lock()
+ defer oo.mutexConfFailMEs.Unlock()
+ oo.confFailMEs = nil
+}