blob: 9b453cee8b1fed1e958e2fa7c54b191b556f6cfe [file] [log] [blame]
Holger Hildebrandtfa074992020-03-27 15:42:06 +00001/*
2 * Copyright 2020-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +000017//Package adaptercoreonu provides the utility for onu devices, flows and statistics
18package adaptercoreonu
Holger Hildebrandtfa074992020-03-27 15:42:06 +000019
20import (
21 "context"
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000022 "errors"
23
Holger Hildebrandtfa074992020-03-27 15:42:06 +000024 //"sync"
25 //"time"
26
27 "github.com/looplab/fsm"
28 "github.com/opencord/voltha-lib-go/v3/pkg/adapters/adapterif"
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000029 "github.com/opencord/voltha-lib-go/v3/pkg/db"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000030
31 //"github.com/opencord/voltha-lib-go/v3/pkg/kafka"
32 "github.com/opencord/voltha-lib-go/v3/pkg/log"
33 //ic "github.com/opencord/voltha-protos/v3/go/inter_container"
34 //"github.com/opencord/voltha-protos/v3/go/openflow_13"
35 //"github.com/opencord/voltha-protos/v3/go/voltha"
36)
37
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000038const (
mpagenkoaf801632020-07-03 10:00:42 +000039 cBasePathMibTemplateKvStore = "service/voltha/omci_mibs/templates"
40 cSuffixMibTemplateKvStore = "%s/%s/%s"
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000041)
42
Holger Hildebrandtfa074992020-03-27 15:42:06 +000043type OnuDeviceEvent int
44
45const (
46 // Events of interest to Device Adapters and OpenOMCI State Machines
47 DeviceStatusInit OnuDeviceEvent = 0 // OnuDeviceEntry default start state
48 MibDatabaseSync OnuDeviceEvent = 1 // MIB database sync (upload done)
49 OmciCapabilitiesDone OnuDeviceEvent = 2 // OMCI ME and message type capabilities known
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +000050 MibDownloadDone OnuDeviceEvent = 3 // MIB database sync (upload done)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000051 UniLockStateDone OnuDeviceEvent = 4 // Uni ports admin set to lock
52 UniUnlockStateDone OnuDeviceEvent = 5 // Uni ports admin set to unlock
53 UniAdminStateDone OnuDeviceEvent = 6 // Uni ports admin set done - general
54 PortLinkUp OnuDeviceEvent = 7 // Port link state change
55 PortLinkDw OnuDeviceEvent = 8 // Port link state change
Holger Hildebrandtfa074992020-03-27 15:42:06 +000056 // Add other events here as needed (alarms separate???)
57)
58
59type activityDescr struct {
60 databaseClass func() error
61 advertiseEvents bool
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +000062 auditDelay uint16
Holger Hildebrandtfa074992020-03-27 15:42:06 +000063 //tasks map[string]func() error
64}
65type OmciDeviceFsms map[string]activityDescr
66
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +000067type AdapterFsm struct {
68 fsmName string
69 deviceID string
70 commChan chan Message
71 pFsm *fsm.FSM
72}
73
74func NewAdapterFsm(a_name string, a_deviceID string, a_commChannel chan Message) *AdapterFsm {
75 aFsm := &AdapterFsm{
76 fsmName: a_name,
77 deviceID: a_deviceID,
78 commChan: a_commChannel,
79 }
80 return aFsm
81}
82
83//Start starts (logs) the omci agent
84func (oo *AdapterFsm) logFsmStateChange(e *fsm.Event) {
85 logger.Debugw("FSM state change", log.Fields{"device-id": oo.deviceID, "FSM name": oo.fsmName,
86 "event name": string(e.Event), "src state": string(e.Src), "dst state": string(e.Dst)})
87}
88
Holger Hildebrandtfa074992020-03-27 15:42:06 +000089//OntDeviceEntry structure holds information about the attached FSM'as and their communication
Holger Hildebrandtc54939a2020-06-17 08:14:27 +000090
91const (
92 FirstSwImageMeId = 0
93 SecondSwImageMeId = 1
94)
95const OnugMeId = 0
96const Onu2gMeId = 0
97const IpHostConfigDataMeId = 1
98const OnugSerialNumberLen = 8
99const OmciMacAddressLen = 6
100
101type SwImages struct {
102 version string
103 isActive uint8
104}
105
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000106type OnuDeviceEntry struct {
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000107 deviceID string
108 baseDeviceHandler *DeviceHandler
109 coreProxy adapterif.CoreProxy
110 adapterProxy adapterif.AdapterProxy
111 started bool
112 PDevOmciCC *OmciCC
113 pOnuDB *OnuDeviceDB
114 mibTemplateKVStore *db.Backend
115 vendorID string
116 serialNumber string
117 equipmentID string
Holger Hildebrandtc54939a2020-06-17 08:14:27 +0000118 swImages [SecondSwImageMeId + 1]SwImages
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000119 activeSwVersion string
120 macAddress string
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000121 //lockDeviceEntries sync.RWMutex
122 mibDbClass func() error
123 supportedFsms OmciDeviceFsms
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000124 devState OnuDeviceEvent
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +0000125 // for mibUpload
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000126 mibAuditDelay uint16
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000127
128 // for mibUpload
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +0000129 pMibUploadFsm *AdapterFsm //could be handled dynamically and more general as pAdapterFsm - perhaps later
130 // for mibDownload
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +0000131 pMibDownloadFsm *AdapterFsm //could be handled dynamically and more general as pAdapterFsm - perhaps later
132 //remark: general usage of pAdapterFsm would require generalization of commChan usage and internal event setting
133 // within the FSM event procedures
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000134 omciMessageReceived chan bool //seperate channel needed by DownloadFsm
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000135}
136
137//OnuDeviceEntry returns a new instance of a OnuDeviceEntry
138//mib_db (as well as not inluded alarm_db not really used in this code? VERIFY!!)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000139func NewOnuDeviceEntry(ctx context.Context, device_id string, kVStoreHost string, kVStorePort int, kvStoreType string, device_Handler *DeviceHandler,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000140 core_proxy adapterif.CoreProxy, adapter_proxy adapterif.AdapterProxy,
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000141 supported_Fsms_Ptr *OmciDeviceFsms) *OnuDeviceEntry {
142 logger.Infow("init-onuDeviceEntry", log.Fields{"deviceId": device_id})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000143 var onuDeviceEntry OnuDeviceEntry
144 onuDeviceEntry.started = false
145 onuDeviceEntry.deviceID = device_id
146 onuDeviceEntry.baseDeviceHandler = device_Handler
147 onuDeviceEntry.coreProxy = core_proxy
148 onuDeviceEntry.adapterProxy = adapter_proxy
149 onuDeviceEntry.devState = DeviceStatusInit
150 //openomciagent.lockDeviceHandlersMap = sync.RWMutex{}
151 //OMCI related databases are on a per-agent basis. State machines and tasks
152 //are per ONU Vendor
153 //
154 // MIB Synchronization Database - possible overloading from arguments
155 if supported_Fsms_Ptr != nil {
156 onuDeviceEntry.supportedFsms = *supported_Fsms_Ptr
157 } else {
158 //var mibSyncFsm = NewMibSynchronizer()
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000159 // use some internaö defaults, if not defined from outside
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000160 onuDeviceEntry.supportedFsms = OmciDeviceFsms{
161 "mib-synchronizer": {
162 //mibSyncFsm, // Implements the MIB synchronization state machine
163 onuDeviceEntry.MibDbVolatileDict, // Implements volatile ME MIB database
164 true, // Advertise events on OpenOMCI event bus
165 60, // Time to wait between MIB audits. 0 to disable audits.
166 // map[string]func() error{
167 // "mib-upload": onuDeviceEntry.MibUploadTask,
168 // "mib-template": onuDeviceEntry.MibTemplateTask,
169 // "get-mds": onuDeviceEntry.GetMdsTask,
170 // "mib-audit": onuDeviceEntry.GetMdsTask,
171 // "mib-resync": onuDeviceEntry.MibResyncTask,
172 // "mib-reconcile": onuDeviceEntry.MibReconcileTask,
173 // },
174 },
175 }
176 }
177 onuDeviceEntry.mibDbClass = onuDeviceEntry.supportedFsms["mib-synchronizer"].databaseClass
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000178 logger.Debug("access2mibDbClass")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000179 go onuDeviceEntry.mibDbClass()
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000180 onuDeviceEntry.mibAuditDelay = onuDeviceEntry.supportedFsms["mib-synchronizer"].auditDelay
181 logger.Debugw("MibAudit is set to", log.Fields{"Delay": onuDeviceEntry.mibAuditDelay})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000182
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +0000183 // Omci related Mib upload sync state machine
184 mibUploadChan := make(chan Message, 2048)
185 onuDeviceEntry.pMibUploadFsm = NewAdapterFsm("MibUpload", device_id, mibUploadChan)
186 onuDeviceEntry.pMibUploadFsm.pFsm = fsm.NewFSM(
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000187 "disabled",
188 fsm.Events{
189
190 {Name: "start", Src: []string{"disabled"}, Dst: "starting"},
191
Holger Hildebrandtc54939a2020-06-17 08:14:27 +0000192 {Name: "reset_mib", Src: []string{"starting"}, Dst: "resetting_mib"},
193 {Name: "get_vendor_and_serial", Src: []string{"resetting_mib"}, Dst: "getting_vendor_and_serial"},
194 {Name: "get_equipment_id", Src: []string{"getting_vendor_and_serial"}, Dst: "getting_equipment_id"},
195 {Name: "get_first_sw_version", Src: []string{"getting_equipment_id"}, Dst: "getting_first_sw_version"},
196 {Name: "get_second_sw_version", Src: []string{"getting_first_sw_version"}, Dst: "getting_second_sw_version"},
197 {Name: "get_mac_address", Src: []string{"getting_second_sw_version"}, Dst: "getting_mac_address"},
198 {Name: "get_mib_template", Src: []string{"getting_mac_address"}, Dst: "getting_mib_template"},
199
200 {Name: "upload_mib", Src: []string{"getting_mib_template"}, Dst: "uploading"},
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000201 {Name: "examine_mds", Src: []string{"starting"}, Dst: "examining_mds"},
202
Holger Hildebrandtc54939a2020-06-17 08:14:27 +0000203 {Name: "success", Src: []string{"getting_mib_template"}, Dst: "in_sync"},
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000204 {Name: "success", Src: []string{"uploading"}, Dst: "in_sync"},
205
206 {Name: "success", Src: []string{"examining_mds"}, Dst: "in_sync"},
207 {Name: "mismatch", Src: []string{"examining_mds"}, Dst: "resynchronizing"},
208
209 {Name: "audit_mib", Src: []string{"in_sync"}, Dst: "auditing"},
210
211 {Name: "success", Src: []string{"out_of_sync"}, Dst: "in_sync"},
212 {Name: "audit_mib", Src: []string{"out_of_sync"}, Dst: "auditing"},
213
214 {Name: "success", Src: []string{"auditing"}, Dst: "in_sync"},
215 {Name: "mismatch", Src: []string{"auditing"}, Dst: "resynchronizing"},
216 {Name: "force_resync", Src: []string{"auditing"}, Dst: "resynchronizing"},
217
218 {Name: "success", Src: []string{"resynchronizing"}, Dst: "in_sync"},
219 {Name: "diffs_found", Src: []string{"resynchronizing"}, Dst: "out_of_sync"},
220
Holger Hildebrandtc54939a2020-06-17 08:14:27 +0000221 {Name: "timeout", Src: []string{"reset_mib", "get_vendor_and_serial", "get_equipment_id", "get_first_sw_version", "get_mac_address",
222 "get_mib_template", "uploading", "resynchronizing", "examining_mds", "in_sync", "out_of_sync", "auditing"}, Dst: "starting"},
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000223
Holger Hildebrandtc54939a2020-06-17 08:14:27 +0000224 {Name: "stop", Src: []string{"starting", "reset_mib", "get_vendor_and_serial", "get_equipment_id", "get_first_sw_version", "get_mac_address",
225 "get_mib_template", "uploading", "resynchronizing", "examining_mds", "in_sync", "out_of_sync", "auditing"}, Dst: "disabled"},
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000226 },
227
228 fsm.Callbacks{
Holger Hildebrandtc54939a2020-06-17 08:14:27 +0000229 "enter_state": func(e *fsm.Event) { onuDeviceEntry.pMibUploadFsm.logFsmStateChange(e) },
230 "enter_starting": func(e *fsm.Event) { onuDeviceEntry.enterStartingState(e) },
231 "enter_resetting_mib": func(e *fsm.Event) { onuDeviceEntry.enterResettingMibState(e) },
232 "enter_getting_vendor_and_serial": func(e *fsm.Event) { onuDeviceEntry.enterGettingVendorAndSerialState(e) },
233 "enter_getting_equipment_id": func(e *fsm.Event) { onuDeviceEntry.enterGettingEquipmentIdState(e) },
234 "enter_getting_first_sw_version": func(e *fsm.Event) { onuDeviceEntry.enterGettingFirstSwVersionState(e) },
235 "enter_getting_second_sw_version": func(e *fsm.Event) { onuDeviceEntry.enterGettingSecondSwVersionState(e) },
236 "enter_getting_mac_address": func(e *fsm.Event) { onuDeviceEntry.enterGettingMacAddressState(e) },
237 "enter_getting_mib_template": func(e *fsm.Event) { onuDeviceEntry.enterGettingMibTemplate(e) },
238 "enter_uploading": func(e *fsm.Event) { onuDeviceEntry.enterUploadingState(e) },
239 "enter_examining_mds": func(e *fsm.Event) { onuDeviceEntry.enterExaminingMdsState(e) },
240 "enter_resynchronizing": func(e *fsm.Event) { onuDeviceEntry.enterResynchronizingState(e) },
241 "enter_auditing": func(e *fsm.Event) { onuDeviceEntry.enterAuditingState(e) },
242 "enter_out_of_sync": func(e *fsm.Event) { onuDeviceEntry.enterOutOfSyncState(e) },
243 "enter_in_sync": func(e *fsm.Event) { onuDeviceEntry.enterInSyncState(e) },
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000244 },
245 )
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +0000246 // Omci related Mib download state machine
247 mibDownloadChan := make(chan Message, 2048)
248 onuDeviceEntry.pMibDownloadFsm = NewAdapterFsm("MibDownload", device_id, mibDownloadChan)
249 onuDeviceEntry.pMibDownloadFsm.pFsm = fsm.NewFSM(
250 "disabled",
251 fsm.Events{
252
253 {Name: "start", Src: []string{"disabled"}, Dst: "starting"},
254
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000255 {Name: "create_gal", Src: []string{"starting"}, Dst: "creatingGal"},
256 {Name: "rx_gal_resp", Src: []string{"creatingGal"}, Dst: "settingOnu2g"},
257 {Name: "rx_onu2g_resp", Src: []string{"settingOnu2g"}, Dst: "bridgeInit"},
258 // the bridge state is used for multi ME config for alle UNI related ports
259 // maybe such could be reflected in the state machine as well (port number parametrized)
260 // but that looks not straightforward here - so we keep it simple here for the beginning(?)
261 {Name: "rx_bridge_resp", Src: []string{"bridgeInit"}, Dst: "downloaded"},
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +0000262
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000263 {Name: "timeout_simple", Src: []string{"creatingGal", "settingOnu2g"}, Dst: "starting"},
264 {Name: "timeout_bridge", Src: []string{"bridgeInit"}, Dst: "starting"},
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +0000265
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000266 {Name: "reset", Src: []string{"starting", "creatingGal", "settingOnu2g",
267 "bridgeInit", "downloaded"}, Dst: "resetting"},
268 // exceptional treatment for all states except "resetting"
269 {Name: "restart", Src: []string{"starting", "creatingGal", "settingOnu2g",
270 "bridgeInit", "downloaded", "resetting"}, Dst: "disabled"},
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +0000271 },
272
273 fsm.Callbacks{
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000274 "enter_state": func(e *fsm.Event) { onuDeviceEntry.pMibDownloadFsm.logFsmStateChange(e) },
275 "enter_starting": func(e *fsm.Event) { onuDeviceEntry.enterDLStartingState(e) },
276 "enter_creatingGal": func(e *fsm.Event) { onuDeviceEntry.enterCreatingGalState(e) },
277 "enter_settingOnu2g": func(e *fsm.Event) { onuDeviceEntry.enterSettingOnu2gState(e) },
278 "enter_bridgeInit": func(e *fsm.Event) { onuDeviceEntry.enterBridgeInitState(e) },
279 "enter_downloaded": func(e *fsm.Event) { onuDeviceEntry.enterDownloadedState(e) },
280 "enter_resetting": func(e *fsm.Event) { onuDeviceEntry.enterResettingState(e) },
Holger Hildebrandt9ac0d0f2020-05-13 11:22:02 +0000281 },
282 )
283 if onuDeviceEntry.pMibDownloadFsm == nil || onuDeviceEntry.pMibDownloadFsm.pFsm == nil {
284 logger.Error("MibDownloadFsm could not be instantiated!!")
285 // some specifc error treatment - or waiting for crash ???
286 }
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000287
mpagenkoaf801632020-07-03 10:00:42 +0000288 onuDeviceEntry.mibTemplateKVStore = onuDeviceEntry.baseDeviceHandler.SetBackend(cBasePathMibTemplateKvStore)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000289 if onuDeviceEntry.mibTemplateKVStore == nil {
mpagenkoaf801632020-07-03 10:00:42 +0000290 logger.Errorw("Failed to setup mibTemplateKVStore", log.Fields{"deviceID": device_id})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000291 }
292
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000293 // Alarm Synchronization Database
294 //self._alarm_db = None
295 //self._alarm_database_cls = support_classes['alarm-synchronizer']['database']
296 return &onuDeviceEntry
297}
298
299//Start starts (logs) the omci agent
300func (oo *OnuDeviceEntry) Start(ctx context.Context) error {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000301 logger.Info("starting-OnuDeviceEntry")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000302
303 oo.PDevOmciCC = NewOmciCC(ctx, oo, oo.deviceID, oo.baseDeviceHandler,
304 oo.coreProxy, oo.adapterProxy)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000305 if oo.PDevOmciCC == nil {
306 logger.Errorw("Could not create devOmciCc - abort", log.Fields{"for device": oo.deviceID})
307 return errors.New("Could not create devOmciCc")
308 }
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000309
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000310 oo.started = true
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000311 logger.Info("OnuDeviceEntry-started")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000312 return nil
313}
314
315//Stop terminates the session
316func (oo *OnuDeviceEntry) Stop(ctx context.Context) error {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000317 logger.Info("stopping-OnuDeviceEntry")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000318 oo.started = false
319 //oo.exitChannel <- 1
mpagenko3af1f032020-06-10 08:53:41 +0000320 // maybe also the omciCC should be stopped here - for now not as no real processing is expected here - maybe needs consolidation
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000321 logger.Info("OnuDeviceEntry-stopped")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000322 return nil
323}
324
325//Relay the InSync message via Handler to Rw core - Status update
326func (oo *OnuDeviceEntry) transferSystemEvent(dev_Event OnuDeviceEvent) error {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000327 logger.Debugw("relaying system-event", log.Fields{"Event": dev_Event})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000328 // decouple the handler transfer from further processing here
329 // TODO!!! check if really no synch is required within the system e.g. to ensure following steps ..
330 if dev_Event == MibDatabaseSync {
331 if oo.devState < MibDatabaseSync { //devState has not been synced yet
332 oo.devState = MibDatabaseSync
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000333 go oo.baseDeviceHandler.DeviceProcStatusUpdate(dev_Event)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000334 //TODO!!! device control: next step: start MIB capability verification from here ?!!!
335 } else {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000336 logger.Debugw("mibinsync-event in some already synced state - ignored", log.Fields{"state": oo.devState})
337 }
338 } else if dev_Event == MibDownloadDone {
339 if oo.devState < MibDownloadDone { //devState has not been synced yet
340 oo.devState = MibDownloadDone
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000341 go oo.baseDeviceHandler.DeviceProcStatusUpdate(dev_Event)
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000342 } else {
343 logger.Debugw("mibdownloaddone-event was already seen - ignored", log.Fields{"state": oo.devState})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000344 }
345 } else {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000346 logger.Warnw("device-event not yet handled", log.Fields{"state": dev_Event})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000347 }
348 return nil
349}