[VOL-3542] Support Examine-MDS-handling
- counterpart to verify BBSIM-feature [VOL-3744] BBSIM-ONUs should support MDS-feature according to T-REC-G.988
Change-Id: Iff0579d8b1320beeac570af7e4a84a29f70ab022
diff --git a/internal/pkg/onuadaptercore/mib_sync.go b/internal/pkg/onuadaptercore/mib_sync.go
index dd1d25b..833425c 100644
--- a/internal/pkg/onuadaptercore/mib_sync.go
+++ b/internal/pkg/onuadaptercore/mib_sync.go
@@ -222,13 +222,14 @@
}
func (oo *OnuDeviceEntry) enterInSyncState(ctx context.Context, e *fsm.Event) {
+ oo.mibLastDbSync = uint32(time.Now().Unix())
logger.Debugw(ctx, "MibSync FSM", log.Fields{"send notification to core in State": e.FSM.Current(), "device-id": oo.deviceID})
oo.transferSystemEvent(ctx, MibDatabaseSync)
}
func (oo *OnuDeviceEntry) enterExaminingMdsState(ctx context.Context, e *fsm.Event) {
logger.Debugw(ctx, "MibSync FSM", log.Fields{"Start GetMds processing in State": e.FSM.Current(), "device-id": oo.deviceID})
- logger.Debug(ctx, "function not implemented yet")
+ oo.requestMdsValue(ctx)
}
func (oo *OnuDeviceEntry) enterResynchronizingState(ctx context.Context, e *fsm.Event) {
@@ -300,6 +301,7 @@
if msgOk {
logger.Debugw(ctx, "MibResetResponse Data", log.Fields{"data-fields": msgObj})
if msgObj.Result == me.Success {
+ oo.mibDataSyncAdpt = 0
// trigger retrieval of VendorId and SerialNumber
_ = oo.pMibUploadFsm.pFsm.Event(ulEvGetVendorAndSerial)
return
@@ -455,6 +457,19 @@
// trigger retrieval of mib template
_ = oo.pMibUploadFsm.pFsm.Event(ulEvGetMibTemplate)
return nil
+ case "OnuData":
+ mibDataSyncOnu := meAttributes["MibDataSync"].(uint8)
+ logger.Debugw(ctx, "MibSync FSM - GetResponse Data for Onu-Data - MibDataSync", log.Fields{"device-id": oo.deviceID,
+ "mibDataSyncOnu": mibDataSyncOnu, "oo.mibDataSyncAdpt": oo.mibDataSyncAdpt})
+ if oo.pMibUploadFsm.pFsm.Is(ulStExaminingMds) {
+ // Examine MDS value
+ if oo.mibDataSyncAdpt == mibDataSyncOnu {
+ _ = oo.pMibUploadFsm.pFsm.Event(ulEvSuccess)
+ } else {
+ _ = oo.pMibUploadFsm.pFsm.Event(ulEvMismatch)
+ }
+ }
+ return nil
}
}
} else {
@@ -519,6 +534,10 @@
return err
}
+func (oo *OnuDeviceEntry) isNewOnu() bool {
+ return oo.mibLastDbSync == 0
+}
+
func isSupportedClassID(meClassID me.ClassID) bool {
for _, v := range supportedClassIds {
if v == meClassID {
@@ -614,6 +633,16 @@
return nil
}
+func (oo *OnuDeviceEntry) requestMdsValue(ctx context.Context) {
+ logger.Debugw(ctx, "Request MDS value", log.Fields{"device-id": oo.deviceID})
+ requestedAttributes := me.AttributeValueMap{"MibDataSync": ""}
+ meInstance := oo.PDevOmciCC.sendGetMe(log.WithSpanFromContext(context.TODO(), ctx),
+ me.OnuDataClassID, onuDataMeID, requestedAttributes, ConstDefaultOmciTimeout, true)
+ //accept also nil as (error) return value for writing to LastTx
+ // - this avoids misinterpretation of new received OMCI messages
+ oo.PDevOmciCC.pLastTxMeInstance = meInstance
+}
+
// func (onuDeviceEntry *OnuDeviceEntry) MibTemplateTask() error {
// return errors.New("not_implemented")
// }