[VOL-3940] Using the correct transition when reactivating ONUs
Cleaning ONU state when we enter pon_disabled state
Change-Id: Ibf12a70e834934b797a0e02415564030399ab2f7
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index 5e74f46..1ee67dd 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -191,7 +191,7 @@
"enter_state": func(e *fsm.Event) {
o.logStateChange(e.Src, e.Dst)
},
- "enter_initialized": func(e *fsm.Event) {
+ fmt.Sprintf("enter_%s", OnuStateInitialized): func(e *fsm.Event) {
// create new channel for ProcessOnuMessages Go routine
o.Channel = make(chan bbsim.Message, 2048)
@@ -208,7 +208,7 @@
go o.ProcessOnuMessages(olt.enableContext, olt.OpenoltStream, nil)
}
},
- "enter_discovered": func(e *fsm.Event) {
+ fmt.Sprintf("enter_%s", OnuStateDiscovered): func(e *fsm.Event) {
msg := bbsim.Message{
Type: bbsim.OnuDiscIndication,
Data: bbsim.OnuDiscIndicationMessage{
@@ -217,14 +217,14 @@
}
o.Channel <- msg
},
- "enter_enabled": func(event *fsm.Event) {
+ fmt.Sprintf("enter_%s", OnuStateEnabled): func(event *fsm.Event) {
if used, sn := o.PonPort.isOnuIdAllocated(o.ID); used {
onuLogger.WithFields(log.Fields{
"IntfId": o.PonPortID,
"OnuId": o.ID,
"SerialNumber": o.Sn(),
- }).Errorf("received-omci-with-sn-%s", common.OnuSnToString(sn))
+ }).Errorf("onu-id-duplicated-with-%s", common.OnuSnToString(sn))
return
} else {
o.PonPort.storeOnuId(o.ID, o.SerialNumber)
@@ -245,14 +245,9 @@
s.Initialize(o.PonPort.Olt.OpenoltStream)
}
},
- "enter_disabled": func(event *fsm.Event) {
+ fmt.Sprintf("enter_%s", OnuStateDisabled): func(event *fsm.Event) {
- // clean the ONU state
- o.PortNo = 0
- o.Flows = []FlowKey{}
- o.PonPort.removeOnuId(o.ID)
- o.PonPort.removeAllocId(o.SerialNumber)
- o.PonPort.removeGemPortBySn(o.SerialNumber)
+ o.cleanupOnuState()
// set the OperState to disabled
if err := o.OperState.Event("disable"); err != nil {
@@ -282,18 +277,19 @@
for _, s := range o.Services {
s.Disable()
}
- o.onuAlarmsInfoLock.Lock()
- o.onuAlarmsInfo = make(map[omcilib.OnuAlarmInfoMapKey]omcilib.OnuAlarmInfo) //Basically reset everything on onu disable
- o.onuAlarmsInfoLock.Unlock()
+
+ },
+ fmt.Sprintf("enter_%s", OnuStatePonDisabled): func(event *fsm.Event) {
+ o.cleanupOnuState()
},
// BBR states
- "enter_eapol_flow_sent": func(e *fsm.Event) {
+ fmt.Sprintf("enter_%s", BbrOnuStateEapolFlowSent): func(e *fsm.Event) {
msg := bbsim.Message{
Type: bbsim.SendEapolFlow,
}
o.Channel <- msg
},
- "enter_dhcp_flow_sent": func(e *fsm.Event) {
+ fmt.Sprintf("enter_%s", BbrOnuStateDhcpFlowSent): func(e *fsm.Event) {
msg := bbsim.Message{
Type: bbsim.SendDhcpFlow,
}
@@ -313,6 +309,20 @@
}).Debugf("Changing ONU InternalState from %s to %s", src, dst)
}
+// cleanupOnuState this method is to clean the local state when the ONU is disabled
+func (o *Onu) cleanupOnuState() {
+ // clean the ONU state
+ o.PortNo = 0
+ o.Flows = []FlowKey{}
+ o.PonPort.removeOnuId(o.ID)
+ o.PonPort.removeAllocId(o.SerialNumber)
+ o.PonPort.removeGemPortBySn(o.SerialNumber)
+
+ o.onuAlarmsInfoLock.Lock()
+ o.onuAlarmsInfo = make(map[omcilib.OnuAlarmInfoMapKey]omcilib.OnuAlarmInfo) //Basically reset everything on onu disable
+ o.onuAlarmsInfoLock.Unlock()
+}
+
// ProcessOnuMessages starts indication channel for each ONU
func (o *Onu) ProcessOnuMessages(ctx context.Context, stream openolt.Openolt_EnableIndicationServer, client openolt.OpenoltClient) {
onuLogger.WithFields(log.Fields{