blob: 450547446d34d3c0fb54dbf10541243d252cdddb [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 Hildebrandt4b5e73f2021-08-19 06:51:21 +000017//Package common provides global definitions
18package common
Holger Hildebrandtfa074992020-03-27 15:42:06 +000019
20import (
21 "container/list"
22 "context"
23 "encoding/binary"
24 "encoding/hex"
Andrea Campanella6515c582020-10-05 11:25:00 +020025 "fmt"
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000026 "strconv"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000027 "sync"
mpagenko80622a52021-02-09 16:53:23 +000028 "time" //by now for testing
Holger Hildebrandtfa074992020-03-27 15:42:06 +000029
30 "github.com/google/gopacket"
31 // TODO!!! Some references could be resolved auto, but some need specific context ....
32 gp "github.com/google/gopacket"
33
mpagenko836a1fd2021-11-01 16:12:42 +000034 "github.com/opencord/omci-lib-go/v2"
35 me "github.com/opencord/omci-lib-go/v2/generated"
36 oframe "github.com/opencord/omci-lib-go/v2/meframe"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000037
khenaidoo7d3c5582021-08-11 18:09:44 -040038 vgrpc "github.com/opencord/voltha-lib-go/v7/pkg/grpc"
39
khenaidoo7d3c5582021-08-11 18:09:44 -040040 "github.com/opencord/voltha-lib-go/v7/pkg/log"
khenaidoo42dcdfd2021-10-19 17:34:12 -040041 "github.com/opencord/voltha-protos/v5/go/common"
42 ia "github.com/opencord/voltha-protos/v5/go/inter_adapter"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000043)
44
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000045// ### OMCI related definitions - retrieved from Python adapter code/trace ####
Himani Chawla6d2ae152020-09-02 13:11:20 +053046
Holger Hildebrandt9b64e0b2022-04-21 08:02:00 +000047const maxGemPayloadSize = uint16(2048)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000048const connectivityModeValue = uint8(5)
Himani Chawla4d908332020-08-31 12:30:20 +053049
50//const defaultTPID = uint16(0x8100)
51//const broadComDefaultVID = uint16(4091)
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000052
53// UnusedTcontAllocID - TODO: add comment
54const UnusedTcontAllocID = uint16(0xFFFF) //common unused AllocId for G.984 and G.987 systems
mpagenko8b07c1b2020-11-26 10:36:31 +000055
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +000056const cOmciDeviceIdentifierPos = 3
mpagenkoc8bba412021-01-15 15:38:44 +000057const cOmciBaseMessageTrailerLen = 40
58
59// tOmciReceiveError - enum type for detected problems/errors in the received OMCI message (format)
60type tOmciReceiveError uint8
61
62const (
63 // cOmciMessageReceiveNoError - default start state
64 cOmciMessageReceiveNoError tOmciReceiveError = iota
65 // Error indication wrong trailer length within the message
66 cOmciMessageReceiveErrorTrailerLen
67 // Error indication missing trailer within the message
68 cOmciMessageReceiveErrorMissTrailer
69)
70
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000071// CDefaultRetries - TODO: add comment
72const CDefaultRetries = 2
Holger Hildebrandt366ef192021-05-05 11:07:44 +000073
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000074// ### OMCI related definitions - end
75
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000076//CallbackPairEntry to be used for OMCI send/receive correlation
77type CallbackPairEntry struct {
78 CbRespChannel chan Message
79 CbFunction func(context.Context, *omci.OMCI, *gp.Packet, chan Message) error
80 FramePrint bool //true for printing
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000081}
82
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000083//CallbackPair to be used for ReceiveCallback init
84type CallbackPair struct {
85 CbKey uint16
86 CbEntry CallbackPairEntry
Holger Hildebrandtfa074992020-03-27 15:42:06 +000087}
88
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000089// OmciTransferStructure - TODO: add comment
90type OmciTransferStructure struct {
mpagenko80622a52021-02-09 16:53:23 +000091 txFrame []byte
92 timeout int
Holger Hildebrandt366ef192021-05-05 11:07:44 +000093 retries int
mpagenko80622a52021-02-09 16:53:23 +000094 highPrio bool
95 withFramePrint bool
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000096 cbPair CallbackPair
Holger Hildebrandt366ef192021-05-05 11:07:44 +000097 chSuccess chan bool
kesavand011d5162021-11-25 19:21:06 +053098 OnuSwWindow *ia.OmciMessages
Holger Hildebrandtfa074992020-03-27 15:42:06 +000099}
100
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000101//OmciCC structure holds information needed for OMCI communication (to/from OLT Adapter)
102type OmciCC struct {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000103 enabled bool
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000104 pBaseDeviceHandler IdeviceHandler
105 pOnuDeviceEntry IonuDeviceEntry
106 pOnuAlarmManager IonuAlarmManager
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000107 deviceID string
khenaidoo7d3c5582021-08-11 18:09:44 -0400108 coreClient *vgrpc.Client
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000109 supportExtMsg bool
mpagenkoc8bba412021-01-15 15:38:44 +0000110 rxOmciFrameError tOmciReceiveError
111
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000112 txFrames, txOnuFrames uint32
113 rxFrames, rxOnuFrames, rxOnuDiscards uint32
114
115 // OMCI params
116 mutexTid sync.Mutex
117 tid uint16
118 mutexHpTid sync.Mutex
119 hpTid uint16
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000120 UploadSequNo uint16
121 UploadNoOfCmds uint16
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000122
Holger Hildebrandt34555512021-10-01 16:26:59 +0000123 mutexSendQueuedRequests sync.Mutex
124 mutexLowPrioTxQueue sync.Mutex
125 lowPrioTxQueue *list.List
126 mutexHighPrioTxQueue sync.Mutex
127 highPrioTxQueue *list.List
128 mutexRxSchedMap sync.Mutex
129 rxSchedulerMap map[uint16]CallbackPairEntry
130 mutexMonReq sync.RWMutex
131 monitoredRequests map[uint16]OmciTransferStructure
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000132}
133
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +0000134var responsesWithMibDataSync = []omci.MessageType{
135 omci.CreateResponseType,
136 omci.DeleteResponseType,
137 omci.SetResponseType,
138 omci.StartSoftwareDownloadResponseType,
139 omci.EndSoftwareDownloadResponseType,
140 omci.ActivateSoftwareResponseType,
141 omci.CommitSoftwareResponseType,
142}
143
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000144//NewOmciCC constructor returns a new instance of a OmciCC
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000145//mib_db (as well as not inluded alarm_db not really used in this code? VERIFY!!)
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000146func NewOmciCC(ctx context.Context, deviceID string, deviceHandler IdeviceHandler,
147 onuDeviceEntry IonuDeviceEntry, onuAlarmManager IonuAlarmManager,
148 coreClient *vgrpc.Client) *OmciCC {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000149 logger.Debugw(ctx, "init-omciCC", log.Fields{"device-id": deviceID})
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000150 var omciCC OmciCC
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000151 omciCC.enabled = false
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000152 omciCC.pBaseDeviceHandler = deviceHandler
153 omciCC.pOnuAlarmManager = onuAlarmManager
Himani Chawla4d908332020-08-31 12:30:20 +0530154 omciCC.pOnuDeviceEntry = onuDeviceEntry
155 omciCC.deviceID = deviceID
khenaidoo7d3c5582021-08-11 18:09:44 -0400156 omciCC.coreClient = coreClient
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000157 omciCC.supportExtMsg = false
mpagenkoc8bba412021-01-15 15:38:44 +0000158 omciCC.rxOmciFrameError = cOmciMessageReceiveNoError
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000159 omciCC.txFrames = 0
160 omciCC.txOnuFrames = 0
161 omciCC.rxFrames = 0
162 omciCC.rxOnuFrames = 0
163 omciCC.rxOnuDiscards = 0
164 omciCC.tid = 0x1
165 omciCC.hpTid = 0x8000
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000166 omciCC.UploadSequNo = 0
167 omciCC.UploadNoOfCmds = 0
Holger Hildebrandt34555512021-10-01 16:26:59 +0000168 omciCC.lowPrioTxQueue = list.New()
169 omciCC.highPrioTxQueue = list.New()
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000170 omciCC.rxSchedulerMap = make(map[uint16]CallbackPairEntry)
171 omciCC.monitoredRequests = make(map[uint16]OmciTransferStructure)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000172
173 return &omciCC
174}
175
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000176//Stop stops/resets the omciCC
177func (oo *OmciCC) Stop(ctx context.Context) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000178 logger.Debugw(ctx, "omciCC-stopping", log.Fields{"device-id": oo.deviceID})
mpagenko900ee4b2020-10-12 11:56:34 +0000179 //reseting all internal data, which might also be helpful for discarding any lingering tx/rx requests
mpagenko8cd1bf72021-06-22 10:11:19 +0000180 oo.CancelRequestMonitoring(ctx)
Holger Hildebrandt34555512021-10-01 16:26:59 +0000181 // clear the tx queues
182 oo.mutexHighPrioTxQueue.Lock()
183 oo.highPrioTxQueue.Init()
184 oo.mutexHighPrioTxQueue.Unlock()
185 oo.mutexLowPrioTxQueue.Lock()
186 oo.lowPrioTxQueue.Init()
187 oo.mutexLowPrioTxQueue.Unlock()
188 //clear the scheduler map
mpagenko900ee4b2020-10-12 11:56:34 +0000189 oo.mutexRxSchedMap.Lock()
190 for k := range oo.rxSchedulerMap {
Holger Hildebrandt34555512021-10-01 16:26:59 +0000191 delete(oo.rxSchedulerMap, k)
mpagenko900ee4b2020-10-12 11:56:34 +0000192 }
193 oo.mutexRxSchedMap.Unlock()
Holger Hildebrandt34555512021-10-01 16:26:59 +0000194 //reset the high prio transactionId
mpagenko900ee4b2020-10-12 11:56:34 +0000195 oo.mutexHpTid.Lock()
Holger Hildebrandt34555512021-10-01 16:26:59 +0000196 oo.hpTid = 0x8000
mpagenko900ee4b2020-10-12 11:56:34 +0000197 oo.mutexHpTid.Unlock()
Holger Hildebrandt34555512021-10-01 16:26:59 +0000198 //reset the low prio transactionId
mpagenko900ee4b2020-10-12 11:56:34 +0000199 oo.mutexTid.Lock()
Holger Hildebrandt34555512021-10-01 16:26:59 +0000200 oo.tid = 1
mpagenko900ee4b2020-10-12 11:56:34 +0000201 oo.mutexTid.Unlock()
202 //reset control values
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000203 oo.UploadSequNo = 0
204 oo.UploadNoOfCmds = 0
mpagenkoc8bba412021-01-15 15:38:44 +0000205 oo.rxOmciFrameError = cOmciMessageReceiveNoError
mpagenko900ee4b2020-10-12 11:56:34 +0000206 //reset the stats counter - which might be topic of discussion ...
207 oo.txFrames = 0
208 oo.txOnuFrames = 0
209 oo.rxFrames = 0
210 oo.rxOnuFrames = 0
211 oo.rxOnuDiscards = 0
212
213 return nil
214}
215
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000216// Rx handler for omci messages
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000217func (oo *OmciCC) receiveOnuMessage(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000218 logger.Debugw(ctx, "rx-onu-autonomous-message", log.Fields{"omciMsgType": omciMsg.MessageType,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000219 "payload": hex.EncodeToString(omciMsg.Payload)})
Himani Chawlaac1f5ad2021-02-04 21:21:54 +0530220 switch omciMsg.MessageType {
221 case omci.AlarmNotificationType:
222 data := OmciMessage{
223 OmciMsg: omciMsg,
224 OmciPacket: packet,
225 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000226 go oo.pOnuAlarmManager.HandleOmciAlarmNotificationMessage(ctx, data)
Himani Chawlaac1f5ad2021-02-04 21:21:54 +0530227 return nil
228 default:
229 return fmt.Errorf("receiveOnuMessageType %s unimplemented", omciMsg.MessageType.String())
230 }
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000231 /*
232 msgType = rxFrame.fields["message_type"] //assumed OmciOperationsValue
233 rxOnuFrames++
234
235 switch msgType {
236 case AlarmNotification:
237 {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000238 logger.Info("Unhandled: received-onu-alarm-message")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000239 // python code was:
240 //if msg_type == EntityOperations.AlarmNotification.value:
241 // topic = OMCI_CC.event_bus_topic(self._device_id, RxEvent.Alarm_Notification)
242 // self.reactor.callLater(0, self.event_bus.publish, topic, msg)
243 //
244 return errors.New("RxAlarmNotification unimplemented")
245 }
246 case AttributeValueChange:
247 {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000248 logger.Info("Unhandled: received-attribute-value-change")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000249 // python code was:
250 //elif msg_type == EntityOperations.AttributeValueChange.value:
251 // topic = OMCI_CC.event_bus_topic(self._device_id, RxEvent.AVC_Notification)
252 // self.reactor.callLater(0, self.event_bus.publish, topic, msg)
253 //
254 return errors.New("RxAttributeValueChange unimplemented")
255 }
256 case TestResult:
257 {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000258 logger.Info("Unhandled: received-test-result")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000259 // python code was:
260 //elif msg_type == EntityOperations.TestResult.value:
261 // topic = OMCI_CC.event_bus_topic(self._device_id, RxEvent.Test_Result)
262 // self.reactor.callLater(0, self.event_bus.publish, topic, msg)
263 //
264 return errors.New("RxTestResult unimplemented")
265 }
266 default:
267 {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000268 logger.Errorw(ctx,"rx-onu-unsupported-autonomous-message", log.Fields{"msgType": msgType})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000269 rxOnuDiscards++
270 return errors.New("RxOnuMsgType unimplemented")
271 }
272 }
273 */
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000274}
275
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000276func (oo *OmciCC) printRxMessage(ctx context.Context, rxMsg []byte) {
mpagenko80622a52021-02-09 16:53:23 +0000277 //assuming omci message content is hex coded!
278 // with restricted output of 16bytes would be ...rxMsg[:16]
279 logger.Debugw(ctx, "omci-message-received:", log.Fields{
280 "RxOmciMessage": hex.EncodeToString(rxMsg),
281 "device-id": oo.deviceID})
282}
283
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000284// ReceiveMessage - Rx handler for onu messages
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000285// e.g. would call ReceiveOnuMessage() in case of TID=0 or Action=test ...
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000286// nolint: gocyclo
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000287func (oo *OmciCC) ReceiveMessage(ctx context.Context, rxMsg []byte) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000288 //logger.Debugw(ctx,"cc-receive-omci-message", log.Fields{"RxOmciMessage-x2s": hex.EncodeToString(rxMsg)})
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000289
290 if len(rxMsg) < 10 {
291 logger.Errorw(ctx, "rxOmciMessage has wrong length in general - abort",
292 log.Fields{"Length": len(rxMsg), "device-id": oo.deviceID})
293 if len(rxMsg) > 0 {
294 oo.printRxMessage(ctx, rxMsg)
mpagenkoc8bba412021-01-15 15:38:44 +0000295 }
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000296 return fmt.Errorf("rxOmciMessage has wrong length in general - abort %s", oo.deviceID)
297 }
298 if rxMsg[cOmciDeviceIdentifierPos] == byte(omci.BaselineIdent) {
299 if len(rxMsg) >= 44 { // then it should normally include the BaseFormat trailer Len
300 // NOTE: autocorrection only valid for OmciBaseFormat, which is not specifically verified here!!!
301 // (an extendedFormat message could be destroyed this way!)
302 trailerLenData := rxMsg[42:44]
303 trailerLen := binary.BigEndian.Uint16(trailerLenData)
304 //logger.Debugw(ctx,"omci-received-trailer-len", log.Fields{"Length": trailerLen})
305 if trailerLen != cOmciBaseMessageTrailerLen { // invalid base Format entry -> autocorrect
306 binary.BigEndian.PutUint16(rxMsg[42:44], cOmciBaseMessageTrailerLen)
307 if oo.rxOmciFrameError != cOmciMessageReceiveErrorTrailerLen {
308 //do just one error log, expectation is: if seen once it should appear regularly - avoid to many log entries
309 logger.Errorw(ctx, "wrong omci-message trailer length: trailer len auto-corrected",
310 log.Fields{"trailer-length": trailerLen, "device-id": oo.deviceID})
311 oo.rxOmciFrameError = cOmciMessageReceiveErrorTrailerLen
312 }
313 }
314 } else if len(rxMsg) >= cOmciBaseMessageTrailerLen { // workaround for Adtran OLT Sim, which currently does not send trailer bytes at all!
315 // NOTE: autocorrection only valid for OmciBaseFormat, which is not specifically verified here!!!
316 // (an extendedFormat message could be destroyed this way!)
317 // extend/overwrite with trailer
318 trailer := make([]byte, 8)
319 binary.BigEndian.PutUint16(trailer[2:], cOmciBaseMessageTrailerLen) //set the defined baseline length
320 rxMsg = append(rxMsg[:cOmciBaseMessageTrailerLen], trailer...)
321 if oo.rxOmciFrameError != cOmciMessageReceiveErrorMissTrailer {
322 //do just one error log, expectation is: if seen once it should appear regularly - avoid to many log entries
323 logger.Errorw(ctx, "omci-message to short to include trailer len: trailer auto-corrected (added)",
324 log.Fields{"message-length": len(rxMsg), "device-id": oo.deviceID})
325 oo.rxOmciFrameError = cOmciMessageReceiveErrorMissTrailer
326 }
327 } else {
328 logger.Errorw(ctx, "received omci-message too small for OmciBaseFormat - abort",
329 log.Fields{"Length": len(rxMsg), "device-id": oo.deviceID})
330 oo.printRxMessage(ctx, rxMsg)
331 return fmt.Errorf("rxOmciMessage too small for BaseFormat %s", oo.deviceID)
332 }
333 } else if rxMsg[cOmciDeviceIdentifierPos] == byte(omci.ExtendedIdent) {
334 if len(rxMsg) > 1980 {
335 logger.Errorw(ctx, "rxOmciMessage has wrong length for OmciExtendedFormat - abort",
336 log.Fields{"Length": len(rxMsg), "device-id": oo.deviceID})
337 oo.printRxMessage(ctx, rxMsg)
338 return fmt.Errorf("rxOmciMessage has wrong length for OmciExtendedFormat %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000339 }
340 } else {
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000341 logger.Errorw(ctx, "rxOmciMessage has wrong Device Identifier - abort",
mpagenkoc8bba412021-01-15 15:38:44 +0000342 log.Fields{"Length": len(rxMsg), "device-id": oo.deviceID})
mpagenko80622a52021-02-09 16:53:23 +0000343 oo.printRxMessage(ctx, rxMsg)
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000344 return fmt.Errorf("rxOmciMessage has wrong Device Identifier %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000345 }
Holger Hildebrandt36747fd2022-03-14 09:47:17 +0000346 decodeOptions := gopacket.DecodeOptions{
347 Lazy: true,
348 NoCopy: true,
349 }
350 packet := gopacket.NewPacket(rxMsg, omci.LayerTypeOMCI, decodeOptions)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000351 if packet == nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000352 logger.Errorw(ctx, "omci-message could not be decoded", log.Fields{"device-id": oo.deviceID})
mpagenko80622a52021-02-09 16:53:23 +0000353 oo.printRxMessage(ctx, rxMsg)
Andrea Campanella6515c582020-10-05 11:25:00 +0200354 return fmt.Errorf("could not decode rxMsg as OMCI %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000355 }
356 omciLayer := packet.Layer(omci.LayerTypeOMCI)
357 if omciLayer == nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000358 logger.Errorw(ctx, "omci-message could not decode omci layer", log.Fields{"device-id": oo.deviceID})
mpagenko80622a52021-02-09 16:53:23 +0000359 oo.printRxMessage(ctx, rxMsg)
Andrea Campanella6515c582020-10-05 11:25:00 +0200360 return fmt.Errorf("could not decode omci layer %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000361 }
mpagenko836a1fd2021-11-01 16:12:42 +0000362 // insert some check on detected OMCI decoding issues and log them
363 // e.g. should indicate problems when detecting some unknown attribute mask content (independent from message type)
364 // even though allowed from omci-lib due to set relaxed decoding
365 // application may dig into further details if wanted/needed on their own [but info is not transferred from here so far]
366 // (compare mib_sync.go unknownAttrLayer)
367 errLayer := packet.Layer(gopacket.LayerTypeDecodeFailure)
368 if failure, decodeOk := errLayer.(*gopacket.DecodeFailure); decodeOk {
369 errMsg := failure.Error()
370 logger.Warnw(ctx, "Detected decode issue on received OMCI frame", log.Fields{
371 "device-id": oo.deviceID, "issue": errMsg})
372 }
373 //anyway try continue OMCI decoding further on message type layer
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000374 omciMsg, ok := omciLayer.(*omci.OMCI)
375 if !ok {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000376 logger.Errorw(ctx, "omci-message could not assign omci layer", log.Fields{"device-id": oo.deviceID})
mpagenko80622a52021-02-09 16:53:23 +0000377 oo.printRxMessage(ctx, rxMsg)
Andrea Campanella6515c582020-10-05 11:25:00 +0200378 return fmt.Errorf("could not assign omci layer %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000379 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000380 logger.Debugw(ctx, "omci-message-decoded:", log.Fields{"omciMsgType": omciMsg.MessageType,
Holger Hildebrandt36747fd2022-03-14 09:47:17 +0000381 "transCorrId": strconv.FormatInt(int64(omciMsg.TransactionID), 16),
382 "DeviceIdent": omciMsg.DeviceIdentifier, "device-id": oo.deviceID})
mpagenko836a1fd2021-11-01 16:12:42 +0000383
Girish Gowdra6afb56a2021-04-27 17:47:57 -0700384 // TestResult is asynchronous indication that carries the same TID as the TestResponse.
385 // We expect to find the TID in the oo.rxSchedulerMap
386 if byte(omciMsg.MessageType)&me.AK == 0 && omciMsg.MessageType != omci.TestResultType {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000387 // Not a response
mpagenko80622a52021-02-09 16:53:23 +0000388 oo.printRxMessage(ctx, rxMsg)
Holger Hildebrandt36747fd2022-03-14 09:47:17 +0000389 logger.Debugw(ctx, "RxMsg is no Omci Response Message", log.Fields{"device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000390 if omciMsg.TransactionID == 0 {
Himani Chawlaac1f5ad2021-02-04 21:21:54 +0530391 return oo.receiveOnuMessage(ctx, omciMsg, &packet)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000392 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000393 logger.Errorw(ctx, "Unexpected TransCorrId != 0 not accepted for autonomous messages",
Andrea Campanella6515c582020-10-05 11:25:00 +0200394 log.Fields{"msgType": omciMsg.MessageType, "payload": hex.EncodeToString(omciMsg.Payload),
mpagenko8b07c1b2020-11-26 10:36:31 +0000395 "device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200396 return fmt.Errorf("autonomous Omci Message with TranSCorrId != 0 not acccepted %s", oo.deviceID)
Himani Chawla4d908332020-08-31 12:30:20 +0530397 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000398 //logger.Debug(ctx,"RxMsg is a Omci Response Message: try to schedule it to the requester")
Himani Chawla4d908332020-08-31 12:30:20 +0530399 oo.mutexRxSchedMap.Lock()
400 rxCallbackEntry, ok := oo.rxSchedulerMap[omciMsg.TransactionID]
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000401 if ok && rxCallbackEntry.CbFunction != nil {
402 if rxCallbackEntry.FramePrint {
mpagenko80622a52021-02-09 16:53:23 +0000403 oo.printRxMessage(ctx, rxMsg)
404 }
Himani Chawla4d908332020-08-31 12:30:20 +0530405 //disadvantage of decoupling: error verification made difficult, but anyway the question is
406 // how to react on erroneous frame reception, maybe can simply be ignored
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000407 go rxCallbackEntry.CbFunction(ctx, omciMsg, &packet, rxCallbackEntry.CbRespChannel)
Holger Hildebrandt36747fd2022-03-14 09:47:17 +0000408 isSuccessfulResponse, err := oo.isSuccessfulResponseWithMibDataSync(ctx, omciMsg, &packet)
409 if err != nil {
410 // qualified error logging already done in function above
411 if !rxCallbackEntry.FramePrint {
412 oo.printRxMessage(ctx, rxMsg)
413 }
414 return fmt.Errorf("could not decode further layers %s", oo.deviceID)
415 }
416 if isSuccessfulResponse {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000417 oo.pOnuDeviceEntry.IncrementMibDataSync(ctx)
Holger Hildebrandt36747fd2022-03-14 09:47:17 +0000418 } else {
419 logger.Debugw(ctx, "mibDataSync counter not to be updated for this message type",
420 log.Fields{"omciMsg.MessageType": omciMsg.MessageType, "device-id": oo.deviceID})
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +0000421 }
mpagenkoc8bba412021-01-15 15:38:44 +0000422
Girish Gowdra6afb56a2021-04-27 17:47:57 -0700423 // If omciMsg.MessageType is omci.TestResponseType, we still expect the TestResult OMCI message,
424 // so do not clean up the TransactionID in that case.
425 if omciMsg.MessageType != omci.TestResponseType {
426 // having posted the response the request is regarded as 'done'
427 delete(oo.rxSchedulerMap, omciMsg.TransactionID)
428 }
Himani Chawla4d908332020-08-31 12:30:20 +0530429 oo.mutexRxSchedMap.Unlock()
mpagenko80622a52021-02-09 16:53:23 +0000430 return nil
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000431 }
mpagenko80622a52021-02-09 16:53:23 +0000432 oo.mutexRxSchedMap.Unlock()
433 logger.Errorw(ctx, "omci-message-response for not registered transCorrId", log.Fields{"device-id": oo.deviceID})
434 oo.printRxMessage(ctx, rxMsg)
435 return fmt.Errorf("could not find registered response handler tor transCorrId %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000436
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000437 /* py code was:
438 Receive and OMCI message from the proxy channel to the OLT.
439
440 Call this from your ONU Adapter on a new OMCI Rx on the proxy channel
441 :param msg: (str) OMCI binary message (used as input to Scapy packet decoder)
442 """
443 if not self.enabled:
444 return
445
446 try:
447 now = arrow.utcnow()
448 d = None
449
450 # NOTE: Since we may need to do an independent ME map on a per-ONU basis
451 # save the current value of the entity_id_to_class_map, then
452 # replace it with our custom one before decode, and then finally
453 # restore it later. Tried other ways but really made the code messy.
454 saved_me_map = omci_entities.entity_id_to_class_map
455 omci_entities.entity_id_to_class_map = self._me_map
456
457 try:
458 rx_frame = msg if isinstance(msg, OmciFrame) else OmciFrame(msg)
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000459 self.logger.debug('recv-omci-msg', omci_msg=hexlify(msg))
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000460 except KeyError as e:
461 # Unknown, Unsupported, or vendor-specific ME. Key is the unknown classID
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000462 self.logger.debug('frame-decode-key-error', omci_msg=hexlify(msg), e=e)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000463 rx_frame = self._decode_unknown_me(msg)
464 self._rx_unknown_me += 1
465
466 except Exception as e:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000467 self.logger.exception('frame-decode', omci_msg=hexlify(msg), e=e)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000468 return
469
470 finally:
471 omci_entities.entity_id_to_class_map = saved_me_map # Always restore it.
472
473 rx_tid = rx_frame.fields['transaction_id']
474 msg_type = rx_frame.fields['message_type']
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000475 self.logger.debug('Received message for rx_tid', rx_tid = rx_tid, msg_type = msg_type)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000476 # Filter the Test Result frame and route through receive onu
477 # message method.
478 if rx_tid == 0 or msg_type == EntityOperations.TestResult.value:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000479 self.logger.debug('Receive ONU message', rx_tid=0)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000480 return self._receive_onu_message(rx_frame)
481
482 # Previously unreachable if this is the very first round-trip Rx or we
483 # have been running consecutive errors
484 if self._rx_frames == 0 or self._consecutive_errors != 0:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000485 self.logger.debug('Consecutive errors for rx', err = self._consecutive_errors)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000486 self.reactor.callLater(0, self._publish_connectivity_event, True)
487
488 self._rx_frames += 1
489 self._consecutive_errors = 0
490
491 try:
492 high_priority = self._tid_is_high_priority(rx_tid)
493 index = self._get_priority_index(high_priority)
494
495 # (timestamp, defer, frame, timeout, retry, delayedCall)
496 last_tx_tuple = self._tx_request[index]
497
498 if last_tx_tuple is None or \
499 last_tx_tuple[OMCI_CC.REQUEST_FRAME].fields.get('transaction_id') != rx_tid:
500 # Possible late Rx on a message that timed-out
501 if last_tx_tuple:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000502 self.logger.debug('Unknown message', rx_tid=rx_tid,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000503 tx_id=last_tx_tuple[OMCI_CC.REQUEST_FRAME].fields.get('transaction_id'))
504 self._rx_unknown_tid += 1
505 self._rx_late += 1
506 return
507
508 ts, d, tx_frame, timeout, retry, dc = last_tx_tuple
509 if dc is not None and not dc.cancelled and not dc.called:
510 dc.cancel()
511
512 _secs = self._update_rx_tx_stats(now, ts)
513
514 # Late arrival already serviced by a timeout?
515 if d.called:
516 self._rx_late += 1
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000517 self.logger.debug('Serviced by timeout. Late arrival', rx_late = self._rx_late)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000518 return
519
520 except Exception as e:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000521 self.logger.exception('frame-match', msg=hexlify(msg), e=e)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000522 if d is not None:
523 return d.errback(failure.Failure(e))
524 return
525
526 # Publish Rx event to listeners in a different task
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000527 self.logger.debug('Publish rx event', rx_tid = rx_tid,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000528 tx_tid = tx_frame.fields['transaction_id'])
529 reactor.callLater(0, self._publish_rx_frame, tx_frame, rx_frame)
530
531 # begin success callback chain (will cancel timeout and queue next Tx message)
532 self._rx_response[index] = rx_frame
533 d.callback(rx_frame)
534
535 except Exception as e:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000536 self.logger.exception('rx-msg', e=e)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000537 */
538}
539
Himani Chawla6d2ae152020-09-02 13:11:20 +0530540/*
541func (oo *omciCC) publishRxResponseFrame(ctx context.Context, txFrame []byte, rxFrame []byte) error {
Himani Chawla4d908332020-08-31 12:30:20 +0530542 return errors.New("publishRxResponseFrame unimplemented")
Himani Chawla6d2ae152020-09-02 13:11:20 +0530543 //def _publish_rx_frame(self, tx_frame, rx_frame):
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000544}
Himani Chawla6d2ae152020-09-02 13:11:20 +0530545*/
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000546
Girish Gowdra6afb56a2021-04-27 17:47:57 -0700547// ReleaseTid releases OMCI transaction identifier from rxSchedulerMap
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000548func (oo *OmciCC) ReleaseTid(ctx context.Context, tid uint16) {
Girish Gowdra6afb56a2021-04-27 17:47:57 -0700549 logger.Debugw(ctx, "releasing tid from rxSchedulerMap", log.Fields{"tid": tid})
550 delete(oo.rxSchedulerMap, tid)
551}
552
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000553// Send - Queue the OMCI Frame for a transmit to the ONU via the proxy_channel
554func (oo *OmciCC) Send(ctx context.Context, txFrame []byte, timeout int, retry int, highPrio bool,
555 receiveCallbackPair CallbackPair) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000556
mpagenkoc26d4c02021-05-06 14:27:57 +0000557 if timeout != 0 {
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000558 logger.Debugw(ctx, "register-response-callback:", log.Fields{"for TransCorrId": receiveCallbackPair.CbKey})
mpagenkoc26d4c02021-05-06 14:27:57 +0000559 oo.mutexRxSchedMap.Lock()
560 // it could be checked, if the callback key is already registered - but simply overwrite may be acceptable ...
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000561 oo.rxSchedulerMap[receiveCallbackPair.CbKey] = receiveCallbackPair.CbEntry
mpagenkoc26d4c02021-05-06 14:27:57 +0000562 oo.mutexRxSchedMap.Unlock()
563 } //else timeout 0 indicates that no response is expected - fire and forget
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000564
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000565 printFrame := receiveCallbackPair.CbEntry.FramePrint //printFrame true means debug print of frame is requested
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000566 //just use a simple list for starting - might need some more effort, especially for multi source write access
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000567 omciTxRequest := OmciTransferStructure{
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000568 txFrame,
569 timeout,
570 retry,
571 highPrio,
mpagenko80622a52021-02-09 16:53:23 +0000572 printFrame,
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000573 receiveCallbackPair,
574 nil,
kesavand011d5162021-11-25 19:21:06 +0530575 nil,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000576 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000577 oo.mutexMonReq.Lock()
578 defer oo.mutexMonReq.Unlock()
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000579 if _, exist := oo.monitoredRequests[receiveCallbackPair.CbKey]; !exist {
mpagenko7455fd42021-06-10 16:25:55 +0000580 // do not call processRequestMonitoring in background here to ensure correct sequencing
581 // of requested messages into txQueue (especially for non-response-supervised messages)
582 oo.processRequestMonitoring(ctx, omciTxRequest)
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000583 return nil
584 }
585 logger.Errorw(ctx, "A message with this tid is processed already!",
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000586 log.Fields{"tid": receiveCallbackPair.CbKey, "device-id": oo.deviceID})
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000587 return fmt.Errorf("message with tid is processed already %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000588}
589
Holger Hildebrandt34555512021-10-01 16:26:59 +0000590func (oo *OmciCC) sendQueuedRequests(ctx context.Context) {
591 // Avoid accessing the txQueues from parallel send routines to block
592 // parallel omci send requests at least until SendIAP is 'committed'.
593 // To guarantee window size 1 for one ONU it would be necessary to wait
594 // for the corresponding response too (t.b.d.).
595 oo.mutexSendQueuedRequests.Lock()
596 defer oo.mutexSendQueuedRequests.Unlock()
597 if err := oo.sendQueuedHighPrioRequests(ctx); err != nil {
598 logger.Errorw(ctx, "Error during sending high prio requests!",
599 log.Fields{"err": err, "device-id": oo.deviceID})
600 return
601 }
602 if err := oo.sendQueuedLowPrioRequests(ctx); err != nil {
603 logger.Errorw(ctx, "Error during sending low prio requests!",
604 log.Fields{"err": err, "device-id": oo.deviceID})
605 return
606 }
607}
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000608
Holger Hildebrandt34555512021-10-01 16:26:59 +0000609func (oo *OmciCC) sendQueuedHighPrioRequests(ctx context.Context) error {
610 oo.mutexHighPrioTxQueue.Lock()
611 defer oo.mutexHighPrioTxQueue.Unlock()
612 for oo.highPrioTxQueue.Len() > 0 {
613 queueElement := oo.highPrioTxQueue.Front() // First element
614 if err := oo.sendOMCIRequest(ctx, queueElement.Value.(OmciTransferStructure)); err != nil {
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000615 // Element will be removed from the queue regardless of the send success, to prevent
616 // an accumulation of send requests for the same message in the event of an error.
617 // In this case, resend attempts for the message are ensured by our retry
618 // mechanism after omci-timeout.
619 oo.highPrioTxQueue.Remove(queueElement) // Dequeue
Holger Hildebrandt34555512021-10-01 16:26:59 +0000620 return err
mpagenko80622a52021-02-09 16:53:23 +0000621 }
Holger Hildebrandt34555512021-10-01 16:26:59 +0000622 oo.highPrioTxQueue.Remove(queueElement) // Dequeue
623 }
624 return nil
625}
626
627func (oo *OmciCC) sendQueuedLowPrioRequests(ctx context.Context) error {
628 oo.mutexLowPrioTxQueue.Lock()
629 for oo.lowPrioTxQueue.Len() > 0 {
630 queueElement := oo.lowPrioTxQueue.Front() // First element
kesavand011d5162021-11-25 19:21:06 +0530631 // check if the element is for onu sw section
632 aOmciTxReq := queueElement.Value.(OmciTransferStructure)
633 if aOmciTxReq.OnuSwWindow != nil {
634 if err := oo.sendOnuSwSectionsOfWindow(ctx, aOmciTxReq); err != nil {
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000635 // Element will be removed from the queue regardless of the send success, to prevent
636 // an accumulation of send requests for the same message in the event of an error.
637 // In this case, resend attempts for the message are ensured by our retry
638 // mechanism after omci-timeout.
639 oo.lowPrioTxQueue.Remove(queueElement) // Dequeue
kesavand011d5162021-11-25 19:21:06 +0530640 oo.mutexLowPrioTxQueue.Unlock()
641 return err
642 }
643 } else {
644 err := oo.sendOMCIRequest(ctx, queueElement.Value.(OmciTransferStructure))
645 if err != nil {
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000646 // Element will be removed from the queue regardless of the send success, to prevent
647 // an accumulation of send requests for the same message in the event of an error.
648 // In this case, resend attempts for the message are ensured by our retry
649 // mechanism after omci-timeout.
650 oo.lowPrioTxQueue.Remove(queueElement) // Dequeue
kesavand011d5162021-11-25 19:21:06 +0530651 oo.mutexLowPrioTxQueue.Unlock()
652 return err
653 }
amit.ghosh58b704b2021-06-18 03:45:52 +0200654 }
Holger Hildebrandt34555512021-10-01 16:26:59 +0000655 oo.lowPrioTxQueue.Remove(queueElement) // Dequeue
656 // Interrupt the sending of low priority requests to process any high priority requests
657 // that may have arrived in the meantime
658 oo.mutexLowPrioTxQueue.Unlock()
659 if err := oo.sendQueuedHighPrioRequests(ctx); err != nil {
660 return err
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000661 }
Holger Hildebrandt34555512021-10-01 16:26:59 +0000662 oo.mutexLowPrioTxQueue.Lock()
663 }
664
665 oo.mutexLowPrioTxQueue.Unlock()
666 return nil
667}
668
669func (oo *OmciCC) sendOMCIRequest(ctx context.Context, omciTxRequest OmciTransferStructure) error {
670 if omciTxRequest.withFramePrint {
671 logger.Debugw(ctx, "omci-message-to-send:", log.Fields{
672 "TxOmciMessage": hex.EncodeToString(omciTxRequest.txFrame),
673 "device-id": oo.deviceID,
674 "toDeviceType": oo.pBaseDeviceHandler.GetProxyAddressType(),
675 "proxyDeviceID": oo.pBaseDeviceHandler.GetProxyAddressID(),
676 "proxyAddress": oo.pBaseDeviceHandler.GetProxyAddress()})
677 }
khenaidoo42dcdfd2021-10-19 17:34:12 -0400678 omciMsg := &ia.OmciMessage{
Holger Hildebrandt34555512021-10-01 16:26:59 +0000679 ParentDeviceId: oo.pBaseDeviceHandler.GetProxyAddressID(),
680 ChildDeviceId: oo.deviceID,
681 Message: omciTxRequest.txFrame,
682 ProxyAddress: oo.pBaseDeviceHandler.GetProxyAddress(),
683 ConnectStatus: common.ConnectStatus_REACHABLE, // If we are sending OMCI messages means we are connected, else we should not be here
684 }
685 sendErr := oo.pBaseDeviceHandler.SendOMCIRequest(ctx, oo.pBaseDeviceHandler.GetProxyAddress().AdapterEndpoint, omciMsg)
686 if sendErr != nil {
Holger Hildebrandtabfef032022-02-25 12:40:20 +0000687 logger.Errorw(ctx, "send omci request error", log.Fields{"device-id": oo.deviceID, "ChildId": oo.deviceID, "error": sendErr})
Holger Hildebrandt34555512021-10-01 16:26:59 +0000688 return sendErr
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000689 }
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000690 return nil
691}
692
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000693// GetNextTid - TODO: add comment
694func (oo *OmciCC) GetNextTid(highPriority bool) uint16 {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000695 var next uint16
696 if highPriority {
mpagenko900ee4b2020-10-12 11:56:34 +0000697 oo.mutexHpTid.Lock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000698 next = oo.hpTid
Himani Chawla4d908332020-08-31 12:30:20 +0530699 oo.hpTid++
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000700 if oo.hpTid < 0x8000 {
701 oo.hpTid = 0x8000
702 }
mpagenko900ee4b2020-10-12 11:56:34 +0000703 oo.mutexHpTid.Unlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000704 } else {
mpagenko900ee4b2020-10-12 11:56:34 +0000705 oo.mutexTid.Lock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000706 next = oo.tid
Himani Chawla4d908332020-08-31 12:30:20 +0530707 oo.tid++
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000708 if oo.tid >= 0x8000 {
709 oo.tid = 1
710 }
mpagenko900ee4b2020-10-12 11:56:34 +0000711 oo.mutexTid.Unlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000712 }
713 return next
714}
715
kesavand011d5162021-11-25 19:21:06 +0530716//GetOnuSwSecNextTid get the next low prio tid for the onu sw sections
717//onu sw sections uses only low priority tids
718//The mutexTid lock should be taken prior to using this function
719func (oo *OmciCC) GetOnuSwSecNextTid() uint16 {
720 next := oo.tid
721 oo.tid++
722 if oo.tid >= 0x8000 {
723 oo.tid = 1
724 }
725 return next
726}
727
728//GetOnuSwSecLastTid gets the last allocated tid
729//The mutexTid lock should be taken prior to using this function
730func (oo *OmciCC) GetOnuSwSecLastTid() uint16 {
731 next := oo.tid
732 lastAllocatedTid := next - 1
733 return lastAllocatedTid
734}
735
736//LockMutexTID locks mutexTid
737func (oo *OmciCC) LockMutexTID() {
738 oo.mutexTid.Lock()
739}
740
741//UnLockMutexTID unlocks mutexTid
742func (oo *OmciCC) UnLockMutexTID() {
743 oo.mutexTid.Unlock()
744}
745
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000746// ###################################################################################
747// # utility methods provided to work on OMCI messages
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000748
749// Serialize - TODO: add comment
750func Serialize(ctx context.Context, msgType omci.MessageType, request gopacket.SerializableLayer, tid uint16) ([]byte, error) {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000751 omciLayer := &omci.OMCI{
752 TransactionID: tid,
753 MessageType: msgType,
754 }
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000755 return SerializeOmciLayer(ctx, omciLayer, request)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000756}
757
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +0000758// SerializeOmciLayer - TODO: add comment
759func SerializeOmciLayer(ctx context.Context, aOmciLayer *omci.OMCI, aRequest gopacket.SerializableLayer) ([]byte, error) {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000760 var options gopacket.SerializeOptions
761 options.FixLengths = true
762
763 buffer := gopacket.NewSerializeBuffer()
Himani Chawla4d908332020-08-31 12:30:20 +0530764 err := gopacket.SerializeLayers(buffer, options, aOmciLayer, aRequest)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000765 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000766 logger.Errorw(ctx, "Could not create goPacket Omci serial buffer", log.Fields{"Err": err})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000767 return nil, err
768 }
769 return buffer.Bytes(), nil
770}
771
Himani Chawla4d908332020-08-31 12:30:20 +0530772/*
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000773func hexEncode(omciPkt []byte) ([]byte, error) {
774 dst := make([]byte, hex.EncodedLen(len(omciPkt)))
775 hex.Encode(dst, omciPkt)
776 return dst, nil
777}
Himani Chawla4d908332020-08-31 12:30:20 +0530778*/
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000779
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000780//supply a response handler for omci response messages to be transferred to the requested FSM
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000781func (oo *OmciCC) receiveOmciResponse(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet, respChan chan Message) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000782
dbainbri4d3a0dc2020-12-02 00:33:42 +0000783 logger.Debugw(ctx, "omci-message-response - transfer on omciRespChannel", log.Fields{"omciMsgType": omciMsg.MessageType,
divyadesai4d299552020-08-18 07:13:49 +0000784 "transCorrId": strconv.FormatInt(int64(omciMsg.TransactionID), 16), "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000785
786 if oo.pOnuDeviceEntry == nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000787 logger.Errorw(ctx, "Abort receiving OMCI response, DeviceEntryPointer is nil", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000788 "device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200789 return fmt.Errorf("deviceEntryPointer is nil %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000790 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000791 oo.mutexMonReq.RLock()
792 if _, exist := oo.monitoredRequests[omciMsg.TransactionID]; exist {
mpagenko8cd1bf72021-06-22 10:11:19 +0000793 //implement non-blocking channel send to avoid blocking on mutexMonReq later
794 select {
795 case oo.monitoredRequests[omciMsg.TransactionID].chSuccess <- true:
796 default:
797 logger.Debugw(ctx, "response not send on omciRespChannel (no receiver)", log.Fields{
798 "transCorrId": strconv.FormatInt(int64(omciMsg.TransactionID), 16), "device-id": oo.deviceID})
799 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000800 } else {
801 logger.Infow(ctx, "reqMon: map entry does not exist!",
802 log.Fields{"tid": omciMsg.TransactionID, "device-id": oo.deviceID})
803 }
804 oo.mutexMonReq.RUnlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000805
806 // no further test on SeqNo is done here, assignment from rxScheduler is trusted
807 // MibSync responses are simply transferred via deviceEntry to MibSync, no specific analysis here
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000808 omciRespMsg := Message{
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000809 Type: OMCI,
810 Data: OmciMessage{
811 OmciMsg: omciMsg,
812 OmciPacket: packet,
813 },
814 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000815 //logger.Debugw(ctx,"Message to be sent into channel:", log.Fields{"mibSyncMsg": mibSyncMsg})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000816 respChan <- omciRespMsg
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000817
818 return nil
819}
820
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000821// SendMibReset sends MibResetRequest
822func (oo *OmciCC) SendMibReset(ctx context.Context, timeout int, highPrio bool) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000823
dbainbri4d3a0dc2020-12-02 00:33:42 +0000824 logger.Debugw(ctx, "send MibReset-msg to:", log.Fields{"device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000825 request := &omci.MibResetRequest{
826 MeBasePacket: omci.MeBasePacket{
827 EntityClass: me.OnuDataClassID,
828 },
829 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000830 tid := oo.GetNextTid(highPrio)
831 pkt, err := Serialize(ctx, omci.MibResetRequestType, request, tid)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000832 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000833 logger.Errorw(ctx, "Cannot serialize MibResetRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000834 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000835 return err
836 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000837 omciRxCallbackPair := CallbackPair{
838 CbKey: tid,
839 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibUploadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000840 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000841 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000842}
843
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000844// SendReboot sends RebootRequest
845func (oo *OmciCC) SendReboot(ctx context.Context, timeout int, highPrio bool, responseChannel chan Message) error {
846 logger.Debugw(ctx, "send reboot-msg to:", log.Fields{"device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300847 request := &omci.RebootRequest{
848 MeBasePacket: omci.MeBasePacket{
849 EntityClass: me.OnuGClassID,
850 },
851 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000852 tid := oo.GetNextTid(highPrio)
853 pkt, err := Serialize(ctx, omci.RebootRequestType, request, tid)
ozgecanetsiae11479f2020-07-06 09:44:47 +0300854 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000855 logger.Errorw(ctx, "Cannot serialize RebootRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000856 "Err": err, "device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300857 return err
858 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000859 omciRxCallbackPair := CallbackPair{
860 CbKey: tid,
861 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetOmciRebootMsgRevChan(), oo.receiveOmciResponse, true},
ozgecanetsiae11479f2020-07-06 09:44:47 +0300862 }
863
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000864 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiae11479f2020-07-06 09:44:47 +0300865 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000866 logger.Errorw(ctx, "Cannot send RebootRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000867 "Err": err, "device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300868 return err
869 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000870 err = oo.pOnuDeviceEntry.WaitForRebootResponse(ctx, responseChannel)
ozgecanetsiae11479f2020-07-06 09:44:47 +0300871 if err != nil {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000872 logger.Errorw(ctx, "aborting ONU reboot!", log.Fields{
Andrea Campanella6515c582020-10-05 11:25:00 +0200873 "Err": err, "device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300874 return err
875 }
876 return nil
877}
878
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000879// SendMibUpload sends MibUploadRequest
880func (oo *OmciCC) SendMibUpload(ctx context.Context, timeout int, highPrio bool) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000881 logger.Debugw(ctx, "send MibUpload-msg to:", log.Fields{"device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000882 request := &omci.MibUploadRequest{
883 MeBasePacket: omci.MeBasePacket{
884 EntityClass: me.OnuDataClassID,
885 },
886 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000887 tid := oo.GetNextTid(highPrio)
888 pkt, err := Serialize(ctx, omci.MibUploadRequestType, request, tid)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000889 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000890 logger.Errorw(ctx, "Cannot serialize MibUploadRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000891 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000892 return err
893 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000894 oo.UploadSequNo = 0
895 oo.UploadNoOfCmds = 0
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000896
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000897 omciRxCallbackPair := CallbackPair{
898 CbKey: tid,
899 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibUploadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000900 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000901 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000902}
903
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000904// SendMibUploadNext sends MibUploadNextRequest
905func (oo *OmciCC) SendMibUploadNext(ctx context.Context, timeout int, highPrio bool) error {
906 logger.Debugw(ctx, "send MibUploadNext-msg to:", log.Fields{"device-id": oo.deviceID, "UploadSequNo": oo.UploadSequNo})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000907 request := &omci.MibUploadNextRequest{
908 MeBasePacket: omci.MeBasePacket{
909 EntityClass: me.OnuDataClassID,
910 },
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000911 CommandSequenceNumber: oo.UploadSequNo,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000912 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000913 tid := oo.GetNextTid(highPrio)
914 pkt, err := Serialize(ctx, omci.MibUploadNextRequestType, request, tid)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000915 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000916 logger.Errorw(ctx, "Cannot serialize MibUploadNextRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000917 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000918 return err
919 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000920 oo.UploadSequNo++
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000921
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000922 omciRxCallbackPair := CallbackPair{
923 CbKey: tid,
mpagenko80622a52021-02-09 16:53:23 +0000924 //frame printing for MibUpload frames disabled now per default to avoid log file abort situations (size/speed?)
925 // if wanted, rx frame printing should be specifically done within the MibUpload FSM or controlled via extra parameter
926 // compare also software upgrade download section handling
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000927 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibUploadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000928 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000929 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000930}
931
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000932// SendGetAllAlarm gets all alarm ME instances
933func (oo *OmciCC) SendGetAllAlarm(ctx context.Context, alarmRetreivalMode uint8, timeout int, highPrio bool) error {
Himani Chawlad3dac422021-03-13 02:31:31 +0530934 logger.Debugw(ctx, "send GetAllAlarms-msg to:", log.Fields{"device-id": oo.deviceID})
935 request := &omci.GetAllAlarmsRequest{
936 MeBasePacket: omci.MeBasePacket{
937 EntityClass: me.OnuDataClassID,
938 },
939 AlarmRetrievalMode: byte(alarmRetreivalMode),
940 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000941 tid := oo.GetNextTid(highPrio)
942 pkt, err := Serialize(ctx, omci.GetAllAlarmsRequestType, request, tid)
Himani Chawlad3dac422021-03-13 02:31:31 +0530943 if err != nil {
944 logger.Errorw(ctx, "Cannot serialize GetAllAlarmsRequest", log.Fields{
945 "Err": err, "device-id": oo.deviceID})
946 return err
947 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000948 oo.pOnuAlarmManager.ResetAlarmUploadCounters()
Himani Chawlad3dac422021-03-13 02:31:31 +0530949
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000950 omciRxCallbackPair := CallbackPair{
951 CbKey: tid,
952 CbEntry: CallbackPairEntry{oo.pOnuAlarmManager.GetAlarmMgrEventChannel(), oo.receiveOmciResponse, true},
Himani Chawlad3dac422021-03-13 02:31:31 +0530953 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000954 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Himani Chawlad3dac422021-03-13 02:31:31 +0530955}
956
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000957// SendGetAllAlarmNext gets next alarm ME instance
958func (oo *OmciCC) SendGetAllAlarmNext(ctx context.Context, timeout int, highPrio bool) error {
959 alarmUploadSeqNo := oo.pOnuAlarmManager.GetAlarmUploadSeqNo()
960 logger.Debugw(ctx, "send SendGetAllAlarmNext-msg to:", log.Fields{"device-id": oo.deviceID,
Himani Chawlad3dac422021-03-13 02:31:31 +0530961 "alarmUploadSeqNo": alarmUploadSeqNo})
962 request := &omci.GetAllAlarmsNextRequest{
963 MeBasePacket: omci.MeBasePacket{
964 EntityClass: me.OnuDataClassID,
965 },
966 CommandSequenceNumber: alarmUploadSeqNo,
967 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000968 tid := oo.GetNextTid(highPrio)
969 pkt, err := Serialize(ctx, omci.GetAllAlarmsNextRequestType, request, tid)
Himani Chawlad3dac422021-03-13 02:31:31 +0530970 if err != nil {
971 logger.Errorw(ctx, "Cannot serialize GetAllAlarmsNextRequest", log.Fields{
972 "Err": err, "device-id": oo.deviceID})
973 return err
974 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000975 oo.pOnuAlarmManager.IncrementAlarmUploadSeqNo()
Himani Chawlad3dac422021-03-13 02:31:31 +0530976
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000977 omciRxCallbackPair := CallbackPair{
978 CbKey: tid,
979 CbEntry: CallbackPairEntry{oo.pOnuAlarmManager.GetAlarmMgrEventChannel(), oo.receiveOmciResponse, true},
Himani Chawlad3dac422021-03-13 02:31:31 +0530980 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000981 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Himani Chawlad3dac422021-03-13 02:31:31 +0530982}
983
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000984// SendCreateGalEthernetProfile creates GalEthernetProfile ME instance
985func (oo *OmciCC) SendCreateGalEthernetProfile(ctx context.Context, timeout int, highPrio bool) (*me.ManagedEntity, error) {
986 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000987 logger.Debugw(ctx, "send GalEnetProfile-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000988 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000989
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000990 meParams := me.ParamData{
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000991 EntityID: GalEthernetEID,
Holger Hildebrandt3ac49bd2022-02-07 17:46:43 +0000992 Attributes: me.AttributeValueMap{me.GalEthernetProfile_MaximumGemPayloadSize: maxGemPayloadSize},
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000993 }
994 meInstance, omciErr := me.NewGalEthernetProfile(meParams)
995 if omciErr.GetError() == nil {
996 //all setByCreate parameters already set, no default option required ...
mpagenko836a1fd2021-11-01 16:12:42 +0000997 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000998 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000999 logger.Errorw(ctx, "Cannot encode GalEnetProfileInstance for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001000 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001001 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001002 }
1003
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001004 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001005 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001006 logger.Errorw(ctx, "Cannot serialize GalEnetProfile create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001007 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001008 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001009 }
1010
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001011 omciRxCallbackPair := CallbackPair{
1012 CbKey: tid,
1013 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001014 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001015 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001016 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001017 logger.Errorw(ctx, "Cannot send GalEnetProfile create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001018 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001019 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001020 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001021 logger.Debug(ctx, "send GalEnetProfile-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001022 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001023 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001024 logger.Errorw(ctx, "Cannot generate GalEnetProfileInstance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001025 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001026 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001027}
1028
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001029// SendSetOnu2g sets Onu2G ME instance
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001030// might be needed to extend for parameter arguments, here just for setting the ConnectivityMode!!
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001031func (oo *OmciCC) SendSetOnu2g(ctx context.Context, timeout int, highPrio bool) (*me.ManagedEntity, error) {
1032 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001033 logger.Debugw(ctx, "send ONU2-G-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001034 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001035
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001036 // ONU-G ME-ID is defined to be 0, but we could verify, if the ONU really supports the desired
1037 // connectivity mode 5 (in ConnCap)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001038 // By now we just use fix values to fire - this is anyway what the python adapter does
1039 // read ONU-2G from DB ???? //TODO!!!
1040 meParams := me.ParamData{
1041 EntityID: 0,
Holger Hildebrandt3ac49bd2022-02-07 17:46:43 +00001042 Attributes: me.AttributeValueMap{me.Onu2G_CurrentConnectivityMode: connectivityModeValue},
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001043 }
1044 meInstance, omciErr := me.NewOnu2G(meParams)
1045 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001046 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001047 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001048 logger.Errorw(ctx, "Cannot encode ONU2-G instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001049 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001050 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001051 }
1052
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001053 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001054 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001055 logger.Errorw(ctx, "Cannot serialize ONU2-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001056 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001057 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001058 }
1059
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001060 omciRxCallbackPair := CallbackPair{
1061 CbKey: tid,
1062 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001063 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001064 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001065 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001066 logger.Errorw(ctx, "Cannot send ONU2-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001067 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001068 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001069 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001070 logger.Debug(ctx, "send ONU2-G-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001071 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001072 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001073 logger.Errorw(ctx, "Cannot generate ONU2-G", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001074 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001075 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001076}
1077
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001078// SendCreateMBServiceProfile creates MacBridgeServiceProfile ME instance
1079func (oo *OmciCC) SendCreateMBServiceProfile(ctx context.Context,
1080 aPUniPort *OnuUniPort, timeout int, highPrio bool) (*me.ManagedEntity, error) {
1081 tid := oo.GetNextTid(highPrio)
1082 instID := MacBridgeServiceProfileEID + uint16(aPUniPort.MacBpNo)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001083 logger.Debugw(ctx, "send MBSP-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001084 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(instID), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001085
1086 meParams := me.ParamData{
1087 EntityID: instID,
1088 Attributes: me.AttributeValueMap{
Holger Hildebrandt3ac49bd2022-02-07 17:46:43 +00001089 me.MacBridgeServiceProfile_Priority: 0x8000,
1090 me.MacBridgeServiceProfile_MaxAge: 20 * 256, //20s
1091 me.MacBridgeServiceProfile_HelloTime: 2 * 256, //2s
1092 me.MacBridgeServiceProfile_ForwardDelay: 15 * 256, //15s
1093 me.MacBridgeServiceProfile_DynamicFilteringAgeingTime: 0,
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001094 },
1095 }
1096
1097 meInstance, omciErr := me.NewMacBridgeServiceProfile(meParams)
1098 if omciErr.GetError() == nil {
1099 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001100 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1101 oframe.TransactionID(tid), oframe.AddDefaults(true))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001102 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001103 logger.Errorw(ctx, "Cannot encode MBSP for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001104 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001105 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001106 }
1107
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001108 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001109 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001110 logger.Errorw(ctx, "Cannot serialize MBSP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001111 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001112 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001113 }
1114
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001115 omciRxCallbackPair := CallbackPair{
1116 CbKey: tid,
1117 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001118 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001119 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001120 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001121 logger.Errorw(ctx, "Cannot send MBSP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001122 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001123 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001124 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001125 logger.Debug(ctx, "send MBSP-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001126 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001127 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001128 logger.Errorw(ctx, "Cannot generate MBSP Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001129 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001130 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001131}
1132
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001133// SendCreateMBPConfigDataUniSide creates MacBridgePortConfigurationData ME instance
1134func (oo *OmciCC) SendCreateMBPConfigDataUniSide(ctx context.Context,
1135 aPUniPort *OnuUniPort, timeout int, highPrio bool) (*me.ManagedEntity, error) {
1136 tid := oo.GetNextTid(highPrio)
1137 instID, idErr := GenerateUNISideMBPCDEID(uint16(aPUniPort.MacBpNo))
Mahir Gunyel6781f962021-05-16 23:30:08 -07001138 if idErr != nil {
1139 logger.Errorw(ctx, "Cannot generate MBPCD entity id", log.Fields{
1140 "Err": idErr, "device-id": oo.deviceID})
1141 return nil, idErr
1142 }
1143 logger.Debugw(ctx, "send MBPCD-Create-msg for uni side:", log.Fields{"device-id": oo.deviceID,
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001144 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(instID), 16), "macBpNo": aPUniPort.MacBpNo})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001145
1146 meParams := me.ParamData{
1147 EntityID: instID,
1148 Attributes: me.AttributeValueMap{
Holger Hildebrandt3ac49bd2022-02-07 17:46:43 +00001149 me.MacBridgePortConfigurationData_BridgeIdPointer: MacBridgeServiceProfileEID + uint16(aPUniPort.MacBpNo),
1150 me.MacBridgePortConfigurationData_PortNum: aPUniPort.MacBpNo,
1151 me.MacBridgePortConfigurationData_TpType: uint8(aPUniPort.PortType),
1152 me.MacBridgePortConfigurationData_TpPointer: aPUniPort.EntityID,
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001153 },
1154 }
1155 meInstance, omciErr := me.NewMacBridgePortConfigurationData(meParams)
1156 if omciErr.GetError() == nil {
1157 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001158 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1159 oframe.TransactionID(tid), oframe.AddDefaults(true))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001160 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001161 logger.Errorw(ctx, "Cannot encode MBPCD for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001162 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001163 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001164 }
1165
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001166 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001167 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001168 logger.Errorw(ctx, "Cannot serialize MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001169 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001170 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001171 }
1172
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001173 omciRxCallbackPair := CallbackPair{
1174 CbKey: tid,
1175 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001176 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001177 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001178 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001179 logger.Errorw(ctx, "Cannot send MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001180 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001181 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001182 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001183 logger.Debug(ctx, "send MBPCD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001184 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001185 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001186 logger.Errorw(ctx, "Cannot generate MBPCD Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001187 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001188 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001189}
1190
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001191// SendCreateEVTOConfigData creates ExtendedVlanTaggingOperationConfigurationData ME instance
1192func (oo *OmciCC) SendCreateEVTOConfigData(ctx context.Context,
1193 aPUniPort *OnuUniPort, timeout int, highPrio bool) (*me.ManagedEntity, error) {
1194 tid := oo.GetNextTid(highPrio)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001195 //same entityId is used as for MBSP (see there), but just arbitrary ...
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001196 instID := MacBridgeServiceProfileEID + uint16(aPUniPort.MacBpNo)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001197 logger.Debugw(ctx, "send EVTOCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001198 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(instID), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001199
1200 // compare python adapter code WA VOL-1311: this is not done here!
1201 // (setting TPID values for the create would probably anyway be ignored by the omci lib)
1202 // but perhaps we have to be aware of possible problems at get(Next) Request handling for EVTOOCD tables later ...
1203 assType := uint8(2) // default AssociationType is PPTPEthUni
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001204 if aPUniPort.PortType == UniVEIP {
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001205 assType = uint8(10) // for VEIP
1206 }
1207 meParams := me.ParamData{
1208 EntityID: instID,
1209 Attributes: me.AttributeValueMap{
Holger Hildebrandt3ac49bd2022-02-07 17:46:43 +00001210 me.ExtendedVlanTaggingOperationConfigurationData_AssociationType: assType,
1211 me.ExtendedVlanTaggingOperationConfigurationData_AssociatedMePointer: aPUniPort.EntityID,
mpagenko836a1fd2021-11-01 16:12:42 +00001212 //EnhancedMode not yet supported, used with default options
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001213 },
1214 }
1215 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(meParams)
1216 if omciErr.GetError() == nil {
1217 //all setByCreate parameters already set, no default option required ...
mpagenko836a1fd2021-11-01 16:12:42 +00001218 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1219 oframe.TransactionID(tid), oframe.AddDefaults(true))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001220 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001221 logger.Errorw(ctx, "Cannot encode EVTOCD for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001222 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001223 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001224 }
1225
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001226 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001227 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001228 logger.Errorw(ctx, "Cannot serialize EVTOCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001229 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001230 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001231 }
1232
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001233 omciRxCallbackPair := CallbackPair{
1234 CbKey: tid,
1235 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001236 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001237 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001238 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001239 logger.Errorw(ctx, "Cannot send EVTOCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001240 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001241 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001242 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001243 logger.Debug(ctx, "send EVTOCD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001244 return meInstance, nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001245 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001246 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001247 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001248 return nil, omciErr.GetError()
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001249}
1250
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001251// SendSetOnuGLS sets OnuG ME instance
1252func (oo *OmciCC) SendSetOnuGLS(ctx context.Context, timeout int,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001253 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001254 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001255 logger.Debugw(ctx, "send ONU-G-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001256 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001257
1258 // ONU-G ME-ID is defined to be 0, no need to perform a DB lookup
1259 meParams := me.ParamData{
1260 EntityID: 0,
1261 Attributes: requestedAttributes,
1262 }
1263 meInstance, omciErr := me.NewOnuG(meParams)
1264 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001265 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001266 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001267 logger.Errorw(ctx, "Cannot encode ONU-G instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001268 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001269 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001270 }
1271
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001272 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001273 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001274 logger.Errorw(ctx, "Cannot serialize ONU-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001275 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001276 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001277 }
1278
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001279 omciRxCallbackPair := CallbackPair{
1280 CbKey: tid,
1281 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001282 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001283 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001284 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001285 logger.Errorw(ctx, "Cannot send ONU-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001286 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001287 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001288 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001289 logger.Debug(ctx, "send ONU-G-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001290 return meInstance, nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001291 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001292 logger.Errorw(ctx, "Cannot generate ONU-G", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001293 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001294 return nil, omciErr.GetError()
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001295}
1296
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001297// SendSetPptpEthUniLS sets PhysicalPathTerminationPointEthernetUni ME instance
1298func (oo *OmciCC) SendSetPptpEthUniLS(ctx context.Context, aInstNo uint16, timeout int,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001299 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001300 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001301 logger.Debugw(ctx, "send PPTPEthUni-Set-msg:", log.Fields{"device-id": oo.deviceID,
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001302 "SequNo": strconv.FormatInt(int64(tid), 16)})
1303
1304 // PPTPEthUni ME-ID is taken from Mib Upload stored OnuUniPort instance (argument)
1305 meParams := me.ParamData{
1306 EntityID: aInstNo,
1307 Attributes: requestedAttributes,
1308 }
1309 meInstance, omciErr := me.NewPhysicalPathTerminationPointEthernetUni(meParams)
1310 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001311 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001312 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001313 logger.Errorw(ctx, "Cannot encode PPTPEthUni instance for set", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001314 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001315 return nil, err
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001316 }
1317
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001318 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001319 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001320 logger.Errorw(ctx, "Cannot serialize PPTPEthUni-Set", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001321 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001322 return nil, err
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001323 }
1324
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001325 omciRxCallbackPair := CallbackPair{
1326 CbKey: tid,
1327 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001328 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001329 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001330 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001331 logger.Errorw(ctx, "Cannot send PPTPEthUni-Set", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001332 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001333 return nil, err
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001334 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001335 logger.Debug(ctx, "send PPTPEthUni-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001336 return meInstance, nil
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001337 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001338 logger.Errorw(ctx, "Cannot generate PPTPEthUni", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001339 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001340 return nil, omciErr.GetError()
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001341}
1342
1343/* UniG obsolete by now, left here in case it should be needed once again
1344 UniG AdminState anyway should be ignored by ONU acc. to G988
Himani Chawla6d2ae152020-09-02 13:11:20 +05301345func (oo *omciCC) sendSetUniGLS(ctx context.Context, aInstNo uint16, timeout int,
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001346 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) *me.ManagedEntity {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001347 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001348 logger.Debugw(ctx,"send UNI-G-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001349 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001350
1351 // UNI-G ME-ID is taken from Mib Upload stored OnuUniPort instance (argument)
1352 meParams := me.ParamData{
1353 EntityID: aInstNo,
1354 Attributes: requestedAttributes,
1355 }
1356 meInstance, omciErr := me.NewUniG(meParams)
1357 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001358 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001359 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001360 logger.Errorw(ctx,"Cannot encode UNI-G instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001361 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001362 return nil
1363 }
1364
1365 pkt, err := serializeOmciLayer(omciLayer, msgLayer)
1366 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001367 logger.Errorw(ctx,"Cannot serialize UNI-G-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001368 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001369 return nil
1370 }
1371
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001372 omciRxCallbackPair := CallbackPair{
1373 CbKey: tid,
1374 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001375 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001376 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001377 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001378 logger.Errorw(ctx,"Cannot send UNIG-G-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001379 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001380 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001381 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001382 logger.Debug(ctx,"send UNI-G-Set-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001383 return meInstance
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001384 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001385 logger.Errorw(ctx,"Cannot generate UNI-G", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001386 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001387 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001388}
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001389*/
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001390
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001391// SendSetVeipLS sets VirtualEthernetInterfacePoint ME instance
1392func (oo *OmciCC) SendSetVeipLS(ctx context.Context, aInstNo uint16, timeout int,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001393 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001394 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001395 logger.Debugw(ctx, "send VEIP-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001396 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001397
1398 // ONU-G ME-ID is defined to be 0, no need to perform a DB lookup
1399 meParams := me.ParamData{
1400 EntityID: aInstNo,
1401 Attributes: requestedAttributes,
1402 }
1403 meInstance, omciErr := me.NewVirtualEthernetInterfacePoint(meParams)
1404 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001405 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001406 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001407 logger.Errorw(ctx, "Cannot encode VEIP instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001408 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001409 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001410 }
1411
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001412 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001413 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001414 logger.Errorw(ctx, "Cannot serialize VEIP-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001415 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001416 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001417 }
1418
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001419 omciRxCallbackPair := CallbackPair{
1420 CbKey: tid,
1421 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001422 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001423 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001424 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001425 logger.Errorw(ctx, "Cannot send VEIP-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001426 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001427 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001428 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001429 logger.Debug(ctx, "send VEIP-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001430 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001431 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001432 logger.Errorw(ctx, "Cannot generate VEIP", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001433 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001434 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001435}
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001436
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001437// SendGetMe gets ME instance
1438func (oo *OmciCC) SendGetMe(ctx context.Context, classID me.ClassID, entityID uint16, requestedAttributes me.AttributeValueMap,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001439 timeout int, highPrio bool, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001440
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001441 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001442 logger.Debugw(ctx, "send get-request-msg", log.Fields{"classID": classID, "device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001443 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001444
1445 meParams := me.ParamData{
1446 EntityID: entityID,
1447 Attributes: requestedAttributes,
1448 }
1449 meInstance, omciErr := me.LoadManagedEntityDefinition(classID, meParams)
1450 if omciErr.GetError() == nil {
Himani Chawla4d908332020-08-31 12:30:20 +05301451 meClassIDName := meInstance.GetName()
mpagenko836a1fd2021-11-01 16:12:42 +00001452 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.GetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001453 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001454 logger.Errorf(ctx, "Cannot encode instance for get-request", log.Fields{"meClassIDName": meClassIDName, "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001455 return nil, err
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001456 }
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001457 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001458 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001459 logger.Errorw(ctx, "Cannot serialize get-request", log.Fields{"meClassIDName": meClassIDName, "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001460 return nil, err
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001461 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001462 omciRxCallbackPair := CallbackPair{
1463 CbKey: tid,
1464 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001465 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001466 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001467 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001468 logger.Errorw(ctx, "Cannot send get-request-msg", log.Fields{"meClassIDName": meClassIDName, "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001469 return nil, err
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001470 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001471 logger.Debugw(ctx, "send get-request-msg done", log.Fields{"meClassIDName": meClassIDName, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001472 return meInstance, nil
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001473 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001474 logger.Errorw(ctx, "Cannot generate meDefinition", log.Fields{"classID": classID, "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001475 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001476}
1477
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001478// SendGetMeWithAttributeMask gets ME instance with attribute mask
1479func (oo *OmciCC) SendGetMeWithAttributeMask(ctx context.Context, classID me.ClassID, entityID uint16, requestedAttributesMask uint16,
Himani Chawla43f95ff2021-06-03 00:24:12 +05301480 timeout int, highPrio bool, rxChan chan Message) error {
1481
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001482 tid := oo.GetNextTid(highPrio)
Himani Chawla43f95ff2021-06-03 00:24:12 +05301483 logger.Debugw(ctx, "send get-request-msg", log.Fields{"classID": classID, "device-id": oo.deviceID,
1484 "SequNo": strconv.FormatInt(int64(tid), 16)})
1485
1486 request := &omci.GetRequest{
1487 MeBasePacket: omci.MeBasePacket{
1488 EntityInstance: entityID,
1489 EntityClass: classID,
1490 },
1491 AttributeMask: requestedAttributesMask,
1492 }
1493
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001494 pkt, err := Serialize(ctx, omci.GetRequestType, request, tid)
Himani Chawla43f95ff2021-06-03 00:24:12 +05301495 if err != nil {
1496 logger.Errorw(ctx, "Cannot serialize get-request", log.Fields{"meClassIDName": classID, "Err": err, "device-id": oo.deviceID})
1497 return err
1498 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001499 omciRxCallbackPair := CallbackPair{
1500 CbKey: tid,
1501 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Himani Chawla43f95ff2021-06-03 00:24:12 +05301502 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001503 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Himani Chawla43f95ff2021-06-03 00:24:12 +05301504 if err != nil {
1505 logger.Errorw(ctx, "Cannot send get-request-msg", log.Fields{"meClassIDName": classID, "Err": err, "device-id": oo.deviceID})
1506 return err
1507 }
1508 logger.Debugw(ctx, "send get-request-msg done", log.Fields{"meClassIDName": classID, "device-id": oo.deviceID})
1509 return nil
1510}
1511
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001512// SendCreateDot1PMapper creates Ieee8021PMapperServiceProfile ME instance
1513func (oo *OmciCC) SendCreateDot1PMapper(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001514 aInstID uint16, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001515 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001516 logger.Debugw(ctx, "send .1pMapper-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001517 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(aInstID), 16)})
1518
1519 meParams := me.ParamData{
mpagenko8b5fdd22020-12-17 17:58:32 +00001520 EntityID: aInstID,
1521 Attributes: me.AttributeValueMap{
1522 //workaround for unsuitable omci-lib default values, cmp VOL-3729
Holger Hildebrandt3ac49bd2022-02-07 17:46:43 +00001523 me.Ieee8021PMapperServiceProfile_TpPointer: 0xFFFF,
1524 me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority0: 0xFFFF,
1525 me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority1: 0xFFFF,
1526 me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority2: 0xFFFF,
1527 me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority3: 0xFFFF,
1528 me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority4: 0xFFFF,
1529 me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority5: 0xFFFF,
1530 me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority6: 0xFFFF,
1531 me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority7: 0xFFFF,
mpagenko8b5fdd22020-12-17 17:58:32 +00001532 },
mpagenko3dbcdd22020-07-22 07:38:45 +00001533 }
1534 meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(meParams)
1535 if omciErr.GetError() == nil {
1536 //we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001537 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1538 oframe.TransactionID(tid), oframe.AddDefaults(true))
mpagenko3dbcdd22020-07-22 07:38:45 +00001539 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001540 logger.Errorw(ctx, "Cannot encode .1pMapper for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001541 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001542 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001543 }
1544
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001545 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001546 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001547 logger.Errorw(ctx, "Cannot serialize .1pMapper create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001548 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001549 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001550 }
1551
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001552 omciRxCallbackPair := CallbackPair{
1553 CbKey: tid,
1554 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001555 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001556 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001557 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001558 logger.Errorw(ctx, "Cannot send .1pMapper create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001559 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001560 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001561 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001562 logger.Debug(ctx, "send .1pMapper-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001563 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001564 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001565 logger.Errorw(ctx, "Cannot generate .1pMapper", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001566 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001567 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001568}
1569
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001570// SendCreateMBPConfigDataVar creates MacBridgePortConfigurationData ME instance
1571func (oo *OmciCC) SendCreateMBPConfigDataVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001572 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001573 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001574 logger.Debugw(ctx, "send MBPCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001575 "SequNo": strconv.FormatInt(int64(tid), 16),
1576 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1577
1578 meInstance, omciErr := me.NewMacBridgePortConfigurationData(params[0])
1579 if omciErr.GetError() == nil {
1580 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001581 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1582 oframe.TransactionID(tid), oframe.AddDefaults(true))
mpagenko3dbcdd22020-07-22 07:38:45 +00001583 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001584 logger.Errorw(ctx, "Cannot encode MBPCD for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001585 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001586 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001587 }
1588
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001589 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001590 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001591 logger.Errorw(ctx, "Cannot serialize MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001592 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001593 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001594 }
1595
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001596 omciRxCallbackPair := CallbackPair{
1597 CbKey: tid,
1598 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001599 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001600 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001601 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001602 logger.Errorw(ctx, "Cannot send MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001603 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001604 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001605 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001606 logger.Debug(ctx, "send MBPCD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001607 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001608 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001609 logger.Errorw(ctx, "Cannot generate MBPCD Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001610 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001611 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001612}
1613
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001614// SendCreateGemNCTPVar creates GemPortNetworkCtp ME instance
1615func (oo *OmciCC) SendCreateGemNCTPVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001616 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001617 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001618 logger.Debugw(ctx, "send GemNCTP-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001619 "SequNo": strconv.FormatInt(int64(tid), 16),
1620 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1621
1622 meInstance, omciErr := me.NewGemPortNetworkCtp(params[0])
1623 if omciErr.GetError() == nil {
1624 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001625 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1626 oframe.TransactionID(tid), oframe.AddDefaults(true))
mpagenko3dbcdd22020-07-22 07:38:45 +00001627 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001628 logger.Errorw(ctx, "Cannot encode GemNCTP for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001629 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001630 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001631 }
1632
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001633 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001634 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001635 logger.Errorw(ctx, "Cannot serialize GemNCTP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001636 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001637 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001638 }
1639
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001640 omciRxCallbackPair := CallbackPair{
1641 CbKey: tid,
1642 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001643 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001644 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001645 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001646 logger.Errorw(ctx, "Cannot send GemNCTP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001647 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001648 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001649 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001650 logger.Debug(ctx, "send GemNCTP-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001651 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001652 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001653 logger.Errorw(ctx, "Cannot generate GemNCTP Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001654 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001655 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001656}
1657
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001658// SendSetGemNCTPVar sets GemPortNetworkCtp ME instance
1659func (oo *OmciCC) SendSetGemNCTPVar(ctx context.Context, timeout int, highPrio bool, rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
1660 tid := oo.GetNextTid(highPrio)
ozgecanetsia82b91a62021-05-21 18:54:49 +03001661 logger.Debugw(ctx, "send GemNCTP-Set-msg:", log.Fields{"device-id": oo.deviceID,
1662 "SequNo": strconv.FormatInt(int64(tid), 16),
1663 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1664
1665 meInstance, omciErr := me.NewGemPortNetworkCtp(params[0])
1666 if omciErr.GetError() == nil {
1667 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001668 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType,
1669 oframe.TransactionID(tid), oframe.AddDefaults(true))
ozgecanetsia82b91a62021-05-21 18:54:49 +03001670 if err != nil {
1671 logger.Errorw(ctx, "Cannot encode GemNCTP for set", log.Fields{
1672 "Err": err, "device-id": oo.deviceID})
1673 return nil, err
1674 }
1675
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001676 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia82b91a62021-05-21 18:54:49 +03001677 if err != nil {
1678 logger.Errorw(ctx, "Cannot serialize GemNCTP set", log.Fields{
1679 "Err": err, "device-id": oo.deviceID})
1680 return nil, err
1681 }
1682
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001683 omciRxCallbackPair := CallbackPair{
1684 CbKey: tid,
1685 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia82b91a62021-05-21 18:54:49 +03001686 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001687 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia82b91a62021-05-21 18:54:49 +03001688 if err != nil {
1689 logger.Errorw(ctx, "Cannot send GemNCTP set", log.Fields{
1690 "Err": err, "device-id": oo.deviceID})
1691 return nil, err
1692 }
1693 logger.Debug(ctx, "send GemNCTP-Set-msg done", log.Fields{"device-id": oo.deviceID})
1694 return meInstance, nil
1695 }
1696 logger.Errorw(ctx, "Cannot generate GemNCTP Instance", log.Fields{
1697 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1698 return nil, omciErr.GetError()
1699}
1700
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001701// SendCreateGemIWTPVar creates GemInterworkingTerminationPoint ME instance
1702func (oo *OmciCC) SendCreateGemIWTPVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001703 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001704 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001705 logger.Debugw(ctx, "send GemIwTp-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001706 "SequNo": strconv.FormatInt(int64(tid), 16),
1707 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1708
1709 meInstance, omciErr := me.NewGemInterworkingTerminationPoint(params[0])
1710 if omciErr.GetError() == nil {
1711 //all SetByCreate Parameters (assumed to be) set here, for optimisation no 'AddDefaults'
mpagenko836a1fd2021-11-01 16:12:42 +00001712 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1713 oframe.TransactionID(tid))
mpagenko3dbcdd22020-07-22 07:38:45 +00001714 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001715 logger.Errorw(ctx, "Cannot encode GemIwTp for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001716 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001717 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001718 }
1719
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001720 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001721 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001722 logger.Errorw(ctx, "Cannot serialize GemIwTp create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001723 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001724 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001725 }
1726
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001727 omciRxCallbackPair := CallbackPair{
1728 CbKey: tid,
1729 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001730 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001731 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001732 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001733 logger.Errorw(ctx, "Cannot send GemIwTp create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001734 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001735 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001736 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001737 logger.Debug(ctx, "send GemIwTp-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001738 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001739 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001740 logger.Errorw(ctx, "Cannot generate GemIwTp Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001741 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001742 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001743}
1744
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001745// SendSetTcontVar sets TCont ME instance
1746func (oo *OmciCC) SendSetTcontVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001747 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001748 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001749 logger.Debugw(ctx, "send TCont-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001750 "SequNo": strconv.FormatInt(int64(tid), 16),
1751 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1752
1753 meInstance, omciErr := me.NewTCont(params[0])
1754 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001755 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
mpagenko3dbcdd22020-07-22 07:38:45 +00001756 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001757 logger.Errorw(ctx, "Cannot encode TCont for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001758 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001759 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001760 }
1761
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001762 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001763 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001764 logger.Errorw(ctx, "Cannot serialize TCont set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001765 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001766 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001767 }
1768
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001769 omciRxCallbackPair := CallbackPair{
1770 CbKey: tid,
1771 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001772 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001773 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001774 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001775 logger.Errorw(ctx, "Cannot send TCont set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001776 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001777 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001778 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001779 logger.Debug(ctx, "send TCont-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001780 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001781 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001782 logger.Errorw(ctx, "Cannot generate TCont Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001783 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001784 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001785}
1786
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001787// SendSetPrioQueueVar sets PriorityQueue ME instance
1788func (oo *OmciCC) SendSetPrioQueueVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001789 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001790 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001791 logger.Debugw(ctx, "send PrioQueue-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001792 "SequNo": strconv.FormatInt(int64(tid), 16),
1793 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1794
1795 meInstance, omciErr := me.NewPriorityQueue(params[0])
1796 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001797 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
mpagenko3dbcdd22020-07-22 07:38:45 +00001798 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001799 logger.Errorw(ctx, "Cannot encode PrioQueue for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001800 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001801 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001802 }
1803
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001804 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001805 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001806 logger.Errorw(ctx, "Cannot serialize PrioQueue set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001807 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001808 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001809 }
1810
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001811 omciRxCallbackPair := CallbackPair{
1812 CbKey: tid,
1813 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001814 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001815 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001816 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001817 logger.Errorw(ctx, "Cannot send PrioQueue set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001818 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001819 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001820 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001821 logger.Debug(ctx, "send PrioQueue-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001822 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001823 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001824 logger.Errorw(ctx, "Cannot generate PrioQueue Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001825 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001826 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001827}
1828
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001829// SendSetDot1PMapperVar sets Ieee8021PMapperServiceProfile ME instance
1830func (oo *OmciCC) SendSetDot1PMapperVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001831 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001832 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001833 logger.Debugw(ctx, "send 1PMapper-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001834 "SequNo": strconv.FormatInt(int64(tid), 16),
1835 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1836
1837 meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(params[0])
1838 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001839 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
mpagenko3dbcdd22020-07-22 07:38:45 +00001840 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001841 logger.Errorw(ctx, "Cannot encode 1PMapper for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001842 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001843 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001844 }
1845
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001846 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001847 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001848 logger.Errorw(ctx, "Cannot serialize 1PMapper set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001849 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001850 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001851 }
1852
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001853 omciRxCallbackPair := CallbackPair{
1854 CbKey: tid,
1855 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001856 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001857 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001858 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001859 logger.Errorw(ctx, "Cannot send 1PMapper set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001860 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001861 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001862 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001863 logger.Debug(ctx, "send 1PMapper-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001864 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001865 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001866 logger.Errorw(ctx, "Cannot generate 1PMapper Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001867 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001868 return nil, omciErr.GetError()
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001869}
mpagenkodff5dda2020-08-28 11:52:01 +00001870
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001871// SendCreateVtfdVar creates VlanTaggingFilterData ME instance
1872func (oo *OmciCC) SendCreateVtfdVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001873 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001874 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001875 logger.Debugw(ctx, "send VTFD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenkodff5dda2020-08-28 11:52:01 +00001876 "SequNo": strconv.FormatInt(int64(tid), 16),
1877 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1878
1879 meInstance, omciErr := me.NewVlanTaggingFilterData(params[0])
1880 if omciErr.GetError() == nil {
1881 //all SetByCreate Parameters (assumed to be) set here, for optimisation no 'AddDefaults'
mpagenko836a1fd2021-11-01 16:12:42 +00001882 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1883 oframe.TransactionID(tid))
mpagenkodff5dda2020-08-28 11:52:01 +00001884 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001885 logger.Errorw(ctx, "Cannot encode VTFD for create", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001886 "Err": err, "device-id": oo.deviceID})
1887 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1888 // return (dual format) error code that can be used at caller for immediate error treatment
1889 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03001890 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00001891 }
1892
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001893 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenkodff5dda2020-08-28 11:52:01 +00001894 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001895 logger.Errorw(ctx, "Cannot serialize VTFD create", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001896 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001897 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00001898 }
1899
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001900 omciRxCallbackPair := CallbackPair{
1901 CbKey: tid,
1902 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenkodff5dda2020-08-28 11:52:01 +00001903 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001904 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenkodff5dda2020-08-28 11:52:01 +00001905 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001906 logger.Errorw(ctx, "Cannot send VTFD create", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001907 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001908 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00001909 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001910 logger.Debug(ctx, "send VTFD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001911 return meInstance, nil
mpagenkodff5dda2020-08-28 11:52:01 +00001912 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001913 logger.Errorw(ctx, "Cannot generate VTFD Instance", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001914 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001915 return nil, omciErr.GetError()
mpagenkodff5dda2020-08-28 11:52:01 +00001916}
1917
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001918// nolint: unused
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001919func (oo *OmciCC) sendSetVtfdVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001920 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001921 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001922 logger.Debugw(ctx, "send VTFD-Set-msg:", log.Fields{"device-id": oo.deviceID,
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001923 "SequNo": strconv.FormatInt(int64(tid), 16),
1924 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1925
1926 meInstance, omciErr := me.NewVlanTaggingFilterData(params[0])
1927 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001928 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType,
1929 oframe.TransactionID(tid))
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001930 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001931 logger.Errorw(ctx, "Cannot encode VTFD for set", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001932 "Err": err, "device-id": oo.deviceID})
1933 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1934 // return (dual format) error code that can be used at caller for immediate error treatment
1935 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03001936 return nil, err
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001937 }
1938
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001939 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001940 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001941 logger.Errorw(ctx, "Cannot serialize VTFD set", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001942 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001943 return nil, err
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001944 }
1945
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001946 omciRxCallbackPair := CallbackPair{
1947 CbKey: tid,
1948 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001949 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001950 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001951 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001952 logger.Errorw(ctx, "Cannot send VTFD set", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001953 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001954 return nil, err
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001955 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001956 logger.Debug(ctx, "send VTFD-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001957 return meInstance, nil
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001958 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001959 logger.Errorw(ctx, "Cannot generate VTFD Instance", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001960 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001961 return nil, omciErr.GetError()
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001962}
1963
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001964// SendCreateEvtocdVar creates ExtendedVlanTaggingOperationConfigurationData ME instance
1965func (oo *OmciCC) SendCreateEvtocdVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001966 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001967 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001968 logger.Debugw(ctx, "send EVTOCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001969 "SequNo": strconv.FormatInt(int64(tid), 16),
1970 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1971
1972 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(params[0])
1973 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001974 //EnhancedMode not yet supported, used with default options
1975 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1976 oframe.TransactionID(tid), oframe.AddDefaults(true))
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001977 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001978 logger.Errorw(ctx, "Cannot encode EVTOCD for create", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001979 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001980 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001981 }
1982
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00001983 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001984 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001985 logger.Errorw(ctx, "Cannot serialize EVTOCD create", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001986 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001987 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001988 }
1989
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001990 omciRxCallbackPair := CallbackPair{
1991 CbKey: tid,
1992 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001993 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001994 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001995 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001996 logger.Errorw(ctx, "Cannot send EVTOCD create", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001997 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001998 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001999 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002000 logger.Debug(ctx, "send EVTOCD-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002001 return meInstance, nil
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002002 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002003 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002004 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002005 return nil, omciErr.GetError()
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002006}
2007
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002008// SendSetEvtocdVar sets ExtendedVlanTaggingOperationConfigurationData ME instance
2009func (oo *OmciCC) SendSetEvtocdVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002010 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002011 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002012 logger.Debugw(ctx, "send EVTOCD-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenkodff5dda2020-08-28 11:52:01 +00002013 "SequNo": strconv.FormatInt(int64(tid), 16),
2014 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2015
2016 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(params[0])
2017 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002018 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
mpagenkodff5dda2020-08-28 11:52:01 +00002019 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002020 logger.Errorw(ctx, "Cannot encode EVTOCD for set", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00002021 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002022 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00002023 }
2024
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002025 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenkodff5dda2020-08-28 11:52:01 +00002026 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002027 logger.Errorw(ctx, "Cannot serialize EVTOCD set", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00002028 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002029 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00002030 }
2031
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002032 omciRxCallbackPair := CallbackPair{
2033 CbKey: tid,
2034 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenkodff5dda2020-08-28 11:52:01 +00002035 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002036 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenkodff5dda2020-08-28 11:52:01 +00002037 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002038 logger.Errorw(ctx, "Cannot send EVTOCD set", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00002039 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002040 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00002041 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002042 logger.Debug(ctx, "send EVTOCD-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002043 return meInstance, nil
mpagenkodff5dda2020-08-28 11:52:01 +00002044 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002045 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00002046 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002047 return nil, omciErr.GetError()
mpagenkodff5dda2020-08-28 11:52:01 +00002048}
mpagenko01e726e2020-10-23 09:45:29 +00002049
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002050// SendDeleteEvtocd deletes ExtendedVlanTaggingOperationConfigurationData ME instance
2051func (oo *OmciCC) SendDeleteEvtocd(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002052 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002053 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002054 logger.Debugw(ctx, "send EVTOCD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002055 "SequNo": strconv.FormatInt(int64(tid), 16),
2056 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2057
2058 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(params[0])
2059 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002060 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid))
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002061 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002062 logger.Errorw(ctx, "Cannot encode EVTOCD for delete", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002063 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002064 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002065 }
2066
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002067 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002068 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002069 logger.Errorw(ctx, "Cannot serialize EVTOCD delete", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002070 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002071 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002072 }
2073
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002074 omciRxCallbackPair := CallbackPair{
2075 CbKey: tid,
2076 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002077 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002078 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002079 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002080 logger.Errorw(ctx, "Cannot send EVTOCD delete", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002081 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002082 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002083 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002084 logger.Debug(ctx, "send EVTOCD-delete msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002085 return meInstance, nil
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002086 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002087 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002088 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002089 return nil, omciErr.GetError()
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002090}
2091
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002092// SendDeleteVtfd deletes VlanTaggingFilterData ME instance
2093func (oo *OmciCC) SendDeleteVtfd(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002094 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002095 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002096 logger.Debugw(ctx, "send VTFD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko01e726e2020-10-23 09:45:29 +00002097 "SequNo": strconv.FormatInt(int64(tid), 16),
2098 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2099
2100 meParams := me.ParamData{EntityID: aInstID}
2101 meInstance, omciErr := me.NewVlanTaggingFilterData(meParams)
2102 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002103 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2104 oframe.TransactionID(tid))
mpagenko01e726e2020-10-23 09:45:29 +00002105 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002106 logger.Errorw(ctx, "Cannot encode VTFD for delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00002107 "Err": err, "device-id": oo.deviceID})
2108 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2109 // return (dual format) error code that can be used at caller for immediate error treatment
2110 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002111 return nil, err
mpagenko01e726e2020-10-23 09:45:29 +00002112 }
2113
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002114 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko01e726e2020-10-23 09:45:29 +00002115 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002116 logger.Errorw(ctx, "Cannot serialize VTFD delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00002117 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002118 return nil, err
mpagenko01e726e2020-10-23 09:45:29 +00002119 }
2120
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002121 omciRxCallbackPair := CallbackPair{
2122 CbKey: tid,
2123 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko01e726e2020-10-23 09:45:29 +00002124 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002125 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko01e726e2020-10-23 09:45:29 +00002126 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002127 logger.Errorw(ctx, "Cannot send VTFD delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00002128 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002129 return nil, err
mpagenko01e726e2020-10-23 09:45:29 +00002130 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002131 logger.Debug(ctx, "send VTFD-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002132 return meInstance, nil
mpagenko01e726e2020-10-23 09:45:29 +00002133 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002134 logger.Errorw(ctx, "Cannot generate VTFD Instance for delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00002135 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002136 return nil, omciErr.GetError()
mpagenko01e726e2020-10-23 09:45:29 +00002137}
ozgecanetsia422dbf32020-10-28 14:07:19 +03002138
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002139// SendCreateTDVar creates TrafficDescriptor ME instance
2140func (oo *OmciCC) SendCreateTDVar(ctx context.Context, timeout int, highPrio bool, rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2141 tid := oo.GetNextTid(highPrio)
ozgecanetsiab6441962021-03-10 10:58:48 +03002142 logger.Debugw(ctx, "send TD-Create-msg:", log.Fields{"device-id": oo.deviceID,
2143 "SequNo": strconv.FormatInt(int64(tid), 16),
2144 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2145 meInstance, omciErr := me.NewTrafficDescriptor(params[0])
2146 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002147 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid))
ozgecanetsiab6441962021-03-10 10:58:48 +03002148 if err != nil {
2149 logger.Errorw(ctx, "Cannot encode TD for create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002150 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002151 }
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002152 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab6441962021-03-10 10:58:48 +03002153 if err != nil {
2154 logger.Errorw(ctx, "Cannot serialize TD create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002155 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002156 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002157 omciRxCallbackPair := CallbackPair{
2158 CbKey: tid,
2159 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab6441962021-03-10 10:58:48 +03002160 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002161 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab6441962021-03-10 10:58:48 +03002162 if err != nil {
2163 logger.Errorw(ctx, "Cannot send TD create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002164 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002165 }
2166 logger.Debug(ctx, "send TD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002167 return meInstance, nil
ozgecanetsiab6441962021-03-10 10:58:48 +03002168 }
2169 logger.Errorw(ctx, "Cannot generate TD Instance", log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002170 return nil, omciErr.GetError()
ozgecanetsiab6441962021-03-10 10:58:48 +03002171}
2172
2173// nolint: unused
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002174func (oo *OmciCC) sendSetTDVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002175 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002176 tid := oo.GetNextTid(highPrio)
ozgecanetsiab6441962021-03-10 10:58:48 +03002177 logger.Debugw(ctx, "send TD-Set-msg:", log.Fields{"device-id": oo.deviceID,
2178 "SequNo": strconv.FormatInt(int64(tid), 16),
2179 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2180
2181 meInstance, omciErr := me.NewTrafficDescriptor(params[0])
2182 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002183 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
ozgecanetsiab6441962021-03-10 10:58:48 +03002184 if err != nil {
2185 logger.Errorw(ctx, "Cannot encode TD for set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002186 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002187 }
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002188 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab6441962021-03-10 10:58:48 +03002189 if err != nil {
2190 logger.Errorw(ctx, "Cannot serialize TD set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002191 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002192 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002193 omciRxCallbackPair := CallbackPair{
2194 CbKey: tid,
2195 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab6441962021-03-10 10:58:48 +03002196 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002197 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab6441962021-03-10 10:58:48 +03002198 if err != nil {
2199 logger.Errorw(ctx, "Cannot send TD set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002200 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002201 }
2202 logger.Debug(ctx, "send TD-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002203 return meInstance, nil
ozgecanetsiab6441962021-03-10 10:58:48 +03002204 }
2205 logger.Errorw(ctx, "Cannot generate TD Instance", log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002206 return nil, omciErr.GetError()
ozgecanetsiab6441962021-03-10 10:58:48 +03002207
2208}
2209
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002210// SendDeleteTD - TODO: add comment
2211func (oo *OmciCC) SendDeleteTD(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002212 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002213 tid := oo.GetNextTid(highPrio)
ozgecanetsiab6441962021-03-10 10:58:48 +03002214 logger.Debugw(ctx, "send TD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
2215 "SequNo": strconv.FormatInt(int64(tid), 16),
2216 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2217
2218 meParams := me.ParamData{EntityID: aInstID}
2219 meInstance, omciErr := me.NewTrafficDescriptor(meParams)
2220 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002221 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid))
ozgecanetsiab6441962021-03-10 10:58:48 +03002222 if err != nil {
2223 logger.Errorw(ctx, "Cannot encode TD for delete", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002224 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002225 }
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002226 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab6441962021-03-10 10:58:48 +03002227 if err != nil {
2228 logger.Errorw(ctx, "Cannot serialize TD delete", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002229 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002230 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002231 omciRxCallbackPair := CallbackPair{
2232 CbKey: tid,
2233 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab6441962021-03-10 10:58:48 +03002234 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002235 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab6441962021-03-10 10:58:48 +03002236 if err != nil {
2237 logger.Errorw(ctx, "Cannot send TD delete", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002238 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002239 }
2240 logger.Debug(ctx, "send TD-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002241 return meInstance, nil
ozgecanetsiab6441962021-03-10 10:58:48 +03002242 }
2243 logger.Errorw(ctx, "Cannot generate TD Instance", log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002244 return nil, omciErr.GetError()
ozgecanetsiab6441962021-03-10 10:58:48 +03002245
2246}
2247
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002248// SendDeleteGemIWTP deletes GemInterworkingTerminationPoint ME instance
2249func (oo *OmciCC) SendDeleteGemIWTP(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002250 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002251 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002252 logger.Debugw(ctx, "send GemIwTp-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00002253 "SequNo": strconv.FormatInt(int64(tid), 16),
2254 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2255
2256 meParams := me.ParamData{EntityID: aInstID}
2257 meInstance, omciErr := me.NewGemInterworkingTerminationPoint(meParams)
2258 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002259 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2260 oframe.TransactionID(tid))
mpagenko8b07c1b2020-11-26 10:36:31 +00002261 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002262 logger.Errorw(ctx, "Cannot encode GemIwTp for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002263 "Err": err, "device-id": oo.deviceID})
2264 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2265 // return (dual format) error code that can be used at caller for immediate error treatment
2266 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002267 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002268 }
2269
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002270 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00002271 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002272 logger.Errorw(ctx, "Cannot serialize GemIwTp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002273 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002274 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002275 }
2276
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002277 omciRxCallbackPair := CallbackPair{
2278 CbKey: tid,
2279 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko8b07c1b2020-11-26 10:36:31 +00002280 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002281 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko8b07c1b2020-11-26 10:36:31 +00002282 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002283 logger.Errorw(ctx, "Cannot send GemIwTp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002284 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002285 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002286 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002287 logger.Debug(ctx, "send GemIwTp-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002288 return meInstance, nil
mpagenko8b07c1b2020-11-26 10:36:31 +00002289 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002290 logger.Errorw(ctx, "Cannot generate GemIwTp Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002291 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002292 return nil, omciErr.GetError()
mpagenko8b07c1b2020-11-26 10:36:31 +00002293}
2294
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002295// SendDeleteGemNCTP deletes GemPortNetworkCtp ME instance
2296func (oo *OmciCC) SendDeleteGemNCTP(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002297 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002298 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002299 logger.Debugw(ctx, "send GemNCtp-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00002300 "SequNo": strconv.FormatInt(int64(tid), 16),
2301 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2302
2303 meParams := me.ParamData{EntityID: aInstID}
2304 meInstance, omciErr := me.NewGemPortNetworkCtp(meParams)
2305 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002306 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2307 oframe.TransactionID(tid))
mpagenko8b07c1b2020-11-26 10:36:31 +00002308 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002309 logger.Errorw(ctx, "Cannot encode GemNCtp for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002310 "Err": err, "device-id": oo.deviceID})
2311 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2312 // return (dual format) error code that can be used at caller for immediate error treatment
2313 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002314 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002315 }
2316
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002317 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00002318 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002319 logger.Errorw(ctx, "Cannot serialize GemNCtp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002320 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002321 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002322 }
2323
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002324 omciRxCallbackPair := CallbackPair{
2325 CbKey: tid,
2326 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko8b07c1b2020-11-26 10:36:31 +00002327 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002328 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko8b07c1b2020-11-26 10:36:31 +00002329 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002330 logger.Errorw(ctx, "Cannot send GemNCtp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002331 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002332 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002333 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002334 logger.Debug(ctx, "send GemNCtp-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002335 return meInstance, nil
mpagenko8b07c1b2020-11-26 10:36:31 +00002336 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002337 logger.Errorw(ctx, "Cannot generate GemNCtp Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002338 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002339 return nil, omciErr.GetError()
mpagenko8b07c1b2020-11-26 10:36:31 +00002340}
2341
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002342// SendDeleteDot1PMapper deletes Ieee8021PMapperServiceProfile ME instance
2343func (oo *OmciCC) SendDeleteDot1PMapper(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002344 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002345 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002346 logger.Debugw(ctx, "send .1pMapper-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00002347 "SequNo": strconv.FormatInt(int64(tid), 16),
2348 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2349
2350 meParams := me.ParamData{EntityID: aInstID}
2351 meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(meParams)
2352 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002353 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2354 oframe.TransactionID(tid))
mpagenko8b07c1b2020-11-26 10:36:31 +00002355 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002356 logger.Errorw(ctx, "Cannot encode .1pMapper for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002357 "Err": err, "device-id": oo.deviceID})
2358 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2359 // return (dual format) error code that can be used at caller for immediate error treatment
2360 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002361 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002362 }
2363
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002364 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00002365 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002366 logger.Errorw(ctx, "Cannot serialize .1pMapper delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002367 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002368 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002369 }
2370
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002371 omciRxCallbackPair := CallbackPair{
2372 CbKey: tid,
2373 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko8b07c1b2020-11-26 10:36:31 +00002374 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002375 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko8b07c1b2020-11-26 10:36:31 +00002376 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002377 logger.Errorw(ctx, "Cannot send .1pMapper delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002378 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002379 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002380 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002381 logger.Debug(ctx, "send .1pMapper-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002382 return meInstance, nil
mpagenko8b07c1b2020-11-26 10:36:31 +00002383 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002384 logger.Errorw(ctx, "Cannot generate .1pMapper Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002385 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002386 return nil, omciErr.GetError()
mpagenko8b07c1b2020-11-26 10:36:31 +00002387}
2388
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002389// SendDeleteMBPConfigData deletes MacBridgePortConfigurationData ME instance
2390func (oo *OmciCC) SendDeleteMBPConfigData(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002391 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002392 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002393 logger.Debugw(ctx, "send MBPCD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00002394 "SequNo": strconv.FormatInt(int64(tid), 16),
2395 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2396
2397 meParams := me.ParamData{EntityID: aInstID}
2398 meInstance, omciErr := me.NewMacBridgePortConfigurationData(meParams)
2399 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002400 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2401 oframe.TransactionID(tid))
mpagenko8b07c1b2020-11-26 10:36:31 +00002402 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002403 logger.Errorw(ctx, "Cannot encode MBPCD for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002404 "Err": err, "device-id": oo.deviceID})
2405 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2406 // return (dual format) error code that can be used at caller for immediate error treatment
2407 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002408 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002409 }
2410
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002411 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00002412 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002413 logger.Errorw(ctx, "Cannot serialize MBPCD delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002414 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002415 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002416 }
2417
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002418 omciRxCallbackPair := CallbackPair{
2419 CbKey: tid,
2420 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko8b07c1b2020-11-26 10:36:31 +00002421 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002422 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko8b07c1b2020-11-26 10:36:31 +00002423 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002424 logger.Errorw(ctx, "Cannot send MBPCD delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002425 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002426 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002427 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002428 logger.Debug(ctx, "send MBPCD-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002429 return meInstance, nil
mpagenko8b07c1b2020-11-26 10:36:31 +00002430 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002431 logger.Errorw(ctx, "Cannot generate MBPCD Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002432 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002433 return nil, omciErr.GetError()
mpagenko8b07c1b2020-11-26 10:36:31 +00002434}
2435
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002436// SendCreateMulticastGemIWTPVar creates MulticastGemInterworkingTerminationPoint ME instance
2437func (oo *OmciCC) SendCreateMulticastGemIWTPVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002438 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002439 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002440 logger.Debugw(ctx, "send MulticastGemIWTP-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002441 "SequNo": strconv.FormatInt(int64(tid), 16),
2442 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2443
2444 meInstance, omciErr := me.NewMulticastGemInterworkingTerminationPoint(params[0])
2445 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002446 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2447 oframe.AddDefaults(true))
ozgecanetsia422dbf32020-10-28 14:07:19 +03002448 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002449 logger.Errorw(ctx, "Cannot encode MulticastGEMIWTP for create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002450 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002451 }
2452
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002453 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002454 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002455 logger.Errorw(ctx, "Cannot serialize MulticastGEMIWTP create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002456 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002457 }
2458
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002459 omciRxCallbackPair := CallbackPair{CbKey: tid,
2460 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia422dbf32020-10-28 14:07:19 +03002461 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002462 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002463 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002464 logger.Errorw(ctx, "Cannot send MulticastGEMIWTP create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002465 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002466 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002467 logger.Debug(ctx, "send MulticastGEMIWTP-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002468 return meInstance, nil
ozgecanetsia422dbf32020-10-28 14:07:19 +03002469 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002470 logger.Errorw(ctx, "Cannot generate MulticastGEMIWTP Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002471 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002472 return nil, omciErr.GetError()
ozgecanetsia422dbf32020-10-28 14:07:19 +03002473}
2474
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002475// SendSetMulticastGemIWTPVar sets MulticastGemInterworkingTerminationPoint ME instance
2476func (oo *OmciCC) SendSetMulticastGemIWTPVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002477 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002478 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002479 logger.Debugw(ctx, "send MulticastGemIWTP-set-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002480 "SequNo": strconv.FormatInt(int64(tid), 16),
2481 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2482
2483 meInstance, omciErr := me.NewMulticastGemInterworkingTerminationPoint(params[0])
2484 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002485 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2486 oframe.AddDefaults(true))
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002487 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002488 logger.Errorw(ctx, "Cannot encode MulticastGEMIWTP for set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002489 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002490 }
2491
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002492 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002493 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002494 logger.Errorw(ctx, "Cannot serialize MulticastGEMIWTP create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002495 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002496 }
2497
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002498 omciRxCallbackPair := CallbackPair{CbKey: tid,
2499 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002500 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002501 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002502 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002503 logger.Errorw(ctx, "Cannot send MulticastGEMIWTP set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002504 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002505 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002506 logger.Debug(ctx, "send MulticastGEMIWTP-set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002507 return meInstance, nil
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002508 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002509 logger.Errorw(ctx, "Cannot generate MulticastGEMIWTP Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002510 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002511 return nil, omciErr.GetError()
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002512}
2513
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002514// SendCreateMulticastOperationProfileVar creates MulticastOperationsProfile ME instance
2515func (oo *OmciCC) SendCreateMulticastOperationProfileVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002516 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002517 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002518 logger.Debugw(ctx, "send MulticastOperationProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002519 "SequNo": strconv.FormatInt(int64(tid), 16),
2520 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2521
2522 meInstance, omciErr := me.NewMulticastOperationsProfile(params[0])
2523 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002524 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2525 oframe.AddDefaults(true))
ozgecanetsia422dbf32020-10-28 14:07:19 +03002526 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002527 logger.Errorw(ctx, "Cannot encode MulticastOperationProfile for create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002528 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002529 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002530 }
2531
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002532 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002533 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002534 logger.Errorw(ctx, "Cannot serialize MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002535 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002536 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002537 }
2538
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002539 omciRxCallbackPair := CallbackPair{CbKey: tid,
2540 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia422dbf32020-10-28 14:07:19 +03002541 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002542 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002543 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002544 logger.Errorw(ctx, "Cannot send MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002545 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002546 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002547 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002548 logger.Debug(ctx, "send MulticastOperationProfile-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002549 return meInstance, nil
ozgecanetsia422dbf32020-10-28 14:07:19 +03002550 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002551 logger.Errorw(ctx, "Cannot generate MulticastOperationProfile Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002552 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002553 return nil, omciErr.GetError()
ozgecanetsia422dbf32020-10-28 14:07:19 +03002554}
2555
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002556// SendSetMulticastOperationProfileVar sets MulticastOperationsProfile ME instance
2557func (oo *OmciCC) SendSetMulticastOperationProfileVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002558 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002559 tid := oo.GetNextTid(highPrio)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002560 logger.Debugw(ctx, "send MulticastOperationProfile-set-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002561 "SequNo": strconv.FormatInt(int64(tid), 16),
2562 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2563
2564 meInstance, omciErr := me.NewMulticastOperationsProfile(params[0])
2565 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002566 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2567 oframe.AddDefaults(true))
ozgecanetsia422dbf32020-10-28 14:07:19 +03002568 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002569 logger.Errorw(ctx, "Cannot encode MulticastOperationProfile for create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002570 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002571 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002572 }
2573
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002574 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002575 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002576 logger.Errorw(ctx, "Cannot serialize MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002577 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002578 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002579 }
2580
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002581 omciRxCallbackPair := CallbackPair{CbKey: tid,
2582 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia422dbf32020-10-28 14:07:19 +03002583 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002584 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002585 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002586 logger.Errorw(ctx, "Cannot send MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002587 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002588 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002589 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002590 logger.Debug(ctx, "send MulticastOperationProfile-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002591 return meInstance, nil
ozgecanetsia422dbf32020-10-28 14:07:19 +03002592 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002593 logger.Errorw(ctx, "Cannot generate MulticastOperationProfile Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002594 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002595 return nil, omciErr.GetError()
ozgecanetsia422dbf32020-10-28 14:07:19 +03002596}
2597
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002598// SendCreateMulticastSubConfigInfoVar creates MulticastSubscriberConfigInfo ME instance
2599func (oo *OmciCC) SendCreateMulticastSubConfigInfoVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002600 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002601 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002602 logger.Debugw(ctx, "send MulticastSubConfigInfo-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002603 "SequNo": strconv.FormatInt(int64(tid), 16),
2604 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2605
2606 meInstance, omciErr := me.NewMulticastSubscriberConfigInfo(params[0])
2607 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002608 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2609 oframe.AddDefaults(true))
ozgecanetsia422dbf32020-10-28 14:07:19 +03002610 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002611 logger.Errorw(ctx, "Cannot encode MulticastSubConfigInfo for create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002612 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002613 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002614 }
2615
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002616 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002617 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002618 logger.Errorw(ctx, "Cannot serialize MulticastSubConfigInfo create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002619 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002620 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002621 }
2622
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002623 omciRxCallbackPair := CallbackPair{CbKey: tid,
2624 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia422dbf32020-10-28 14:07:19 +03002625 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002626 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002627 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002628 logger.Errorw(ctx, "Cannot send MulticastSubConfigInfo create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002629 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002630 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002631 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002632 logger.Debug(ctx, "send MulticastSubConfigInfo-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002633 return meInstance, nil
ozgecanetsia422dbf32020-10-28 14:07:19 +03002634 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002635 logger.Errorw(ctx, "Cannot generate MulticastSubConfigInfo Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002636 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002637 return nil, omciErr.GetError()
ozgecanetsia422dbf32020-10-28 14:07:19 +03002638}
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +00002639
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002640// SendCreateVoipVoiceCTP nolint: unused
2641func (oo *OmciCC) SendCreateVoipVoiceCTP(ctx context.Context, timeout int, highPrio bool,
2642 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2643 tid := oo.GetNextTid(highPrio)
2644 logger.Debugw(ctx, "send VoipVoiceCTP-create-msg:", log.Fields{"device-id": oo.deviceID,
2645 "SequNo": strconv.FormatInt(int64(tid), 16),
2646 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2647
2648 meInstance, omciErr := me.NewVoipVoiceCtp(params[0])
2649 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002650 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2651 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002652 if err != nil {
2653 logger.Errorw(ctx, "Cannot encode VoipVoiceCTP for create", log.Fields{"Err": err,
2654 "device-id": oo.deviceID})
2655 return nil, err
2656 }
2657
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002658 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002659 if err != nil {
2660 logger.Errorw(ctx, "Cannot serialize VoipVoiceCTP create", log.Fields{"Err": err,
2661 "device-id": oo.deviceID})
2662 return nil, err
2663 }
2664
2665 omciRxCallbackPair := CallbackPair{CbKey: tid,
2666 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2667 }
2668 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2669 if err != nil {
2670 logger.Errorw(ctx, "Cannot send VoipVoiceCTP create", log.Fields{"Err": err,
2671 "device-id": oo.deviceID})
2672 return nil, err
2673 }
2674 logger.Debug(ctx, "send VoipVoiceCTP-create-msg done")
2675 return meInstance, nil
2676 }
2677 logger.Errorw(ctx, "Cannot generate VoipVoiceCTP Instance", log.Fields{"Err": omciErr.GetError(),
2678 "device-id": oo.deviceID})
2679 return nil, omciErr.GetError()
2680}
2681
2682// SendSetVoipVoiceCTP nolint: unused
2683func (oo *OmciCC) SendSetVoipVoiceCTP(ctx context.Context, timeout int, highPrio bool,
2684 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2685 tid := oo.GetNextTid(highPrio)
2686 logger.Debugw(ctx, "send VoipVoiceCTP-set-msg:", log.Fields{"device-id": oo.deviceID,
2687 "SequNo": strconv.FormatInt(int64(tid), 16),
2688 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2689
2690 meInstance, omciErr := me.NewVoipVoiceCtp(params[0])
2691 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002692 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2693 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002694 if err != nil {
2695 logger.Errorw(ctx, "Cannot encode VoipVoiceCTP for set", log.Fields{"Err": err,
2696 "device-id": oo.deviceID})
2697 return nil, err
2698 }
2699
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002700 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002701 if err != nil {
2702 logger.Errorw(ctx, "Cannot serialize VoipVoiceCTP set", log.Fields{"Err": err,
2703 "device-id": oo.deviceID})
2704 return nil, err
2705 }
2706
2707 omciRxCallbackPair := CallbackPair{CbKey: tid,
2708 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2709 }
2710 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2711 if err != nil {
2712 logger.Errorw(ctx, "Cannot send VoipVoiceCTP set", log.Fields{"Err": err,
2713 "device-id": oo.deviceID})
2714 return nil, err
2715 }
2716 logger.Debug(ctx, "send VoipVoiceCTP-set-msg done")
2717 return meInstance, nil
2718 }
2719 logger.Errorw(ctx, "Cannot generate VoipVoiceCTP Instance", log.Fields{"Err": omciErr.GetError(),
2720 "device-id": oo.deviceID})
2721 return nil, omciErr.GetError()
2722}
2723
2724// SendDeleteVoipVoiceCTP nolint: unused
2725func (oo *OmciCC) SendDeleteVoipVoiceCTP(ctx context.Context, timeout int, highPrio bool,
2726 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
2727 tid := oo.GetNextTid(highPrio)
2728 logger.Debugw(ctx, "send VoipVoiceCTP-Delete-msg:", log.Fields{"device-id": oo.deviceID,
2729 "SequNo": strconv.FormatInt(int64(tid), 16),
2730 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2731
2732 meParams := me.ParamData{EntityID: aInstID}
2733 meInstance, omciErr := me.NewVoipVoiceCtp(meParams)
2734 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002735 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2736 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002737 if err != nil {
2738 logger.Errorw(ctx, "Cannot encode VoipVoiceCTP for delete", log.Fields{
2739 "Err": err, "device-id": oo.deviceID})
2740 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2741 // return (dual format) error code that can be used at caller for immediate error treatment
2742 // (relevant to all used sendXX() methods and their error conditions)
2743 return nil, err
2744 }
2745
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002746 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002747 if err != nil {
2748 logger.Errorw(ctx, "Cannot serialize VoipVoiceCTP delete", log.Fields{
2749 "Err": err, "device-id": oo.deviceID})
2750 return nil, err
2751 }
2752
2753 omciRxCallbackPair := CallbackPair{
2754 CbKey: tid,
2755 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2756 }
2757 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2758 if err != nil {
2759 logger.Errorw(ctx, "Cannot send VoipVoiceCTP delete", log.Fields{
2760 "Err": err, "device-id": oo.deviceID})
2761 return nil, err
2762 }
2763 logger.Debug(ctx, "send VoipVoiceCTP-Delete-msg done")
2764 return meInstance, nil
2765 }
2766 logger.Errorw(ctx, "Cannot generate VoipVoiceCTP Instance for delete", log.Fields{
2767 "Err": omciErr.GetError(), "device-id": oo.deviceID})
2768 return nil, omciErr.GetError()
2769}
2770
2771// SendCreateVoipMediaProfile nolint: unused
2772func (oo *OmciCC) SendCreateVoipMediaProfile(ctx context.Context, timeout int, highPrio bool,
2773 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2774 tid := oo.GetNextTid(highPrio)
2775 logger.Debugw(ctx, "send VoipMediaProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
2776 "SequNo": strconv.FormatInt(int64(tid), 16),
2777 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2778
2779 meInstance, omciErr := me.NewVoipMediaProfile(params[0])
2780 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002781 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2782 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002783 if err != nil {
2784 logger.Errorw(ctx, "Cannot encode VoipMediaProfile for create", log.Fields{"Err": err,
2785 "device-id": oo.deviceID})
2786 return nil, err
2787 }
2788
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002789 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002790 if err != nil {
2791 logger.Errorw(ctx, "Cannot serialize VoipMediaProfile create", log.Fields{"Err": err,
2792 "device-id": oo.deviceID})
2793 return nil, err
2794 }
2795
2796 omciRxCallbackPair := CallbackPair{CbKey: tid,
2797 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2798 }
2799 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2800 if err != nil {
2801 logger.Errorw(ctx, "Cannot send VoipMediaProfile create", log.Fields{"Err": err,
2802 "device-id": oo.deviceID})
2803 return nil, err
2804 }
2805 logger.Debug(ctx, "send VoipMediaProfile-create-msg done")
2806 return meInstance, nil
2807 }
2808 logger.Errorw(ctx, "Cannot generate VoipMediaProfile Instance", log.Fields{"Err": omciErr.GetError(),
2809 "device-id": oo.deviceID})
2810 return nil, omciErr.GetError()
2811}
2812
2813// SendSetVoipMediaProfile nolint: unused
2814func (oo *OmciCC) SendSetVoipMediaProfile(ctx context.Context, timeout int, highPrio bool,
2815 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2816 tid := oo.GetNextTid(highPrio)
2817 logger.Debugw(ctx, "send VoipMediaProfile-set-msg:", log.Fields{"device-id": oo.deviceID,
2818 "SequNo": strconv.FormatInt(int64(tid), 16),
2819 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2820
2821 meInstance, omciErr := me.NewVoipMediaProfile(params[0])
2822 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002823 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2824 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002825 if err != nil {
2826 logger.Errorw(ctx, "Cannot encode VoipMediaProfile for set", log.Fields{"Err": err,
2827 "device-id": oo.deviceID})
2828 return nil, err
2829 }
2830
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002831 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002832 if err != nil {
2833 logger.Errorw(ctx, "Cannot serialize VoipMediaProfile set", log.Fields{"Err": err,
2834 "device-id": oo.deviceID})
2835 return nil, err
2836 }
2837
2838 omciRxCallbackPair := CallbackPair{CbKey: tid,
2839 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2840 }
2841 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2842 if err != nil {
2843 logger.Errorw(ctx, "Cannot send VoipMediaProfile set", log.Fields{"Err": err,
2844 "device-id": oo.deviceID})
2845 return nil, err
2846 }
2847 logger.Debug(ctx, "send VoipMediaProfile-set-msg done")
2848 return meInstance, nil
2849 }
2850 logger.Errorw(ctx, "Cannot generate VoipMediaProfile Instance", log.Fields{"Err": omciErr.GetError(),
2851 "device-id": oo.deviceID})
2852 return nil, omciErr.GetError()
2853}
2854
2855// SendDeleteVoipMediaProfile nolint: unused
2856func (oo *OmciCC) SendDeleteVoipMediaProfile(ctx context.Context, timeout int, highPrio bool,
2857 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
2858 tid := oo.GetNextTid(highPrio)
2859 logger.Debugw(ctx, "send VoipMediaProfile-Delete-msg:", log.Fields{"device-id": oo.deviceID,
2860 "SequNo": strconv.FormatInt(int64(tid), 16),
2861 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2862
2863 meParams := me.ParamData{EntityID: aInstID}
2864 meInstance, omciErr := me.NewVoipMediaProfile(meParams)
2865 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002866 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2867 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002868 if err != nil {
2869 logger.Errorw(ctx, "Cannot encode VoipMediaProfile for delete", log.Fields{
2870 "Err": err, "device-id": oo.deviceID})
2871 return nil, err
2872 }
2873
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002874 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002875 if err != nil {
2876 logger.Errorw(ctx, "Cannot serialize VoipMediaProfile delete", log.Fields{
2877 "Err": err, "device-id": oo.deviceID})
2878 return nil, err
2879 }
2880
2881 omciRxCallbackPair := CallbackPair{
2882 CbKey: tid,
2883 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2884 }
2885 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2886 if err != nil {
2887 logger.Errorw(ctx, "Cannot send VoipMediaProfile delete", log.Fields{
2888 "Err": err, "device-id": oo.deviceID})
2889 return nil, err
2890 }
2891 logger.Debug(ctx, "send VoipMediaProfile-Delete-msg done")
2892 return meInstance, nil
2893 }
2894 logger.Errorw(ctx, "Cannot generate VoipMediaProfile Instance for delete", log.Fields{
2895 "Err": omciErr.GetError(), "device-id": oo.deviceID})
2896 return nil, omciErr.GetError()
2897}
2898
2899// SendCreateVoiceServiceProfile nolint: unused
2900func (oo *OmciCC) SendCreateVoiceServiceProfile(ctx context.Context, timeout int, highPrio bool,
2901 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2902 tid := oo.GetNextTid(highPrio)
2903 logger.Debugw(ctx, "send VoiceServiceProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
2904 "SequNo": strconv.FormatInt(int64(tid), 16),
2905 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2906
2907 meInstance, omciErr := me.NewVoiceServiceProfile(params[0])
2908 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002909 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2910 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002911 if err != nil {
2912 logger.Errorw(ctx, "Cannot encode VoiceServiceProfile for create", log.Fields{"Err": err,
2913 "device-id": oo.deviceID})
2914 return nil, err
2915 }
2916
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002917 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002918 if err != nil {
2919 logger.Errorw(ctx, "Cannot serialize VoiceServiceProfile create", log.Fields{"Err": err,
2920 "device-id": oo.deviceID})
2921 return nil, err
2922 }
2923
2924 omciRxCallbackPair := CallbackPair{CbKey: tid,
2925 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2926 }
2927 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2928 if err != nil {
2929 logger.Errorw(ctx, "Cannot send VoiceServiceProfile create", log.Fields{"Err": err,
2930 "device-id": oo.deviceID})
2931 return nil, err
2932 }
2933 logger.Debug(ctx, "send VoiceServiceProfile-create-msg done")
2934 return meInstance, nil
2935 }
2936 logger.Errorw(ctx, "Cannot generate VoiceServiceProfile Instance", log.Fields{"Err": omciErr.GetError(),
2937 "device-id": oo.deviceID})
2938 return nil, omciErr.GetError()
2939}
2940
2941// SendSetVoiceServiceProfile nolint: unused
2942func (oo *OmciCC) SendSetVoiceServiceProfile(ctx context.Context, timeout int, highPrio bool,
2943 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2944 tid := oo.GetNextTid(highPrio)
2945 logger.Debugw(ctx, "send VoiceServiceProfile-set-msg:", log.Fields{"device-id": oo.deviceID,
2946 "SequNo": strconv.FormatInt(int64(tid), 16),
2947 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2948
2949 meInstance, omciErr := me.NewVoiceServiceProfile(params[0])
2950 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002951 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2952 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002953 if err != nil {
2954 logger.Errorw(ctx, "Cannot encode VoiceServiceProfile for set", log.Fields{"Err": err,
2955 "device-id": oo.deviceID})
2956 return nil, err
2957 }
2958
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00002959 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002960 if err != nil {
2961 logger.Errorw(ctx, "Cannot serialize VoiceServiceProfile set", log.Fields{"Err": err,
2962 "device-id": oo.deviceID})
2963 return nil, err
2964 }
2965
2966 omciRxCallbackPair := CallbackPair{CbKey: tid,
2967 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2968 }
2969 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2970 if err != nil {
2971 logger.Errorw(ctx, "Cannot send VoiceServiceProfile set", log.Fields{"Err": err,
2972 "device-id": oo.deviceID})
2973 return nil, err
2974 }
2975 logger.Debug(ctx, "send VoiceServiceProfile-set-msg done")
2976 return meInstance, nil
2977 }
2978 logger.Errorw(ctx, "Cannot generate VoiceServiceProfile Instance", log.Fields{"Err": omciErr.GetError(),
2979 "device-id": oo.deviceID})
2980 return nil, omciErr.GetError()
2981}
2982
2983// SendDeleteVoiceServiceProfile nolint: unused
2984func (oo *OmciCC) SendDeleteVoiceServiceProfile(ctx context.Context, timeout int, highPrio bool,
2985 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
2986 tid := oo.GetNextTid(highPrio)
2987 logger.Debugw(ctx, "send VoiceServiceProfile-Delete-msg:", log.Fields{"device-id": oo.deviceID,
2988 "SequNo": strconv.FormatInt(int64(tid), 16),
2989 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2990
2991 meParams := me.ParamData{EntityID: aInstID}
2992 meInstance, omciErr := me.NewVoiceServiceProfile(meParams)
2993 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002994 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2995 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002996 if err != nil {
2997 logger.Errorw(ctx, "Cannot encode VoiceServiceProfile for delete", log.Fields{
2998 "Err": err, "device-id": oo.deviceID})
2999 return nil, err
3000 }
3001
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003002 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003003 if err != nil {
3004 logger.Errorw(ctx, "Cannot serialize VoiceServiceProfile delete", log.Fields{
3005 "Err": err, "device-id": oo.deviceID})
3006 return nil, err
3007 }
3008
3009 omciRxCallbackPair := CallbackPair{
3010 CbKey: tid,
3011 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3012 }
3013 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3014 if err != nil {
3015 logger.Errorw(ctx, "Cannot send VoiceServiceProfile delete", log.Fields{
3016 "Err": err, "device-id": oo.deviceID})
3017 return nil, err
3018 }
3019 logger.Debug(ctx, "send VoiceServiceProfile-Delete-msg done")
3020 return meInstance, nil
3021 }
3022 logger.Errorw(ctx, "Cannot generate VoiceServiceProfile Instance for delete", log.Fields{
3023 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3024 return nil, omciErr.GetError()
3025}
3026
3027// SendCreateSIPUserData nolint: unused
3028func (oo *OmciCC) SendCreateSIPUserData(ctx context.Context, timeout int, highPrio bool,
3029 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3030 tid := oo.GetNextTid(highPrio)
3031 logger.Debugw(ctx, "send SIPUserData-create-msg:", log.Fields{"device-id": oo.deviceID,
3032 "SequNo": strconv.FormatInt(int64(tid), 16),
3033 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3034
3035 meInstance, omciErr := me.NewSipUserData(params[0])
3036 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003037 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3038 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003039 if err != nil {
3040 logger.Errorw(ctx, "Cannot encode SIPUserData for create", log.Fields{"Err": err,
3041 "device-id": oo.deviceID})
3042 return nil, err
3043 }
3044
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003045 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003046 if err != nil {
3047 logger.Errorw(ctx, "Cannot serialize SIPUserData create", log.Fields{"Err": err,
3048 "device-id": oo.deviceID})
3049 return nil, err
3050 }
3051
3052 omciRxCallbackPair := CallbackPair{CbKey: tid,
3053 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3054 }
3055 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3056 if err != nil {
3057 logger.Errorw(ctx, "Cannot send SIPUserData create", log.Fields{"Err": err,
3058 "device-id": oo.deviceID})
3059 return nil, err
3060 }
3061 logger.Debug(ctx, "send SIPUserData-create-msg done")
3062 return meInstance, nil
3063 }
3064 logger.Errorw(ctx, "Cannot generate SIPUserData Instance", log.Fields{"Err": omciErr.GetError(),
3065 "device-id": oo.deviceID})
3066 return nil, omciErr.GetError()
3067}
3068
3069// SendSetSIPUserData nolint: unused
3070func (oo *OmciCC) SendSetSIPUserData(ctx context.Context, timeout int, highPrio bool,
3071 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3072 tid := oo.GetNextTid(highPrio)
3073 logger.Debugw(ctx, "send SIPUserData-set-msg:", log.Fields{"device-id": oo.deviceID,
3074 "SequNo": strconv.FormatInt(int64(tid), 16),
3075 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3076
3077 meInstance, omciErr := me.NewSipUserData(params[0])
3078 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003079 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3080 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003081 if err != nil {
3082 logger.Errorw(ctx, "Cannot encode SIPUserData for set", log.Fields{"Err": err,
3083 "device-id": oo.deviceID})
3084 return nil, err
3085 }
3086
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003087 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003088 if err != nil {
3089 logger.Errorw(ctx, "Cannot serialize SIPUserData set", log.Fields{"Err": err,
3090 "device-id": oo.deviceID})
3091 return nil, err
3092 }
3093
3094 omciRxCallbackPair := CallbackPair{CbKey: tid,
3095 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3096 }
3097 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3098 if err != nil {
3099 logger.Errorw(ctx, "Cannot send SIPUserData set", log.Fields{"Err": err,
3100 "device-id": oo.deviceID})
3101 return nil, err
3102 }
3103 logger.Debug(ctx, "send SIPUserData-set-msg done")
3104 return meInstance, nil
3105 }
3106 logger.Errorw(ctx, "Cannot generate SIPUserData Instance", log.Fields{"Err": omciErr.GetError(),
3107 "device-id": oo.deviceID})
3108 return nil, omciErr.GetError()
3109}
3110
3111// SendDeleteSIPUserData nolint: unused
3112func (oo *OmciCC) SendDeleteSIPUserData(ctx context.Context, timeout int, highPrio bool,
3113 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3114 tid := oo.GetNextTid(highPrio)
3115 logger.Debugw(ctx, "send SIPUserData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3116 "SequNo": strconv.FormatInt(int64(tid), 16),
3117 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3118
3119 meParams := me.ParamData{EntityID: aInstID}
3120 meInstance, omciErr := me.NewSipUserData(meParams)
3121 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003122 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3123 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003124 if err != nil {
3125 logger.Errorw(ctx, "Cannot encode SIPUserData for delete", log.Fields{
3126 "Err": err, "device-id": oo.deviceID})
3127 return nil, err
3128 }
3129
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003130 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003131 if err != nil {
3132 logger.Errorw(ctx, "Cannot serialize SIPUserData delete", log.Fields{
3133 "Err": err, "device-id": oo.deviceID})
3134 return nil, err
3135 }
3136
3137 omciRxCallbackPair := CallbackPair{
3138 CbKey: tid,
3139 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3140 }
3141 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3142 if err != nil {
3143 logger.Errorw(ctx, "Cannot send SIPUserData delete", log.Fields{
3144 "Err": err, "device-id": oo.deviceID})
3145 return nil, err
3146 }
3147 logger.Debug(ctx, "send SIPUserData-Delete-msg done")
3148 return meInstance, nil
3149 }
3150 logger.Errorw(ctx, "Cannot generate SIPUserData Instance for delete", log.Fields{
3151 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3152 return nil, omciErr.GetError()
3153}
3154
3155// SendCreateVoipApplicationServiceProfile nolint: unused
3156func (oo *OmciCC) SendCreateVoipApplicationServiceProfile(ctx context.Context, timeout int, highPrio bool,
3157 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3158 tid := oo.GetNextTid(highPrio)
3159 logger.Debugw(ctx, "send VoipApplicationServiceProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
3160 "SequNo": strconv.FormatInt(int64(tid), 16),
3161 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3162
3163 meInstance, omciErr := me.NewVoipApplicationServiceProfile(params[0])
3164 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003165 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3166 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003167 if err != nil {
3168 logger.Errorw(ctx, "Cannot encode VoipApplicationServiceProfile for create", log.Fields{"Err": err,
3169 "device-id": oo.deviceID})
3170 return nil, err
3171 }
3172
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003173 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003174 if err != nil {
3175 logger.Errorw(ctx, "Cannot serialize VoipApplicationServiceProfile create", log.Fields{"Err": err,
3176 "device-id": oo.deviceID})
3177 return nil, err
3178 }
3179
3180 omciRxCallbackPair := CallbackPair{CbKey: tid,
3181 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3182 }
3183 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3184 if err != nil {
3185 logger.Errorw(ctx, "Cannot send VoipApplicationServiceProfile create", log.Fields{"Err": err,
3186 "device-id": oo.deviceID})
3187 return nil, err
3188 }
3189 logger.Debug(ctx, "send VoipApplicationServiceProfile-create-msg done")
3190 return meInstance, nil
3191 }
3192 logger.Errorw(ctx, "Cannot generate VoipApplicationServiceProfile Instance", log.Fields{"Err": omciErr.GetError(),
3193 "device-id": oo.deviceID})
3194 return nil, omciErr.GetError()
3195}
3196
3197// SendSetVoipApplicationServiceProfile nolint: unused
3198func (oo *OmciCC) SendSetVoipApplicationServiceProfile(ctx context.Context, timeout int, highPrio bool,
3199 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3200 tid := oo.GetNextTid(highPrio)
3201 logger.Debugw(ctx, "send VoipApplicationServiceProfile-set-msg:", log.Fields{"device-id": oo.deviceID,
3202 "SequNo": strconv.FormatInt(int64(tid), 16),
3203 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3204
3205 meInstance, omciErr := me.NewVoipApplicationServiceProfile(params[0])
3206 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003207 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3208 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003209 if err != nil {
3210 logger.Errorw(ctx, "Cannot encode VoipApplicationServiceProfile for set", log.Fields{"Err": err,
3211 "device-id": oo.deviceID})
3212 return nil, err
3213 }
3214
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003215 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003216 if err != nil {
3217 logger.Errorw(ctx, "Cannot serialize VoipApplicationServiceProfile set", log.Fields{"Err": err,
3218 "device-id": oo.deviceID})
3219 return nil, err
3220 }
3221
3222 omciRxCallbackPair := CallbackPair{CbKey: tid,
3223 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3224 }
3225 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3226 if err != nil {
3227 logger.Errorw(ctx, "Cannot send VoipApplicationServiceProfile set", log.Fields{"Err": err,
3228 "device-id": oo.deviceID})
3229 return nil, err
3230 }
3231 logger.Debug(ctx, "send VoipApplicationServiceProfile-set-msg done")
3232 return meInstance, nil
3233 }
3234 logger.Errorw(ctx, "Cannot generate VoipApplicationServiceProfile Instance", log.Fields{"Err": omciErr.GetError(),
3235 "device-id": oo.deviceID})
3236 return nil, omciErr.GetError()
3237}
3238
3239// SendDeleteVoipApplicationServiceProfile nolint: unused
3240func (oo *OmciCC) SendDeleteVoipApplicationServiceProfile(ctx context.Context, timeout int, highPrio bool,
3241 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3242 tid := oo.GetNextTid(highPrio)
3243 logger.Debugw(ctx, "send SIPVoipApplicationServiceProfile-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3244 "SequNo": strconv.FormatInt(int64(tid), 16),
3245 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3246
3247 meParams := me.ParamData{EntityID: aInstID}
3248 meInstance, omciErr := me.NewVoipApplicationServiceProfile(meParams)
3249 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003250 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3251 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003252 if err != nil {
3253 logger.Errorw(ctx, "Cannot encode SIPVoipApplicationServiceProfile for delete", log.Fields{
3254 "Err": err, "device-id": oo.deviceID})
3255 return nil, err
3256 }
3257
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003258 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003259 if err != nil {
3260 logger.Errorw(ctx, "Cannot serialize SIPVoipApplicationServiceProfile delete", log.Fields{
3261 "Err": err, "device-id": oo.deviceID})
3262 return nil, err
3263 }
3264
3265 omciRxCallbackPair := CallbackPair{
3266 CbKey: tid,
3267 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3268 }
3269 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3270 if err != nil {
3271 logger.Errorw(ctx, "Cannot send SIPVoipApplicationServiceProfile delete", log.Fields{
3272 "Err": err, "device-id": oo.deviceID})
3273 return nil, err
3274 }
3275 logger.Debug(ctx, "send SIPVoipApplicationServiceProfile-Delete-msg done")
3276 return meInstance, nil
3277 }
3278 logger.Errorw(ctx, "Cannot generate SIPVoipApplicationServiceProfile Instance for delete", log.Fields{
3279 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3280 return nil, omciErr.GetError()
3281}
3282
3283// SendCreateSIPAgentConfigData nolint: unused
3284func (oo *OmciCC) SendCreateSIPAgentConfigData(ctx context.Context, timeout int, highPrio bool,
3285 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3286 tid := oo.GetNextTid(highPrio)
3287 logger.Debugw(ctx, "send SIPAgentConfigData-create-msg:", log.Fields{"device-id": oo.deviceID,
3288 "SequNo": strconv.FormatInt(int64(tid), 16),
3289 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3290
3291 meInstance, omciErr := me.NewSipAgentConfigData(params[0])
3292 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003293 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3294 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003295 if err != nil {
3296 logger.Errorw(ctx, "Cannot encode SIPAgentConfigData for create", log.Fields{"Err": err,
3297 "device-id": oo.deviceID})
3298 return nil, err
3299 }
3300
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003301 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003302 if err != nil {
3303 logger.Errorw(ctx, "Cannot serialize SIPAgentConfigData create", log.Fields{"Err": err,
3304 "device-id": oo.deviceID})
3305 return nil, err
3306 }
3307
3308 omciRxCallbackPair := CallbackPair{CbKey: tid,
3309 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3310 }
3311 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3312 if err != nil {
3313 logger.Errorw(ctx, "Cannot send SIPAgentConfigData create", log.Fields{"Err": err,
3314 "device-id": oo.deviceID})
3315 return nil, err
3316 }
3317 logger.Debug(ctx, "send SIPAgentConfigData-create-msg done")
3318 return meInstance, nil
3319 }
3320 logger.Errorw(ctx, "Cannot generate SIPAgentConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3321 "device-id": oo.deviceID})
3322 return nil, omciErr.GetError()
3323}
3324
3325// SendSetSIPAgentConfigData nolint: unused
3326func (oo *OmciCC) SendSetSIPAgentConfigData(ctx context.Context, timeout int, highPrio bool,
3327 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3328 tid := oo.GetNextTid(highPrio)
3329 logger.Debugw(ctx, "send SIPAgentConfigData-set-msg:", log.Fields{"device-id": oo.deviceID,
3330 "SequNo": strconv.FormatInt(int64(tid), 16),
3331 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3332
3333 meInstance, omciErr := me.NewSipAgentConfigData(params[0])
3334 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003335 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3336 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003337 if err != nil {
3338 logger.Errorw(ctx, "Cannot encode SIPAgentConfigData for set", log.Fields{"Err": err,
3339 "device-id": oo.deviceID})
3340 return nil, err
3341 }
3342
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003343 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003344 if err != nil {
3345 logger.Errorw(ctx, "Cannot serialize SIPAgentConfigData set", log.Fields{"Err": err,
3346 "device-id": oo.deviceID})
3347 return nil, err
3348 }
3349
3350 omciRxCallbackPair := CallbackPair{CbKey: tid,
3351 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3352 }
3353 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3354 if err != nil {
3355 logger.Errorw(ctx, "Cannot send SIPAgentConfigData set", log.Fields{"Err": err,
3356 "device-id": oo.deviceID})
3357 return nil, err
3358 }
3359 logger.Debug(ctx, "send SIPAgentConfigData-set-msg done")
3360 return meInstance, nil
3361 }
3362 logger.Errorw(ctx, "Cannot generate SIPAgentConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3363 "device-id": oo.deviceID})
3364 return nil, omciErr.GetError()
3365}
3366
3367// SendDeleteSIPAgentConfigData nolint: unused
3368func (oo *OmciCC) SendDeleteSIPAgentConfigData(ctx context.Context, timeout int, highPrio bool,
3369 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3370 tid := oo.GetNextTid(highPrio)
3371 logger.Debugw(ctx, "send SIPAgentConfigData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3372 "SequNo": strconv.FormatInt(int64(tid), 16),
3373 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3374
3375 meParams := me.ParamData{EntityID: aInstID}
3376 meInstance, omciErr := me.NewSipAgentConfigData(meParams)
3377 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003378 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3379 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003380 if err != nil {
3381 logger.Errorw(ctx, "Cannot encode SIPAgentConfigData for delete", log.Fields{
3382 "Err": err, "device-id": oo.deviceID})
3383 return nil, err
3384 }
3385
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003386 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003387 if err != nil {
3388 logger.Errorw(ctx, "Cannot serialize SIPAgentConfigData delete", log.Fields{
3389 "Err": err, "device-id": oo.deviceID})
3390 return nil, err
3391 }
3392
3393 omciRxCallbackPair := CallbackPair{
3394 CbKey: tid,
3395 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3396 }
3397 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3398 if err != nil {
3399 logger.Errorw(ctx, "Cannot send SIPAgentConfigData delete", log.Fields{
3400 "Err": err, "device-id": oo.deviceID})
3401 return nil, err
3402 }
3403 logger.Debug(ctx, "send SIPAgentConfigData-Delete-msg done")
3404 return meInstance, nil
3405 }
3406 logger.Errorw(ctx, "Cannot generate SIPAgentConfigData Instance for delete", log.Fields{
3407 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3408 return nil, omciErr.GetError()
3409}
3410
3411// SendCreateTCPUDPConfigData nolint: unused
3412func (oo *OmciCC) SendCreateTCPUDPConfigData(ctx context.Context, timeout int, highPrio bool,
3413 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3414 tid := oo.GetNextTid(highPrio)
3415 logger.Debugw(ctx, "send TCPUDPConfigData-create-msg:", log.Fields{"device-id": oo.deviceID,
3416 "SequNo": strconv.FormatInt(int64(tid), 16),
3417 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3418
3419 meInstance, omciErr := me.NewTcpUdpConfigData(params[0])
3420 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003421 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3422 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003423 if err != nil {
3424 logger.Errorw(ctx, "Cannot encode TCPUDPConfigData for create", log.Fields{"Err": err,
3425 "device-id": oo.deviceID})
3426 return nil, err
3427 }
3428
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003429 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003430 if err != nil {
3431 logger.Errorw(ctx, "Cannot serialize TCPUDPConfigData create", log.Fields{"Err": err,
3432 "device-id": oo.deviceID})
3433 return nil, err
3434 }
3435
3436 omciRxCallbackPair := CallbackPair{CbKey: tid,
3437 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3438 }
3439 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3440 if err != nil {
3441 logger.Errorw(ctx, "Cannot send TCPUDPConfigData create", log.Fields{"Err": err,
3442 "device-id": oo.deviceID})
3443 return nil, err
3444 }
3445 logger.Debug(ctx, "send TCPUDPConfigData-create-msg done")
3446 return meInstance, nil
3447 }
3448 logger.Errorw(ctx, "Cannot generate TCPUDPConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3449 "device-id": oo.deviceID})
3450 return nil, omciErr.GetError()
3451}
3452
3453// SendSetTCPUDPConfigData nolint: unused
3454func (oo *OmciCC) SendSetTCPUDPConfigData(ctx context.Context, timeout int, highPrio bool,
3455 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3456 tid := oo.GetNextTid(highPrio)
3457 logger.Debugw(ctx, "send TCPUDPConfigData-set-msg:", log.Fields{"device-id": oo.deviceID,
3458 "SequNo": strconv.FormatInt(int64(tid), 16),
3459 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3460
3461 meInstance, omciErr := me.NewTcpUdpConfigData(params[0])
3462 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003463 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3464 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003465 if err != nil {
3466 logger.Errorw(ctx, "Cannot encode TCPUDPConfigData for set", log.Fields{"Err": err,
3467 "device-id": oo.deviceID})
3468 return nil, err
3469 }
3470
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003471 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003472 if err != nil {
3473 logger.Errorw(ctx, "Cannot serialize TCPUDPConfigData set", log.Fields{"Err": err,
3474 "device-id": oo.deviceID})
3475 return nil, err
3476 }
3477
3478 omciRxCallbackPair := CallbackPair{CbKey: tid,
3479 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3480 }
3481 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3482 if err != nil {
3483 logger.Errorw(ctx, "Cannot send TCPUDPConfigData set", log.Fields{"Err": err,
3484 "device-id": oo.deviceID})
3485 return nil, err
3486 }
3487 logger.Debug(ctx, "send TCPUDPConfigData-set-msg done")
3488 return meInstance, nil
3489 }
3490 logger.Errorw(ctx, "Cannot generate TCPUDPConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3491 "device-id": oo.deviceID})
3492 return nil, omciErr.GetError()
3493}
3494
3495// SendDeleteTCPUDPConfigData nolint: unused
3496func (oo *OmciCC) SendDeleteTCPUDPConfigData(ctx context.Context, timeout int, highPrio bool,
3497 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3498 tid := oo.GetNextTid(highPrio)
3499 logger.Debugw(ctx, "send TCPUDPConfigData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3500 "SequNo": strconv.FormatInt(int64(tid), 16),
3501 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3502
3503 meParams := me.ParamData{EntityID: aInstID}
3504 meInstance, omciErr := me.NewTcpUdpConfigData(meParams)
3505 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003506 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3507 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003508 if err != nil {
3509 logger.Errorw(ctx, "Cannot encode TCPUDPConfigData for delete", log.Fields{
3510 "Err": err, "device-id": oo.deviceID})
3511 return nil, err
3512 }
3513
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003514 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003515 if err != nil {
3516 logger.Errorw(ctx, "Cannot serialize TCPUDPConfigData delete", log.Fields{
3517 "Err": err, "device-id": oo.deviceID})
3518 return nil, err
3519 }
3520
3521 omciRxCallbackPair := CallbackPair{
3522 CbKey: tid,
3523 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3524 }
3525 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3526 if err != nil {
3527 logger.Errorw(ctx, "Cannot send TCPUDPConfigData delete", log.Fields{
3528 "Err": err, "device-id": oo.deviceID})
3529 return nil, err
3530 }
3531 logger.Debug(ctx, "send TCPUDPConfigData-Delete-msg done")
3532 return meInstance, nil
3533 }
3534 logger.Errorw(ctx, "Cannot generate SIPAgentConfigData Instance for delete", log.Fields{
3535 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3536 return nil, omciErr.GetError()
3537}
3538
3539// SendCreateIPHostConfigData nolint: unused
3540func (oo *OmciCC) SendCreateIPHostConfigData(ctx context.Context, timeout int, highPrio bool,
3541 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3542 tid := oo.GetNextTid(highPrio)
3543 logger.Debugw(ctx, "send IPHostConfigData-create-msg:", log.Fields{"device-id": oo.deviceID,
3544 "SequNo": strconv.FormatInt(int64(tid), 16),
3545 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3546
3547 meInstance, omciErr := me.NewIpHostConfigData(params[0])
3548 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003549 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3550 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003551 if err != nil {
3552 logger.Errorw(ctx, "Cannot encode IPHostConfigData for create", log.Fields{"Err": err,
3553 "device-id": oo.deviceID})
3554 return nil, err
3555 }
3556
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003557 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003558 if err != nil {
3559 logger.Errorw(ctx, "Cannot serialize IPHostConfigData create", log.Fields{"Err": err,
3560 "device-id": oo.deviceID})
3561 return nil, err
3562 }
3563
3564 omciRxCallbackPair := CallbackPair{CbKey: tid,
3565 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3566 }
3567 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3568 if err != nil {
3569 logger.Errorw(ctx, "Cannot send IPHostConfigData create", log.Fields{"Err": err,
3570 "device-id": oo.deviceID})
3571 return nil, err
3572 }
3573 logger.Debug(ctx, "send IPHostConfigData-create-msg done")
3574 return meInstance, nil
3575 }
3576 logger.Errorw(ctx, "Cannot generate IPHostConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3577 "device-id": oo.deviceID})
3578 return nil, omciErr.GetError()
3579}
3580
3581// SendSetIPHostConfigData nolint: unused
3582func (oo *OmciCC) SendSetIPHostConfigData(ctx context.Context, timeout int, highPrio bool,
3583 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3584 tid := oo.GetNextTid(highPrio)
3585 logger.Debugw(ctx, "send IPHostConfigData-set-msg:", log.Fields{"device-id": oo.deviceID,
3586 "SequNo": strconv.FormatInt(int64(tid), 16),
3587 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3588
3589 meInstance, omciErr := me.NewIpHostConfigData(params[0])
3590 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003591 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3592 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003593 if err != nil {
3594 logger.Errorw(ctx, "Cannot encode IPHostConfigData for set", log.Fields{"Err": err,
3595 "device-id": oo.deviceID})
3596 return nil, err
3597 }
3598
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003599 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003600 if err != nil {
3601 logger.Errorw(ctx, "Cannot serialize IPHostConfigData set", log.Fields{"Err": err,
3602 "device-id": oo.deviceID})
3603 return nil, err
3604 }
3605
3606 omciRxCallbackPair := CallbackPair{CbKey: tid,
3607 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3608 }
3609 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3610 if err != nil {
3611 logger.Errorw(ctx, "Cannot send IPHostConfigData set", log.Fields{"Err": err,
3612 "device-id": oo.deviceID})
3613 return nil, err
3614 }
3615 logger.Debug(ctx, "send IPHostConfigData-set-msg done")
3616 return meInstance, nil
3617 }
3618 logger.Errorw(ctx, "Cannot generate IPHostConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3619 "device-id": oo.deviceID})
3620 return nil, omciErr.GetError()
3621}
3622
3623// SendDeleteIPHostConfigData nolint: unused
3624func (oo *OmciCC) SendDeleteIPHostConfigData(ctx context.Context, timeout int, highPrio bool,
3625 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3626 tid := oo.GetNextTid(highPrio)
3627 logger.Debugw(ctx, "send IPHostConfigData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3628 "SequNo": strconv.FormatInt(int64(tid), 16),
3629 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3630
3631 meParams := me.ParamData{EntityID: aInstID}
3632 meInstance, omciErr := me.NewIpHostConfigData(meParams)
3633 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003634 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3635 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003636 if err != nil {
3637 logger.Errorw(ctx, "Cannot encode IPHostConfigData for delete", log.Fields{
3638 "Err": err, "device-id": oo.deviceID})
3639 return nil, err
3640 }
3641
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003642 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003643 if err != nil {
3644 logger.Errorw(ctx, "Cannot serialize IPHostConfigData delete", log.Fields{
3645 "Err": err, "device-id": oo.deviceID})
3646 return nil, err
3647 }
3648
3649 omciRxCallbackPair := CallbackPair{
3650 CbKey: tid,
3651 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3652 }
3653 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3654 if err != nil {
3655 logger.Errorw(ctx, "Cannot send IPHostConfigData delete", log.Fields{
3656 "Err": err, "device-id": oo.deviceID})
3657 return nil, err
3658 }
3659 logger.Debug(ctx, "send IPHostConfigData-Delete-msg done")
3660 return meInstance, nil
3661 }
3662 logger.Errorw(ctx, "Cannot generate IPHostConfigData Instance for delete", log.Fields{
3663 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3664 return nil, omciErr.GetError()
3665}
3666
3667// SendCreateRTPProfileData nolint: unused
3668func (oo *OmciCC) SendCreateRTPProfileData(ctx context.Context, timeout int, highPrio bool,
3669 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3670 tid := oo.GetNextTid(highPrio)
3671 logger.Debugw(ctx, "send RTPProfileData-create-msg:", log.Fields{"device-id": oo.deviceID,
3672 "SequNo": strconv.FormatInt(int64(tid), 16),
3673 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3674
3675 meInstance, omciErr := me.NewRtpProfileData(params[0])
3676 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003677 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3678 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003679 if err != nil {
3680 logger.Errorw(ctx, "Cannot encode RTPProfileData for create", log.Fields{"Err": err,
3681 "device-id": oo.deviceID})
3682 return nil, err
3683 }
3684
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003685 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003686 if err != nil {
3687 logger.Errorw(ctx, "Cannot serialize RTPProfileData create", log.Fields{"Err": err,
3688 "device-id": oo.deviceID})
3689 return nil, err
3690 }
3691
3692 omciRxCallbackPair := CallbackPair{CbKey: tid,
3693 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3694 }
3695 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3696 if err != nil {
3697 logger.Errorw(ctx, "Cannot send RTPProfileData create", log.Fields{"Err": err,
3698 "device-id": oo.deviceID})
3699 return nil, err
3700 }
3701 logger.Debug(ctx, "send RTPProfileData-create-msg done")
3702 return meInstance, nil
3703 }
3704 logger.Errorw(ctx, "Cannot generate RTPProfileData Instance", log.Fields{"Err": omciErr.GetError(),
3705 "device-id": oo.deviceID})
3706 return nil, omciErr.GetError()
3707}
3708
3709// SendSetRTPProfileData nolint: unused
3710func (oo *OmciCC) SendSetRTPProfileData(ctx context.Context, timeout int, highPrio bool,
3711 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3712 tid := oo.GetNextTid(highPrio)
3713 logger.Debugw(ctx, "send RTPProfileData-set-msg:", log.Fields{"device-id": oo.deviceID,
3714 "SequNo": strconv.FormatInt(int64(tid), 16),
3715 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3716
3717 meInstance, omciErr := me.NewRtpProfileData(params[0])
3718 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003719 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3720 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003721 if err != nil {
3722 logger.Errorw(ctx, "Cannot encode RTPProfileData for set", log.Fields{"Err": err,
3723 "device-id": oo.deviceID})
3724 return nil, err
3725 }
3726
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003727 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003728 if err != nil {
3729 logger.Errorw(ctx, "Cannot serialize RTPProfileData set", log.Fields{"Err": err,
3730 "device-id": oo.deviceID})
3731 return nil, err
3732 }
3733
3734 omciRxCallbackPair := CallbackPair{CbKey: tid,
3735 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3736 }
3737 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3738 if err != nil {
3739 logger.Errorw(ctx, "Cannot send RTPProfileData set", log.Fields{"Err": err,
3740 "device-id": oo.deviceID})
3741 return nil, err
3742 }
3743 logger.Debug(ctx, "send RTPProfileData-set-msg done")
3744 return meInstance, nil
3745 }
3746 logger.Errorw(ctx, "Cannot generate RTPProfileData Instance", log.Fields{"Err": omciErr.GetError(),
3747 "device-id": oo.deviceID})
3748 return nil, omciErr.GetError()
3749}
3750
3751// SendDeleteRTPProfileData nolint: unused
3752func (oo *OmciCC) SendDeleteRTPProfileData(ctx context.Context, timeout int, highPrio bool,
3753 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3754 tid := oo.GetNextTid(highPrio)
3755 logger.Debugw(ctx, "send RTPProfileData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3756 "SequNo": strconv.FormatInt(int64(tid), 16),
3757 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3758
3759 meParams := me.ParamData{EntityID: aInstID}
3760 meInstance, omciErr := me.NewRtpProfileData(meParams)
3761 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003762 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3763 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003764 if err != nil {
3765 logger.Errorw(ctx, "Cannot encode RTPProfileData for delete", log.Fields{
3766 "Err": err, "device-id": oo.deviceID})
3767 return nil, err
3768 }
3769
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003770 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003771 if err != nil {
3772 logger.Errorw(ctx, "Cannot serialize RTPProfileData delete", log.Fields{
3773 "Err": err, "device-id": oo.deviceID})
3774 return nil, err
3775 }
3776
3777 omciRxCallbackPair := CallbackPair{
3778 CbKey: tid,
3779 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3780 }
3781 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3782 if err != nil {
3783 logger.Errorw(ctx, "Cannot send RTPProfileData delete", log.Fields{
3784 "Err": err, "device-id": oo.deviceID})
3785 return nil, err
3786 }
3787 logger.Debug(ctx, "send RTPProfileData-Delete-msg done")
3788 return meInstance, nil
3789 }
3790 logger.Errorw(ctx, "Cannot generate RTPProfileData Instance for delete", log.Fields{
3791 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3792 return nil, omciErr.GetError()
3793}
3794
3795// SendCreateNetworkDialPlanTable nolint: unused
3796func (oo *OmciCC) SendCreateNetworkDialPlanTable(ctx context.Context, timeout int, highPrio bool,
3797 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3798 tid := oo.GetNextTid(highPrio)
3799 logger.Debugw(ctx, "send NetworkDialPlanTable-create-msg:", log.Fields{"device-id": oo.deviceID,
3800 "SequNo": strconv.FormatInt(int64(tid), 16),
3801 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3802
3803 meInstance, omciErr := me.NewNetworkDialPlanTable(params[0])
3804 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003805 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3806 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003807 if err != nil {
3808 logger.Errorw(ctx, "Cannot encode NetworkDialPlanTable for create", log.Fields{"Err": err,
3809 "device-id": oo.deviceID})
3810 return nil, err
3811 }
3812
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003813 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003814 if err != nil {
3815 logger.Errorw(ctx, "Cannot serialize NetworkDialPlanTable create", log.Fields{"Err": err,
3816 "device-id": oo.deviceID})
3817 return nil, err
3818 }
3819
3820 omciRxCallbackPair := CallbackPair{CbKey: tid,
3821 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3822 }
3823 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3824 if err != nil {
3825 logger.Errorw(ctx, "Cannot send NetworkDialPlanTable create", log.Fields{"Err": err,
3826 "device-id": oo.deviceID})
3827 return nil, err
3828 }
3829 logger.Debug(ctx, "send NetworkDialPlanTable-create-msg done")
3830 return meInstance, nil
3831 }
3832 logger.Errorw(ctx, "Cannot generate NetworkDialPlanTable Instance", log.Fields{"Err": omciErr.GetError(),
3833 "device-id": oo.deviceID})
3834 return nil, omciErr.GetError()
3835}
3836
3837// SendSetNetworkDialPlanTable nolint: unused
3838func (oo *OmciCC) SendSetNetworkDialPlanTable(ctx context.Context, timeout int, highPrio bool,
3839 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3840 tid := oo.GetNextTid(highPrio)
3841 logger.Debugw(ctx, "send NetworkDialPlanTable-set-msg:", log.Fields{"device-id": oo.deviceID,
3842 "SequNo": strconv.FormatInt(int64(tid), 16),
3843 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3844
3845 meInstance, omciErr := me.NewNetworkDialPlanTable(params[0])
3846 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003847 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3848 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003849 if err != nil {
3850 logger.Errorw(ctx, "Cannot encode NetworkDialPlanTable for set", log.Fields{"Err": err,
3851 "device-id": oo.deviceID})
3852 return nil, err
3853 }
3854
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003855 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003856 if err != nil {
3857 logger.Errorw(ctx, "Cannot serialize NetworkDialPlanTable set", log.Fields{"Err": err,
3858 "device-id": oo.deviceID})
3859 return nil, err
3860 }
3861
3862 omciRxCallbackPair := CallbackPair{CbKey: tid,
3863 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3864 }
3865 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3866 if err != nil {
3867 logger.Errorw(ctx, "Cannot send NetworkDialPlanTable set", log.Fields{"Err": err,
3868 "device-id": oo.deviceID})
3869 return nil, err
3870 }
3871 logger.Debug(ctx, "send NetworkDialPlanTable-set-msg done")
3872 return meInstance, nil
3873 }
3874 logger.Errorw(ctx, "Cannot generate NetworkDialPlanTable Instance", log.Fields{"Err": omciErr.GetError(),
3875 "device-id": oo.deviceID})
3876 return nil, omciErr.GetError()
3877}
3878
3879// SendDeleteNetworkDialPlanTable nolint: unused
3880func (oo *OmciCC) SendDeleteNetworkDialPlanTable(ctx context.Context, timeout int, highPrio bool,
3881 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3882 tid := oo.GetNextTid(highPrio)
3883 logger.Debugw(ctx, "send NetworkDialPlanTable-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3884 "SequNo": strconv.FormatInt(int64(tid), 16),
3885 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3886
3887 meParams := me.ParamData{EntityID: aInstID}
3888 meInstance, omciErr := me.NewNetworkDialPlanTable(meParams)
3889 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003890 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3891 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003892 if err != nil {
3893 logger.Errorw(ctx, "Cannot encode NetworkDialPlanTable for delete", log.Fields{
3894 "Err": err, "device-id": oo.deviceID})
3895 return nil, err
3896 }
3897
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003898 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003899 if err != nil {
3900 logger.Errorw(ctx, "Cannot serialize NetworkDialPlanTable delete", log.Fields{
3901 "Err": err, "device-id": oo.deviceID})
3902 return nil, err
3903 }
3904
3905 omciRxCallbackPair := CallbackPair{
3906 CbKey: tid,
3907 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3908 }
3909 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3910 if err != nil {
3911 logger.Errorw(ctx, "Cannot send NetworkDialPlanTable delete", log.Fields{
3912 "Err": err, "device-id": oo.deviceID})
3913 return nil, err
3914 }
3915 logger.Debug(ctx, "send NetworkDialPlanTable-Delete-msg done")
3916 return meInstance, nil
3917 }
3918 logger.Errorw(ctx, "Cannot generate NetworkDialPlanTable Instance for delete", log.Fields{
3919 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3920 return nil, omciErr.GetError()
3921}
3922
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003923// SendSyncTime sends SynchronizeTimeRequest
3924func (oo *OmciCC) SendSyncTime(ctx context.Context, timeout int, highPrio bool, rxChan chan Message) error {
3925 tid := oo.GetNextTid(highPrio)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003926 logger.Debugw(ctx, "send synchronize time request:", log.Fields{"device-id": oo.deviceID,
3927 "SequNo": strconv.FormatInt(int64(tid), 16)})
3928
3929 omciLayer := &omci.OMCI{
3930 TransactionID: tid,
3931 MessageType: omci.SynchronizeTimeRequestType,
3932 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
3933 // Length: 0x28, // Optional, defaults to 40 octets
3934 }
3935 utcTime := time.Now().UTC()
3936 request := &omci.SynchronizeTimeRequest{
3937 MeBasePacket: omci.MeBasePacket{
3938 EntityClass: me.OnuGClassID,
3939 // Default Instance ID is 0
3940 },
3941 Year: uint16(utcTime.Year()),
3942 Month: uint8(utcTime.Month()),
3943 Day: uint8(utcTime.Day()),
3944 Hour: uint8(utcTime.Hour()),
3945 Minute: uint8(utcTime.Minute()),
3946 Second: uint8(utcTime.Second()),
3947 }
3948
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00003949 pkt, err := SerializeOmciLayer(ctx, omciLayer, request)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003950 if err != nil {
3951 logger.Errorw(ctx, "Cannot serialize synchronize time request", log.Fields{"Err": err,
3952 "device-id": oo.deviceID})
3953 return err
3954 }
3955
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003956 omciRxCallbackPair := CallbackPair{CbKey: tid,
3957 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdrae0140f02021-02-02 16:55:09 -08003958 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003959 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003960 if err != nil {
3961 logger.Errorw(ctx, "Cannot send synchronize time request", log.Fields{"Err": err,
3962 "device-id": oo.deviceID})
3963 return err
3964 }
3965 logger.Debug(ctx, "send synchronize time request done")
3966 return nil
3967}
3968
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003969// SendCreateOrDeleteEthernetPerformanceMonitoringHistoryME creates or deletes EthernetFramePerformanceMonitoringHistoryData ME instance
3970func (oo *OmciCC) SendCreateOrDeleteEthernetPerformanceMonitoringHistoryME(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03003971 upstream bool, create bool, rxChan chan Message, entityID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003972 tid := oo.GetNextTid(highPrio)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003973 logger.Debugw(ctx, "send ethernet-performance-monitoring-history-me-msg:", log.Fields{"device-id": oo.deviceID,
3974 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create, "upstream": upstream})
3975 meParam := me.ParamData{EntityID: entityID}
3976 var meInstance *me.ManagedEntity
3977 var omciErr me.OmciErrors
3978 if upstream {
3979 meInstance, omciErr = me.NewEthernetFramePerformanceMonitoringHistoryDataUpstream(meParam)
3980 } else {
3981 meInstance, omciErr = me.NewEthernetFramePerformanceMonitoringHistoryDataDownstream(meParam)
3982 }
3983 if omciErr.GetError() == nil {
3984 var omciLayer *omci.OMCI
3985 var msgLayer gopacket.SerializableLayer
3986 var err error
3987 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00003988 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3989 oframe.AddDefaults(true))
Girish Gowdrae0140f02021-02-02 16:55:09 -08003990 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00003991 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
3992 oframe.AddDefaults(true))
Girish Gowdrae0140f02021-02-02 16:55:09 -08003993 }
3994 if err != nil {
3995 logger.Errorw(ctx, "Cannot encode ethernet frame performance monitoring history data ME",
3996 log.Fields{"Err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003997 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08003998 }
3999
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00004000 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Girish Gowdrae0140f02021-02-02 16:55:09 -08004001 if err != nil {
4002 logger.Errorw(ctx, "Cannot serialize ethernet frame performance monitoring history data ME",
4003 log.Fields{"Err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004004 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08004005 }
4006
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004007 omciRxCallbackPair := CallbackPair{CbKey: tid,
4008 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdrae0140f02021-02-02 16:55:09 -08004009 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004010 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdrae0140f02021-02-02 16:55:09 -08004011 if err != nil {
4012 logger.Errorw(ctx, "Cannot send ethernet frame performance monitoring history data ME",
4013 log.Fields{"Err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004014 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08004015 }
4016 logger.Debugw(ctx, "send ethernet frame performance monitoring history data ME done",
4017 log.Fields{"device-id": oo.deviceID, "upstream": upstream, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004018 return meInstance, nil
Girish Gowdrae0140f02021-02-02 16:55:09 -08004019 }
4020 logger.Errorw(ctx, "Cannot generate ethernet frame performance monitoring history data ME Instance",
4021 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "upstream": upstream, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004022 return nil, omciErr.GetError()
Girish Gowdrae0140f02021-02-02 16:55:09 -08004023}
4024
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004025// SendCreateOrDeleteEthernetUniHistoryME creates or deletes EthernetPerformanceMonitoringHistoryData ME instance
4026func (oo *OmciCC) SendCreateOrDeleteEthernetUniHistoryME(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03004027 create bool, rxChan chan Message, entityID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004028 tid := oo.GetNextTid(highPrio)
Girish Gowdrae0140f02021-02-02 16:55:09 -08004029 logger.Debugw(ctx, "send ethernet-uni-history-me-msg:", log.Fields{"device-id": oo.deviceID,
4030 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create})
4031 meParam := me.ParamData{EntityID: entityID}
4032 var meInstance *me.ManagedEntity
4033 var omciErr me.OmciErrors
4034 meInstance, omciErr = me.NewEthernetPerformanceMonitoringHistoryData(meParam)
4035
4036 if omciErr.GetError() == nil {
4037 var omciLayer *omci.OMCI
4038 var msgLayer gopacket.SerializableLayer
4039 var err error
4040 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00004041 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
4042 oframe.AddDefaults(true))
Girish Gowdrae0140f02021-02-02 16:55:09 -08004043 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00004044 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
4045 oframe.AddDefaults(true))
Girish Gowdrae0140f02021-02-02 16:55:09 -08004046 }
4047 if err != nil {
4048 logger.Errorw(ctx, "Cannot encode ethernet uni history data ME",
4049 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004050 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08004051 }
4052
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00004053 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Girish Gowdrae0140f02021-02-02 16:55:09 -08004054 if err != nil {
4055 logger.Errorw(ctx, "Cannot serialize ethernet uni history data ME",
4056 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004057 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08004058 }
4059
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004060 omciRxCallbackPair := CallbackPair{CbKey: tid,
4061 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdrae0140f02021-02-02 16:55:09 -08004062 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004063 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdrae0140f02021-02-02 16:55:09 -08004064 if err != nil {
4065 logger.Errorw(ctx, "Cannot send ethernet uni history data ME",
4066 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004067 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08004068 }
4069 logger.Debugw(ctx, "send ethernet uni history data ME done",
4070 log.Fields{"device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004071 return meInstance, nil
Girish Gowdrae0140f02021-02-02 16:55:09 -08004072 }
4073 logger.Errorw(ctx, "Cannot generate ethernet uni history data ME Instance",
4074 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004075 return nil, omciErr.GetError()
Girish Gowdrae0140f02021-02-02 16:55:09 -08004076}
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004077
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004078// SendCreateOrDeleteFecHistoryME creates or deletes FecPerformanceMonitoringHistoryData ME instance
4079func (oo *OmciCC) SendCreateOrDeleteFecHistoryME(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03004080 create bool, rxChan chan Message, entityID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004081 tid := oo.GetNextTid(highPrio)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004082 logger.Debugw(ctx, "send fec-history-me-msg:", log.Fields{"device-id": oo.deviceID,
4083 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create})
4084 meParam := me.ParamData{EntityID: entityID}
4085 var meInstance *me.ManagedEntity
4086 var omciErr me.OmciErrors
4087 meInstance, omciErr = me.NewFecPerformanceMonitoringHistoryData(meParam)
4088
4089 if omciErr.GetError() == nil {
4090 var omciLayer *omci.OMCI
4091 var msgLayer gopacket.SerializableLayer
4092 var err error
4093 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00004094 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
4095 oframe.AddDefaults(true))
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004096 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00004097 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
4098 oframe.AddDefaults(true))
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004099 }
4100 if err != nil {
4101 logger.Errorw(ctx, "Cannot encode fec history data ME",
4102 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004103 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004104 }
4105
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00004106 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004107 if err != nil {
4108 logger.Errorw(ctx, "Cannot serialize fec history data ME",
4109 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004110 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004111 }
4112
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004113 omciRxCallbackPair := CallbackPair{CbKey: tid,
4114 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004115 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004116 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004117 if err != nil {
4118 logger.Errorw(ctx, "Cannot send fec history data ME",
4119 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004120 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004121 }
4122 logger.Debugw(ctx, "send fec history data ME done",
4123 log.Fields{"device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004124 return meInstance, nil
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004125 }
4126 logger.Errorw(ctx, "Cannot generate fec history data ME Instance",
4127 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004128 return nil, omciErr.GetError()
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004129}
4130
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004131// SendCreateOrDeleteGemPortHistoryME deletes GemPortNetworkCtpPerformanceMonitoringHistoryData ME instance
4132func (oo *OmciCC) SendCreateOrDeleteGemPortHistoryME(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03004133 create bool, rxChan chan Message, entityID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004134 tid := oo.GetNextTid(highPrio)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004135 logger.Debugw(ctx, "send gemport-history-me-msg:", log.Fields{"device-id": oo.deviceID,
4136 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create})
4137 meParam := me.ParamData{EntityID: entityID}
4138 var meInstance *me.ManagedEntity
4139 var omciErr me.OmciErrors
4140 meInstance, omciErr = me.NewGemPortNetworkCtpPerformanceMonitoringHistoryData(meParam)
4141
4142 if omciErr.GetError() == nil {
4143 var omciLayer *omci.OMCI
4144 var msgLayer gopacket.SerializableLayer
4145 var err error
4146 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00004147 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
4148 oframe.AddDefaults(true))
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004149 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00004150 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
4151 oframe.AddDefaults(true))
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004152 }
4153 if err != nil {
4154 logger.Errorw(ctx, "Cannot encode gemport history data ME",
4155 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004156 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004157 }
4158
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00004159 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004160 if err != nil {
4161 logger.Errorw(ctx, "Cannot serialize gemport history data ME",
4162 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004163 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004164 }
4165
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004166 omciRxCallbackPair := CallbackPair{CbKey: tid,
4167 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004168 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004169 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004170 if err != nil {
4171 logger.Errorw(ctx, "Cannot send gemport history data ME",
4172 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004173 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004174 }
4175 logger.Debugw(ctx, "send gemport history data ME done",
4176 log.Fields{"device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004177 return meInstance, nil
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004178 }
4179 logger.Errorw(ctx, "Cannot generate gemport history data ME Instance",
4180 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004181 return nil, omciErr.GetError()
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004182}
4183
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004184// SendStartSoftwareDownload sends StartSoftwareDownloadRequest
4185func (oo *OmciCC) SendStartSoftwareDownload(ctx context.Context, timeout int, highPrio bool,
mpagenko80622a52021-02-09 16:53:23 +00004186 rxChan chan Message, aImageMeID uint16, aDownloadWindowSize uint8, aFileLen uint32) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004187 tid := oo.GetNextTid(highPrio)
mpagenko80622a52021-02-09 16:53:23 +00004188 logger.Debugw(ctx, "send StartSwDlRequest:", log.Fields{"device-id": oo.deviceID,
4189 "SequNo": strconv.FormatInt(int64(tid), 16),
4190 "InstId": strconv.FormatInt(int64(aImageMeID), 16)})
4191
4192 omciLayer := &omci.OMCI{
4193 TransactionID: tid,
4194 MessageType: omci.StartSoftwareDownloadRequestType,
4195 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4196 // Length: 0x28, // Optional, defaults to 40 octets
4197 }
4198 request := &omci.StartSoftwareDownloadRequest{
4199 MeBasePacket: omci.MeBasePacket{
4200 EntityClass: me.SoftwareImageClassID,
4201 EntityInstance: aImageMeID, //inactive image
4202 },
4203 WindowSize: aDownloadWindowSize,
4204 ImageSize: aFileLen,
4205 NumberOfCircuitPacks: 1, //parallel download to multiple circuit packs not supported
4206 CircuitPacks: []uint16{0}, //circuit pack indication don't care for NumberOfCircuitPacks=1, but needed by omci-lib
4207 }
4208
4209 var options gopacket.SerializeOptions
4210 options.FixLengths = true
4211 buffer := gopacket.NewSerializeBuffer()
4212 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4213 if err != nil {
4214 logger.Errorw(ctx, "Cannot serialize StartSwDlRequest", log.Fields{"Err": err,
4215 "device-id": oo.deviceID})
4216 return err
4217 }
4218 outgoingPacket := buffer.Bytes()
4219
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004220 omciRxCallbackPair := CallbackPair{CbKey: tid,
4221 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko80622a52021-02-09 16:53:23 +00004222 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004223 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko80622a52021-02-09 16:53:23 +00004224 if err != nil {
4225 logger.Errorw(ctx, "Cannot send StartSwDlRequest", log.Fields{"Err": err,
4226 "device-id": oo.deviceID})
4227 return err
4228 }
4229 logger.Debug(ctx, "send StartSwDlRequest done")
mpagenko80622a52021-02-09 16:53:23 +00004230 return nil
4231}
4232
kesavand011d5162021-11-25 19:21:06 +05304233// PrepareOnuSectionsOfWindow prepares a list of sections for each window
4234//Before invoking this function the oo.mutexTid needs to be be locked so that
4235//GetOnuSwSecNextTid can be invoked without further locking
4236func (oo *OmciCC) PrepareOnuSectionsOfWindow(ctx context.Context,
4237 aImageMeID uint16, aAckRequest uint8, aDownloadSectionNo uint8, aSection []byte,
4238 omciMsgsPerWindow *ia.OmciMessages) (OmciTransferStructure, error) {
4239 //onuswsections uses only low prioirity tids
4240 tid := oo.GetOnuSwSecNextTid()
4241 logger.Infow(ctx, "send DlSectionRequest:", log.Fields{"device-id": oo.deviceID,
4242 "SequNo": strconv.FormatInt(int64(tid), 16),
4243 "InstId": strconv.FormatInt(int64(aImageMeID), 16), "omci-ack": aAckRequest, "sectionNo": aDownloadSectionNo, "sectionData": aSection})
4244
4245 var omciTxReq OmciTransferStructure
4246 msgType := omci.DownloadSectionRequestType
4247
4248 if aAckRequest > 0 {
4249 msgType = omci.DownloadSectionRequestWithResponseType
4250
4251 }
4252 omciLayer := &omci.OMCI{
4253 TransactionID: tid,
4254 MessageType: msgType,
4255 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4256 // Length: 0x28, // Optional, defaults to 40 octets
4257 }
4258 localSectionData := make([]byte, len(aSection))
4259
4260 copy(localSectionData[:], aSection) // as long as DownloadSectionRequest defines array for SectionData we need to copy into the array
4261 request := &omci.DownloadSectionRequest{
4262 MeBasePacket: omci.MeBasePacket{
4263 EntityClass: me.SoftwareImageClassID,
4264 EntityInstance: aImageMeID, //inactive image
4265 },
4266 SectionNumber: aDownloadSectionNo,
4267 SectionData: localSectionData,
4268 }
4269
4270 var options gopacket.SerializeOptions
4271 options.FixLengths = true
4272 buffer := gopacket.NewSerializeBuffer()
4273 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4274 if err != nil {
4275 logger.Errorw(ctx, "Cannot serialize DlSectionRequest", log.Fields{"Err": err,
4276 "device-id": oo.deviceID})
4277 return omciTxReq, err
4278 }
4279 outgoingPacket := buffer.Bytes()
4280
4281 omciMsgsPerWindow.Messages = append(omciMsgsPerWindow.Messages, outgoingPacket)
4282
4283 if aAckRequest > 0 {
4284 // only the last section should have a timeout as an ack is required only for the last section of the window
4285 omciTxReq = OmciTransferStructure{
4286 withFramePrint: true,
4287 OnuSwWindow: omciMsgsPerWindow,
4288 }
4289 return omciTxReq, nil
4290 }
4291
4292 return omciTxReq, nil
4293}
4294
4295//SendOnuSwSectionsWindowWithRxSupervision sends onu swd sections
4296func (oo *OmciCC) SendOnuSwSectionsWindowWithRxSupervision(ctx context.Context,
4297 aOmciTxRequest OmciTransferStructure, aTimeout int, rxChan chan Message) {
4298 if aOmciTxRequest.OnuSwWindow == nil {
4299 logger.Errorw(ctx, "SendOnuSwSectionsWindowWithRxSupervision: omciTxRequest.OnuSwWindow is nil",
4300 log.Fields{"device-id": oo.deviceID})
4301 return
4302
4303 }
4304
4305 tid := oo.GetOnuSwSecLastTid()
4306 logger.Debugw(ctx, "SendOnuSwSectionsWindowWithRxSupervision tid for the last segment is ", log.Fields{"TID": tid})
4307 omciRxCallbackPair := CallbackPair{CbKey: tid,
4308 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
4309 }
4310
4311 aOmciTxRequest.cbPair = omciRxCallbackPair
4312 logger.Debugw(ctx, "register-response-callback:", log.Fields{"for TansCorrId": aOmciTxRequest.cbPair.CbKey})
4313 oo.mutexRxSchedMap.Lock()
4314 // it could be checked, if the callback key is already registered - but simply overwrite may be acceptable ...
4315 oo.rxSchedulerMap[aOmciTxRequest.cbPair.CbKey] = aOmciTxRequest.cbPair.CbEntry
4316 oo.mutexRxSchedMap.Unlock()
4317
4318 chSuccess := make(chan bool)
4319 aOmciTxRequest.chSuccess = chSuccess
4320 aOmciTxRequest.timeout = aTimeout
4321 aOmciTxRequest.retries = CDefaultRetries
4322
4323 //tid := aOmciTxRequest.cbPair.CbKey
4324 oo.mutexMonReq.Lock()
4325 oo.monitoredRequests[tid] = aOmciTxRequest
4326 oo.mutexMonReq.Unlock()
4327
4328 retries := aOmciTxRequest.retries
4329 retryCounter := 0
4330 if aTimeout == 0 {
4331 logger.Errorw(ctx, "no timeout present for last section of window", log.Fields{"device-id": oo.deviceID})
4332 return
4333 }
4334loop:
4335 for retryCounter <= retries {
4336 // the onu sw sections are enqueued only to the low priority queue
4337 oo.mutexLowPrioTxQueue.Lock()
4338 oo.lowPrioTxQueue.PushBack(aOmciTxRequest)
4339 oo.mutexLowPrioTxQueue.Unlock()
4340
4341 go oo.sendQueuedRequests(ctx)
4342
4343 select {
4344 case success := <-chSuccess:
4345 if success {
4346 logger.Debugw(ctx, "reqMon: response received in time",
4347 log.Fields{"tid": tid, "device-id": oo.deviceID})
4348 } else {
4349 logger.Debugw(ctx, "reqMon: wait for response aborted",
4350 log.Fields{"tid": tid, "device-id": oo.deviceID})
4351 }
4352 break loop
4353 case <-time.After(time.Duration(aTimeout) * time.Second):
4354 if retryCounter == retries {
Holger Hildebrandtc56febd2022-02-09 13:23:30 +00004355 logger.Errorw(ctx, "reqMon: timeout waiting for response - no of max retries reached - send ONU device event!",
kesavand011d5162021-11-25 19:21:06 +05304356 log.Fields{"tid": tid, "retries": retryCounter, "device-id": oo.deviceID})
Holger Hildebrandtc56febd2022-02-09 13:23:30 +00004357 oo.pOnuDeviceEntry.SendOnuDeviceEvent(ctx, OnuOmciCommunicationFailureSwUpgrade, OnuOmciCommunicationFailureSwUpgradeDesc)
kesavand011d5162021-11-25 19:21:06 +05304358 break loop
4359 } else {
4360 logger.Infow(ctx, "reqMon: timeout waiting for response - retry",
4361 log.Fields{"tid": tid, "retries": retryCounter, "device-id": oo.deviceID})
4362 }
4363 }
4364 retryCounter++
4365 }
4366 oo.mutexMonReq.Lock()
4367 delete(oo.monitoredRequests, tid)
4368 oo.mutexMonReq.Unlock()
4369}
4370
4371func (oo *OmciCC) sendOnuSwSectionsOfWindow(ctx context.Context, omciTxRequest OmciTransferStructure) error {
4372 if omciTxRequest.withFramePrint && omciTxRequest.OnuSwWindow != nil {
4373 lastSection := omciTxRequest.OnuSwWindow.Messages[len(omciTxRequest.OnuSwWindow.Messages)-1]
4374 logger.Debugw(ctx, "omci-message-to-send:", log.Fields{
4375 "TxOmciMessage": hex.EncodeToString(lastSection),
4376 "device-id": oo.deviceID,
4377 "toDeviceType": oo.pBaseDeviceHandler.GetProxyAddressType(),
4378 "proxyDeviceID": oo.pBaseDeviceHandler.GetProxyAddressID(),
4379 "proxyAddress": oo.pBaseDeviceHandler.GetProxyAddress()})
4380 }
4381 sendErr := oo.pBaseDeviceHandler.SendOnuSwSectionsOfWindow(ctx, oo.pBaseDeviceHandler.GetProxyAddress().AdapterEndpoint, omciTxRequest.OnuSwWindow)
4382 if sendErr != nil {
4383 logger.Errorw(ctx, "send onu sw sections omci request error", log.Fields{"ChildId": oo.deviceID, "error": sendErr})
4384 return sendErr
4385 }
4386 return nil
4387}
4388
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004389// SendDownloadSection sends DownloadSectionRequestWithResponse
4390func (oo *OmciCC) SendDownloadSection(ctx context.Context, aTimeout int, highPrio bool,
mpagenko80622a52021-02-09 16:53:23 +00004391 rxChan chan Message, aImageMeID uint16, aAckRequest uint8, aDownloadSectionNo uint8, aSection []byte, aPrint bool) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004392 tid := oo.GetNextTid(highPrio)
mpagenko80622a52021-02-09 16:53:23 +00004393 logger.Debugw(ctx, "send DlSectionRequest:", log.Fields{"device-id": oo.deviceID,
4394 "SequNo": strconv.FormatInt(int64(tid), 16),
mpagenko15ff4a52021-03-02 10:09:20 +00004395 "InstId": strconv.FormatInt(int64(aImageMeID), 16), "omci-ack": aAckRequest})
mpagenko80622a52021-02-09 16:53:23 +00004396
4397 //TODO!!!: don't know by now on how to generate the possibly needed AR (or enforce it to 0) with current omci-lib
4398 // by now just try to send it as defined by omci-lib
mpagenko15ff4a52021-03-02 10:09:20 +00004399 msgType := omci.DownloadSectionRequestType
mpagenkoc26d4c02021-05-06 14:27:57 +00004400 var timeout int = 0 //default value for no response expected
mpagenko15ff4a52021-03-02 10:09:20 +00004401 if aAckRequest > 0 {
4402 msgType = omci.DownloadSectionRequestWithResponseType
mpagenkoc26d4c02021-05-06 14:27:57 +00004403 timeout = aTimeout
mpagenko15ff4a52021-03-02 10:09:20 +00004404 }
mpagenko80622a52021-02-09 16:53:23 +00004405 omciLayer := &omci.OMCI{
4406 TransactionID: tid,
mpagenko15ff4a52021-03-02 10:09:20 +00004407 MessageType: msgType,
mpagenko80622a52021-02-09 16:53:23 +00004408 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4409 // Length: 0x28, // Optional, defaults to 40 octets
4410 }
Himani Chawla43f95ff2021-06-03 00:24:12 +05304411 localSectionData := make([]byte, len(aSection))
4412
mpagenko15ff4a52021-03-02 10:09:20 +00004413 copy(localSectionData[:], aSection) // as long as DownloadSectionRequest defines array for SectionData we need to copy into the array
mpagenko80622a52021-02-09 16:53:23 +00004414 request := &omci.DownloadSectionRequest{
4415 MeBasePacket: omci.MeBasePacket{
4416 EntityClass: me.SoftwareImageClassID,
4417 EntityInstance: aImageMeID, //inactive image
4418 },
4419 SectionNumber: aDownloadSectionNo,
4420 SectionData: localSectionData,
4421 }
4422
4423 var options gopacket.SerializeOptions
4424 options.FixLengths = true
4425 buffer := gopacket.NewSerializeBuffer()
4426 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4427 if err != nil {
4428 logger.Errorw(ctx, "Cannot serialize DlSectionRequest", log.Fields{"Err": err,
4429 "device-id": oo.deviceID})
4430 return err
4431 }
4432 outgoingPacket := buffer.Bytes()
4433
mpagenko15ff4a52021-03-02 10:09:20 +00004434 //for initial debug purpose overrule the requested print state for some frames
4435 printFrame := aPrint
4436 if aAckRequest > 0 || aDownloadSectionNo == 0 {
4437 printFrame = true
4438 }
4439
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004440 omciRxCallbackPair := CallbackPair{CbKey: tid,
mpagenkoc26d4c02021-05-06 14:27:57 +00004441 // the callback is set even though no response might be required here, the tid (key) setting is needed here anyway
4442 // (used to avoid retransmission of frames with the same TID)
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004443 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, printFrame /*aPrint*/},
mpagenko80622a52021-02-09 16:53:23 +00004444 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004445 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko80622a52021-02-09 16:53:23 +00004446 if err != nil {
4447 logger.Errorw(ctx, "Cannot send DlSectionRequest", log.Fields{"Err": err,
4448 "device-id": oo.deviceID})
4449 return err
4450 }
4451 logger.Debug(ctx, "send DlSectionRequest done")
mpagenko80622a52021-02-09 16:53:23 +00004452 return nil
4453}
4454
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004455//SendEndSoftwareDownload sends EndSoftwareDownloadRequest
4456func (oo *OmciCC) SendEndSoftwareDownload(ctx context.Context, timeout int, highPrio bool,
mpagenko80622a52021-02-09 16:53:23 +00004457 rxChan chan Message, aImageMeID uint16, aFileLen uint32, aImageCrc uint32) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004458 tid := oo.GetNextTid(highPrio)
mpagenko80622a52021-02-09 16:53:23 +00004459 logger.Debugw(ctx, "send EndSwDlRequest:", log.Fields{"device-id": oo.deviceID,
4460 "SequNo": strconv.FormatInt(int64(tid), 16),
4461 "InstId": strconv.FormatInt(int64(aImageMeID), 16)})
4462
mpagenko15ff4a52021-03-02 10:09:20 +00004463 omciLayer := &omci.OMCI{
mpagenko80622a52021-02-09 16:53:23 +00004464 TransactionID: tid,
mpagenko15ff4a52021-03-02 10:09:20 +00004465 MessageType: omci.EndSoftwareDownloadRequestType,
mpagenko80622a52021-02-09 16:53:23 +00004466 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4467 // Length: 0x28, // Optional, defaults to 40 octets
4468 }
mpagenko15ff4a52021-03-02 10:09:20 +00004469 request := &omci.EndSoftwareDownloadRequest{
mpagenko80622a52021-02-09 16:53:23 +00004470 MeBasePacket: omci.MeBasePacket{
4471 EntityClass: me.SoftwareImageClassID,
4472 EntityInstance: aImageMeID, //inactive image
4473 },
mpagenko15ff4a52021-03-02 10:09:20 +00004474 CRC32: aImageCrc,
4475 ImageSize: aFileLen,
4476 NumberOfInstances: 1, //parallel download to multiple circuit packs not supported
4477 ImageInstances: []uint16{0}, //don't care for NumberOfInstances=1, but probably needed by omci-lib as in startSwDlRequest
mpagenko80622a52021-02-09 16:53:23 +00004478 }
mpagenko15ff4a52021-03-02 10:09:20 +00004479
4480 var options gopacket.SerializeOptions
4481 options.FixLengths = true
4482 buffer := gopacket.NewSerializeBuffer()
4483 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4484 if err != nil {
4485 logger.Errorw(ctx, "Cannot serialize EndSwDlRequest", log.Fields{"Err": err,
mpagenko80622a52021-02-09 16:53:23 +00004486 "device-id": oo.deviceID})
mpagenko15ff4a52021-03-02 10:09:20 +00004487 return err
mpagenko80622a52021-02-09 16:53:23 +00004488 }
mpagenko15ff4a52021-03-02 10:09:20 +00004489 outgoingPacket := buffer.Bytes()
4490
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004491 omciRxCallbackPair := CallbackPair{CbKey: tid,
4492 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko15ff4a52021-03-02 10:09:20 +00004493 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004494 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko15ff4a52021-03-02 10:09:20 +00004495 if err != nil {
4496 logger.Errorw(ctx, "Cannot send EndSwDlRequest", log.Fields{"Err": err,
4497 "device-id": oo.deviceID})
4498 return err
4499 }
4500 logger.Debug(ctx, "send EndSwDlRequest done")
mpagenko80622a52021-02-09 16:53:23 +00004501 return nil
4502}
4503
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004504// SendActivateSoftware sends ActivateSoftwareRequest
4505func (oo *OmciCC) SendActivateSoftware(ctx context.Context, timeout int, highPrio bool,
mpagenko80622a52021-02-09 16:53:23 +00004506 rxChan chan Message, aImageMeID uint16) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004507 tid := oo.GetNextTid(highPrio)
mpagenko80622a52021-02-09 16:53:23 +00004508 logger.Debugw(ctx, "send ActivateSwRequest:", log.Fields{"device-id": oo.deviceID,
4509 "SequNo": strconv.FormatInt(int64(tid), 16),
4510 "InstId": strconv.FormatInt(int64(aImageMeID), 16)})
4511
4512 omciLayer := &omci.OMCI{
4513 TransactionID: tid,
4514 MessageType: omci.ActivateSoftwareRequestType,
4515 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4516 // Length: 0x28, // Optional, defaults to 40 octets
4517 }
4518 request := &omci.ActivateSoftwareRequest{
4519 MeBasePacket: omci.MeBasePacket{
4520 EntityClass: me.SoftwareImageClassID,
4521 EntityInstance: aImageMeID, //inactive image
4522 },
4523 ActivateFlags: 0, //unconditionally reset as the only relevant option here (regardless of VOIP)
4524 }
4525
4526 var options gopacket.SerializeOptions
4527 options.FixLengths = true
4528 buffer := gopacket.NewSerializeBuffer()
4529 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4530 if err != nil {
4531 logger.Errorw(ctx, "Cannot serialize ActivateSwRequest", log.Fields{"Err": err,
4532 "device-id": oo.deviceID})
4533 return err
4534 }
4535 outgoingPacket := buffer.Bytes()
4536
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004537 omciRxCallbackPair := CallbackPair{CbKey: tid,
4538 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko80622a52021-02-09 16:53:23 +00004539 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004540 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko80622a52021-02-09 16:53:23 +00004541 if err != nil {
4542 logger.Errorw(ctx, "Cannot send ActivateSwRequest", log.Fields{"Err": err,
4543 "device-id": oo.deviceID})
4544 return err
4545 }
4546 logger.Debug(ctx, "send ActivateSwRequest done")
mpagenko15ff4a52021-03-02 10:09:20 +00004547 return nil
4548}
mpagenko80622a52021-02-09 16:53:23 +00004549
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004550// SendCommitSoftware sends CommitSoftwareRequest
4551func (oo *OmciCC) SendCommitSoftware(ctx context.Context, timeout int, highPrio bool,
mpagenko15ff4a52021-03-02 10:09:20 +00004552 rxChan chan Message, aImageMeID uint16) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004553 tid := oo.GetNextTid(highPrio)
mpagenko15ff4a52021-03-02 10:09:20 +00004554 logger.Debugw(ctx, "send CommitSwRequest:", log.Fields{"device-id": oo.deviceID,
4555 "SequNo": strconv.FormatInt(int64(tid), 16),
4556 "InstId": strconv.FormatInt(int64(aImageMeID), 16)})
4557
4558 omciLayer := &omci.OMCI{
mpagenko80622a52021-02-09 16:53:23 +00004559 TransactionID: tid,
mpagenko15ff4a52021-03-02 10:09:20 +00004560 MessageType: omci.CommitSoftwareRequestType,
mpagenko80622a52021-02-09 16:53:23 +00004561 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4562 // Length: 0x28, // Optional, defaults to 40 octets
4563 }
mpagenko15ff4a52021-03-02 10:09:20 +00004564 request := &omci.CommitSoftwareRequest{
mpagenko80622a52021-02-09 16:53:23 +00004565 MeBasePacket: omci.MeBasePacket{
4566 EntityClass: me.SoftwareImageClassID,
4567 EntityInstance: aImageMeID, //inactive image
4568 },
mpagenko80622a52021-02-09 16:53:23 +00004569 }
mpagenko15ff4a52021-03-02 10:09:20 +00004570
4571 var options gopacket.SerializeOptions
4572 options.FixLengths = true
4573 buffer := gopacket.NewSerializeBuffer()
4574 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4575 if err != nil {
4576 logger.Errorw(ctx, "Cannot serialize CommitSwRequest", log.Fields{"Err": err,
mpagenko80622a52021-02-09 16:53:23 +00004577 "device-id": oo.deviceID})
mpagenko15ff4a52021-03-02 10:09:20 +00004578 return err
mpagenko80622a52021-02-09 16:53:23 +00004579 }
mpagenko15ff4a52021-03-02 10:09:20 +00004580 outgoingPacket := buffer.Bytes()
4581
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004582 omciRxCallbackPair := CallbackPair{CbKey: tid,
4583 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko15ff4a52021-03-02 10:09:20 +00004584 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004585 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko15ff4a52021-03-02 10:09:20 +00004586 if err != nil {
4587 logger.Errorw(ctx, "Cannot send CommitSwRequest", log.Fields{"Err": err,
4588 "device-id": oo.deviceID})
4589 return err
4590 }
4591 logger.Debug(ctx, "send CommitSwRequest done")
mpagenko80622a52021-02-09 16:53:23 +00004592 return nil
4593}
4594
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004595//SendSelfTestReq sends TestRequest
4596func (oo *OmciCC) SendSelfTestReq(ctx context.Context, classID me.ClassID, instdID uint16, timeout int, highPrio bool, rxChan chan Message) error {
4597 tid := oo.GetNextTid(highPrio)
Girish Gowdra6afb56a2021-04-27 17:47:57 -07004598 logger.Debugw(ctx, "send self test request:", log.Fields{"device-id": oo.deviceID,
4599 "SequNo": strconv.FormatInt(int64(tid), 16),
4600 "InstId": strconv.FormatInt(int64(instdID), 16)})
4601 omciLayer := &omci.OMCI{
4602 TransactionID: tid,
4603 MessageType: omci.TestRequestType,
4604 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4605 // Length: 0x28, // Optional, defaults to 40 octets
4606 }
4607
4608 var request *omci.OpticalLineSupervisionTestRequest
4609 switch classID {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004610 case me.AniGClassID:
Girish Gowdra6afb56a2021-04-27 17:47:57 -07004611 request = &omci.OpticalLineSupervisionTestRequest{
4612 MeBasePacket: omci.MeBasePacket{
4613 EntityClass: classID,
4614 EntityInstance: instdID,
4615 },
4616 SelectTest: uint8(7), // self test
4617 GeneralPurposeBuffer: uint16(0),
4618 VendorSpecificParameters: uint16(0),
4619 }
4620 default:
4621 logger.Errorw(ctx, "unsupported class id for self test request", log.Fields{"device-id": oo.deviceID, "classID": classID})
4622 return fmt.Errorf("unsupported-class-id-for-self-test-request-%v", classID)
4623 }
4624 // Test serialization back to former string
4625 var options gopacket.SerializeOptions
4626 options.FixLengths = true
4627
4628 buffer := gopacket.NewSerializeBuffer()
4629 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4630 if err != nil {
4631 logger.Errorw(ctx, "Cannot serialize self test request", log.Fields{"Err": err,
4632 "device-id": oo.deviceID})
4633 return err
4634 }
4635 outgoingPacket := buffer.Bytes()
4636
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004637 omciRxCallbackPair := CallbackPair{CbKey: tid,
4638 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdra6afb56a2021-04-27 17:47:57 -07004639 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004640 err = oo.Send(ctx, outgoingPacket, timeout, 0, highPrio, omciRxCallbackPair)
Girish Gowdra6afb56a2021-04-27 17:47:57 -07004641 if err != nil {
4642 logger.Errorw(ctx, "Cannot send self test request", log.Fields{"Err": err,
4643 "device-id": oo.deviceID})
4644 return err
4645 }
4646 logger.Debug(ctx, "send self test request done")
4647 return nil
4648}
4649
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004650//nolint: gocyclo
Holger Hildebrandt36747fd2022-03-14 09:47:17 +00004651func (oo *OmciCC) isSuccessfulResponseWithMibDataSync(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet) (bool, error) {
4652
4653 nextLayer, err := omci.MsgTypeToNextLayer(omciMsg.MessageType, false)
4654 if err != nil {
4655 logger.Errorw(ctx, "omci-message: could not map msgType to nextLayer", log.Fields{"device-id": oo.deviceID})
4656 return false, fmt.Errorf("could not map msgType to nextLayer - %s", oo.deviceID)
4657 }
4658 msgLayer := (*packet).Layer(nextLayer)
4659 if msgLayer != nil {
4660 // Note: Due to relaxed decoding, you may now still have a decoding error attached to the layers
4661 if failure := (*packet).ErrorLayer(); failure != nil {
4662 if nextLayer == omci.LayerTypeMibUploadNextResponse {
4663 // In the case of MibUploadNextResponse, we let the packet pass so that later processing
4664 // can examine for UnkonwnMEs and UnknownAttributes
4665 logger.Infow(ctx, "omci-message: MibUploadNextResponse packet with ErrorLayer - let it pass",
4666 log.Fields{"device-id": oo.deviceID, "error": failure.Error()})
4667 return false, nil
4668 } else if nextLayer == omci.LayerTypeGetResponse {
4669 if resp := msgLayer.(*omci.GetResponse); resp != nil {
4670 if resp.NextLayerType() == omci.LayerTypeUnknownAttributes {
4671 unknownAttrLayer := (*packet).Layer(omci.LayerTypeUnknownAttributes)
4672 if unknownAttrLayer != nil {
4673 logger.Errorw(ctx, "omci-message: GetResponse packet contains unknownAttrLayer - skip it!",
4674 log.Fields{"device-id": oo.deviceID, "error": failure.Error(), "unknownAttrLayer": unknownAttrLayer})
4675 return false, fmt.Errorf("packet contains unknownAttrLayer - %s", oo.deviceID)
4676 }
4677 }
4678 }
4679 }
4680 // Try to decode any further error information
4681 if decodeFailure, ok := failure.(*gopacket.DecodeFailure); ok && decodeFailure != nil {
4682 logger.Errorw(ctx, "omci-message: packet contains ErrorLayer with further info - skip it!",
4683 log.Fields{"device-id": oo.deviceID, "error": failure.Error(), "decodeFailure": decodeFailure.String()})
4684 return false, fmt.Errorf("packet contains ErrorLayer with further info - %s", oo.deviceID)
4685 }
4686 logger.Errorw(ctx, "omci-message: packet contains ErrorLayer - skip it!",
4687 log.Fields{"device-id": oo.deviceID, "error": failure.Error()})
4688 return false, fmt.Errorf("packet contains ErrorLayer - %s", oo.deviceID)
4689 }
4690 } else if failure := (*packet).ErrorLayer(); failure != nil {
4691 // message layer could not be decoded, but at least check if additional failure information is available
4692 if decodeFailure, ok := failure.(*gopacket.DecodeFailure); ok && decodeFailure != nil {
4693 logger.Errorw(ctx, "omci-message: could not decode msgLayer of packet, further info available - skip it!",
4694 log.Fields{"device-id": oo.deviceID, "error": failure.Error(), "decodeFailure": decodeFailure.String()})
4695 return false, fmt.Errorf("could not decode msgLayer of packet, further info available - %s", oo.deviceID)
4696 }
4697 logger.Errorw(ctx, "omci-message: could not decode msgLayer of packet, ErrorLayer available",
4698 log.Fields{"device-id": oo.deviceID, "error": failure.Error()})
4699 return false, fmt.Errorf("could not decode msgLayer of packet, ErrorLayer available - %s", oo.deviceID)
4700 } else {
4701 logger.Errorw(ctx, "omci-message: could not decode msgLayer of packet", log.Fields{"device-id": oo.deviceID})
4702 return false, fmt.Errorf("could not decode msgLayer of packet - %s", oo.deviceID)
4703 }
4704
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +00004705 for _, v := range responsesWithMibDataSync {
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004706 if v == omciMsg.MessageType {
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004707 switch nextLayer {
4708 case omci.LayerTypeCreateResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004709 if resp := msgLayer.(*omci.CreateResponse); resp != nil {
4710 if resp.Result == me.Success {
Holger Hildebrandt36747fd2022-03-14 09:47:17 +00004711 return true, nil
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004712 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004713 }
4714 case omci.LayerTypeDeleteResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004715 if resp := msgLayer.(*omci.DeleteResponse); resp != nil {
4716 if resp.Result == me.Success {
Holger Hildebrandt36747fd2022-03-14 09:47:17 +00004717 return true, nil
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004718 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004719 }
4720 case omci.LayerTypeSetResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004721 if resp := msgLayer.(*omci.SetResponse); resp != nil {
4722 if resp.Result == me.Success {
Holger Hildebrandt36747fd2022-03-14 09:47:17 +00004723 return true, nil
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004724 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004725 }
4726 case omci.LayerTypeStartSoftwareDownloadResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004727 if resp := msgLayer.(*omci.StartSoftwareDownloadResponse); resp != nil {
4728 if resp.Result == me.Success {
Holger Hildebrandt36747fd2022-03-14 09:47:17 +00004729 return true, nil
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004730 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004731 }
4732 case omci.LayerTypeEndSoftwareDownloadResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004733 if resp := msgLayer.(*omci.EndSoftwareDownloadResponse); resp != nil {
4734 if resp.Result == me.Success {
Holger Hildebrandt36747fd2022-03-14 09:47:17 +00004735 return true, nil
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004736 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004737 }
4738 case omci.LayerTypeActivateSoftwareResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004739 if resp := msgLayer.(*omci.ActivateSoftwareResponse); resp != nil {
4740 if resp.Result == me.Success {
Holger Hildebrandt36747fd2022-03-14 09:47:17 +00004741 return true, nil
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004742 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004743 }
4744 case omci.LayerTypeCommitSoftwareResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004745 if resp := msgLayer.(*omci.CommitSoftwareResponse); resp != nil {
4746 if resp.Result == me.Success {
Holger Hildebrandt36747fd2022-03-14 09:47:17 +00004747 return true, nil
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004748 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004749 }
4750 }
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +00004751 }
4752 }
Holger Hildebrandt36747fd2022-03-14 09:47:17 +00004753 return false, nil
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +00004754}
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004755
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004756func (oo *OmciCC) processRequestMonitoring(ctx context.Context, aOmciTxRequest OmciTransferStructure) {
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004757 timeout := aOmciTxRequest.timeout
mpagenkoc26d4c02021-05-06 14:27:57 +00004758 if timeout == 0 {
4759 //timeout 0 indicates that no response is expected - fire and forget
Holger Hildebrandt34555512021-10-01 16:26:59 +00004760 // enqueue
4761 if aOmciTxRequest.highPrio {
4762 oo.mutexHighPrioTxQueue.Lock()
4763 oo.highPrioTxQueue.PushBack(aOmciTxRequest)
4764 oo.mutexHighPrioTxQueue.Unlock()
4765 } else {
4766 oo.mutexLowPrioTxQueue.Lock()
4767 oo.lowPrioTxQueue.PushBack(aOmciTxRequest)
4768 oo.mutexLowPrioTxQueue.Unlock()
4769 }
4770 go oo.sendQueuedRequests(ctx)
mpagenkoc26d4c02021-05-06 14:27:57 +00004771 } else {
mpagenko7455fd42021-06-10 16:25:55 +00004772 //the supervised sending with waiting on the response (based on TID) is called in background
4773 // to avoid blocking of the sender for the complete OMCI handshake procedure
4774 // to stay consistent with the processing tested so far, sending of next messages of the same control procedure
4775 // is ensured by the according control instances (FSM's etc.) (by waiting for the respective responses there)
4776 go oo.sendWithRxSupervision(ctx, aOmciTxRequest, timeout)
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004777 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004778}
4779
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004780func (oo *OmciCC) sendWithRxSupervision(ctx context.Context, aOmciTxRequest OmciTransferStructure, aTimeout int) {
mpagenko7455fd42021-06-10 16:25:55 +00004781 chSuccess := make(chan bool)
4782 aOmciTxRequest.chSuccess = chSuccess
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004783 tid := aOmciTxRequest.cbPair.CbKey
mpagenko7455fd42021-06-10 16:25:55 +00004784 oo.mutexMonReq.Lock()
4785 oo.monitoredRequests[tid] = aOmciTxRequest
4786 oo.mutexMonReq.Unlock()
4787
4788 retries := aOmciTxRequest.retries
4789 retryCounter := 0
4790loop:
4791 for retryCounter <= retries {
Holger Hildebrandt34555512021-10-01 16:26:59 +00004792 // enqueue
4793 if aOmciTxRequest.highPrio {
4794 oo.mutexHighPrioTxQueue.Lock()
4795 oo.highPrioTxQueue.PushBack(aOmciTxRequest)
4796 oo.mutexHighPrioTxQueue.Unlock()
4797 } else {
4798 oo.mutexLowPrioTxQueue.Lock()
4799 oo.lowPrioTxQueue.PushBack(aOmciTxRequest)
4800 oo.mutexLowPrioTxQueue.Unlock()
4801 }
4802 go oo.sendQueuedRequests(ctx)
mpagenko7455fd42021-06-10 16:25:55 +00004803
4804 select {
4805 case success := <-chSuccess:
4806 if success {
4807 logger.Debugw(ctx, "reqMon: response received in time",
4808 log.Fields{"tid": tid, "device-id": oo.deviceID})
4809 } else {
4810 logger.Debugw(ctx, "reqMon: wait for response aborted",
4811 log.Fields{"tid": tid, "device-id": oo.deviceID})
4812 }
4813 break loop
4814 case <-time.After(time.Duration(aTimeout) * time.Second):
4815 if retryCounter == retries {
Holger Hildebrandtc56febd2022-02-09 13:23:30 +00004816 logger.Errorw(ctx, "reqMon: timeout waiting for response - no of max retries reached - send ONU device event!",
mpagenko7455fd42021-06-10 16:25:55 +00004817 log.Fields{"tid": tid, "retries": retryCounter, "device-id": oo.deviceID})
Holger Hildebrandtc56febd2022-02-09 13:23:30 +00004818 oo.pOnuDeviceEntry.SendOnuDeviceEvent(ctx, OnuOmciCommunicationFailureConfig, OnuOmciCommunicationFailureConfigDesc)
mpagenko7455fd42021-06-10 16:25:55 +00004819 break loop
4820 } else {
4821 logger.Infow(ctx, "reqMon: timeout waiting for response - retry",
4822 log.Fields{"tid": tid, "retries": retryCounter, "device-id": oo.deviceID})
4823 }
4824 }
4825 retryCounter++
4826 }
4827 oo.mutexMonReq.Lock()
4828 delete(oo.monitoredRequests, tid)
4829 oo.mutexMonReq.Unlock()
4830}
4831
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004832//CancelRequestMonitoring terminates monitoring of outstanding omci requests
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004833func (oo *OmciCC) CancelRequestMonitoring(ctx context.Context) {
Holger Hildebrandt12609a12022-03-25 13:23:25 +00004834 logger.Debugw(ctx, "CancelRequestMonitoring entered", log.Fields{"device-id": oo.deviceID})
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004835 oo.mutexMonReq.RLock()
4836 for k := range oo.monitoredRequests {
mpagenko8cd1bf72021-06-22 10:11:19 +00004837 //implement non-blocking channel send to avoid blocking on mutexMonReq later
4838 select {
4839 case oo.monitoredRequests[k].chSuccess <- false:
Holger Hildebrandt12609a12022-03-25 13:23:25 +00004840 logger.Debugw(ctx, "send cancellation on omciRespChannel",
4841 log.Fields{"index": k, "device-id": oo.deviceID})
mpagenko8cd1bf72021-06-22 10:11:19 +00004842 default:
Holger Hildebrandt12609a12022-03-25 13:23:25 +00004843 logger.Debugw(ctx, "cancellation could not be send on omciRespChannel (no receiver)",
4844 log.Fields{"index": k, "device-id": oo.deviceID})
mpagenko8cd1bf72021-06-22 10:11:19 +00004845 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004846 }
4847 oo.mutexMonReq.RUnlock()
4848}
4849
4850//GetMaxOmciTimeoutWithRetries provides a timeout value greater than the maximum
4851//time consumed for retry processing of a particular OMCI-request
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004852func (oo *OmciCC) GetMaxOmciTimeoutWithRetries() time.Duration {
4853 return time.Duration((CDefaultRetries+1)*oo.pBaseDeviceHandler.GetOmciTimeout() + 1)
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004854}
Himani Chawla43f95ff2021-06-03 00:24:12 +05304855
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004856// SendCreateOrDeleteEthernetFrameExtendedPMME deletes EthernetFrameExtendedPm ME instance
4857func (oo *OmciCC) SendCreateOrDeleteEthernetFrameExtendedPMME(ctx context.Context, timeout int, highPrio bool,
Himani Chawla43f95ff2021-06-03 00:24:12 +05304858 upstream bool, create bool, rxChan chan Message, entityID uint16, classID me.ClassID, controlBlock []uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004859 tid := oo.GetNextTid(highPrio)
Himani Chawla43f95ff2021-06-03 00:24:12 +05304860 logger.Debugw(ctx, "send-ethernet-frame-extended-pm-me-msg:", log.Fields{"device-id": oo.deviceID,
4861 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create, "upstream": upstream})
4862
4863 meParam := me.ParamData{EntityID: entityID,
Holger Hildebrandt3ac49bd2022-02-07 17:46:43 +00004864 Attributes: me.AttributeValueMap{me.EthernetFrameExtendedPm_ControlBlock: controlBlock},
Himani Chawla43f95ff2021-06-03 00:24:12 +05304865 }
4866 var meInstance *me.ManagedEntity
4867 var omciErr me.OmciErrors
4868 if classID == me.EthernetFrameExtendedPmClassID {
4869 meInstance, omciErr = me.NewEthernetFrameExtendedPm(meParam)
4870 } else {
4871 meInstance, omciErr = me.NewEthernetFrameExtendedPm64Bit(meParam)
4872 }
4873
4874 if omciErr.GetError() == nil {
4875 var omciLayer *omci.OMCI
4876 var msgLayer gopacket.SerializableLayer
4877 var err error
4878 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00004879 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
4880 oframe.AddDefaults(true))
Himani Chawla43f95ff2021-06-03 00:24:12 +05304881 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00004882 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
4883 oframe.AddDefaults(true))
Himani Chawla43f95ff2021-06-03 00:24:12 +05304884 }
4885 if err != nil {
4886 logger.Errorw(ctx, "cannot-encode-ethernet-frame-extended-pm-me",
4887 log.Fields{"err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4888 return nil, err
4889 }
4890
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00004891 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Himani Chawla43f95ff2021-06-03 00:24:12 +05304892 if err != nil {
4893 logger.Errorw(ctx, "cannot-serialize-ethernet-frame-extended-pm-me",
4894 log.Fields{"err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4895 return nil, err
4896 }
4897
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004898 omciRxCallbackPair := CallbackPair{CbKey: tid,
4899 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Himani Chawla43f95ff2021-06-03 00:24:12 +05304900 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004901 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Himani Chawla43f95ff2021-06-03 00:24:12 +05304902 if err != nil {
4903 logger.Errorw(ctx, "Cannot send ethernet-frame-extended-pm-me",
4904 log.Fields{"Err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4905 return nil, err
4906 }
4907 logger.Debugw(ctx, "send-ethernet-frame-extended-pm-me-done",
4908 log.Fields{"device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4909 return meInstance, nil
4910 }
4911 logger.Errorw(ctx, "cannot-generate-ethernet-frame-extended-pm-me-instance",
4912 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4913 return nil, omciErr.GetError()
4914}
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004915
4916// RLockMutexMonReq lock read access to monitoredRequests
4917func (oo *OmciCC) RLockMutexMonReq() {
4918 oo.mutexMonReq.RLock()
4919}
4920
4921// RUnlockMutexMonReq unlock read access to monitoredRequests
4922func (oo *OmciCC) RUnlockMutexMonReq() {
4923 oo.mutexMonReq.RUnlock()
4924}
4925
4926// GetMonitoredRequest get OmciTransferStructure for an omciTransID
4927func (oo *OmciCC) GetMonitoredRequest(omciTransID uint16) (value OmciTransferStructure, exist bool) {
4928 value, exist = oo.monitoredRequests[omciTransID]
4929 return value, exist
4930}
4931
4932// SetChMonitoredRequest sets chSuccess to indicate whether response was received or not
4933func (oo *OmciCC) SetChMonitoredRequest(omciTransID uint16, chVal bool) {
4934 oo.monitoredRequests[omciTransID].chSuccess <- chVal
4935}
Himani Chawlaee10b542021-09-20 16:46:40 +05304936
4937// SendSetEthernetFrameExtendedPMME sends the set request for ethernet frame extended type me
4938func (oo *OmciCC) SendSetEthernetFrameExtendedPMME(ctx context.Context, timeout int, highPrio bool,
4939 rxChan chan Message, entityID uint16, classID me.ClassID, controlBlock []uint16) (*me.ManagedEntity, error) {
4940 tid := oo.GetNextTid(highPrio)
4941 logger.Debugw(ctx, "send-set-ethernet-frame-extended-pm-me-control-block:", log.Fields{"device-id": oo.deviceID,
4942 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16)})
4943
4944 meParams := me.ParamData{EntityID: entityID,
Holger Hildebrandt3ac49bd2022-02-07 17:46:43 +00004945 Attributes: me.AttributeValueMap{me.EthernetFrameExtendedPm_ControlBlock: controlBlock},
Himani Chawlaee10b542021-09-20 16:46:40 +05304946 }
4947 var meInstance *me.ManagedEntity
4948 var omciErr me.OmciErrors
4949 if classID == me.EthernetFrameExtendedPmClassID {
4950 meInstance, omciErr = me.NewEthernetFrameExtendedPm(meParams)
4951 } else {
4952 meInstance, omciErr = me.NewEthernetFrameExtendedPm64Bit(meParams)
4953 }
4954
4955 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00004956 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Himani Chawlaee10b542021-09-20 16:46:40 +05304957 if err != nil {
4958 logger.Errorw(ctx, "cannot-encode-ethernet-frame-extended-pm-me",
4959 log.Fields{"err": err, "device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4960 return nil, err
4961 }
Holger Hildebrandta6ef0e82022-04-06 13:11:32 +00004962 pkt, err := SerializeOmciLayer(ctx, omciLayer, msgLayer)
Himani Chawlaee10b542021-09-20 16:46:40 +05304963 if err != nil {
4964 logger.Errorw(ctx, "cannot-serialize-ethernet-frame-extended-pm-me-set-msg",
4965 log.Fields{"err": err, "device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4966 return nil, err
4967 }
4968 omciRxCallbackPair := CallbackPair{
4969 CbKey: tid,
4970 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
4971 }
4972 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
4973 if err != nil {
4974 logger.Errorw(ctx, "Cannot send ethernet-frame-extended-pm-me",
4975 log.Fields{"Err": err, "device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4976 return nil, err
4977 }
4978 logger.Debugw(ctx, "send-ethernet-frame-extended-pm-me-set-msg-done",
4979 log.Fields{"device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4980 return meInstance, nil
4981 }
4982 logger.Errorw(ctx, "cannot-generate-ethernet-frame-extended-pm-me-instance",
4983 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4984 return nil, omciErr.GetError()
4985}
Holger Hildebrandte7cc6092022-02-01 11:37:03 +00004986
4987// PrepareForGarbageCollection - remove references to prepare for garbage collection
4988func (oo *OmciCC) PrepareForGarbageCollection(ctx context.Context, aDeviceID string) {
4989 logger.Debugw(ctx, "prepare for garbage collection", log.Fields{"device-id": aDeviceID})
4990 oo.pBaseDeviceHandler = nil
4991 oo.pOnuDeviceEntry = nil
4992 oo.pOnuAlarmManager = nil
4993}