blob: f591bc4ca3879568a3f631989a12c129f78d5015 [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
40 "github.com/opencord/voltha-protos/v5/go/common"
41 //"github.com/opencord/voltha-lib-go/v7/pkg/kafka"
42 "github.com/opencord/voltha-lib-go/v7/pkg/log"
43 ic "github.com/opencord/voltha-protos/v5/go/inter_container"
44 //"github.com/opencord/voltha-protos/v5/go/openflow_13"
45 //"github.com/opencord/voltha-protos/v5/go/voltha"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000046)
47
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000048// ### OMCI related definitions - retrieved from Python adapter code/trace ####
Himani Chawla6d2ae152020-09-02 13:11:20 +053049
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000050const maxGemPayloadSize = uint16(48)
51const connectivityModeValue = uint8(5)
Himani Chawla4d908332020-08-31 12:30:20 +053052
53//const defaultTPID = uint16(0x8100)
54//const broadComDefaultVID = uint16(4091)
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000055
56// UnusedTcontAllocID - TODO: add comment
57const UnusedTcontAllocID = uint16(0xFFFF) //common unused AllocId for G.984 and G.987 systems
mpagenko8b07c1b2020-11-26 10:36:31 +000058
mpagenkoc8bba412021-01-15 15:38:44 +000059const cOmciBaseMessageTrailerLen = 40
60
61// tOmciReceiveError - enum type for detected problems/errors in the received OMCI message (format)
62type tOmciReceiveError uint8
63
64const (
65 // cOmciMessageReceiveNoError - default start state
66 cOmciMessageReceiveNoError tOmciReceiveError = iota
67 // Error indication wrong trailer length within the message
68 cOmciMessageReceiveErrorTrailerLen
69 // Error indication missing trailer within the message
70 cOmciMessageReceiveErrorMissTrailer
71)
72
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000073// CDefaultRetries - TODO: add comment
74const CDefaultRetries = 2
Holger Hildebrandt366ef192021-05-05 11:07:44 +000075
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000076// ### OMCI related definitions - end
77
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000078//CallbackPairEntry to be used for OMCI send/receive correlation
79type CallbackPairEntry struct {
80 CbRespChannel chan Message
81 CbFunction func(context.Context, *omci.OMCI, *gp.Packet, chan Message) error
82 FramePrint bool //true for printing
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000083}
84
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000085//CallbackPair to be used for ReceiveCallback init
86type CallbackPair struct {
87 CbKey uint16
88 CbEntry CallbackPairEntry
Holger Hildebrandtfa074992020-03-27 15:42:06 +000089}
90
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000091// OmciTransferStructure - TODO: add comment
92type OmciTransferStructure struct {
mpagenko80622a52021-02-09 16:53:23 +000093 txFrame []byte
94 timeout int
Holger Hildebrandt366ef192021-05-05 11:07:44 +000095 retries int
mpagenko80622a52021-02-09 16:53:23 +000096 highPrio bool
97 withFramePrint bool
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +000098 cbPair CallbackPair
Holger Hildebrandt366ef192021-05-05 11:07:44 +000099 chSuccess chan bool
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000100}
101
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000102//OmciCC structure holds information needed for OMCI communication (to/from OLT Adapter)
103type OmciCC struct {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000104 enabled bool
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000105 pBaseDeviceHandler IdeviceHandler
106 pOnuDeviceEntry IonuDeviceEntry
107 pOnuAlarmManager IonuAlarmManager
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000108 deviceID string
khenaidoo7d3c5582021-08-11 18:09:44 -0400109 coreClient *vgrpc.Client
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000110 supportExtMsg bool
mpagenkoc8bba412021-01-15 15:38:44 +0000111 rxOmciFrameError tOmciReceiveError
112
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000113 txFrames, txOnuFrames uint32
114 rxFrames, rxOnuFrames, rxOnuDiscards uint32
115
116 // OMCI params
117 mutexTid sync.Mutex
118 tid uint16
119 mutexHpTid sync.Mutex
120 hpTid uint16
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000121 UploadSequNo uint16
122 UploadNoOfCmds uint16
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000123
Holger Hildebrandt34555512021-10-01 16:26:59 +0000124 mutexSendQueuedRequests sync.Mutex
125 mutexLowPrioTxQueue sync.Mutex
126 lowPrioTxQueue *list.List
127 mutexHighPrioTxQueue sync.Mutex
128 highPrioTxQueue *list.List
129 mutexRxSchedMap sync.Mutex
130 rxSchedulerMap map[uint16]CallbackPairEntry
131 mutexMonReq sync.RWMutex
132 monitoredRequests map[uint16]OmciTransferStructure
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000133}
134
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +0000135var responsesWithMibDataSync = []omci.MessageType{
136 omci.CreateResponseType,
137 omci.DeleteResponseType,
138 omci.SetResponseType,
139 omci.StartSoftwareDownloadResponseType,
140 omci.EndSoftwareDownloadResponseType,
141 omci.ActivateSoftwareResponseType,
142 omci.CommitSoftwareResponseType,
143}
144
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000145//NewOmciCC constructor returns a new instance of a OmciCC
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000146//mib_db (as well as not inluded alarm_db not really used in this code? VERIFY!!)
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000147func NewOmciCC(ctx context.Context, deviceID string, deviceHandler IdeviceHandler,
148 onuDeviceEntry IonuDeviceEntry, onuAlarmManager IonuAlarmManager,
149 coreClient *vgrpc.Client) *OmciCC {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000150 logger.Debugw(ctx, "init-omciCC", log.Fields{"device-id": deviceID})
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000151 var omciCC OmciCC
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000152 omciCC.enabled = false
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000153 omciCC.pBaseDeviceHandler = deviceHandler
154 omciCC.pOnuAlarmManager = onuAlarmManager
Himani Chawla4d908332020-08-31 12:30:20 +0530155 omciCC.pOnuDeviceEntry = onuDeviceEntry
156 omciCC.deviceID = deviceID
khenaidoo7d3c5582021-08-11 18:09:44 -0400157 omciCC.coreClient = coreClient
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000158 omciCC.supportExtMsg = false
mpagenkoc8bba412021-01-15 15:38:44 +0000159 omciCC.rxOmciFrameError = cOmciMessageReceiveNoError
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000160 omciCC.txFrames = 0
161 omciCC.txOnuFrames = 0
162 omciCC.rxFrames = 0
163 omciCC.rxOnuFrames = 0
164 omciCC.rxOnuDiscards = 0
165 omciCC.tid = 0x1
166 omciCC.hpTid = 0x8000
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000167 omciCC.UploadSequNo = 0
168 omciCC.UploadNoOfCmds = 0
Holger Hildebrandt34555512021-10-01 16:26:59 +0000169 omciCC.lowPrioTxQueue = list.New()
170 omciCC.highPrioTxQueue = list.New()
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000171 omciCC.rxSchedulerMap = make(map[uint16]CallbackPairEntry)
172 omciCC.monitoredRequests = make(map[uint16]OmciTransferStructure)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000173
174 return &omciCC
175}
176
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000177//Stop stops/resets the omciCC
178func (oo *OmciCC) Stop(ctx context.Context) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000179 logger.Debugw(ctx, "omciCC-stopping", log.Fields{"device-id": oo.deviceID})
mpagenko900ee4b2020-10-12 11:56:34 +0000180 //reseting all internal data, which might also be helpful for discarding any lingering tx/rx requests
mpagenko8cd1bf72021-06-22 10:11:19 +0000181 oo.CancelRequestMonitoring(ctx)
Holger Hildebrandt34555512021-10-01 16:26:59 +0000182 // clear the tx queues
183 oo.mutexHighPrioTxQueue.Lock()
184 oo.highPrioTxQueue.Init()
185 oo.mutexHighPrioTxQueue.Unlock()
186 oo.mutexLowPrioTxQueue.Lock()
187 oo.lowPrioTxQueue.Init()
188 oo.mutexLowPrioTxQueue.Unlock()
189 //clear the scheduler map
mpagenko900ee4b2020-10-12 11:56:34 +0000190 oo.mutexRxSchedMap.Lock()
191 for k := range oo.rxSchedulerMap {
Holger Hildebrandt34555512021-10-01 16:26:59 +0000192 delete(oo.rxSchedulerMap, k)
mpagenko900ee4b2020-10-12 11:56:34 +0000193 }
194 oo.mutexRxSchedMap.Unlock()
Holger Hildebrandt34555512021-10-01 16:26:59 +0000195 //reset the high prio transactionId
mpagenko900ee4b2020-10-12 11:56:34 +0000196 oo.mutexHpTid.Lock()
Holger Hildebrandt34555512021-10-01 16:26:59 +0000197 oo.hpTid = 0x8000
mpagenko900ee4b2020-10-12 11:56:34 +0000198 oo.mutexHpTid.Unlock()
Holger Hildebrandt34555512021-10-01 16:26:59 +0000199 //reset the low prio transactionId
mpagenko900ee4b2020-10-12 11:56:34 +0000200 oo.mutexTid.Lock()
Holger Hildebrandt34555512021-10-01 16:26:59 +0000201 oo.tid = 1
mpagenko900ee4b2020-10-12 11:56:34 +0000202 oo.mutexTid.Unlock()
203 //reset control values
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000204 oo.UploadSequNo = 0
205 oo.UploadNoOfCmds = 0
mpagenkoc8bba412021-01-15 15:38:44 +0000206 oo.rxOmciFrameError = cOmciMessageReceiveNoError
mpagenko900ee4b2020-10-12 11:56:34 +0000207 //reset the stats counter - which might be topic of discussion ...
208 oo.txFrames = 0
209 oo.txOnuFrames = 0
210 oo.rxFrames = 0
211 oo.rxOnuFrames = 0
212 oo.rxOnuDiscards = 0
213
214 return nil
215}
216
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000217// Rx handler for omci messages
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000218func (oo *OmciCC) receiveOnuMessage(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000219 logger.Debugw(ctx, "rx-onu-autonomous-message", log.Fields{"omciMsgType": omciMsg.MessageType,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000220 "payload": hex.EncodeToString(omciMsg.Payload)})
Himani Chawlaac1f5ad2021-02-04 21:21:54 +0530221 switch omciMsg.MessageType {
222 case omci.AlarmNotificationType:
223 data := OmciMessage{
224 OmciMsg: omciMsg,
225 OmciPacket: packet,
226 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000227 go oo.pOnuAlarmManager.HandleOmciAlarmNotificationMessage(ctx, data)
Himani Chawlaac1f5ad2021-02-04 21:21:54 +0530228 return nil
229 default:
230 return fmt.Errorf("receiveOnuMessageType %s unimplemented", omciMsg.MessageType.String())
231 }
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000232 /*
233 msgType = rxFrame.fields["message_type"] //assumed OmciOperationsValue
234 rxOnuFrames++
235
236 switch msgType {
237 case AlarmNotification:
238 {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000239 logger.Info("Unhandled: received-onu-alarm-message")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000240 // python code was:
241 //if msg_type == EntityOperations.AlarmNotification.value:
242 // topic = OMCI_CC.event_bus_topic(self._device_id, RxEvent.Alarm_Notification)
243 // self.reactor.callLater(0, self.event_bus.publish, topic, msg)
244 //
245 return errors.New("RxAlarmNotification unimplemented")
246 }
247 case AttributeValueChange:
248 {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000249 logger.Info("Unhandled: received-attribute-value-change")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000250 // python code was:
251 //elif msg_type == EntityOperations.AttributeValueChange.value:
252 // topic = OMCI_CC.event_bus_topic(self._device_id, RxEvent.AVC_Notification)
253 // self.reactor.callLater(0, self.event_bus.publish, topic, msg)
254 //
255 return errors.New("RxAttributeValueChange unimplemented")
256 }
257 case TestResult:
258 {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000259 logger.Info("Unhandled: received-test-result")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000260 // python code was:
261 //elif msg_type == EntityOperations.TestResult.value:
262 // topic = OMCI_CC.event_bus_topic(self._device_id, RxEvent.Test_Result)
263 // self.reactor.callLater(0, self.event_bus.publish, topic, msg)
264 //
265 return errors.New("RxTestResult unimplemented")
266 }
267 default:
268 {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000269 logger.Errorw(ctx,"rx-onu-unsupported-autonomous-message", log.Fields{"msgType": msgType})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000270 rxOnuDiscards++
271 return errors.New("RxOnuMsgType unimplemented")
272 }
273 }
274 */
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000275}
276
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000277func (oo *OmciCC) printRxMessage(ctx context.Context, rxMsg []byte) {
mpagenko80622a52021-02-09 16:53:23 +0000278 //assuming omci message content is hex coded!
279 // with restricted output of 16bytes would be ...rxMsg[:16]
280 logger.Debugw(ctx, "omci-message-received:", log.Fields{
281 "RxOmciMessage": hex.EncodeToString(rxMsg),
282 "device-id": oo.deviceID})
283}
284
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000285// ReceiveMessage - Rx handler for onu messages
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000286// e.g. would call ReceiveOnuMessage() in case of TID=0 or Action=test ...
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 Hildebrandtfa074992020-03-27 15:42:06 +0000289 if len(rxMsg) >= 44 { // then it should normally include the BaseFormat trailer Len
290 // NOTE: autocorrection only valid for OmciBaseFormat, which is not specifically verified here!!!
mpagenkoc8bba412021-01-15 15:38:44 +0000291 // (an extendedFormat message could be destroyed this way!)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000292 trailerLenData := rxMsg[42:44]
293 trailerLen := binary.BigEndian.Uint16(trailerLenData)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000294 //logger.Debugw(ctx,"omci-received-trailer-len", log.Fields{"Length": trailerLen})
mpagenkoc8bba412021-01-15 15:38:44 +0000295 if trailerLen != cOmciBaseMessageTrailerLen { // invalid base Format entry -> autocorrect
296 binary.BigEndian.PutUint16(rxMsg[42:44], cOmciBaseMessageTrailerLen)
297 if oo.rxOmciFrameError != cOmciMessageReceiveErrorTrailerLen {
298 //do just one error log, expectation is: if seen once it should appear regularly - avoid to many log entries
299 logger.Errorw(ctx, "wrong omci-message trailer length: trailer len auto-corrected",
300 log.Fields{"trailer-length": trailerLen, "device-id": oo.deviceID})
301 oo.rxOmciFrameError = cOmciMessageReceiveErrorTrailerLen
302 }
303 }
304 } else if len(rxMsg) >= cOmciBaseMessageTrailerLen { // workaround for Adtran OLT Sim, which currently does not send trailer bytes at all!
305 // NOTE: autocorrection only valid for OmciBaseFormat, which is not specifically verified here!!!
306 // (an extendedFormat message could be destroyed this way!)
307 // extend/overwrite with trailer
308 trailer := make([]byte, 8)
309 binary.BigEndian.PutUint16(trailer[2:], cOmciBaseMessageTrailerLen) //set the defined baseline length
310 rxMsg = append(rxMsg[:cOmciBaseMessageTrailerLen], trailer...)
311 if oo.rxOmciFrameError != cOmciMessageReceiveErrorMissTrailer {
312 //do just one error log, expectation is: if seen once it should appear regularly - avoid to many log entries
313 logger.Errorw(ctx, "omci-message to short to include trailer len: trailer auto-corrected (added)",
314 log.Fields{"message-length": len(rxMsg), "device-id": oo.deviceID})
315 oo.rxOmciFrameError = cOmciMessageReceiveErrorMissTrailer
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000316 }
317 } else {
mpagenkoc8bba412021-01-15 15:38:44 +0000318 logger.Errorw(ctx, "received omci-message too small for OmciBaseFormat - abort",
319 log.Fields{"Length": len(rxMsg), "device-id": oo.deviceID})
mpagenko80622a52021-02-09 16:53:23 +0000320 oo.printRxMessage(ctx, rxMsg)
Andrea Campanella6515c582020-10-05 11:25:00 +0200321 return fmt.Errorf("rxOmciMessage too small for BaseFormat %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000322 }
323
324 packet := gopacket.NewPacket(rxMsg, omci.LayerTypeOMCI, gopacket.NoCopy)
325 if packet == nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000326 logger.Errorw(ctx, "omci-message could not be decoded", log.Fields{"device-id": oo.deviceID})
mpagenko80622a52021-02-09 16:53:23 +0000327 oo.printRxMessage(ctx, rxMsg)
Andrea Campanella6515c582020-10-05 11:25:00 +0200328 return fmt.Errorf("could not decode rxMsg as OMCI %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000329 }
330 omciLayer := packet.Layer(omci.LayerTypeOMCI)
331 if omciLayer == nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000332 logger.Errorw(ctx, "omci-message could not decode omci layer", log.Fields{"device-id": oo.deviceID})
mpagenko80622a52021-02-09 16:53:23 +0000333 oo.printRxMessage(ctx, rxMsg)
Andrea Campanella6515c582020-10-05 11:25:00 +0200334 return fmt.Errorf("could not decode omci layer %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000335 }
mpagenko836a1fd2021-11-01 16:12:42 +0000336 // insert some check on detected OMCI decoding issues and log them
337 // e.g. should indicate problems when detecting some unknown attribute mask content (independent from message type)
338 // even though allowed from omci-lib due to set relaxed decoding
339 // application may dig into further details if wanted/needed on their own [but info is not transferred from here so far]
340 // (compare mib_sync.go unknownAttrLayer)
341 errLayer := packet.Layer(gopacket.LayerTypeDecodeFailure)
342 if failure, decodeOk := errLayer.(*gopacket.DecodeFailure); decodeOk {
343 errMsg := failure.Error()
344 logger.Warnw(ctx, "Detected decode issue on received OMCI frame", log.Fields{
345 "device-id": oo.deviceID, "issue": errMsg})
346 }
347 //anyway try continue OMCI decoding further on message type layer
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000348 omciMsg, ok := omciLayer.(*omci.OMCI)
349 if !ok {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000350 logger.Errorw(ctx, "omci-message could not assign omci layer", log.Fields{"device-id": oo.deviceID})
mpagenko80622a52021-02-09 16:53:23 +0000351 oo.printRxMessage(ctx, rxMsg)
Andrea Campanella6515c582020-10-05 11:25:00 +0200352 return fmt.Errorf("could not assign omci layer %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000353 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000354 logger.Debugw(ctx, "omci-message-decoded:", log.Fields{"omciMsgType": omciMsg.MessageType,
mpagenko3dbcdd22020-07-22 07:38:45 +0000355 "transCorrId": strconv.FormatInt(int64(omciMsg.TransactionID), 16), "DeviceIdent": omciMsg.DeviceIdentifier})
mpagenko836a1fd2021-11-01 16:12:42 +0000356
Girish Gowdra6afb56a2021-04-27 17:47:57 -0700357 // TestResult is asynchronous indication that carries the same TID as the TestResponse.
358 // We expect to find the TID in the oo.rxSchedulerMap
359 if byte(omciMsg.MessageType)&me.AK == 0 && omciMsg.MessageType != omci.TestResultType {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000360 // Not a response
mpagenko80622a52021-02-09 16:53:23 +0000361 oo.printRxMessage(ctx, rxMsg)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000362 logger.Debug(ctx, "RxMsg is no Omci Response Message")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000363 if omciMsg.TransactionID == 0 {
Himani Chawlaac1f5ad2021-02-04 21:21:54 +0530364 return oo.receiveOnuMessage(ctx, omciMsg, &packet)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000365 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000366 logger.Errorw(ctx, "Unexpected TransCorrId != 0 not accepted for autonomous messages",
Andrea Campanella6515c582020-10-05 11:25:00 +0200367 log.Fields{"msgType": omciMsg.MessageType, "payload": hex.EncodeToString(omciMsg.Payload),
mpagenko8b07c1b2020-11-26 10:36:31 +0000368 "device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200369 return fmt.Errorf("autonomous Omci Message with TranSCorrId != 0 not acccepted %s", oo.deviceID)
Himani Chawla4d908332020-08-31 12:30:20 +0530370 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000371 //logger.Debug(ctx,"RxMsg is a Omci Response Message: try to schedule it to the requester")
Himani Chawla4d908332020-08-31 12:30:20 +0530372 oo.mutexRxSchedMap.Lock()
373 rxCallbackEntry, ok := oo.rxSchedulerMap[omciMsg.TransactionID]
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000374 if ok && rxCallbackEntry.CbFunction != nil {
375 if rxCallbackEntry.FramePrint {
mpagenko80622a52021-02-09 16:53:23 +0000376 oo.printRxMessage(ctx, rxMsg)
377 }
Himani Chawla4d908332020-08-31 12:30:20 +0530378 //disadvantage of decoupling: error verification made difficult, but anyway the question is
379 // how to react on erroneous frame reception, maybe can simply be ignored
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000380 go rxCallbackEntry.CbFunction(ctx, omciMsg, &packet, rxCallbackEntry.CbRespChannel)
Holger Hildebrandt3124e302021-03-23 12:47:03 +0000381 if isSuccessfulResponseWithMibDataSync(omciMsg, &packet) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000382 oo.pOnuDeviceEntry.IncrementMibDataSync(ctx)
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +0000383 }
mpagenkoc8bba412021-01-15 15:38:44 +0000384
Girish Gowdra6afb56a2021-04-27 17:47:57 -0700385 // If omciMsg.MessageType is omci.TestResponseType, we still expect the TestResult OMCI message,
386 // so do not clean up the TransactionID in that case.
387 if omciMsg.MessageType != omci.TestResponseType {
388 // having posted the response the request is regarded as 'done'
389 delete(oo.rxSchedulerMap, omciMsg.TransactionID)
390 }
Himani Chawla4d908332020-08-31 12:30:20 +0530391 oo.mutexRxSchedMap.Unlock()
mpagenko80622a52021-02-09 16:53:23 +0000392 return nil
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000393 }
mpagenko80622a52021-02-09 16:53:23 +0000394 oo.mutexRxSchedMap.Unlock()
395 logger.Errorw(ctx, "omci-message-response for not registered transCorrId", log.Fields{"device-id": oo.deviceID})
396 oo.printRxMessage(ctx, rxMsg)
397 return fmt.Errorf("could not find registered response handler tor transCorrId %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000398
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000399 /* py code was:
400 Receive and OMCI message from the proxy channel to the OLT.
401
402 Call this from your ONU Adapter on a new OMCI Rx on the proxy channel
403 :param msg: (str) OMCI binary message (used as input to Scapy packet decoder)
404 """
405 if not self.enabled:
406 return
407
408 try:
409 now = arrow.utcnow()
410 d = None
411
412 # NOTE: Since we may need to do an independent ME map on a per-ONU basis
413 # save the current value of the entity_id_to_class_map, then
414 # replace it with our custom one before decode, and then finally
415 # restore it later. Tried other ways but really made the code messy.
416 saved_me_map = omci_entities.entity_id_to_class_map
417 omci_entities.entity_id_to_class_map = self._me_map
418
419 try:
420 rx_frame = msg if isinstance(msg, OmciFrame) else OmciFrame(msg)
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000421 self.logger.debug('recv-omci-msg', omci_msg=hexlify(msg))
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000422 except KeyError as e:
423 # Unknown, Unsupported, or vendor-specific ME. Key is the unknown classID
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000424 self.logger.debug('frame-decode-key-error', omci_msg=hexlify(msg), e=e)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000425 rx_frame = self._decode_unknown_me(msg)
426 self._rx_unknown_me += 1
427
428 except Exception as e:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000429 self.logger.exception('frame-decode', omci_msg=hexlify(msg), e=e)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000430 return
431
432 finally:
433 omci_entities.entity_id_to_class_map = saved_me_map # Always restore it.
434
435 rx_tid = rx_frame.fields['transaction_id']
436 msg_type = rx_frame.fields['message_type']
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000437 self.logger.debug('Received message for rx_tid', rx_tid = rx_tid, msg_type = msg_type)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000438 # Filter the Test Result frame and route through receive onu
439 # message method.
440 if rx_tid == 0 or msg_type == EntityOperations.TestResult.value:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000441 self.logger.debug('Receive ONU message', rx_tid=0)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000442 return self._receive_onu_message(rx_frame)
443
444 # Previously unreachable if this is the very first round-trip Rx or we
445 # have been running consecutive errors
446 if self._rx_frames == 0 or self._consecutive_errors != 0:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000447 self.logger.debug('Consecutive errors for rx', err = self._consecutive_errors)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000448 self.reactor.callLater(0, self._publish_connectivity_event, True)
449
450 self._rx_frames += 1
451 self._consecutive_errors = 0
452
453 try:
454 high_priority = self._tid_is_high_priority(rx_tid)
455 index = self._get_priority_index(high_priority)
456
457 # (timestamp, defer, frame, timeout, retry, delayedCall)
458 last_tx_tuple = self._tx_request[index]
459
460 if last_tx_tuple is None or \
461 last_tx_tuple[OMCI_CC.REQUEST_FRAME].fields.get('transaction_id') != rx_tid:
462 # Possible late Rx on a message that timed-out
463 if last_tx_tuple:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000464 self.logger.debug('Unknown message', rx_tid=rx_tid,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000465 tx_id=last_tx_tuple[OMCI_CC.REQUEST_FRAME].fields.get('transaction_id'))
466 self._rx_unknown_tid += 1
467 self._rx_late += 1
468 return
469
470 ts, d, tx_frame, timeout, retry, dc = last_tx_tuple
471 if dc is not None and not dc.cancelled and not dc.called:
472 dc.cancel()
473
474 _secs = self._update_rx_tx_stats(now, ts)
475
476 # Late arrival already serviced by a timeout?
477 if d.called:
478 self._rx_late += 1
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000479 self.logger.debug('Serviced by timeout. Late arrival', rx_late = self._rx_late)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000480 return
481
482 except Exception as e:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000483 self.logger.exception('frame-match', msg=hexlify(msg), e=e)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000484 if d is not None:
485 return d.errback(failure.Failure(e))
486 return
487
488 # Publish Rx event to listeners in a different task
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000489 self.logger.debug('Publish rx event', rx_tid = rx_tid,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000490 tx_tid = tx_frame.fields['transaction_id'])
491 reactor.callLater(0, self._publish_rx_frame, tx_frame, rx_frame)
492
493 # begin success callback chain (will cancel timeout and queue next Tx message)
494 self._rx_response[index] = rx_frame
495 d.callback(rx_frame)
496
497 except Exception as e:
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000498 self.logger.exception('rx-msg', e=e)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000499 */
500}
501
Himani Chawla6d2ae152020-09-02 13:11:20 +0530502/*
503func (oo *omciCC) publishRxResponseFrame(ctx context.Context, txFrame []byte, rxFrame []byte) error {
Himani Chawla4d908332020-08-31 12:30:20 +0530504 return errors.New("publishRxResponseFrame unimplemented")
Himani Chawla6d2ae152020-09-02 13:11:20 +0530505 //def _publish_rx_frame(self, tx_frame, rx_frame):
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000506}
Himani Chawla6d2ae152020-09-02 13:11:20 +0530507*/
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000508
Girish Gowdra6afb56a2021-04-27 17:47:57 -0700509// ReleaseTid releases OMCI transaction identifier from rxSchedulerMap
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000510func (oo *OmciCC) ReleaseTid(ctx context.Context, tid uint16) {
Girish Gowdra6afb56a2021-04-27 17:47:57 -0700511 logger.Debugw(ctx, "releasing tid from rxSchedulerMap", log.Fields{"tid": tid})
512 delete(oo.rxSchedulerMap, tid)
513}
514
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000515// Send - Queue the OMCI Frame for a transmit to the ONU via the proxy_channel
516func (oo *OmciCC) Send(ctx context.Context, txFrame []byte, timeout int, retry int, highPrio bool,
517 receiveCallbackPair CallbackPair) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000518
mpagenkoc26d4c02021-05-06 14:27:57 +0000519 if timeout != 0 {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000520 logger.Debugw(ctx, "register-response-callback:", log.Fields{"for TansCorrId": receiveCallbackPair.CbKey})
mpagenkoc26d4c02021-05-06 14:27:57 +0000521 oo.mutexRxSchedMap.Lock()
522 // it could be checked, if the callback key is already registered - but simply overwrite may be acceptable ...
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000523 oo.rxSchedulerMap[receiveCallbackPair.CbKey] = receiveCallbackPair.CbEntry
mpagenkoc26d4c02021-05-06 14:27:57 +0000524 oo.mutexRxSchedMap.Unlock()
525 } //else timeout 0 indicates that no response is expected - fire and forget
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000526
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000527 printFrame := receiveCallbackPair.CbEntry.FramePrint //printFrame true means debug print of frame is requested
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000528 //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 +0000529 omciTxRequest := OmciTransferStructure{
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000530 txFrame,
531 timeout,
532 retry,
533 highPrio,
mpagenko80622a52021-02-09 16:53:23 +0000534 printFrame,
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000535 receiveCallbackPair,
536 nil,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000537 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000538 oo.mutexMonReq.Lock()
539 defer oo.mutexMonReq.Unlock()
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000540 if _, exist := oo.monitoredRequests[receiveCallbackPair.CbKey]; !exist {
mpagenko7455fd42021-06-10 16:25:55 +0000541 // do not call processRequestMonitoring in background here to ensure correct sequencing
542 // of requested messages into txQueue (especially for non-response-supervised messages)
543 oo.processRequestMonitoring(ctx, omciTxRequest)
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000544 return nil
545 }
546 logger.Errorw(ctx, "A message with this tid is processed already!",
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000547 log.Fields{"tid": receiveCallbackPair.CbKey, "device-id": oo.deviceID})
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000548 return fmt.Errorf("message with tid is processed already %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000549}
550
Holger Hildebrandt34555512021-10-01 16:26:59 +0000551func (oo *OmciCC) sendQueuedRequests(ctx context.Context) {
552 // Avoid accessing the txQueues from parallel send routines to block
553 // parallel omci send requests at least until SendIAP is 'committed'.
554 // To guarantee window size 1 for one ONU it would be necessary to wait
555 // for the corresponding response too (t.b.d.).
556 oo.mutexSendQueuedRequests.Lock()
557 defer oo.mutexSendQueuedRequests.Unlock()
558 if err := oo.sendQueuedHighPrioRequests(ctx); err != nil {
559 logger.Errorw(ctx, "Error during sending high prio requests!",
560 log.Fields{"err": err, "device-id": oo.deviceID})
561 return
562 }
563 if err := oo.sendQueuedLowPrioRequests(ctx); err != nil {
564 logger.Errorw(ctx, "Error during sending low prio requests!",
565 log.Fields{"err": err, "device-id": oo.deviceID})
566 return
567 }
568}
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000569
Holger Hildebrandt34555512021-10-01 16:26:59 +0000570func (oo *OmciCC) sendQueuedHighPrioRequests(ctx context.Context) error {
571 oo.mutexHighPrioTxQueue.Lock()
572 defer oo.mutexHighPrioTxQueue.Unlock()
573 for oo.highPrioTxQueue.Len() > 0 {
574 queueElement := oo.highPrioTxQueue.Front() // First element
575 if err := oo.sendOMCIRequest(ctx, queueElement.Value.(OmciTransferStructure)); err != nil {
576 return err
mpagenko80622a52021-02-09 16:53:23 +0000577 }
Holger Hildebrandt34555512021-10-01 16:26:59 +0000578 oo.highPrioTxQueue.Remove(queueElement) // Dequeue
579 }
580 return nil
581}
582
583func (oo *OmciCC) sendQueuedLowPrioRequests(ctx context.Context) error {
584 oo.mutexLowPrioTxQueue.Lock()
585 for oo.lowPrioTxQueue.Len() > 0 {
586 queueElement := oo.lowPrioTxQueue.Front() // First element
587 if err := oo.sendOMCIRequest(ctx, queueElement.Value.(OmciTransferStructure)); err != nil {
588 oo.mutexLowPrioTxQueue.Unlock()
589 return err
amit.ghosh58b704b2021-06-18 03:45:52 +0200590 }
Holger Hildebrandt34555512021-10-01 16:26:59 +0000591 oo.lowPrioTxQueue.Remove(queueElement) // Dequeue
592 // Interrupt the sending of low priority requests to process any high priority requests
593 // that may have arrived in the meantime
594 oo.mutexLowPrioTxQueue.Unlock()
595 if err := oo.sendQueuedHighPrioRequests(ctx); err != nil {
596 return err
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000597 }
Holger Hildebrandt34555512021-10-01 16:26:59 +0000598 oo.mutexLowPrioTxQueue.Lock()
599 }
600
601 oo.mutexLowPrioTxQueue.Unlock()
602 return nil
603}
604
605func (oo *OmciCC) sendOMCIRequest(ctx context.Context, omciTxRequest OmciTransferStructure) error {
606 if omciTxRequest.withFramePrint {
607 logger.Debugw(ctx, "omci-message-to-send:", log.Fields{
608 "TxOmciMessage": hex.EncodeToString(omciTxRequest.txFrame),
609 "device-id": oo.deviceID,
610 "toDeviceType": oo.pBaseDeviceHandler.GetProxyAddressType(),
611 "proxyDeviceID": oo.pBaseDeviceHandler.GetProxyAddressID(),
612 "proxyAddress": oo.pBaseDeviceHandler.GetProxyAddress()})
613 }
614 omciMsg := &ic.OmciMessage{
615 ParentDeviceId: oo.pBaseDeviceHandler.GetProxyAddressID(),
616 ChildDeviceId: oo.deviceID,
617 Message: omciTxRequest.txFrame,
618 ProxyAddress: oo.pBaseDeviceHandler.GetProxyAddress(),
619 ConnectStatus: common.ConnectStatus_REACHABLE, // If we are sending OMCI messages means we are connected, else we should not be here
620 }
621 sendErr := oo.pBaseDeviceHandler.SendOMCIRequest(ctx, oo.pBaseDeviceHandler.GetProxyAddress().AdapterEndpoint, omciMsg)
622 if sendErr != nil {
623 logger.Errorw(ctx, "send omci request error", log.Fields{"ChildId": oo.deviceID, "error": sendErr})
624 return sendErr
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000625 }
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000626 return nil
627}
628
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000629// GetNextTid - TODO: add comment
630func (oo *OmciCC) GetNextTid(highPriority bool) uint16 {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000631 var next uint16
632 if highPriority {
mpagenko900ee4b2020-10-12 11:56:34 +0000633 oo.mutexHpTid.Lock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000634 next = oo.hpTid
Himani Chawla4d908332020-08-31 12:30:20 +0530635 oo.hpTid++
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000636 if oo.hpTid < 0x8000 {
637 oo.hpTid = 0x8000
638 }
mpagenko900ee4b2020-10-12 11:56:34 +0000639 oo.mutexHpTid.Unlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000640 } else {
mpagenko900ee4b2020-10-12 11:56:34 +0000641 oo.mutexTid.Lock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000642 next = oo.tid
Himani Chawla4d908332020-08-31 12:30:20 +0530643 oo.tid++
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000644 if oo.tid >= 0x8000 {
645 oo.tid = 1
646 }
mpagenko900ee4b2020-10-12 11:56:34 +0000647 oo.mutexTid.Unlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000648 }
649 return next
650}
651
652// ###################################################################################
653// # utility methods provided to work on OMCI messages
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000654
655// Serialize - TODO: add comment
656func Serialize(ctx context.Context, msgType omci.MessageType, request gopacket.SerializableLayer, tid uint16) ([]byte, error) {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000657 omciLayer := &omci.OMCI{
658 TransactionID: tid,
659 MessageType: msgType,
660 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000661 return serializeOmciLayer(ctx, omciLayer, request)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000662}
663
dbainbri4d3a0dc2020-12-02 00:33:42 +0000664func serializeOmciLayer(ctx context.Context, aOmciLayer *omci.OMCI, aRequest gopacket.SerializableLayer) ([]byte, error) {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000665 var options gopacket.SerializeOptions
666 options.FixLengths = true
667
668 buffer := gopacket.NewSerializeBuffer()
Himani Chawla4d908332020-08-31 12:30:20 +0530669 err := gopacket.SerializeLayers(buffer, options, aOmciLayer, aRequest)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000670 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000671 logger.Errorw(ctx, "Could not create goPacket Omci serial buffer", log.Fields{"Err": err})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000672 return nil, err
673 }
674 return buffer.Bytes(), nil
675}
676
Himani Chawla4d908332020-08-31 12:30:20 +0530677/*
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000678func hexEncode(omciPkt []byte) ([]byte, error) {
679 dst := make([]byte, hex.EncodedLen(len(omciPkt)))
680 hex.Encode(dst, omciPkt)
681 return dst, nil
682}
Himani Chawla4d908332020-08-31 12:30:20 +0530683*/
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000684
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000685//supply a response handler for omci response messages to be transferred to the requested FSM
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000686func (oo *OmciCC) receiveOmciResponse(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet, respChan chan Message) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000687
dbainbri4d3a0dc2020-12-02 00:33:42 +0000688 logger.Debugw(ctx, "omci-message-response - transfer on omciRespChannel", log.Fields{"omciMsgType": omciMsg.MessageType,
divyadesai4d299552020-08-18 07:13:49 +0000689 "transCorrId": strconv.FormatInt(int64(omciMsg.TransactionID), 16), "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000690
691 if oo.pOnuDeviceEntry == nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000692 logger.Errorw(ctx, "Abort receiving OMCI response, DeviceEntryPointer is nil", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000693 "device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200694 return fmt.Errorf("deviceEntryPointer is nil %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000695 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000696 oo.mutexMonReq.RLock()
697 if _, exist := oo.monitoredRequests[omciMsg.TransactionID]; exist {
mpagenko8cd1bf72021-06-22 10:11:19 +0000698 //implement non-blocking channel send to avoid blocking on mutexMonReq later
699 select {
700 case oo.monitoredRequests[omciMsg.TransactionID].chSuccess <- true:
701 default:
702 logger.Debugw(ctx, "response not send on omciRespChannel (no receiver)", log.Fields{
703 "transCorrId": strconv.FormatInt(int64(omciMsg.TransactionID), 16), "device-id": oo.deviceID})
704 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +0000705 } else {
706 logger.Infow(ctx, "reqMon: map entry does not exist!",
707 log.Fields{"tid": omciMsg.TransactionID, "device-id": oo.deviceID})
708 }
709 oo.mutexMonReq.RUnlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000710
711 // no further test on SeqNo is done here, assignment from rxScheduler is trusted
712 // MibSync responses are simply transferred via deviceEntry to MibSync, no specific analysis here
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000713 omciRespMsg := Message{
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000714 Type: OMCI,
715 Data: OmciMessage{
716 OmciMsg: omciMsg,
717 OmciPacket: packet,
718 },
719 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000720 //logger.Debugw(ctx,"Message to be sent into channel:", log.Fields{"mibSyncMsg": mibSyncMsg})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000721 respChan <- omciRespMsg
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000722
723 return nil
724}
725
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000726// SendMibReset sends MibResetRequest
727func (oo *OmciCC) SendMibReset(ctx context.Context, timeout int, highPrio bool) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000728
dbainbri4d3a0dc2020-12-02 00:33:42 +0000729 logger.Debugw(ctx, "send MibReset-msg to:", log.Fields{"device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000730 request := &omci.MibResetRequest{
731 MeBasePacket: omci.MeBasePacket{
732 EntityClass: me.OnuDataClassID,
733 },
734 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000735 tid := oo.GetNextTid(highPrio)
736 pkt, err := Serialize(ctx, omci.MibResetRequestType, request, tid)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000737 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000738 logger.Errorw(ctx, "Cannot serialize MibResetRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000739 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000740 return err
741 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000742 omciRxCallbackPair := CallbackPair{
743 CbKey: tid,
744 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibUploadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000745 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000746 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000747}
748
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000749// SendReboot sends RebootRequest
750func (oo *OmciCC) SendReboot(ctx context.Context, timeout int, highPrio bool, responseChannel chan Message) error {
751 logger.Debugw(ctx, "send reboot-msg to:", log.Fields{"device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300752 request := &omci.RebootRequest{
753 MeBasePacket: omci.MeBasePacket{
754 EntityClass: me.OnuGClassID,
755 },
756 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000757 tid := oo.GetNextTid(highPrio)
758 pkt, err := Serialize(ctx, omci.RebootRequestType, request, tid)
ozgecanetsiae11479f2020-07-06 09:44:47 +0300759 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000760 logger.Errorw(ctx, "Cannot serialize RebootRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000761 "Err": err, "device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300762 return err
763 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000764 omciRxCallbackPair := CallbackPair{
765 CbKey: tid,
766 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetOmciRebootMsgRevChan(), oo.receiveOmciResponse, true},
ozgecanetsiae11479f2020-07-06 09:44:47 +0300767 }
768
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000769 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiae11479f2020-07-06 09:44:47 +0300770 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000771 logger.Errorw(ctx, "Cannot send RebootRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000772 "Err": err, "device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300773 return err
774 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000775 err = oo.pOnuDeviceEntry.WaitForRebootResponse(ctx, responseChannel)
ozgecanetsiae11479f2020-07-06 09:44:47 +0300776 if err != nil {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000777 logger.Errorw(ctx, "aborting ONU reboot!", log.Fields{
Andrea Campanella6515c582020-10-05 11:25:00 +0200778 "Err": err, "device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300779 return err
780 }
781 return nil
782}
783
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000784// SendMibUpload sends MibUploadRequest
785func (oo *OmciCC) SendMibUpload(ctx context.Context, timeout int, highPrio bool) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000786 logger.Debugw(ctx, "send MibUpload-msg to:", log.Fields{"device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000787 request := &omci.MibUploadRequest{
788 MeBasePacket: omci.MeBasePacket{
789 EntityClass: me.OnuDataClassID,
790 },
791 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000792 tid := oo.GetNextTid(highPrio)
793 pkt, err := Serialize(ctx, omci.MibUploadRequestType, request, tid)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000794 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000795 logger.Errorw(ctx, "Cannot serialize MibUploadRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000796 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000797 return err
798 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000799 oo.UploadSequNo = 0
800 oo.UploadNoOfCmds = 0
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000801
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000802 omciRxCallbackPair := CallbackPair{
803 CbKey: tid,
804 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibUploadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000805 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000806 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000807}
808
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000809// SendMibUploadNext sends MibUploadNextRequest
810func (oo *OmciCC) SendMibUploadNext(ctx context.Context, timeout int, highPrio bool) error {
811 logger.Debugw(ctx, "send MibUploadNext-msg to:", log.Fields{"device-id": oo.deviceID, "UploadSequNo": oo.UploadSequNo})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000812 request := &omci.MibUploadNextRequest{
813 MeBasePacket: omci.MeBasePacket{
814 EntityClass: me.OnuDataClassID,
815 },
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000816 CommandSequenceNumber: oo.UploadSequNo,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000817 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000818 tid := oo.GetNextTid(highPrio)
819 pkt, err := Serialize(ctx, omci.MibUploadNextRequestType, request, tid)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000820 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000821 logger.Errorw(ctx, "Cannot serialize MibUploadNextRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000822 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000823 return err
824 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000825 oo.UploadSequNo++
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000826
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000827 omciRxCallbackPair := CallbackPair{
828 CbKey: tid,
mpagenko80622a52021-02-09 16:53:23 +0000829 //frame printing for MibUpload frames disabled now per default to avoid log file abort situations (size/speed?)
830 // if wanted, rx frame printing should be specifically done within the MibUpload FSM or controlled via extra parameter
831 // compare also software upgrade download section handling
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000832 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibUploadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000833 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000834 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000835}
836
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000837// SendGetAllAlarm gets all alarm ME instances
838func (oo *OmciCC) SendGetAllAlarm(ctx context.Context, alarmRetreivalMode uint8, timeout int, highPrio bool) error {
Himani Chawlad3dac422021-03-13 02:31:31 +0530839 logger.Debugw(ctx, "send GetAllAlarms-msg to:", log.Fields{"device-id": oo.deviceID})
840 request := &omci.GetAllAlarmsRequest{
841 MeBasePacket: omci.MeBasePacket{
842 EntityClass: me.OnuDataClassID,
843 },
844 AlarmRetrievalMode: byte(alarmRetreivalMode),
845 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000846 tid := oo.GetNextTid(highPrio)
847 pkt, err := Serialize(ctx, omci.GetAllAlarmsRequestType, request, tid)
Himani Chawlad3dac422021-03-13 02:31:31 +0530848 if err != nil {
849 logger.Errorw(ctx, "Cannot serialize GetAllAlarmsRequest", log.Fields{
850 "Err": err, "device-id": oo.deviceID})
851 return err
852 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000853 oo.pOnuAlarmManager.ResetAlarmUploadCounters()
Himani Chawlad3dac422021-03-13 02:31:31 +0530854
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000855 omciRxCallbackPair := CallbackPair{
856 CbKey: tid,
857 CbEntry: CallbackPairEntry{oo.pOnuAlarmManager.GetAlarmMgrEventChannel(), oo.receiveOmciResponse, true},
Himani Chawlad3dac422021-03-13 02:31:31 +0530858 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000859 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Himani Chawlad3dac422021-03-13 02:31:31 +0530860}
861
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000862// SendGetAllAlarmNext gets next alarm ME instance
863func (oo *OmciCC) SendGetAllAlarmNext(ctx context.Context, timeout int, highPrio bool) error {
864 alarmUploadSeqNo := oo.pOnuAlarmManager.GetAlarmUploadSeqNo()
865 logger.Debugw(ctx, "send SendGetAllAlarmNext-msg to:", log.Fields{"device-id": oo.deviceID,
Himani Chawlad3dac422021-03-13 02:31:31 +0530866 "alarmUploadSeqNo": alarmUploadSeqNo})
867 request := &omci.GetAllAlarmsNextRequest{
868 MeBasePacket: omci.MeBasePacket{
869 EntityClass: me.OnuDataClassID,
870 },
871 CommandSequenceNumber: alarmUploadSeqNo,
872 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000873 tid := oo.GetNextTid(highPrio)
874 pkt, err := Serialize(ctx, omci.GetAllAlarmsNextRequestType, request, tid)
Himani Chawlad3dac422021-03-13 02:31:31 +0530875 if err != nil {
876 logger.Errorw(ctx, "Cannot serialize GetAllAlarmsNextRequest", log.Fields{
877 "Err": err, "device-id": oo.deviceID})
878 return err
879 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000880 oo.pOnuAlarmManager.IncrementAlarmUploadSeqNo()
Himani Chawlad3dac422021-03-13 02:31:31 +0530881
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000882 omciRxCallbackPair := CallbackPair{
883 CbKey: tid,
884 CbEntry: CallbackPairEntry{oo.pOnuAlarmManager.GetAlarmMgrEventChannel(), oo.receiveOmciResponse, true},
Himani Chawlad3dac422021-03-13 02:31:31 +0530885 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000886 return oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Himani Chawlad3dac422021-03-13 02:31:31 +0530887}
888
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000889// SendCreateGalEthernetProfile creates GalEthernetProfile ME instance
890func (oo *OmciCC) SendCreateGalEthernetProfile(ctx context.Context, timeout int, highPrio bool) (*me.ManagedEntity, error) {
891 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000892 logger.Debugw(ctx, "send GalEnetProfile-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000893 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000894
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000895 meParams := me.ParamData{
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000896 EntityID: GalEthernetEID,
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000897 Attributes: me.AttributeValueMap{"MaximumGemPayloadSize": maxGemPayloadSize},
898 }
899 meInstance, omciErr := me.NewGalEthernetProfile(meParams)
900 if omciErr.GetError() == nil {
901 //all setByCreate parameters already set, no default option required ...
mpagenko836a1fd2021-11-01 16:12:42 +0000902 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000903 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000904 logger.Errorw(ctx, "Cannot encode GalEnetProfileInstance for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000905 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +0300906 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000907 }
908
dbainbri4d3a0dc2020-12-02 00:33:42 +0000909 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000910 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000911 logger.Errorw(ctx, "Cannot serialize GalEnetProfile create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000912 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +0300913 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000914 }
915
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000916 omciRxCallbackPair := CallbackPair{
917 CbKey: tid,
918 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000919 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000920 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000921 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000922 logger.Errorw(ctx, "Cannot send GalEnetProfile create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000923 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +0300924 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000925 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000926 logger.Debug(ctx, "send GalEnetProfile-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +0300927 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000928 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000929 logger.Errorw(ctx, "Cannot generate GalEnetProfileInstance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000930 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +0300931 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000932}
933
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000934// SendSetOnu2g sets Onu2G ME instance
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000935// might be needed to extend for parameter arguments, here just for setting the ConnectivityMode!!
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000936func (oo *OmciCC) SendSetOnu2g(ctx context.Context, timeout int, highPrio bool) (*me.ManagedEntity, error) {
937 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000938 logger.Debugw(ctx, "send ONU2-G-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000939 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000940
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000941 // ONU-G ME-ID is defined to be 0, but we could verify, if the ONU really supports the desired
942 // connectivity mode 5 (in ConnCap)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000943 // By now we just use fix values to fire - this is anyway what the python adapter does
944 // read ONU-2G from DB ???? //TODO!!!
945 meParams := me.ParamData{
946 EntityID: 0,
947 Attributes: me.AttributeValueMap{"CurrentConnectivityMode": connectivityModeValue},
948 }
949 meInstance, omciErr := me.NewOnu2G(meParams)
950 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +0000951 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000952 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000953 logger.Errorw(ctx, "Cannot encode ONU2-G instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000954 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +0300955 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000956 }
957
dbainbri4d3a0dc2020-12-02 00:33:42 +0000958 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000959 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000960 logger.Errorw(ctx, "Cannot serialize ONU2-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000961 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +0300962 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000963 }
964
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000965 omciRxCallbackPair := CallbackPair{
966 CbKey: tid,
967 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000968 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000969 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000970 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000971 logger.Errorw(ctx, "Cannot send ONU2-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000972 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +0300973 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000974 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000975 logger.Debug(ctx, "send ONU2-G-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +0300976 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000977 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000978 logger.Errorw(ctx, "Cannot generate ONU2-G", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000979 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +0300980 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000981}
982
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +0000983// SendCreateMBServiceProfile creates MacBridgeServiceProfile ME instance
984func (oo *OmciCC) SendCreateMBServiceProfile(ctx context.Context,
985 aPUniPort *OnuUniPort, timeout int, highPrio bool) (*me.ManagedEntity, error) {
986 tid := oo.GetNextTid(highPrio)
987 instID := MacBridgeServiceProfileEID + uint16(aPUniPort.MacBpNo)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000988 logger.Debugw(ctx, "send MBSP-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000989 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(instID), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000990
991 meParams := me.ParamData{
992 EntityID: instID,
993 Attributes: me.AttributeValueMap{
ozgecanetsiab5000ef2020-11-27 14:38:20 +0300994 "Priority": 0x8000,
995 "MaxAge": 20 * 256, //20s
996 "HelloTime": 2 * 256, //2s
997 "ForwardDelay": 15 * 256, //15s
998 "DynamicFilteringAgeingTime": 0,
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000999 },
1000 }
1001
1002 meInstance, omciErr := me.NewMacBridgeServiceProfile(meParams)
1003 if omciErr.GetError() == nil {
1004 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001005 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1006 oframe.TransactionID(tid), oframe.AddDefaults(true))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001007 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001008 logger.Errorw(ctx, "Cannot encode MBSP for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001009 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001010 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001011 }
1012
dbainbri4d3a0dc2020-12-02 00:33:42 +00001013 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001014 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001015 logger.Errorw(ctx, "Cannot serialize MBSP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001016 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001017 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001018 }
1019
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001020 omciRxCallbackPair := CallbackPair{
1021 CbKey: tid,
1022 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001023 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001024 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001025 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001026 logger.Errorw(ctx, "Cannot send MBSP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001027 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001028 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001029 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001030 logger.Debug(ctx, "send MBSP-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001031 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001032 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001033 logger.Errorw(ctx, "Cannot generate MBSP Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001034 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001035 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001036}
1037
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001038// SendCreateMBPConfigDataUniSide creates MacBridgePortConfigurationData ME instance
1039func (oo *OmciCC) SendCreateMBPConfigDataUniSide(ctx context.Context,
1040 aPUniPort *OnuUniPort, timeout int, highPrio bool) (*me.ManagedEntity, error) {
1041 tid := oo.GetNextTid(highPrio)
1042 instID, idErr := GenerateUNISideMBPCDEID(uint16(aPUniPort.MacBpNo))
Mahir Gunyel6781f962021-05-16 23:30:08 -07001043 if idErr != nil {
1044 logger.Errorw(ctx, "Cannot generate MBPCD entity id", log.Fields{
1045 "Err": idErr, "device-id": oo.deviceID})
1046 return nil, idErr
1047 }
1048 logger.Debugw(ctx, "send MBPCD-Create-msg for uni side:", log.Fields{"device-id": oo.deviceID,
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001049 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(instID), 16), "macBpNo": aPUniPort.MacBpNo})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001050
1051 meParams := me.ParamData{
1052 EntityID: instID,
1053 Attributes: me.AttributeValueMap{
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001054 "BridgeIdPointer": MacBridgeServiceProfileEID + uint16(aPUniPort.MacBpNo),
1055 "PortNum": aPUniPort.MacBpNo,
1056 "TpType": uint8(aPUniPort.PortType),
1057 "TpPointer": aPUniPort.EntityID,
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001058 },
1059 }
1060 meInstance, omciErr := me.NewMacBridgePortConfigurationData(meParams)
1061 if omciErr.GetError() == nil {
1062 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001063 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1064 oframe.TransactionID(tid), oframe.AddDefaults(true))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001065 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001066 logger.Errorw(ctx, "Cannot encode MBPCD for create", 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 }
1070
dbainbri4d3a0dc2020-12-02 00:33:42 +00001071 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001072 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001073 logger.Errorw(ctx, "Cannot serialize MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001074 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001075 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001076 }
1077
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001078 omciRxCallbackPair := CallbackPair{
1079 CbKey: tid,
1080 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001081 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001082 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001083 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001084 logger.Errorw(ctx, "Cannot send MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001085 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001086 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001087 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001088 logger.Debug(ctx, "send MBPCD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001089 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001090 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001091 logger.Errorw(ctx, "Cannot generate MBPCD Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001092 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001093 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001094}
1095
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001096// SendCreateEVTOConfigData creates ExtendedVlanTaggingOperationConfigurationData ME instance
1097func (oo *OmciCC) SendCreateEVTOConfigData(ctx context.Context,
1098 aPUniPort *OnuUniPort, timeout int, highPrio bool) (*me.ManagedEntity, error) {
1099 tid := oo.GetNextTid(highPrio)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001100 //same entityId is used as for MBSP (see there), but just arbitrary ...
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001101 instID := MacBridgeServiceProfileEID + uint16(aPUniPort.MacBpNo)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001102 logger.Debugw(ctx, "send EVTOCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001103 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(instID), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001104
1105 // compare python adapter code WA VOL-1311: this is not done here!
1106 // (setting TPID values for the create would probably anyway be ignored by the omci lib)
1107 // but perhaps we have to be aware of possible problems at get(Next) Request handling for EVTOOCD tables later ...
1108 assType := uint8(2) // default AssociationType is PPTPEthUni
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001109 if aPUniPort.PortType == UniVEIP {
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001110 assType = uint8(10) // for VEIP
1111 }
1112 meParams := me.ParamData{
1113 EntityID: instID,
1114 Attributes: me.AttributeValueMap{
1115 "AssociationType": assType,
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001116 "AssociatedMePointer": aPUniPort.EntityID,
mpagenko836a1fd2021-11-01 16:12:42 +00001117 //EnhancedMode not yet supported, used with default options
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001118 },
1119 }
1120 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(meParams)
1121 if omciErr.GetError() == nil {
1122 //all setByCreate parameters already set, no default option required ...
mpagenko836a1fd2021-11-01 16:12:42 +00001123 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1124 oframe.TransactionID(tid), oframe.AddDefaults(true))
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001125 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001126 logger.Errorw(ctx, "Cannot encode EVTOCD for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001127 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001128 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001129 }
1130
dbainbri4d3a0dc2020-12-02 00:33:42 +00001131 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001132 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001133 logger.Errorw(ctx, "Cannot serialize EVTOCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001134 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001135 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001136 }
1137
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001138 omciRxCallbackPair := CallbackPair{
1139 CbKey: tid,
1140 CbEntry: CallbackPairEntry{oo.pOnuDeviceEntry.GetMibDownloadFsmCommChan(), oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001141 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001142 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001143 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001144 logger.Errorw(ctx, "Cannot send EVTOCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001145 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001146 return nil, err
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001147 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001148 logger.Debug(ctx, "send EVTOCD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001149 return meInstance, nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001150 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001151 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001152 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001153 return nil, omciErr.GetError()
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001154}
1155
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001156// SendSetOnuGLS sets OnuG ME instance
1157func (oo *OmciCC) SendSetOnuGLS(ctx context.Context, timeout int,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001158 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001159 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001160 logger.Debugw(ctx, "send ONU-G-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001161 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001162
1163 // ONU-G ME-ID is defined to be 0, no need to perform a DB lookup
1164 meParams := me.ParamData{
1165 EntityID: 0,
1166 Attributes: requestedAttributes,
1167 }
1168 meInstance, omciErr := me.NewOnuG(meParams)
1169 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001170 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001171 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001172 logger.Errorw(ctx, "Cannot encode ONU-G instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001173 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001174 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001175 }
1176
dbainbri4d3a0dc2020-12-02 00:33:42 +00001177 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001178 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001179 logger.Errorw(ctx, "Cannot serialize ONU-G set", 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 Hildebrandtccd390c2020-05-29 13:49:04 +00001182 }
1183
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001184 omciRxCallbackPair := CallbackPair{
1185 CbKey: tid,
1186 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001187 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001188 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001189 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001190 logger.Errorw(ctx, "Cannot send ONU-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001191 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001192 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001193 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001194 logger.Debug(ctx, "send ONU-G-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001195 return meInstance, nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001196 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001197 logger.Errorw(ctx, "Cannot generate ONU-G", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001198 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001199 return nil, omciErr.GetError()
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001200}
1201
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001202// SendSetPptpEthUniLS sets PhysicalPathTerminationPointEthernetUni ME instance
1203func (oo *OmciCC) SendSetPptpEthUniLS(ctx context.Context, aInstNo uint16, timeout int,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001204 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001205 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001206 logger.Debugw(ctx, "send PPTPEthUni-Set-msg:", log.Fields{"device-id": oo.deviceID,
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001207 "SequNo": strconv.FormatInt(int64(tid), 16)})
1208
1209 // PPTPEthUni ME-ID is taken from Mib Upload stored OnuUniPort instance (argument)
1210 meParams := me.ParamData{
1211 EntityID: aInstNo,
1212 Attributes: requestedAttributes,
1213 }
1214 meInstance, omciErr := me.NewPhysicalPathTerminationPointEthernetUni(meParams)
1215 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001216 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001217 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001218 logger.Errorw(ctx, "Cannot encode PPTPEthUni instance for set", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001219 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001220 return nil, err
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001221 }
1222
dbainbri4d3a0dc2020-12-02 00:33:42 +00001223 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001224 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001225 logger.Errorw(ctx, "Cannot serialize PPTPEthUni-Set", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001226 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001227 return nil, err
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001228 }
1229
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001230 omciRxCallbackPair := CallbackPair{
1231 CbKey: tid,
1232 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001233 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001234 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001235 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001236 logger.Errorw(ctx, "Cannot send PPTPEthUni-Set", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001237 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001238 return nil, err
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001239 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001240 logger.Debug(ctx, "send PPTPEthUni-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001241 return meInstance, nil
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001242 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001243 logger.Errorw(ctx, "Cannot generate PPTPEthUni", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001244 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001245 return nil, omciErr.GetError()
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001246}
1247
1248/* UniG obsolete by now, left here in case it should be needed once again
1249 UniG AdminState anyway should be ignored by ONU acc. to G988
Himani Chawla6d2ae152020-09-02 13:11:20 +05301250func (oo *omciCC) sendSetUniGLS(ctx context.Context, aInstNo uint16, timeout int,
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001251 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) *me.ManagedEntity {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001252 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001253 logger.Debugw(ctx,"send UNI-G-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001254 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001255
1256 // UNI-G ME-ID is taken from Mib Upload stored OnuUniPort instance (argument)
1257 meParams := me.ParamData{
1258 EntityID: aInstNo,
1259 Attributes: requestedAttributes,
1260 }
1261 meInstance, omciErr := me.NewUniG(meParams)
1262 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001263 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001264 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001265 logger.Errorw(ctx,"Cannot encode UNI-G instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001266 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001267 return nil
1268 }
1269
1270 pkt, err := serializeOmciLayer(omciLayer, msgLayer)
1271 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001272 logger.Errorw(ctx,"Cannot serialize UNI-G-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001273 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001274 return nil
1275 }
1276
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001277 omciRxCallbackPair := CallbackPair{
1278 CbKey: tid,
1279 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001280 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001281 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001282 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001283 logger.Errorw(ctx,"Cannot send UNIG-G-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001284 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001285 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001286 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001287 logger.Debug(ctx,"send UNI-G-Set-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001288 return meInstance
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001289 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001290 logger.Errorw(ctx,"Cannot generate UNI-G", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001291 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001292 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001293}
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001294*/
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001295
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001296// SendSetVeipLS sets VirtualEthernetInterfacePoint ME instance
1297func (oo *OmciCC) SendSetVeipLS(ctx context.Context, aInstNo uint16, timeout int,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001298 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001299 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001300 logger.Debugw(ctx, "send VEIP-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001301 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001302
1303 // ONU-G ME-ID is defined to be 0, no need to perform a DB lookup
1304 meParams := me.ParamData{
1305 EntityID: aInstNo,
1306 Attributes: requestedAttributes,
1307 }
1308 meInstance, omciErr := me.NewVirtualEthernetInterfacePoint(meParams)
1309 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001310 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001311 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001312 logger.Errorw(ctx, "Cannot encode VEIP instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001313 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001314 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001315 }
1316
dbainbri4d3a0dc2020-12-02 00:33:42 +00001317 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001318 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001319 logger.Errorw(ctx, "Cannot serialize VEIP-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001320 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001321 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001322 }
1323
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001324 omciRxCallbackPair := CallbackPair{
1325 CbKey: tid,
1326 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001327 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001328 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001329 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001330 logger.Errorw(ctx, "Cannot send VEIP-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001331 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001332 return nil, err
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001333 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001334 logger.Debug(ctx, "send VEIP-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001335 return meInstance, nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001336 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001337 logger.Errorw(ctx, "Cannot generate VEIP", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001338 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001339 return nil, omciErr.GetError()
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001340}
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001341
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001342// SendGetMe gets ME instance
1343func (oo *OmciCC) SendGetMe(ctx context.Context, classID me.ClassID, entityID uint16, requestedAttributes me.AttributeValueMap,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001344 timeout int, highPrio bool, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001345
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001346 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001347 logger.Debugw(ctx, "send get-request-msg", log.Fields{"classID": classID, "device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001348 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001349
1350 meParams := me.ParamData{
1351 EntityID: entityID,
1352 Attributes: requestedAttributes,
1353 }
1354 meInstance, omciErr := me.LoadManagedEntityDefinition(classID, meParams)
1355 if omciErr.GetError() == nil {
Himani Chawla4d908332020-08-31 12:30:20 +05301356 meClassIDName := meInstance.GetName()
mpagenko836a1fd2021-11-01 16:12:42 +00001357 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.GetRequestType, oframe.TransactionID(tid))
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001358 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001359 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 +03001360 return nil, err
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001361 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001362 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001363 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001364 logger.Errorw(ctx, "Cannot serialize get-request", log.Fields{"meClassIDName": meClassIDName, "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001365 return nil, err
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001366 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001367 omciRxCallbackPair := CallbackPair{
1368 CbKey: tid,
1369 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001370 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001371 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001372 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001373 logger.Errorw(ctx, "Cannot send get-request-msg", log.Fields{"meClassIDName": meClassIDName, "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001374 return nil, err
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001375 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001376 logger.Debugw(ctx, "send get-request-msg done", log.Fields{"meClassIDName": meClassIDName, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001377 return meInstance, nil
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001378 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001379 logger.Errorw(ctx, "Cannot generate meDefinition", log.Fields{"classID": classID, "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001380 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001381}
1382
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001383// SendGetMeWithAttributeMask gets ME instance with attribute mask
1384func (oo *OmciCC) SendGetMeWithAttributeMask(ctx context.Context, classID me.ClassID, entityID uint16, requestedAttributesMask uint16,
Himani Chawla43f95ff2021-06-03 00:24:12 +05301385 timeout int, highPrio bool, rxChan chan Message) error {
1386
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001387 tid := oo.GetNextTid(highPrio)
Himani Chawla43f95ff2021-06-03 00:24:12 +05301388 logger.Debugw(ctx, "send get-request-msg", log.Fields{"classID": classID, "device-id": oo.deviceID,
1389 "SequNo": strconv.FormatInt(int64(tid), 16)})
1390
1391 request := &omci.GetRequest{
1392 MeBasePacket: omci.MeBasePacket{
1393 EntityInstance: entityID,
1394 EntityClass: classID,
1395 },
1396 AttributeMask: requestedAttributesMask,
1397 }
1398
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001399 pkt, err := Serialize(ctx, omci.GetRequestType, request, tid)
Himani Chawla43f95ff2021-06-03 00:24:12 +05301400 if err != nil {
1401 logger.Errorw(ctx, "Cannot serialize get-request", log.Fields{"meClassIDName": classID, "Err": err, "device-id": oo.deviceID})
1402 return err
1403 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001404 omciRxCallbackPair := CallbackPair{
1405 CbKey: tid,
1406 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Himani Chawla43f95ff2021-06-03 00:24:12 +05301407 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001408 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Himani Chawla43f95ff2021-06-03 00:24:12 +05301409 if err != nil {
1410 logger.Errorw(ctx, "Cannot send get-request-msg", log.Fields{"meClassIDName": classID, "Err": err, "device-id": oo.deviceID})
1411 return err
1412 }
1413 logger.Debugw(ctx, "send get-request-msg done", log.Fields{"meClassIDName": classID, "device-id": oo.deviceID})
1414 return nil
1415}
1416
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001417// SendCreateDot1PMapper creates Ieee8021PMapperServiceProfile ME instance
1418func (oo *OmciCC) SendCreateDot1PMapper(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001419 aInstID uint16, rxChan chan Message) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001420 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001421 logger.Debugw(ctx, "send .1pMapper-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001422 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(aInstID), 16)})
1423
1424 meParams := me.ParamData{
mpagenko8b5fdd22020-12-17 17:58:32 +00001425 EntityID: aInstID,
1426 Attributes: me.AttributeValueMap{
1427 //workaround for unsuitable omci-lib default values, cmp VOL-3729
1428 "TpPointer": 0xFFFF,
1429 "InterworkTpPointerForPBitPriority0": 0xFFFF,
1430 "InterworkTpPointerForPBitPriority1": 0xFFFF,
1431 "InterworkTpPointerForPBitPriority2": 0xFFFF,
1432 "InterworkTpPointerForPBitPriority3": 0xFFFF,
1433 "InterworkTpPointerForPBitPriority4": 0xFFFF,
1434 "InterworkTpPointerForPBitPriority5": 0xFFFF,
1435 "InterworkTpPointerForPBitPriority6": 0xFFFF,
1436 "InterworkTpPointerForPBitPriority7": 0xFFFF,
1437 },
mpagenko3dbcdd22020-07-22 07:38:45 +00001438 }
1439 meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(meParams)
1440 if omciErr.GetError() == nil {
1441 //we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001442 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1443 oframe.TransactionID(tid), oframe.AddDefaults(true))
mpagenko3dbcdd22020-07-22 07:38:45 +00001444 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001445 logger.Errorw(ctx, "Cannot encode .1pMapper for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001446 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001447 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001448 }
1449
dbainbri4d3a0dc2020-12-02 00:33:42 +00001450 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001451 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001452 logger.Errorw(ctx, "Cannot serialize .1pMapper create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001453 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001454 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001455 }
1456
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001457 omciRxCallbackPair := CallbackPair{
1458 CbKey: tid,
1459 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001460 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001461 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001462 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001463 logger.Errorw(ctx, "Cannot send .1pMapper create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001464 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001465 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001466 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001467 logger.Debug(ctx, "send .1pMapper-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001468 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001469 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001470 logger.Errorw(ctx, "Cannot generate .1pMapper", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001471 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001472 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001473}
1474
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001475// SendCreateMBPConfigDataVar creates MacBridgePortConfigurationData ME instance
1476func (oo *OmciCC) SendCreateMBPConfigDataVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001477 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001478 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001479 logger.Debugw(ctx, "send MBPCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001480 "SequNo": strconv.FormatInt(int64(tid), 16),
1481 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1482
1483 meInstance, omciErr := me.NewMacBridgePortConfigurationData(params[0])
1484 if omciErr.GetError() == nil {
1485 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001486 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1487 oframe.TransactionID(tid), oframe.AddDefaults(true))
mpagenko3dbcdd22020-07-22 07:38:45 +00001488 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001489 logger.Errorw(ctx, "Cannot encode MBPCD for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001490 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001491 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001492 }
1493
dbainbri4d3a0dc2020-12-02 00:33:42 +00001494 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001495 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001496 logger.Errorw(ctx, "Cannot serialize MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001497 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001498 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001499 }
1500
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001501 omciRxCallbackPair := CallbackPair{
1502 CbKey: tid,
1503 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001504 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001505 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001506 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001507 logger.Errorw(ctx, "Cannot send MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001508 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001509 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001510 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001511 logger.Debug(ctx, "send MBPCD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001512 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001513 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001514 logger.Errorw(ctx, "Cannot generate MBPCD Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001515 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001516 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001517}
1518
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001519// SendCreateGemNCTPVar creates GemPortNetworkCtp ME instance
1520func (oo *OmciCC) SendCreateGemNCTPVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001521 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001522 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001523 logger.Debugw(ctx, "send GemNCTP-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001524 "SequNo": strconv.FormatInt(int64(tid), 16),
1525 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1526
1527 meInstance, omciErr := me.NewGemPortNetworkCtp(params[0])
1528 if omciErr.GetError() == nil {
1529 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001530 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1531 oframe.TransactionID(tid), oframe.AddDefaults(true))
mpagenko3dbcdd22020-07-22 07:38:45 +00001532 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001533 logger.Errorw(ctx, "Cannot encode GemNCTP for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001534 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001535 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001536 }
1537
dbainbri4d3a0dc2020-12-02 00:33:42 +00001538 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001539 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001540 logger.Errorw(ctx, "Cannot serialize GemNCTP 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 Hildebrandt4b5e73f2021-08-19 06:51:21 +00001545 omciRxCallbackPair := CallbackPair{
1546 CbKey: tid,
1547 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001548 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001549 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001550 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001551 logger.Errorw(ctx, "Cannot send GemNCTP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001552 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001553 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001554 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001555 logger.Debug(ctx, "send GemNCTP-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001556 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001557 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001558 logger.Errorw(ctx, "Cannot generate GemNCTP Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001559 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001560 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001561}
1562
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001563// SendSetGemNCTPVar sets GemPortNetworkCtp ME instance
1564func (oo *OmciCC) SendSetGemNCTPVar(ctx context.Context, timeout int, highPrio bool, rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
1565 tid := oo.GetNextTid(highPrio)
ozgecanetsia82b91a62021-05-21 18:54:49 +03001566 logger.Debugw(ctx, "send GemNCTP-Set-msg:", log.Fields{"device-id": oo.deviceID,
1567 "SequNo": strconv.FormatInt(int64(tid), 16),
1568 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1569
1570 meInstance, omciErr := me.NewGemPortNetworkCtp(params[0])
1571 if omciErr.GetError() == nil {
1572 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
mpagenko836a1fd2021-11-01 16:12:42 +00001573 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType,
1574 oframe.TransactionID(tid), oframe.AddDefaults(true))
ozgecanetsia82b91a62021-05-21 18:54:49 +03001575 if err != nil {
1576 logger.Errorw(ctx, "Cannot encode GemNCTP for set", log.Fields{
1577 "Err": err, "device-id": oo.deviceID})
1578 return nil, err
1579 }
1580
1581 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
1582 if err != nil {
1583 logger.Errorw(ctx, "Cannot serialize GemNCTP set", log.Fields{
1584 "Err": err, "device-id": oo.deviceID})
1585 return nil, err
1586 }
1587
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001588 omciRxCallbackPair := CallbackPair{
1589 CbKey: tid,
1590 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia82b91a62021-05-21 18:54:49 +03001591 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001592 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia82b91a62021-05-21 18:54:49 +03001593 if err != nil {
1594 logger.Errorw(ctx, "Cannot send GemNCTP set", log.Fields{
1595 "Err": err, "device-id": oo.deviceID})
1596 return nil, err
1597 }
1598 logger.Debug(ctx, "send GemNCTP-Set-msg done", log.Fields{"device-id": oo.deviceID})
1599 return meInstance, nil
1600 }
1601 logger.Errorw(ctx, "Cannot generate GemNCTP Instance", log.Fields{
1602 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1603 return nil, omciErr.GetError()
1604}
1605
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001606// SendCreateGemIWTPVar creates GemInterworkingTerminationPoint ME instance
1607func (oo *OmciCC) SendCreateGemIWTPVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001608 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001609 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001610 logger.Debugw(ctx, "send GemIwTp-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001611 "SequNo": strconv.FormatInt(int64(tid), 16),
1612 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1613
1614 meInstance, omciErr := me.NewGemInterworkingTerminationPoint(params[0])
1615 if omciErr.GetError() == nil {
1616 //all SetByCreate Parameters (assumed to be) set here, for optimisation no 'AddDefaults'
mpagenko836a1fd2021-11-01 16:12:42 +00001617 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1618 oframe.TransactionID(tid))
mpagenko3dbcdd22020-07-22 07:38:45 +00001619 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001620 logger.Errorw(ctx, "Cannot encode GemIwTp for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001621 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001622 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001623 }
1624
dbainbri4d3a0dc2020-12-02 00:33:42 +00001625 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001626 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001627 logger.Errorw(ctx, "Cannot serialize GemIwTp create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001628 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001629 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001630 }
1631
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001632 omciRxCallbackPair := CallbackPair{
1633 CbKey: tid,
1634 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001635 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001636 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001637 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001638 logger.Errorw(ctx, "Cannot send GemIwTp create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001639 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001640 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001641 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001642 logger.Debug(ctx, "send GemIwTp-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001643 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001644 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001645 logger.Errorw(ctx, "Cannot generate GemIwTp Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001646 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001647 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001648}
1649
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001650// SendSetTcontVar sets TCont ME instance
1651func (oo *OmciCC) SendSetTcontVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001652 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001653 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001654 logger.Debugw(ctx, "send TCont-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001655 "SequNo": strconv.FormatInt(int64(tid), 16),
1656 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1657
1658 meInstance, omciErr := me.NewTCont(params[0])
1659 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001660 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
mpagenko3dbcdd22020-07-22 07:38:45 +00001661 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001662 logger.Errorw(ctx, "Cannot encode TCont for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001663 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001664 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001665 }
1666
dbainbri4d3a0dc2020-12-02 00:33:42 +00001667 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001668 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001669 logger.Errorw(ctx, "Cannot serialize TCont set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001670 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001671 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001672 }
1673
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001674 omciRxCallbackPair := CallbackPair{
1675 CbKey: tid,
1676 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001677 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001678 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001679 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001680 logger.Errorw(ctx, "Cannot send TCont set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001681 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001682 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001683 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001684 logger.Debug(ctx, "send TCont-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001685 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001686 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001687 logger.Errorw(ctx, "Cannot generate TCont Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001688 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001689 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001690}
1691
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001692// SendSetPrioQueueVar sets PriorityQueue ME instance
1693func (oo *OmciCC) SendSetPrioQueueVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001694 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001695 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001696 logger.Debugw(ctx, "send PrioQueue-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001697 "SequNo": strconv.FormatInt(int64(tid), 16),
1698 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1699
1700 meInstance, omciErr := me.NewPriorityQueue(params[0])
1701 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001702 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
mpagenko3dbcdd22020-07-22 07:38:45 +00001703 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001704 logger.Errorw(ctx, "Cannot encode PrioQueue for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001705 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001706 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001707 }
1708
dbainbri4d3a0dc2020-12-02 00:33:42 +00001709 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001710 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001711 logger.Errorw(ctx, "Cannot serialize PrioQueue set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001712 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001713 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001714 }
1715
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001716 omciRxCallbackPair := CallbackPair{
1717 CbKey: tid,
1718 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001719 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001720 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001721 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001722 logger.Errorw(ctx, "Cannot send PrioQueue set", 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 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001726 logger.Debug(ctx, "send PrioQueue-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001727 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001728 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001729 logger.Errorw(ctx, "Cannot generate PrioQueue Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001730 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001731 return nil, omciErr.GetError()
mpagenko3dbcdd22020-07-22 07:38:45 +00001732}
1733
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001734// SendSetDot1PMapperVar sets Ieee8021PMapperServiceProfile ME instance
1735func (oo *OmciCC) SendSetDot1PMapperVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001736 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001737 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001738 logger.Debugw(ctx, "send 1PMapper-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001739 "SequNo": strconv.FormatInt(int64(tid), 16),
1740 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1741
1742 meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(params[0])
1743 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001744 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
mpagenko3dbcdd22020-07-22 07:38:45 +00001745 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001746 logger.Errorw(ctx, "Cannot encode 1PMapper for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001747 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001748 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001749 }
1750
dbainbri4d3a0dc2020-12-02 00:33:42 +00001751 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001752 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001753 logger.Errorw(ctx, "Cannot serialize 1PMapper set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001754 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001755 return nil, err
mpagenko3dbcdd22020-07-22 07:38:45 +00001756 }
1757
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001758 omciRxCallbackPair := CallbackPair{
1759 CbKey: tid,
1760 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko3dbcdd22020-07-22 07:38:45 +00001761 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001762 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001763 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001764 logger.Errorw(ctx, "Cannot send 1PMapper 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 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001768 logger.Debug(ctx, "send 1PMapper-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001769 return meInstance, nil
mpagenko3dbcdd22020-07-22 07:38:45 +00001770 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001771 logger.Errorw(ctx, "Cannot generate 1PMapper Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001772 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001773 return nil, omciErr.GetError()
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001774}
mpagenkodff5dda2020-08-28 11:52:01 +00001775
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001776// SendCreateVtfdVar creates VlanTaggingFilterData ME instance
1777func (oo *OmciCC) SendCreateVtfdVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001778 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001779 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001780 logger.Debugw(ctx, "send VTFD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenkodff5dda2020-08-28 11:52:01 +00001781 "SequNo": strconv.FormatInt(int64(tid), 16),
1782 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1783
1784 meInstance, omciErr := me.NewVlanTaggingFilterData(params[0])
1785 if omciErr.GetError() == nil {
1786 //all SetByCreate Parameters (assumed to be) set here, for optimisation no 'AddDefaults'
mpagenko836a1fd2021-11-01 16:12:42 +00001787 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1788 oframe.TransactionID(tid))
mpagenkodff5dda2020-08-28 11:52:01 +00001789 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001790 logger.Errorw(ctx, "Cannot encode VTFD for create", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001791 "Err": err, "device-id": oo.deviceID})
1792 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1793 // return (dual format) error code that can be used at caller for immediate error treatment
1794 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03001795 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00001796 }
1797
dbainbri4d3a0dc2020-12-02 00:33:42 +00001798 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenkodff5dda2020-08-28 11:52:01 +00001799 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001800 logger.Errorw(ctx, "Cannot serialize VTFD create", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001801 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001802 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00001803 }
1804
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001805 omciRxCallbackPair := CallbackPair{
1806 CbKey: tid,
1807 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenkodff5dda2020-08-28 11:52:01 +00001808 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001809 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenkodff5dda2020-08-28 11:52:01 +00001810 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001811 logger.Errorw(ctx, "Cannot send VTFD create", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001812 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001813 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00001814 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001815 logger.Debug(ctx, "send VTFD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001816 return meInstance, nil
mpagenkodff5dda2020-08-28 11:52:01 +00001817 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001818 logger.Errorw(ctx, "Cannot generate VTFD Instance", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001819 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001820 return nil, omciErr.GetError()
mpagenkodff5dda2020-08-28 11:52:01 +00001821}
1822
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001823// nolint: unused
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001824func (oo *OmciCC) sendSetVtfdVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001825 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001826 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001827 logger.Debugw(ctx, "send VTFD-Set-msg:", log.Fields{"device-id": oo.deviceID,
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001828 "SequNo": strconv.FormatInt(int64(tid), 16),
1829 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1830
1831 meInstance, omciErr := me.NewVlanTaggingFilterData(params[0])
1832 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001833 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType,
1834 oframe.TransactionID(tid))
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001835 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001836 logger.Errorw(ctx, "Cannot encode VTFD for set", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001837 "Err": err, "device-id": oo.deviceID})
1838 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1839 // return (dual format) error code that can be used at caller for immediate error treatment
1840 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03001841 return nil, err
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001842 }
1843
dbainbri4d3a0dc2020-12-02 00:33:42 +00001844 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001845 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001846 logger.Errorw(ctx, "Cannot serialize VTFD set", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001847 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001848 return nil, err
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001849 }
1850
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001851 omciRxCallbackPair := CallbackPair{
1852 CbKey: tid,
1853 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001854 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001855 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001856 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001857 logger.Errorw(ctx, "Cannot send VTFD set", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001858 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001859 return nil, err
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001860 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001861 logger.Debug(ctx, "send VTFD-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001862 return meInstance, nil
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001863 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001864 logger.Errorw(ctx, "Cannot generate VTFD Instance", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001865 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001866 return nil, omciErr.GetError()
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001867}
1868
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001869// SendCreateEvtocdVar creates ExtendedVlanTaggingOperationConfigurationData ME instance
1870func (oo *OmciCC) SendCreateEvtocdVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001871 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001872 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001873 logger.Debugw(ctx, "send EVTOCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001874 "SequNo": strconv.FormatInt(int64(tid), 16),
1875 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1876
1877 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(params[0])
1878 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001879 //EnhancedMode not yet supported, used with default options
1880 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType,
1881 oframe.TransactionID(tid), oframe.AddDefaults(true))
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001882 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001883 logger.Errorw(ctx, "Cannot encode EVTOCD for create", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001884 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001885 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001886 }
1887
dbainbri4d3a0dc2020-12-02 00:33:42 +00001888 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001889 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001890 logger.Errorw(ctx, "Cannot serialize EVTOCD create", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001891 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001892 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001893 }
1894
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001895 omciRxCallbackPair := CallbackPair{
1896 CbKey: tid,
1897 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001898 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001899 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001900 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001901 logger.Errorw(ctx, "Cannot send EVTOCD create", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001902 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001903 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001904 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001905 logger.Debug(ctx, "send EVTOCD-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001906 return meInstance, nil
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001907 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001908 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001909 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001910 return nil, omciErr.GetError()
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001911}
1912
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001913// SendSetEvtocdVar sets ExtendedVlanTaggingOperationConfigurationData ME instance
1914func (oo *OmciCC) SendSetEvtocdVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001915 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001916 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001917 logger.Debugw(ctx, "send EVTOCD-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenkodff5dda2020-08-28 11:52:01 +00001918 "SequNo": strconv.FormatInt(int64(tid), 16),
1919 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1920
1921 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(params[0])
1922 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001923 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
mpagenkodff5dda2020-08-28 11:52:01 +00001924 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001925 logger.Errorw(ctx, "Cannot encode EVTOCD for set", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001926 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001927 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00001928 }
1929
dbainbri4d3a0dc2020-12-02 00:33:42 +00001930 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenkodff5dda2020-08-28 11:52:01 +00001931 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001932 logger.Errorw(ctx, "Cannot serialize EVTOCD set", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001933 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001934 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00001935 }
1936
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001937 omciRxCallbackPair := CallbackPair{
1938 CbKey: tid,
1939 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenkodff5dda2020-08-28 11:52:01 +00001940 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001941 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenkodff5dda2020-08-28 11:52:01 +00001942 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001943 logger.Errorw(ctx, "Cannot send EVTOCD set", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001944 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001945 return nil, err
mpagenkodff5dda2020-08-28 11:52:01 +00001946 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001947 logger.Debug(ctx, "send EVTOCD-set msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001948 return meInstance, nil
mpagenkodff5dda2020-08-28 11:52:01 +00001949 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001950 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001951 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001952 return nil, omciErr.GetError()
mpagenkodff5dda2020-08-28 11:52:01 +00001953}
mpagenko01e726e2020-10-23 09:45:29 +00001954
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001955// SendDeleteEvtocd deletes ExtendedVlanTaggingOperationConfigurationData ME instance
1956func (oo *OmciCC) SendDeleteEvtocd(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001957 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001958 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001959 logger.Debugw(ctx, "send EVTOCD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001960 "SequNo": strconv.FormatInt(int64(tid), 16),
1961 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1962
1963 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(params[0])
1964 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00001965 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid))
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001966 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001967 logger.Errorw(ctx, "Cannot encode EVTOCD for delete", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001968 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001969 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001970 }
1971
dbainbri4d3a0dc2020-12-02 00:33:42 +00001972 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001973 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001974 logger.Errorw(ctx, "Cannot serialize EVTOCD delete", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001975 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001976 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001977 }
1978
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001979 omciRxCallbackPair := CallbackPair{
1980 CbKey: tid,
1981 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001982 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001983 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001984 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001985 logger.Errorw(ctx, "Cannot send EVTOCD delete", 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 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001989 logger.Debug(ctx, "send EVTOCD-delete msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03001990 return meInstance, nil
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001991 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001992 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001993 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03001994 return nil, omciErr.GetError()
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001995}
1996
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00001997// SendDeleteVtfd deletes VlanTaggingFilterData ME instance
1998func (oo *OmciCC) SendDeleteVtfd(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03001999 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002000 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002001 logger.Debugw(ctx, "send VTFD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko01e726e2020-10-23 09:45:29 +00002002 "SequNo": strconv.FormatInt(int64(tid), 16),
2003 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2004
2005 meParams := me.ParamData{EntityID: aInstID}
2006 meInstance, omciErr := me.NewVlanTaggingFilterData(meParams)
2007 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002008 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2009 oframe.TransactionID(tid))
mpagenko01e726e2020-10-23 09:45:29 +00002010 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002011 logger.Errorw(ctx, "Cannot encode VTFD for delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00002012 "Err": err, "device-id": oo.deviceID})
2013 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2014 // return (dual format) error code that can be used at caller for immediate error treatment
2015 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002016 return nil, err
mpagenko01e726e2020-10-23 09:45:29 +00002017 }
2018
dbainbri4d3a0dc2020-12-02 00:33:42 +00002019 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko01e726e2020-10-23 09:45:29 +00002020 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002021 logger.Errorw(ctx, "Cannot serialize VTFD delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00002022 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002023 return nil, err
mpagenko01e726e2020-10-23 09:45:29 +00002024 }
2025
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002026 omciRxCallbackPair := CallbackPair{
2027 CbKey: tid,
2028 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko01e726e2020-10-23 09:45:29 +00002029 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002030 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko01e726e2020-10-23 09:45:29 +00002031 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002032 logger.Errorw(ctx, "Cannot send VTFD delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00002033 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002034 return nil, err
mpagenko01e726e2020-10-23 09:45:29 +00002035 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002036 logger.Debug(ctx, "send VTFD-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002037 return meInstance, nil
mpagenko01e726e2020-10-23 09:45:29 +00002038 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002039 logger.Errorw(ctx, "Cannot generate VTFD Instance for delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00002040 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002041 return nil, omciErr.GetError()
mpagenko01e726e2020-10-23 09:45:29 +00002042}
ozgecanetsia422dbf32020-10-28 14:07:19 +03002043
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002044// SendCreateTDVar creates TrafficDescriptor ME instance
2045func (oo *OmciCC) SendCreateTDVar(ctx context.Context, timeout int, highPrio bool, rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2046 tid := oo.GetNextTid(highPrio)
ozgecanetsiab6441962021-03-10 10:58:48 +03002047 logger.Debugw(ctx, "send TD-Create-msg:", log.Fields{"device-id": oo.deviceID,
2048 "SequNo": strconv.FormatInt(int64(tid), 16),
2049 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2050 meInstance, omciErr := me.NewTrafficDescriptor(params[0])
2051 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002052 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid))
ozgecanetsiab6441962021-03-10 10:58:48 +03002053 if err != nil {
2054 logger.Errorw(ctx, "Cannot encode TD for create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002055 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002056 }
2057 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2058 if err != nil {
2059 logger.Errorw(ctx, "Cannot serialize TD create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002060 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002061 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002062 omciRxCallbackPair := CallbackPair{
2063 CbKey: tid,
2064 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab6441962021-03-10 10:58:48 +03002065 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002066 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab6441962021-03-10 10:58:48 +03002067 if err != nil {
2068 logger.Errorw(ctx, "Cannot send TD create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002069 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002070 }
2071 logger.Debug(ctx, "send TD-Create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002072 return meInstance, nil
ozgecanetsiab6441962021-03-10 10:58:48 +03002073 }
2074 logger.Errorw(ctx, "Cannot generate TD Instance", log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002075 return nil, omciErr.GetError()
ozgecanetsiab6441962021-03-10 10:58:48 +03002076}
2077
2078// nolint: unused
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002079func (oo *OmciCC) sendSetTDVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002080 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002081 tid := oo.GetNextTid(highPrio)
ozgecanetsiab6441962021-03-10 10:58:48 +03002082 logger.Debugw(ctx, "send TD-Set-msg:", log.Fields{"device-id": oo.deviceID,
2083 "SequNo": strconv.FormatInt(int64(tid), 16),
2084 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2085
2086 meInstance, omciErr := me.NewTrafficDescriptor(params[0])
2087 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002088 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
ozgecanetsiab6441962021-03-10 10:58:48 +03002089 if err != nil {
2090 logger.Errorw(ctx, "Cannot encode TD for set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002091 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002092 }
2093 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2094 if err != nil {
2095 logger.Errorw(ctx, "Cannot serialize TD set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002096 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002097 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002098 omciRxCallbackPair := CallbackPair{
2099 CbKey: tid,
2100 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab6441962021-03-10 10:58:48 +03002101 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002102 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab6441962021-03-10 10:58:48 +03002103 if err != nil {
2104 logger.Errorw(ctx, "Cannot send TD set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002105 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002106 }
2107 logger.Debug(ctx, "send TD-Set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002108 return meInstance, nil
ozgecanetsiab6441962021-03-10 10:58:48 +03002109 }
2110 logger.Errorw(ctx, "Cannot generate TD Instance", log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002111 return nil, omciErr.GetError()
ozgecanetsiab6441962021-03-10 10:58:48 +03002112
2113}
2114
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002115// SendDeleteTD - TODO: add comment
2116func (oo *OmciCC) SendDeleteTD(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002117 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002118 tid := oo.GetNextTid(highPrio)
ozgecanetsiab6441962021-03-10 10:58:48 +03002119 logger.Debugw(ctx, "send TD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
2120 "SequNo": strconv.FormatInt(int64(tid), 16),
2121 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2122
2123 meParams := me.ParamData{EntityID: aInstID}
2124 meInstance, omciErr := me.NewTrafficDescriptor(meParams)
2125 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002126 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid))
ozgecanetsiab6441962021-03-10 10:58:48 +03002127 if err != nil {
2128 logger.Errorw(ctx, "Cannot encode TD for delete", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002129 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002130 }
2131 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2132 if err != nil {
2133 logger.Errorw(ctx, "Cannot serialize TD delete", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002134 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002135 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002136 omciRxCallbackPair := CallbackPair{
2137 CbKey: tid,
2138 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab6441962021-03-10 10:58:48 +03002139 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002140 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab6441962021-03-10 10:58:48 +03002141 if err != nil {
2142 logger.Errorw(ctx, "Cannot send TD delete", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002143 return nil, err
ozgecanetsiab6441962021-03-10 10:58:48 +03002144 }
2145 logger.Debug(ctx, "send TD-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002146 return meInstance, nil
ozgecanetsiab6441962021-03-10 10:58:48 +03002147 }
2148 logger.Errorw(ctx, "Cannot generate TD Instance", log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002149 return nil, omciErr.GetError()
ozgecanetsiab6441962021-03-10 10:58:48 +03002150
2151}
2152
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002153// SendDeleteGemIWTP deletes GemInterworkingTerminationPoint ME instance
2154func (oo *OmciCC) SendDeleteGemIWTP(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002155 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002156 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002157 logger.Debugw(ctx, "send GemIwTp-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00002158 "SequNo": strconv.FormatInt(int64(tid), 16),
2159 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2160
2161 meParams := me.ParamData{EntityID: aInstID}
2162 meInstance, omciErr := me.NewGemInterworkingTerminationPoint(meParams)
2163 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002164 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2165 oframe.TransactionID(tid))
mpagenko8b07c1b2020-11-26 10:36:31 +00002166 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002167 logger.Errorw(ctx, "Cannot encode GemIwTp for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002168 "Err": err, "device-id": oo.deviceID})
2169 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2170 // return (dual format) error code that can be used at caller for immediate error treatment
2171 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002172 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002173 }
2174
dbainbri4d3a0dc2020-12-02 00:33:42 +00002175 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00002176 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002177 logger.Errorw(ctx, "Cannot serialize GemIwTp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002178 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002179 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002180 }
2181
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002182 omciRxCallbackPair := CallbackPair{
2183 CbKey: tid,
2184 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko8b07c1b2020-11-26 10:36:31 +00002185 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002186 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko8b07c1b2020-11-26 10:36:31 +00002187 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002188 logger.Errorw(ctx, "Cannot send GemIwTp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002189 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002190 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002191 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002192 logger.Debug(ctx, "send GemIwTp-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002193 return meInstance, nil
mpagenko8b07c1b2020-11-26 10:36:31 +00002194 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002195 logger.Errorw(ctx, "Cannot generate GemIwTp Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002196 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002197 return nil, omciErr.GetError()
mpagenko8b07c1b2020-11-26 10:36:31 +00002198}
2199
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002200// SendDeleteGemNCTP deletes GemPortNetworkCtp ME instance
2201func (oo *OmciCC) SendDeleteGemNCTP(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002202 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002203 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002204 logger.Debugw(ctx, "send GemNCtp-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00002205 "SequNo": strconv.FormatInt(int64(tid), 16),
2206 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2207
2208 meParams := me.ParamData{EntityID: aInstID}
2209 meInstance, omciErr := me.NewGemPortNetworkCtp(meParams)
2210 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002211 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2212 oframe.TransactionID(tid))
mpagenko8b07c1b2020-11-26 10:36:31 +00002213 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002214 logger.Errorw(ctx, "Cannot encode GemNCtp for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002215 "Err": err, "device-id": oo.deviceID})
2216 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2217 // return (dual format) error code that can be used at caller for immediate error treatment
2218 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002219 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002220 }
2221
dbainbri4d3a0dc2020-12-02 00:33:42 +00002222 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00002223 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002224 logger.Errorw(ctx, "Cannot serialize GemNCtp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002225 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002226 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002227 }
2228
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002229 omciRxCallbackPair := CallbackPair{
2230 CbKey: tid,
2231 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko8b07c1b2020-11-26 10:36:31 +00002232 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002233 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko8b07c1b2020-11-26 10:36:31 +00002234 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002235 logger.Errorw(ctx, "Cannot send GemNCtp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002236 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002237 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002238 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002239 logger.Debug(ctx, "send GemNCtp-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002240 return meInstance, nil
mpagenko8b07c1b2020-11-26 10:36:31 +00002241 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002242 logger.Errorw(ctx, "Cannot generate GemNCtp Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002243 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002244 return nil, omciErr.GetError()
mpagenko8b07c1b2020-11-26 10:36:31 +00002245}
2246
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002247// SendDeleteDot1PMapper deletes Ieee8021PMapperServiceProfile ME instance
2248func (oo *OmciCC) SendDeleteDot1PMapper(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002249 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002250 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002251 logger.Debugw(ctx, "send .1pMapper-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00002252 "SequNo": strconv.FormatInt(int64(tid), 16),
2253 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2254
2255 meParams := me.ParamData{EntityID: aInstID}
2256 meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(meParams)
2257 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002258 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2259 oframe.TransactionID(tid))
mpagenko8b07c1b2020-11-26 10:36:31 +00002260 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002261 logger.Errorw(ctx, "Cannot encode .1pMapper for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002262 "Err": err, "device-id": oo.deviceID})
2263 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2264 // return (dual format) error code that can be used at caller for immediate error treatment
2265 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002266 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002267 }
2268
dbainbri4d3a0dc2020-12-02 00:33:42 +00002269 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00002270 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002271 logger.Errorw(ctx, "Cannot serialize .1pMapper delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002272 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002273 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002274 }
2275
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002276 omciRxCallbackPair := CallbackPair{
2277 CbKey: tid,
2278 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko8b07c1b2020-11-26 10:36:31 +00002279 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002280 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko8b07c1b2020-11-26 10:36:31 +00002281 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002282 logger.Errorw(ctx, "Cannot send .1pMapper delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002283 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002284 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002285 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002286 logger.Debug(ctx, "send .1pMapper-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002287 return meInstance, nil
mpagenko8b07c1b2020-11-26 10:36:31 +00002288 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002289 logger.Errorw(ctx, "Cannot generate .1pMapper Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002290 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002291 return nil, omciErr.GetError()
mpagenko8b07c1b2020-11-26 10:36:31 +00002292}
2293
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002294// SendDeleteMBPConfigData deletes MacBridgePortConfigurationData ME instance
2295func (oo *OmciCC) SendDeleteMBPConfigData(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002296 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002297 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002298 logger.Debugw(ctx, "send MBPCD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00002299 "SequNo": strconv.FormatInt(int64(tid), 16),
2300 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2301
2302 meParams := me.ParamData{EntityID: aInstID}
2303 meInstance, omciErr := me.NewMacBridgePortConfigurationData(meParams)
2304 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002305 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2306 oframe.TransactionID(tid))
mpagenko8b07c1b2020-11-26 10:36:31 +00002307 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002308 logger.Errorw(ctx, "Cannot encode MBPCD for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002309 "Err": err, "device-id": oo.deviceID})
2310 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2311 // return (dual format) error code that can be used at caller for immediate error treatment
2312 // (relevant to all used sendXX() methods and their error conditions)
ozgecanetsiab36ed572021-04-01 10:38:48 +03002313 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002314 }
2315
dbainbri4d3a0dc2020-12-02 00:33:42 +00002316 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00002317 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002318 logger.Errorw(ctx, "Cannot serialize MBPCD delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002319 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002320 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002321 }
2322
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002323 omciRxCallbackPair := CallbackPair{
2324 CbKey: tid,
2325 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko8b07c1b2020-11-26 10:36:31 +00002326 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002327 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko8b07c1b2020-11-26 10:36:31 +00002328 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002329 logger.Errorw(ctx, "Cannot send MBPCD delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002330 "Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002331 return nil, err
mpagenko8b07c1b2020-11-26 10:36:31 +00002332 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002333 logger.Debug(ctx, "send MBPCD-Delete-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002334 return meInstance, nil
mpagenko8b07c1b2020-11-26 10:36:31 +00002335 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002336 logger.Errorw(ctx, "Cannot generate MBPCD Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00002337 "Err": omciErr.GetError(), "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002338 return nil, omciErr.GetError()
mpagenko8b07c1b2020-11-26 10:36:31 +00002339}
2340
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002341// SendCreateMulticastGemIWTPVar creates MulticastGemInterworkingTerminationPoint ME instance
2342func (oo *OmciCC) SendCreateMulticastGemIWTPVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002343 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002344 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002345 logger.Debugw(ctx, "send MulticastGemIWTP-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002346 "SequNo": strconv.FormatInt(int64(tid), 16),
2347 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2348
2349 meInstance, omciErr := me.NewMulticastGemInterworkingTerminationPoint(params[0])
2350 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002351 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2352 oframe.AddDefaults(true))
ozgecanetsia422dbf32020-10-28 14:07:19 +03002353 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002354 logger.Errorw(ctx, "Cannot encode MulticastGEMIWTP for create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002355 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002356 }
2357
dbainbri4d3a0dc2020-12-02 00:33:42 +00002358 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002359 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002360 logger.Errorw(ctx, "Cannot serialize MulticastGEMIWTP create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002361 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002362 }
2363
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002364 omciRxCallbackPair := CallbackPair{CbKey: tid,
2365 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia422dbf32020-10-28 14:07:19 +03002366 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002367 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002368 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002369 logger.Errorw(ctx, "Cannot send MulticastGEMIWTP create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002370 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002371 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002372 logger.Debug(ctx, "send MulticastGEMIWTP-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002373 return meInstance, nil
ozgecanetsia422dbf32020-10-28 14:07:19 +03002374 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002375 logger.Errorw(ctx, "Cannot generate MulticastGEMIWTP Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002376 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002377 return nil, omciErr.GetError()
ozgecanetsia422dbf32020-10-28 14:07:19 +03002378}
2379
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002380// SendSetMulticastGemIWTPVar sets MulticastGemInterworkingTerminationPoint ME instance
2381func (oo *OmciCC) SendSetMulticastGemIWTPVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002382 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002383 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002384 logger.Debugw(ctx, "send MulticastGemIWTP-set-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002385 "SequNo": strconv.FormatInt(int64(tid), 16),
2386 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2387
2388 meInstance, omciErr := me.NewMulticastGemInterworkingTerminationPoint(params[0])
2389 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002390 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2391 oframe.AddDefaults(true))
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002392 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002393 logger.Errorw(ctx, "Cannot encode MulticastGEMIWTP for set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002394 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002395 }
2396
dbainbri4d3a0dc2020-12-02 00:33:42 +00002397 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002398 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002399 logger.Errorw(ctx, "Cannot serialize MulticastGEMIWTP create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002400 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002401 }
2402
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002403 omciRxCallbackPair := CallbackPair{CbKey: tid,
2404 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002405 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002406 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002407 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002408 logger.Errorw(ctx, "Cannot send MulticastGEMIWTP set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002409 return nil, err
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002410 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002411 logger.Debug(ctx, "send MulticastGEMIWTP-set-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002412 return meInstance, nil
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002413 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002414 logger.Errorw(ctx, "Cannot generate MulticastGEMIWTP Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002415 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002416 return nil, omciErr.GetError()
ozgecanetsiab5000ef2020-11-27 14:38:20 +03002417}
2418
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002419// SendCreateMulticastOperationProfileVar creates MulticastOperationsProfile ME instance
2420func (oo *OmciCC) SendCreateMulticastOperationProfileVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002421 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002422 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002423 logger.Debugw(ctx, "send MulticastOperationProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002424 "SequNo": strconv.FormatInt(int64(tid), 16),
2425 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2426
2427 meInstance, omciErr := me.NewMulticastOperationsProfile(params[0])
2428 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002429 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2430 oframe.AddDefaults(true))
ozgecanetsia422dbf32020-10-28 14:07:19 +03002431 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002432 logger.Errorw(ctx, "Cannot encode MulticastOperationProfile for create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002433 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002434 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002435 }
2436
dbainbri4d3a0dc2020-12-02 00:33:42 +00002437 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002438 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002439 logger.Errorw(ctx, "Cannot serialize MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002440 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002441 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002442 }
2443
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002444 omciRxCallbackPair := CallbackPair{CbKey: tid,
2445 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia422dbf32020-10-28 14:07:19 +03002446 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002447 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002448 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002449 logger.Errorw(ctx, "Cannot send MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002450 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002451 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002452 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002453 logger.Debug(ctx, "send MulticastOperationProfile-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002454 return meInstance, nil
ozgecanetsia422dbf32020-10-28 14:07:19 +03002455 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002456 logger.Errorw(ctx, "Cannot generate MulticastOperationProfile Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002457 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002458 return nil, omciErr.GetError()
ozgecanetsia422dbf32020-10-28 14:07:19 +03002459}
2460
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002461// SendSetMulticastOperationProfileVar sets MulticastOperationsProfile ME instance
2462func (oo *OmciCC) SendSetMulticastOperationProfileVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002463 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002464 tid := oo.GetNextTid(highPrio)
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002465 logger.Debugw(ctx, "send MulticastOperationProfile-set-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002466 "SequNo": strconv.FormatInt(int64(tid), 16),
2467 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2468
2469 meInstance, omciErr := me.NewMulticastOperationsProfile(params[0])
2470 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002471 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2472 oframe.AddDefaults(true))
ozgecanetsia422dbf32020-10-28 14:07:19 +03002473 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002474 logger.Errorw(ctx, "Cannot encode MulticastOperationProfile for create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002475 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002476 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002477 }
2478
dbainbri4d3a0dc2020-12-02 00:33:42 +00002479 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002480 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002481 logger.Errorw(ctx, "Cannot serialize MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002482 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002483 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002484 }
2485
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002486 omciRxCallbackPair := CallbackPair{CbKey: tid,
2487 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia422dbf32020-10-28 14:07:19 +03002488 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002489 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002490 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002491 logger.Errorw(ctx, "Cannot send MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002492 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002493 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002494 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002495 logger.Debug(ctx, "send MulticastOperationProfile-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002496 return meInstance, nil
ozgecanetsia422dbf32020-10-28 14:07:19 +03002497 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002498 logger.Errorw(ctx, "Cannot generate MulticastOperationProfile Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002499 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002500 return nil, omciErr.GetError()
ozgecanetsia422dbf32020-10-28 14:07:19 +03002501}
2502
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002503// SendCreateMulticastSubConfigInfoVar creates MulticastSubscriberConfigInfo ME instance
2504func (oo *OmciCC) SendCreateMulticastSubConfigInfoVar(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03002505 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002506 tid := oo.GetNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002507 logger.Debugw(ctx, "send MulticastSubConfigInfo-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002508 "SequNo": strconv.FormatInt(int64(tid), 16),
2509 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2510
2511 meInstance, omciErr := me.NewMulticastSubscriberConfigInfo(params[0])
2512 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002513 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2514 oframe.AddDefaults(true))
ozgecanetsia422dbf32020-10-28 14:07:19 +03002515 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002516 logger.Errorw(ctx, "Cannot encode MulticastSubConfigInfo for create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002517 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002518 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002519 }
2520
dbainbri4d3a0dc2020-12-02 00:33:42 +00002521 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002522 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002523 logger.Errorw(ctx, "Cannot serialize MulticastSubConfigInfo create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002524 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002525 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002526 }
2527
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002528 omciRxCallbackPair := CallbackPair{CbKey: tid,
2529 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
ozgecanetsia422dbf32020-10-28 14:07:19 +03002530 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00002531 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002532 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002533 logger.Errorw(ctx, "Cannot send MulticastSubConfigInfo create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002534 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002535 return nil, err
ozgecanetsia422dbf32020-10-28 14:07:19 +03002536 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002537 logger.Debug(ctx, "send MulticastSubConfigInfo-create-msg done")
ozgecanetsiab36ed572021-04-01 10:38:48 +03002538 return meInstance, nil
ozgecanetsia422dbf32020-10-28 14:07:19 +03002539 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002540 logger.Errorw(ctx, "Cannot generate MulticastSubConfigInfo Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002541 "device-id": oo.deviceID})
ozgecanetsiab36ed572021-04-01 10:38:48 +03002542 return nil, omciErr.GetError()
ozgecanetsia422dbf32020-10-28 14:07:19 +03002543}
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +00002544
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002545// SendCreateVoipVoiceCTP nolint: unused
2546func (oo *OmciCC) SendCreateVoipVoiceCTP(ctx context.Context, timeout int, highPrio bool,
2547 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2548 tid := oo.GetNextTid(highPrio)
2549 logger.Debugw(ctx, "send VoipVoiceCTP-create-msg:", log.Fields{"device-id": oo.deviceID,
2550 "SequNo": strconv.FormatInt(int64(tid), 16),
2551 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2552
2553 meInstance, omciErr := me.NewVoipVoiceCtp(params[0])
2554 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002555 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2556 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002557 if err != nil {
2558 logger.Errorw(ctx, "Cannot encode VoipVoiceCTP for create", log.Fields{"Err": err,
2559 "device-id": oo.deviceID})
2560 return nil, err
2561 }
2562
2563 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2564 if err != nil {
2565 logger.Errorw(ctx, "Cannot serialize VoipVoiceCTP create", log.Fields{"Err": err,
2566 "device-id": oo.deviceID})
2567 return nil, err
2568 }
2569
2570 omciRxCallbackPair := CallbackPair{CbKey: tid,
2571 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2572 }
2573 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2574 if err != nil {
2575 logger.Errorw(ctx, "Cannot send VoipVoiceCTP create", log.Fields{"Err": err,
2576 "device-id": oo.deviceID})
2577 return nil, err
2578 }
2579 logger.Debug(ctx, "send VoipVoiceCTP-create-msg done")
2580 return meInstance, nil
2581 }
2582 logger.Errorw(ctx, "Cannot generate VoipVoiceCTP Instance", log.Fields{"Err": omciErr.GetError(),
2583 "device-id": oo.deviceID})
2584 return nil, omciErr.GetError()
2585}
2586
2587// SendSetVoipVoiceCTP nolint: unused
2588func (oo *OmciCC) SendSetVoipVoiceCTP(ctx context.Context, timeout int, highPrio bool,
2589 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2590 tid := oo.GetNextTid(highPrio)
2591 logger.Debugw(ctx, "send VoipVoiceCTP-set-msg:", log.Fields{"device-id": oo.deviceID,
2592 "SequNo": strconv.FormatInt(int64(tid), 16),
2593 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2594
2595 meInstance, omciErr := me.NewVoipVoiceCtp(params[0])
2596 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002597 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2598 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002599 if err != nil {
2600 logger.Errorw(ctx, "Cannot encode VoipVoiceCTP for set", log.Fields{"Err": err,
2601 "device-id": oo.deviceID})
2602 return nil, err
2603 }
2604
2605 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2606 if err != nil {
2607 logger.Errorw(ctx, "Cannot serialize VoipVoiceCTP set", log.Fields{"Err": err,
2608 "device-id": oo.deviceID})
2609 return nil, err
2610 }
2611
2612 omciRxCallbackPair := CallbackPair{CbKey: tid,
2613 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2614 }
2615 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2616 if err != nil {
2617 logger.Errorw(ctx, "Cannot send VoipVoiceCTP set", log.Fields{"Err": err,
2618 "device-id": oo.deviceID})
2619 return nil, err
2620 }
2621 logger.Debug(ctx, "send VoipVoiceCTP-set-msg done")
2622 return meInstance, nil
2623 }
2624 logger.Errorw(ctx, "Cannot generate VoipVoiceCTP Instance", log.Fields{"Err": omciErr.GetError(),
2625 "device-id": oo.deviceID})
2626 return nil, omciErr.GetError()
2627}
2628
2629// SendDeleteVoipVoiceCTP nolint: unused
2630func (oo *OmciCC) SendDeleteVoipVoiceCTP(ctx context.Context, timeout int, highPrio bool,
2631 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
2632 tid := oo.GetNextTid(highPrio)
2633 logger.Debugw(ctx, "send VoipVoiceCTP-Delete-msg:", log.Fields{"device-id": oo.deviceID,
2634 "SequNo": strconv.FormatInt(int64(tid), 16),
2635 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2636
2637 meParams := me.ParamData{EntityID: aInstID}
2638 meInstance, omciErr := me.NewVoipVoiceCtp(meParams)
2639 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002640 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2641 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002642 if err != nil {
2643 logger.Errorw(ctx, "Cannot encode VoipVoiceCTP for delete", log.Fields{
2644 "Err": err, "device-id": oo.deviceID})
2645 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
2646 // return (dual format) error code that can be used at caller for immediate error treatment
2647 // (relevant to all used sendXX() methods and their error conditions)
2648 return nil, err
2649 }
2650
2651 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2652 if err != nil {
2653 logger.Errorw(ctx, "Cannot serialize VoipVoiceCTP delete", log.Fields{
2654 "Err": err, "device-id": oo.deviceID})
2655 return nil, err
2656 }
2657
2658 omciRxCallbackPair := CallbackPair{
2659 CbKey: tid,
2660 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2661 }
2662 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2663 if err != nil {
2664 logger.Errorw(ctx, "Cannot send VoipVoiceCTP delete", log.Fields{
2665 "Err": err, "device-id": oo.deviceID})
2666 return nil, err
2667 }
2668 logger.Debug(ctx, "send VoipVoiceCTP-Delete-msg done")
2669 return meInstance, nil
2670 }
2671 logger.Errorw(ctx, "Cannot generate VoipVoiceCTP Instance for delete", log.Fields{
2672 "Err": omciErr.GetError(), "device-id": oo.deviceID})
2673 return nil, omciErr.GetError()
2674}
2675
2676// SendCreateVoipMediaProfile nolint: unused
2677func (oo *OmciCC) SendCreateVoipMediaProfile(ctx context.Context, timeout int, highPrio bool,
2678 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2679 tid := oo.GetNextTid(highPrio)
2680 logger.Debugw(ctx, "send VoipMediaProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
2681 "SequNo": strconv.FormatInt(int64(tid), 16),
2682 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2683
2684 meInstance, omciErr := me.NewVoipMediaProfile(params[0])
2685 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002686 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2687 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002688 if err != nil {
2689 logger.Errorw(ctx, "Cannot encode VoipMediaProfile for create", log.Fields{"Err": err,
2690 "device-id": oo.deviceID})
2691 return nil, err
2692 }
2693
2694 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2695 if err != nil {
2696 logger.Errorw(ctx, "Cannot serialize VoipMediaProfile create", log.Fields{"Err": err,
2697 "device-id": oo.deviceID})
2698 return nil, err
2699 }
2700
2701 omciRxCallbackPair := CallbackPair{CbKey: tid,
2702 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2703 }
2704 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2705 if err != nil {
2706 logger.Errorw(ctx, "Cannot send VoipMediaProfile create", log.Fields{"Err": err,
2707 "device-id": oo.deviceID})
2708 return nil, err
2709 }
2710 logger.Debug(ctx, "send VoipMediaProfile-create-msg done")
2711 return meInstance, nil
2712 }
2713 logger.Errorw(ctx, "Cannot generate VoipMediaProfile Instance", log.Fields{"Err": omciErr.GetError(),
2714 "device-id": oo.deviceID})
2715 return nil, omciErr.GetError()
2716}
2717
2718// SendSetVoipMediaProfile nolint: unused
2719func (oo *OmciCC) SendSetVoipMediaProfile(ctx context.Context, timeout int, highPrio bool,
2720 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2721 tid := oo.GetNextTid(highPrio)
2722 logger.Debugw(ctx, "send VoipMediaProfile-set-msg:", log.Fields{"device-id": oo.deviceID,
2723 "SequNo": strconv.FormatInt(int64(tid), 16),
2724 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2725
2726 meInstance, omciErr := me.NewVoipMediaProfile(params[0])
2727 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002728 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2729 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002730 if err != nil {
2731 logger.Errorw(ctx, "Cannot encode VoipMediaProfile for set", log.Fields{"Err": err,
2732 "device-id": oo.deviceID})
2733 return nil, err
2734 }
2735
2736 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2737 if err != nil {
2738 logger.Errorw(ctx, "Cannot serialize VoipMediaProfile set", log.Fields{"Err": err,
2739 "device-id": oo.deviceID})
2740 return nil, err
2741 }
2742
2743 omciRxCallbackPair := CallbackPair{CbKey: tid,
2744 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2745 }
2746 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2747 if err != nil {
2748 logger.Errorw(ctx, "Cannot send VoipMediaProfile set", log.Fields{"Err": err,
2749 "device-id": oo.deviceID})
2750 return nil, err
2751 }
2752 logger.Debug(ctx, "send VoipMediaProfile-set-msg done")
2753 return meInstance, nil
2754 }
2755 logger.Errorw(ctx, "Cannot generate VoipMediaProfile Instance", log.Fields{"Err": omciErr.GetError(),
2756 "device-id": oo.deviceID})
2757 return nil, omciErr.GetError()
2758}
2759
2760// SendDeleteVoipMediaProfile nolint: unused
2761func (oo *OmciCC) SendDeleteVoipMediaProfile(ctx context.Context, timeout int, highPrio bool,
2762 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
2763 tid := oo.GetNextTid(highPrio)
2764 logger.Debugw(ctx, "send VoipMediaProfile-Delete-msg:", log.Fields{"device-id": oo.deviceID,
2765 "SequNo": strconv.FormatInt(int64(tid), 16),
2766 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2767
2768 meParams := me.ParamData{EntityID: aInstID}
2769 meInstance, omciErr := me.NewVoipMediaProfile(meParams)
2770 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002771 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2772 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002773 if err != nil {
2774 logger.Errorw(ctx, "Cannot encode VoipMediaProfile for delete", log.Fields{
2775 "Err": err, "device-id": oo.deviceID})
2776 return nil, err
2777 }
2778
2779 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2780 if err != nil {
2781 logger.Errorw(ctx, "Cannot serialize VoipMediaProfile delete", log.Fields{
2782 "Err": err, "device-id": oo.deviceID})
2783 return nil, err
2784 }
2785
2786 omciRxCallbackPair := CallbackPair{
2787 CbKey: tid,
2788 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2789 }
2790 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2791 if err != nil {
2792 logger.Errorw(ctx, "Cannot send VoipMediaProfile delete", log.Fields{
2793 "Err": err, "device-id": oo.deviceID})
2794 return nil, err
2795 }
2796 logger.Debug(ctx, "send VoipMediaProfile-Delete-msg done")
2797 return meInstance, nil
2798 }
2799 logger.Errorw(ctx, "Cannot generate VoipMediaProfile Instance for delete", log.Fields{
2800 "Err": omciErr.GetError(), "device-id": oo.deviceID})
2801 return nil, omciErr.GetError()
2802}
2803
2804// SendCreateVoiceServiceProfile nolint: unused
2805func (oo *OmciCC) SendCreateVoiceServiceProfile(ctx context.Context, timeout int, highPrio bool,
2806 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2807 tid := oo.GetNextTid(highPrio)
2808 logger.Debugw(ctx, "send VoiceServiceProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
2809 "SequNo": strconv.FormatInt(int64(tid), 16),
2810 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2811
2812 meInstance, omciErr := me.NewVoiceServiceProfile(params[0])
2813 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002814 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2815 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002816 if err != nil {
2817 logger.Errorw(ctx, "Cannot encode VoiceServiceProfile for create", log.Fields{"Err": err,
2818 "device-id": oo.deviceID})
2819 return nil, err
2820 }
2821
2822 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2823 if err != nil {
2824 logger.Errorw(ctx, "Cannot serialize VoiceServiceProfile create", log.Fields{"Err": err,
2825 "device-id": oo.deviceID})
2826 return nil, err
2827 }
2828
2829 omciRxCallbackPair := CallbackPair{CbKey: tid,
2830 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2831 }
2832 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2833 if err != nil {
2834 logger.Errorw(ctx, "Cannot send VoiceServiceProfile create", log.Fields{"Err": err,
2835 "device-id": oo.deviceID})
2836 return nil, err
2837 }
2838 logger.Debug(ctx, "send VoiceServiceProfile-create-msg done")
2839 return meInstance, nil
2840 }
2841 logger.Errorw(ctx, "Cannot generate VoiceServiceProfile Instance", log.Fields{"Err": omciErr.GetError(),
2842 "device-id": oo.deviceID})
2843 return nil, omciErr.GetError()
2844}
2845
2846// SendSetVoiceServiceProfile nolint: unused
2847func (oo *OmciCC) SendSetVoiceServiceProfile(ctx context.Context, timeout int, highPrio bool,
2848 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2849 tid := oo.GetNextTid(highPrio)
2850 logger.Debugw(ctx, "send VoiceServiceProfile-set-msg:", log.Fields{"device-id": oo.deviceID,
2851 "SequNo": strconv.FormatInt(int64(tid), 16),
2852 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2853
2854 meInstance, omciErr := me.NewVoiceServiceProfile(params[0])
2855 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002856 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2857 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002858 if err != nil {
2859 logger.Errorw(ctx, "Cannot encode VoiceServiceProfile for set", log.Fields{"Err": err,
2860 "device-id": oo.deviceID})
2861 return nil, err
2862 }
2863
2864 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2865 if err != nil {
2866 logger.Errorw(ctx, "Cannot serialize VoiceServiceProfile set", log.Fields{"Err": err,
2867 "device-id": oo.deviceID})
2868 return nil, err
2869 }
2870
2871 omciRxCallbackPair := CallbackPair{CbKey: tid,
2872 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2873 }
2874 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2875 if err != nil {
2876 logger.Errorw(ctx, "Cannot send VoiceServiceProfile set", log.Fields{"Err": err,
2877 "device-id": oo.deviceID})
2878 return nil, err
2879 }
2880 logger.Debug(ctx, "send VoiceServiceProfile-set-msg done")
2881 return meInstance, nil
2882 }
2883 logger.Errorw(ctx, "Cannot generate VoiceServiceProfile Instance", log.Fields{"Err": omciErr.GetError(),
2884 "device-id": oo.deviceID})
2885 return nil, omciErr.GetError()
2886}
2887
2888// SendDeleteVoiceServiceProfile nolint: unused
2889func (oo *OmciCC) SendDeleteVoiceServiceProfile(ctx context.Context, timeout int, highPrio bool,
2890 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
2891 tid := oo.GetNextTid(highPrio)
2892 logger.Debugw(ctx, "send VoiceServiceProfile-Delete-msg:", log.Fields{"device-id": oo.deviceID,
2893 "SequNo": strconv.FormatInt(int64(tid), 16),
2894 "InstId": strconv.FormatInt(int64(aInstID), 16)})
2895
2896 meParams := me.ParamData{EntityID: aInstID}
2897 meInstance, omciErr := me.NewVoiceServiceProfile(meParams)
2898 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002899 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
2900 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002901 if err != nil {
2902 logger.Errorw(ctx, "Cannot encode VoiceServiceProfile for delete", log.Fields{
2903 "Err": err, "device-id": oo.deviceID})
2904 return nil, err
2905 }
2906
2907 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2908 if err != nil {
2909 logger.Errorw(ctx, "Cannot serialize VoiceServiceProfile delete", log.Fields{
2910 "Err": err, "device-id": oo.deviceID})
2911 return nil, err
2912 }
2913
2914 omciRxCallbackPair := CallbackPair{
2915 CbKey: tid,
2916 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2917 }
2918 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2919 if err != nil {
2920 logger.Errorw(ctx, "Cannot send VoiceServiceProfile delete", log.Fields{
2921 "Err": err, "device-id": oo.deviceID})
2922 return nil, err
2923 }
2924 logger.Debug(ctx, "send VoiceServiceProfile-Delete-msg done")
2925 return meInstance, nil
2926 }
2927 logger.Errorw(ctx, "Cannot generate VoiceServiceProfile Instance for delete", log.Fields{
2928 "Err": omciErr.GetError(), "device-id": oo.deviceID})
2929 return nil, omciErr.GetError()
2930}
2931
2932// SendCreateSIPUserData nolint: unused
2933func (oo *OmciCC) SendCreateSIPUserData(ctx context.Context, timeout int, highPrio bool,
2934 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2935 tid := oo.GetNextTid(highPrio)
2936 logger.Debugw(ctx, "send SIPUserData-create-msg:", log.Fields{"device-id": oo.deviceID,
2937 "SequNo": strconv.FormatInt(int64(tid), 16),
2938 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2939
2940 meInstance, omciErr := me.NewSipUserData(params[0])
2941 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002942 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
2943 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002944 if err != nil {
2945 logger.Errorw(ctx, "Cannot encode SIPUserData for create", log.Fields{"Err": err,
2946 "device-id": oo.deviceID})
2947 return nil, err
2948 }
2949
2950 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2951 if err != nil {
2952 logger.Errorw(ctx, "Cannot serialize SIPUserData create", log.Fields{"Err": err,
2953 "device-id": oo.deviceID})
2954 return nil, err
2955 }
2956
2957 omciRxCallbackPair := CallbackPair{CbKey: tid,
2958 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
2959 }
2960 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
2961 if err != nil {
2962 logger.Errorw(ctx, "Cannot send SIPUserData create", log.Fields{"Err": err,
2963 "device-id": oo.deviceID})
2964 return nil, err
2965 }
2966 logger.Debug(ctx, "send SIPUserData-create-msg done")
2967 return meInstance, nil
2968 }
2969 logger.Errorw(ctx, "Cannot generate SIPUserData Instance", log.Fields{"Err": omciErr.GetError(),
2970 "device-id": oo.deviceID})
2971 return nil, omciErr.GetError()
2972}
2973
2974// SendSetSIPUserData nolint: unused
2975func (oo *OmciCC) SendSetSIPUserData(ctx context.Context, timeout int, highPrio bool,
2976 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
2977 tid := oo.GetNextTid(highPrio)
2978 logger.Debugw(ctx, "send SIPUserData-set-msg:", log.Fields{"device-id": oo.deviceID,
2979 "SequNo": strconv.FormatInt(int64(tid), 16),
2980 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2981
2982 meInstance, omciErr := me.NewSipUserData(params[0])
2983 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00002984 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
2985 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03002986 if err != nil {
2987 logger.Errorw(ctx, "Cannot encode SIPUserData for set", log.Fields{"Err": err,
2988 "device-id": oo.deviceID})
2989 return nil, err
2990 }
2991
2992 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
2993 if err != nil {
2994 logger.Errorw(ctx, "Cannot serialize SIPUserData set", log.Fields{"Err": err,
2995 "device-id": oo.deviceID})
2996 return nil, err
2997 }
2998
2999 omciRxCallbackPair := CallbackPair{CbKey: tid,
3000 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3001 }
3002 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3003 if err != nil {
3004 logger.Errorw(ctx, "Cannot send SIPUserData set", log.Fields{"Err": err,
3005 "device-id": oo.deviceID})
3006 return nil, err
3007 }
3008 logger.Debug(ctx, "send SIPUserData-set-msg done")
3009 return meInstance, nil
3010 }
3011 logger.Errorw(ctx, "Cannot generate SIPUserData Instance", log.Fields{"Err": omciErr.GetError(),
3012 "device-id": oo.deviceID})
3013 return nil, omciErr.GetError()
3014}
3015
3016// SendDeleteSIPUserData nolint: unused
3017func (oo *OmciCC) SendDeleteSIPUserData(ctx context.Context, timeout int, highPrio bool,
3018 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3019 tid := oo.GetNextTid(highPrio)
3020 logger.Debugw(ctx, "send SIPUserData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3021 "SequNo": strconv.FormatInt(int64(tid), 16),
3022 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3023
3024 meParams := me.ParamData{EntityID: aInstID}
3025 meInstance, omciErr := me.NewSipUserData(meParams)
3026 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003027 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3028 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003029 if err != nil {
3030 logger.Errorw(ctx, "Cannot encode SIPUserData for delete", log.Fields{
3031 "Err": err, "device-id": oo.deviceID})
3032 return nil, err
3033 }
3034
3035 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3036 if err != nil {
3037 logger.Errorw(ctx, "Cannot serialize SIPUserData delete", log.Fields{
3038 "Err": err, "device-id": oo.deviceID})
3039 return nil, err
3040 }
3041
3042 omciRxCallbackPair := CallbackPair{
3043 CbKey: tid,
3044 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3045 }
3046 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3047 if err != nil {
3048 logger.Errorw(ctx, "Cannot send SIPUserData delete", log.Fields{
3049 "Err": err, "device-id": oo.deviceID})
3050 return nil, err
3051 }
3052 logger.Debug(ctx, "send SIPUserData-Delete-msg done")
3053 return meInstance, nil
3054 }
3055 logger.Errorw(ctx, "Cannot generate SIPUserData Instance for delete", log.Fields{
3056 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3057 return nil, omciErr.GetError()
3058}
3059
3060// SendCreateVoipApplicationServiceProfile nolint: unused
3061func (oo *OmciCC) SendCreateVoipApplicationServiceProfile(ctx context.Context, timeout int, highPrio bool,
3062 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3063 tid := oo.GetNextTid(highPrio)
3064 logger.Debugw(ctx, "send VoipApplicationServiceProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
3065 "SequNo": strconv.FormatInt(int64(tid), 16),
3066 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3067
3068 meInstance, omciErr := me.NewVoipApplicationServiceProfile(params[0])
3069 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003070 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3071 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003072 if err != nil {
3073 logger.Errorw(ctx, "Cannot encode VoipApplicationServiceProfile for create", log.Fields{"Err": err,
3074 "device-id": oo.deviceID})
3075 return nil, err
3076 }
3077
3078 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3079 if err != nil {
3080 logger.Errorw(ctx, "Cannot serialize VoipApplicationServiceProfile create", log.Fields{"Err": err,
3081 "device-id": oo.deviceID})
3082 return nil, err
3083 }
3084
3085 omciRxCallbackPair := CallbackPair{CbKey: tid,
3086 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3087 }
3088 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3089 if err != nil {
3090 logger.Errorw(ctx, "Cannot send VoipApplicationServiceProfile create", log.Fields{"Err": err,
3091 "device-id": oo.deviceID})
3092 return nil, err
3093 }
3094 logger.Debug(ctx, "send VoipApplicationServiceProfile-create-msg done")
3095 return meInstance, nil
3096 }
3097 logger.Errorw(ctx, "Cannot generate VoipApplicationServiceProfile Instance", log.Fields{"Err": omciErr.GetError(),
3098 "device-id": oo.deviceID})
3099 return nil, omciErr.GetError()
3100}
3101
3102// SendSetVoipApplicationServiceProfile nolint: unused
3103func (oo *OmciCC) SendSetVoipApplicationServiceProfile(ctx context.Context, timeout int, highPrio bool,
3104 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3105 tid := oo.GetNextTid(highPrio)
3106 logger.Debugw(ctx, "send VoipApplicationServiceProfile-set-msg:", log.Fields{"device-id": oo.deviceID,
3107 "SequNo": strconv.FormatInt(int64(tid), 16),
3108 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3109
3110 meInstance, omciErr := me.NewVoipApplicationServiceProfile(params[0])
3111 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003112 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3113 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003114 if err != nil {
3115 logger.Errorw(ctx, "Cannot encode VoipApplicationServiceProfile for set", log.Fields{"Err": err,
3116 "device-id": oo.deviceID})
3117 return nil, err
3118 }
3119
3120 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3121 if err != nil {
3122 logger.Errorw(ctx, "Cannot serialize VoipApplicationServiceProfile set", log.Fields{"Err": err,
3123 "device-id": oo.deviceID})
3124 return nil, err
3125 }
3126
3127 omciRxCallbackPair := CallbackPair{CbKey: tid,
3128 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3129 }
3130 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3131 if err != nil {
3132 logger.Errorw(ctx, "Cannot send VoipApplicationServiceProfile set", log.Fields{"Err": err,
3133 "device-id": oo.deviceID})
3134 return nil, err
3135 }
3136 logger.Debug(ctx, "send VoipApplicationServiceProfile-set-msg done")
3137 return meInstance, nil
3138 }
3139 logger.Errorw(ctx, "Cannot generate VoipApplicationServiceProfile Instance", log.Fields{"Err": omciErr.GetError(),
3140 "device-id": oo.deviceID})
3141 return nil, omciErr.GetError()
3142}
3143
3144// SendDeleteVoipApplicationServiceProfile nolint: unused
3145func (oo *OmciCC) SendDeleteVoipApplicationServiceProfile(ctx context.Context, timeout int, highPrio bool,
3146 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3147 tid := oo.GetNextTid(highPrio)
3148 logger.Debugw(ctx, "send SIPVoipApplicationServiceProfile-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3149 "SequNo": strconv.FormatInt(int64(tid), 16),
3150 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3151
3152 meParams := me.ParamData{EntityID: aInstID}
3153 meInstance, omciErr := me.NewVoipApplicationServiceProfile(meParams)
3154 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003155 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3156 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003157 if err != nil {
3158 logger.Errorw(ctx, "Cannot encode SIPVoipApplicationServiceProfile for delete", log.Fields{
3159 "Err": err, "device-id": oo.deviceID})
3160 return nil, err
3161 }
3162
3163 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3164 if err != nil {
3165 logger.Errorw(ctx, "Cannot serialize SIPVoipApplicationServiceProfile delete", log.Fields{
3166 "Err": err, "device-id": oo.deviceID})
3167 return nil, err
3168 }
3169
3170 omciRxCallbackPair := CallbackPair{
3171 CbKey: tid,
3172 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3173 }
3174 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3175 if err != nil {
3176 logger.Errorw(ctx, "Cannot send SIPVoipApplicationServiceProfile delete", log.Fields{
3177 "Err": err, "device-id": oo.deviceID})
3178 return nil, err
3179 }
3180 logger.Debug(ctx, "send SIPVoipApplicationServiceProfile-Delete-msg done")
3181 return meInstance, nil
3182 }
3183 logger.Errorw(ctx, "Cannot generate SIPVoipApplicationServiceProfile Instance for delete", log.Fields{
3184 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3185 return nil, omciErr.GetError()
3186}
3187
3188// SendCreateSIPAgentConfigData nolint: unused
3189func (oo *OmciCC) SendCreateSIPAgentConfigData(ctx context.Context, timeout int, highPrio bool,
3190 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3191 tid := oo.GetNextTid(highPrio)
3192 logger.Debugw(ctx, "send SIPAgentConfigData-create-msg:", log.Fields{"device-id": oo.deviceID,
3193 "SequNo": strconv.FormatInt(int64(tid), 16),
3194 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3195
3196 meInstance, omciErr := me.NewSipAgentConfigData(params[0])
3197 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003198 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3199 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003200 if err != nil {
3201 logger.Errorw(ctx, "Cannot encode SIPAgentConfigData for create", log.Fields{"Err": err,
3202 "device-id": oo.deviceID})
3203 return nil, err
3204 }
3205
3206 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3207 if err != nil {
3208 logger.Errorw(ctx, "Cannot serialize SIPAgentConfigData create", log.Fields{"Err": err,
3209 "device-id": oo.deviceID})
3210 return nil, err
3211 }
3212
3213 omciRxCallbackPair := CallbackPair{CbKey: tid,
3214 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3215 }
3216 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3217 if err != nil {
3218 logger.Errorw(ctx, "Cannot send SIPAgentConfigData create", log.Fields{"Err": err,
3219 "device-id": oo.deviceID})
3220 return nil, err
3221 }
3222 logger.Debug(ctx, "send SIPAgentConfigData-create-msg done")
3223 return meInstance, nil
3224 }
3225 logger.Errorw(ctx, "Cannot generate SIPAgentConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3226 "device-id": oo.deviceID})
3227 return nil, omciErr.GetError()
3228}
3229
3230// SendSetSIPAgentConfigData nolint: unused
3231func (oo *OmciCC) SendSetSIPAgentConfigData(ctx context.Context, timeout int, highPrio bool,
3232 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3233 tid := oo.GetNextTid(highPrio)
3234 logger.Debugw(ctx, "send SIPAgentConfigData-set-msg:", log.Fields{"device-id": oo.deviceID,
3235 "SequNo": strconv.FormatInt(int64(tid), 16),
3236 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3237
3238 meInstance, omciErr := me.NewSipAgentConfigData(params[0])
3239 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003240 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3241 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003242 if err != nil {
3243 logger.Errorw(ctx, "Cannot encode SIPAgentConfigData for set", log.Fields{"Err": err,
3244 "device-id": oo.deviceID})
3245 return nil, err
3246 }
3247
3248 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3249 if err != nil {
3250 logger.Errorw(ctx, "Cannot serialize SIPAgentConfigData set", log.Fields{"Err": err,
3251 "device-id": oo.deviceID})
3252 return nil, err
3253 }
3254
3255 omciRxCallbackPair := CallbackPair{CbKey: tid,
3256 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3257 }
3258 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3259 if err != nil {
3260 logger.Errorw(ctx, "Cannot send SIPAgentConfigData set", log.Fields{"Err": err,
3261 "device-id": oo.deviceID})
3262 return nil, err
3263 }
3264 logger.Debug(ctx, "send SIPAgentConfigData-set-msg done")
3265 return meInstance, nil
3266 }
3267 logger.Errorw(ctx, "Cannot generate SIPAgentConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3268 "device-id": oo.deviceID})
3269 return nil, omciErr.GetError()
3270}
3271
3272// SendDeleteSIPAgentConfigData nolint: unused
3273func (oo *OmciCC) SendDeleteSIPAgentConfigData(ctx context.Context, timeout int, highPrio bool,
3274 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3275 tid := oo.GetNextTid(highPrio)
3276 logger.Debugw(ctx, "send SIPAgentConfigData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3277 "SequNo": strconv.FormatInt(int64(tid), 16),
3278 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3279
3280 meParams := me.ParamData{EntityID: aInstID}
3281 meInstance, omciErr := me.NewSipAgentConfigData(meParams)
3282 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003283 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3284 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003285 if err != nil {
3286 logger.Errorw(ctx, "Cannot encode SIPAgentConfigData for delete", log.Fields{
3287 "Err": err, "device-id": oo.deviceID})
3288 return nil, err
3289 }
3290
3291 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3292 if err != nil {
3293 logger.Errorw(ctx, "Cannot serialize SIPAgentConfigData delete", log.Fields{
3294 "Err": err, "device-id": oo.deviceID})
3295 return nil, err
3296 }
3297
3298 omciRxCallbackPair := CallbackPair{
3299 CbKey: tid,
3300 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3301 }
3302 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3303 if err != nil {
3304 logger.Errorw(ctx, "Cannot send SIPAgentConfigData delete", log.Fields{
3305 "Err": err, "device-id": oo.deviceID})
3306 return nil, err
3307 }
3308 logger.Debug(ctx, "send SIPAgentConfigData-Delete-msg done")
3309 return meInstance, nil
3310 }
3311 logger.Errorw(ctx, "Cannot generate SIPAgentConfigData Instance for delete", log.Fields{
3312 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3313 return nil, omciErr.GetError()
3314}
3315
3316// SendCreateTCPUDPConfigData nolint: unused
3317func (oo *OmciCC) SendCreateTCPUDPConfigData(ctx context.Context, timeout int, highPrio bool,
3318 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3319 tid := oo.GetNextTid(highPrio)
3320 logger.Debugw(ctx, "send TCPUDPConfigData-create-msg:", log.Fields{"device-id": oo.deviceID,
3321 "SequNo": strconv.FormatInt(int64(tid), 16),
3322 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3323
3324 meInstance, omciErr := me.NewTcpUdpConfigData(params[0])
3325 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003326 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3327 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003328 if err != nil {
3329 logger.Errorw(ctx, "Cannot encode TCPUDPConfigData for create", log.Fields{"Err": err,
3330 "device-id": oo.deviceID})
3331 return nil, err
3332 }
3333
3334 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3335 if err != nil {
3336 logger.Errorw(ctx, "Cannot serialize TCPUDPConfigData create", log.Fields{"Err": err,
3337 "device-id": oo.deviceID})
3338 return nil, err
3339 }
3340
3341 omciRxCallbackPair := CallbackPair{CbKey: tid,
3342 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3343 }
3344 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3345 if err != nil {
3346 logger.Errorw(ctx, "Cannot send TCPUDPConfigData create", log.Fields{"Err": err,
3347 "device-id": oo.deviceID})
3348 return nil, err
3349 }
3350 logger.Debug(ctx, "send TCPUDPConfigData-create-msg done")
3351 return meInstance, nil
3352 }
3353 logger.Errorw(ctx, "Cannot generate TCPUDPConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3354 "device-id": oo.deviceID})
3355 return nil, omciErr.GetError()
3356}
3357
3358// SendSetTCPUDPConfigData nolint: unused
3359func (oo *OmciCC) SendSetTCPUDPConfigData(ctx context.Context, timeout int, highPrio bool,
3360 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3361 tid := oo.GetNextTid(highPrio)
3362 logger.Debugw(ctx, "send TCPUDPConfigData-set-msg:", log.Fields{"device-id": oo.deviceID,
3363 "SequNo": strconv.FormatInt(int64(tid), 16),
3364 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3365
3366 meInstance, omciErr := me.NewTcpUdpConfigData(params[0])
3367 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003368 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3369 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003370 if err != nil {
3371 logger.Errorw(ctx, "Cannot encode TCPUDPConfigData for set", log.Fields{"Err": err,
3372 "device-id": oo.deviceID})
3373 return nil, err
3374 }
3375
3376 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3377 if err != nil {
3378 logger.Errorw(ctx, "Cannot serialize TCPUDPConfigData set", log.Fields{"Err": err,
3379 "device-id": oo.deviceID})
3380 return nil, err
3381 }
3382
3383 omciRxCallbackPair := CallbackPair{CbKey: tid,
3384 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3385 }
3386 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3387 if err != nil {
3388 logger.Errorw(ctx, "Cannot send TCPUDPConfigData set", log.Fields{"Err": err,
3389 "device-id": oo.deviceID})
3390 return nil, err
3391 }
3392 logger.Debug(ctx, "send TCPUDPConfigData-set-msg done")
3393 return meInstance, nil
3394 }
3395 logger.Errorw(ctx, "Cannot generate TCPUDPConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3396 "device-id": oo.deviceID})
3397 return nil, omciErr.GetError()
3398}
3399
3400// SendDeleteTCPUDPConfigData nolint: unused
3401func (oo *OmciCC) SendDeleteTCPUDPConfigData(ctx context.Context, timeout int, highPrio bool,
3402 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3403 tid := oo.GetNextTid(highPrio)
3404 logger.Debugw(ctx, "send TCPUDPConfigData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3405 "SequNo": strconv.FormatInt(int64(tid), 16),
3406 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3407
3408 meParams := me.ParamData{EntityID: aInstID}
3409 meInstance, omciErr := me.NewTcpUdpConfigData(meParams)
3410 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003411 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3412 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003413 if err != nil {
3414 logger.Errorw(ctx, "Cannot encode TCPUDPConfigData for delete", log.Fields{
3415 "Err": err, "device-id": oo.deviceID})
3416 return nil, err
3417 }
3418
3419 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3420 if err != nil {
3421 logger.Errorw(ctx, "Cannot serialize TCPUDPConfigData delete", log.Fields{
3422 "Err": err, "device-id": oo.deviceID})
3423 return nil, err
3424 }
3425
3426 omciRxCallbackPair := CallbackPair{
3427 CbKey: tid,
3428 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3429 }
3430 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3431 if err != nil {
3432 logger.Errorw(ctx, "Cannot send TCPUDPConfigData delete", log.Fields{
3433 "Err": err, "device-id": oo.deviceID})
3434 return nil, err
3435 }
3436 logger.Debug(ctx, "send TCPUDPConfigData-Delete-msg done")
3437 return meInstance, nil
3438 }
3439 logger.Errorw(ctx, "Cannot generate SIPAgentConfigData Instance for delete", log.Fields{
3440 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3441 return nil, omciErr.GetError()
3442}
3443
3444// SendCreateIPHostConfigData nolint: unused
3445func (oo *OmciCC) SendCreateIPHostConfigData(ctx context.Context, timeout int, highPrio bool,
3446 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3447 tid := oo.GetNextTid(highPrio)
3448 logger.Debugw(ctx, "send IPHostConfigData-create-msg:", log.Fields{"device-id": oo.deviceID,
3449 "SequNo": strconv.FormatInt(int64(tid), 16),
3450 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3451
3452 meInstance, omciErr := me.NewIpHostConfigData(params[0])
3453 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003454 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3455 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003456 if err != nil {
3457 logger.Errorw(ctx, "Cannot encode IPHostConfigData for create", log.Fields{"Err": err,
3458 "device-id": oo.deviceID})
3459 return nil, err
3460 }
3461
3462 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3463 if err != nil {
3464 logger.Errorw(ctx, "Cannot serialize IPHostConfigData create", log.Fields{"Err": err,
3465 "device-id": oo.deviceID})
3466 return nil, err
3467 }
3468
3469 omciRxCallbackPair := CallbackPair{CbKey: tid,
3470 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3471 }
3472 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3473 if err != nil {
3474 logger.Errorw(ctx, "Cannot send IPHostConfigData create", log.Fields{"Err": err,
3475 "device-id": oo.deviceID})
3476 return nil, err
3477 }
3478 logger.Debug(ctx, "send IPHostConfigData-create-msg done")
3479 return meInstance, nil
3480 }
3481 logger.Errorw(ctx, "Cannot generate IPHostConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3482 "device-id": oo.deviceID})
3483 return nil, omciErr.GetError()
3484}
3485
3486// SendSetIPHostConfigData nolint: unused
3487func (oo *OmciCC) SendSetIPHostConfigData(ctx context.Context, timeout int, highPrio bool,
3488 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3489 tid := oo.GetNextTid(highPrio)
3490 logger.Debugw(ctx, "send IPHostConfigData-set-msg:", log.Fields{"device-id": oo.deviceID,
3491 "SequNo": strconv.FormatInt(int64(tid), 16),
3492 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3493
3494 meInstance, omciErr := me.NewIpHostConfigData(params[0])
3495 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003496 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3497 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003498 if err != nil {
3499 logger.Errorw(ctx, "Cannot encode IPHostConfigData for set", log.Fields{"Err": err,
3500 "device-id": oo.deviceID})
3501 return nil, err
3502 }
3503
3504 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3505 if err != nil {
3506 logger.Errorw(ctx, "Cannot serialize IPHostConfigData set", log.Fields{"Err": err,
3507 "device-id": oo.deviceID})
3508 return nil, err
3509 }
3510
3511 omciRxCallbackPair := CallbackPair{CbKey: tid,
3512 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3513 }
3514 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3515 if err != nil {
3516 logger.Errorw(ctx, "Cannot send IPHostConfigData set", log.Fields{"Err": err,
3517 "device-id": oo.deviceID})
3518 return nil, err
3519 }
3520 logger.Debug(ctx, "send IPHostConfigData-set-msg done")
3521 return meInstance, nil
3522 }
3523 logger.Errorw(ctx, "Cannot generate IPHostConfigData Instance", log.Fields{"Err": omciErr.GetError(),
3524 "device-id": oo.deviceID})
3525 return nil, omciErr.GetError()
3526}
3527
3528// SendDeleteIPHostConfigData nolint: unused
3529func (oo *OmciCC) SendDeleteIPHostConfigData(ctx context.Context, timeout int, highPrio bool,
3530 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3531 tid := oo.GetNextTid(highPrio)
3532 logger.Debugw(ctx, "send IPHostConfigData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3533 "SequNo": strconv.FormatInt(int64(tid), 16),
3534 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3535
3536 meParams := me.ParamData{EntityID: aInstID}
3537 meInstance, omciErr := me.NewIpHostConfigData(meParams)
3538 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003539 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3540 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003541 if err != nil {
3542 logger.Errorw(ctx, "Cannot encode IPHostConfigData for delete", log.Fields{
3543 "Err": err, "device-id": oo.deviceID})
3544 return nil, err
3545 }
3546
3547 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3548 if err != nil {
3549 logger.Errorw(ctx, "Cannot serialize IPHostConfigData delete", log.Fields{
3550 "Err": err, "device-id": oo.deviceID})
3551 return nil, err
3552 }
3553
3554 omciRxCallbackPair := CallbackPair{
3555 CbKey: tid,
3556 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3557 }
3558 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3559 if err != nil {
3560 logger.Errorw(ctx, "Cannot send IPHostConfigData delete", log.Fields{
3561 "Err": err, "device-id": oo.deviceID})
3562 return nil, err
3563 }
3564 logger.Debug(ctx, "send IPHostConfigData-Delete-msg done")
3565 return meInstance, nil
3566 }
3567 logger.Errorw(ctx, "Cannot generate IPHostConfigData Instance for delete", log.Fields{
3568 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3569 return nil, omciErr.GetError()
3570}
3571
3572// SendCreateRTPProfileData nolint: unused
3573func (oo *OmciCC) SendCreateRTPProfileData(ctx context.Context, timeout int, highPrio bool,
3574 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3575 tid := oo.GetNextTid(highPrio)
3576 logger.Debugw(ctx, "send RTPProfileData-create-msg:", log.Fields{"device-id": oo.deviceID,
3577 "SequNo": strconv.FormatInt(int64(tid), 16),
3578 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3579
3580 meInstance, omciErr := me.NewRtpProfileData(params[0])
3581 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003582 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3583 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003584 if err != nil {
3585 logger.Errorw(ctx, "Cannot encode RTPProfileData for create", log.Fields{"Err": err,
3586 "device-id": oo.deviceID})
3587 return nil, err
3588 }
3589
3590 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3591 if err != nil {
3592 logger.Errorw(ctx, "Cannot serialize RTPProfileData create", log.Fields{"Err": err,
3593 "device-id": oo.deviceID})
3594 return nil, err
3595 }
3596
3597 omciRxCallbackPair := CallbackPair{CbKey: tid,
3598 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3599 }
3600 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3601 if err != nil {
3602 logger.Errorw(ctx, "Cannot send RTPProfileData create", log.Fields{"Err": err,
3603 "device-id": oo.deviceID})
3604 return nil, err
3605 }
3606 logger.Debug(ctx, "send RTPProfileData-create-msg done")
3607 return meInstance, nil
3608 }
3609 logger.Errorw(ctx, "Cannot generate RTPProfileData Instance", log.Fields{"Err": omciErr.GetError(),
3610 "device-id": oo.deviceID})
3611 return nil, omciErr.GetError()
3612}
3613
3614// SendSetRTPProfileData nolint: unused
3615func (oo *OmciCC) SendSetRTPProfileData(ctx context.Context, timeout int, highPrio bool,
3616 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3617 tid := oo.GetNextTid(highPrio)
3618 logger.Debugw(ctx, "send RTPProfileData-set-msg:", log.Fields{"device-id": oo.deviceID,
3619 "SequNo": strconv.FormatInt(int64(tid), 16),
3620 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3621
3622 meInstance, omciErr := me.NewRtpProfileData(params[0])
3623 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003624 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3625 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003626 if err != nil {
3627 logger.Errorw(ctx, "Cannot encode RTPProfileData for set", log.Fields{"Err": err,
3628 "device-id": oo.deviceID})
3629 return nil, err
3630 }
3631
3632 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3633 if err != nil {
3634 logger.Errorw(ctx, "Cannot serialize RTPProfileData set", log.Fields{"Err": err,
3635 "device-id": oo.deviceID})
3636 return nil, err
3637 }
3638
3639 omciRxCallbackPair := CallbackPair{CbKey: tid,
3640 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3641 }
3642 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3643 if err != nil {
3644 logger.Errorw(ctx, "Cannot send RTPProfileData set", log.Fields{"Err": err,
3645 "device-id": oo.deviceID})
3646 return nil, err
3647 }
3648 logger.Debug(ctx, "send RTPProfileData-set-msg done")
3649 return meInstance, nil
3650 }
3651 logger.Errorw(ctx, "Cannot generate RTPProfileData Instance", log.Fields{"Err": omciErr.GetError(),
3652 "device-id": oo.deviceID})
3653 return nil, omciErr.GetError()
3654}
3655
3656// SendDeleteRTPProfileData nolint: unused
3657func (oo *OmciCC) SendDeleteRTPProfileData(ctx context.Context, timeout int, highPrio bool,
3658 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3659 tid := oo.GetNextTid(highPrio)
3660 logger.Debugw(ctx, "send RTPProfileData-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3661 "SequNo": strconv.FormatInt(int64(tid), 16),
3662 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3663
3664 meParams := me.ParamData{EntityID: aInstID}
3665 meInstance, omciErr := me.NewRtpProfileData(meParams)
3666 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003667 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3668 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003669 if err != nil {
3670 logger.Errorw(ctx, "Cannot encode RTPProfileData for delete", log.Fields{
3671 "Err": err, "device-id": oo.deviceID})
3672 return nil, err
3673 }
3674
3675 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3676 if err != nil {
3677 logger.Errorw(ctx, "Cannot serialize RTPProfileData delete", log.Fields{
3678 "Err": err, "device-id": oo.deviceID})
3679 return nil, err
3680 }
3681
3682 omciRxCallbackPair := CallbackPair{
3683 CbKey: tid,
3684 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3685 }
3686 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3687 if err != nil {
3688 logger.Errorw(ctx, "Cannot send RTPProfileData delete", log.Fields{
3689 "Err": err, "device-id": oo.deviceID})
3690 return nil, err
3691 }
3692 logger.Debug(ctx, "send RTPProfileData-Delete-msg done")
3693 return meInstance, nil
3694 }
3695 logger.Errorw(ctx, "Cannot generate RTPProfileData Instance for delete", log.Fields{
3696 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3697 return nil, omciErr.GetError()
3698}
3699
3700// SendCreateNetworkDialPlanTable nolint: unused
3701func (oo *OmciCC) SendCreateNetworkDialPlanTable(ctx context.Context, timeout int, highPrio bool,
3702 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3703 tid := oo.GetNextTid(highPrio)
3704 logger.Debugw(ctx, "send NetworkDialPlanTable-create-msg:", log.Fields{"device-id": oo.deviceID,
3705 "SequNo": strconv.FormatInt(int64(tid), 16),
3706 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3707
3708 meInstance, omciErr := me.NewNetworkDialPlanTable(params[0])
3709 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003710 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3711 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003712 if err != nil {
3713 logger.Errorw(ctx, "Cannot encode NetworkDialPlanTable for create", log.Fields{"Err": err,
3714 "device-id": oo.deviceID})
3715 return nil, err
3716 }
3717
3718 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3719 if err != nil {
3720 logger.Errorw(ctx, "Cannot serialize NetworkDialPlanTable create", log.Fields{"Err": err,
3721 "device-id": oo.deviceID})
3722 return nil, err
3723 }
3724
3725 omciRxCallbackPair := CallbackPair{CbKey: tid,
3726 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3727 }
3728 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3729 if err != nil {
3730 logger.Errorw(ctx, "Cannot send NetworkDialPlanTable create", log.Fields{"Err": err,
3731 "device-id": oo.deviceID})
3732 return nil, err
3733 }
3734 logger.Debug(ctx, "send NetworkDialPlanTable-create-msg done")
3735 return meInstance, nil
3736 }
3737 logger.Errorw(ctx, "Cannot generate NetworkDialPlanTable Instance", log.Fields{"Err": omciErr.GetError(),
3738 "device-id": oo.deviceID})
3739 return nil, omciErr.GetError()
3740}
3741
3742// SendSetNetworkDialPlanTable nolint: unused
3743func (oo *OmciCC) SendSetNetworkDialPlanTable(ctx context.Context, timeout int, highPrio bool,
3744 rxChan chan Message, params ...me.ParamData) (*me.ManagedEntity, error) {
3745 tid := oo.GetNextTid(highPrio)
3746 logger.Debugw(ctx, "send NetworkDialPlanTable-set-msg:", log.Fields{"device-id": oo.deviceID,
3747 "SequNo": strconv.FormatInt(int64(tid), 16),
3748 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
3749
3750 meInstance, omciErr := me.NewNetworkDialPlanTable(params[0])
3751 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003752 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid),
3753 oframe.AddDefaults(true))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003754 if err != nil {
3755 logger.Errorw(ctx, "Cannot encode NetworkDialPlanTable for set", log.Fields{"Err": err,
3756 "device-id": oo.deviceID})
3757 return nil, err
3758 }
3759
3760 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3761 if err != nil {
3762 logger.Errorw(ctx, "Cannot serialize NetworkDialPlanTable set", log.Fields{"Err": err,
3763 "device-id": oo.deviceID})
3764 return nil, err
3765 }
3766
3767 omciRxCallbackPair := CallbackPair{CbKey: tid,
3768 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3769 }
3770 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3771 if err != nil {
3772 logger.Errorw(ctx, "Cannot send NetworkDialPlanTable set", log.Fields{"Err": err,
3773 "device-id": oo.deviceID})
3774 return nil, err
3775 }
3776 logger.Debug(ctx, "send NetworkDialPlanTable-set-msg done")
3777 return meInstance, nil
3778 }
3779 logger.Errorw(ctx, "Cannot generate NetworkDialPlanTable Instance", log.Fields{"Err": omciErr.GetError(),
3780 "device-id": oo.deviceID})
3781 return nil, omciErr.GetError()
3782}
3783
3784// SendDeleteNetworkDialPlanTable nolint: unused
3785func (oo *OmciCC) SendDeleteNetworkDialPlanTable(ctx context.Context, timeout int, highPrio bool,
3786 rxChan chan Message, aInstID uint16) (*me.ManagedEntity, error) {
3787 tid := oo.GetNextTid(highPrio)
3788 logger.Debugw(ctx, "send NetworkDialPlanTable-Delete-msg:", log.Fields{"device-id": oo.deviceID,
3789 "SequNo": strconv.FormatInt(int64(tid), 16),
3790 "InstId": strconv.FormatInt(int64(aInstID), 16)})
3791
3792 meParams := me.ParamData{EntityID: aInstID}
3793 meInstance, omciErr := me.NewNetworkDialPlanTable(meParams)
3794 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00003795 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.DeleteRequestType,
3796 oframe.TransactionID(tid))
ozgecanetsia0e3111f2021-10-19 18:04:15 +03003797 if err != nil {
3798 logger.Errorw(ctx, "Cannot encode NetworkDialPlanTable for delete", log.Fields{
3799 "Err": err, "device-id": oo.deviceID})
3800 return nil, err
3801 }
3802
3803 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3804 if err != nil {
3805 logger.Errorw(ctx, "Cannot serialize NetworkDialPlanTable delete", log.Fields{
3806 "Err": err, "device-id": oo.deviceID})
3807 return nil, err
3808 }
3809
3810 omciRxCallbackPair := CallbackPair{
3811 CbKey: tid,
3812 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
3813 }
3814 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
3815 if err != nil {
3816 logger.Errorw(ctx, "Cannot send NetworkDialPlanTable delete", log.Fields{
3817 "Err": err, "device-id": oo.deviceID})
3818 return nil, err
3819 }
3820 logger.Debug(ctx, "send NetworkDialPlanTable-Delete-msg done")
3821 return meInstance, nil
3822 }
3823 logger.Errorw(ctx, "Cannot generate NetworkDialPlanTable Instance for delete", log.Fields{
3824 "Err": omciErr.GetError(), "device-id": oo.deviceID})
3825 return nil, omciErr.GetError()
3826}
3827
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003828// SendSyncTime sends SynchronizeTimeRequest
3829func (oo *OmciCC) SendSyncTime(ctx context.Context, timeout int, highPrio bool, rxChan chan Message) error {
3830 tid := oo.GetNextTid(highPrio)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003831 logger.Debugw(ctx, "send synchronize time request:", log.Fields{"device-id": oo.deviceID,
3832 "SequNo": strconv.FormatInt(int64(tid), 16)})
3833
3834 omciLayer := &omci.OMCI{
3835 TransactionID: tid,
3836 MessageType: omci.SynchronizeTimeRequestType,
3837 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
3838 // Length: 0x28, // Optional, defaults to 40 octets
3839 }
3840 utcTime := time.Now().UTC()
3841 request := &omci.SynchronizeTimeRequest{
3842 MeBasePacket: omci.MeBasePacket{
3843 EntityClass: me.OnuGClassID,
3844 // Default Instance ID is 0
3845 },
3846 Year: uint16(utcTime.Year()),
3847 Month: uint8(utcTime.Month()),
3848 Day: uint8(utcTime.Day()),
3849 Hour: uint8(utcTime.Hour()),
3850 Minute: uint8(utcTime.Minute()),
3851 Second: uint8(utcTime.Second()),
3852 }
3853
3854 pkt, err := serializeOmciLayer(ctx, omciLayer, request)
3855 if err != nil {
3856 logger.Errorw(ctx, "Cannot serialize synchronize time request", log.Fields{"Err": err,
3857 "device-id": oo.deviceID})
3858 return err
3859 }
3860
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003861 omciRxCallbackPair := CallbackPair{CbKey: tid,
3862 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdrae0140f02021-02-02 16:55:09 -08003863 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003864 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003865 if err != nil {
3866 logger.Errorw(ctx, "Cannot send synchronize time request", log.Fields{"Err": err,
3867 "device-id": oo.deviceID})
3868 return err
3869 }
3870 logger.Debug(ctx, "send synchronize time request done")
3871 return nil
3872}
3873
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003874// SendCreateOrDeleteEthernetPerformanceMonitoringHistoryME creates or deletes EthernetFramePerformanceMonitoringHistoryData ME instance
3875func (oo *OmciCC) SendCreateOrDeleteEthernetPerformanceMonitoringHistoryME(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03003876 upstream bool, create bool, rxChan chan Message, entityID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003877 tid := oo.GetNextTid(highPrio)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003878 logger.Debugw(ctx, "send ethernet-performance-monitoring-history-me-msg:", log.Fields{"device-id": oo.deviceID,
3879 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create, "upstream": upstream})
3880 meParam := me.ParamData{EntityID: entityID}
3881 var meInstance *me.ManagedEntity
3882 var omciErr me.OmciErrors
3883 if upstream {
3884 meInstance, omciErr = me.NewEthernetFramePerformanceMonitoringHistoryDataUpstream(meParam)
3885 } else {
3886 meInstance, omciErr = me.NewEthernetFramePerformanceMonitoringHistoryDataDownstream(meParam)
3887 }
3888 if omciErr.GetError() == nil {
3889 var omciLayer *omci.OMCI
3890 var msgLayer gopacket.SerializableLayer
3891 var err error
3892 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00003893 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3894 oframe.AddDefaults(true))
Girish Gowdrae0140f02021-02-02 16:55:09 -08003895 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00003896 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
3897 oframe.AddDefaults(true))
Girish Gowdrae0140f02021-02-02 16:55:09 -08003898 }
3899 if err != nil {
3900 logger.Errorw(ctx, "Cannot encode ethernet frame performance monitoring history data ME",
3901 log.Fields{"Err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003902 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08003903 }
3904
3905 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3906 if err != nil {
3907 logger.Errorw(ctx, "Cannot serialize ethernet frame performance monitoring history data ME",
3908 log.Fields{"Err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003909 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08003910 }
3911
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003912 omciRxCallbackPair := CallbackPair{CbKey: tid,
3913 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdrae0140f02021-02-02 16:55:09 -08003914 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003915 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003916 if err != nil {
3917 logger.Errorw(ctx, "Cannot send ethernet frame performance monitoring history data ME",
3918 log.Fields{"Err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003919 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08003920 }
3921 logger.Debugw(ctx, "send ethernet frame performance monitoring history data ME done",
3922 log.Fields{"device-id": oo.deviceID, "upstream": upstream, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003923 return meInstance, nil
Girish Gowdrae0140f02021-02-02 16:55:09 -08003924 }
3925 logger.Errorw(ctx, "Cannot generate ethernet frame performance monitoring history data ME Instance",
3926 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 +03003927 return nil, omciErr.GetError()
Girish Gowdrae0140f02021-02-02 16:55:09 -08003928}
3929
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003930// SendCreateOrDeleteEthernetUniHistoryME creates or deletes EthernetPerformanceMonitoringHistoryData ME instance
3931func (oo *OmciCC) SendCreateOrDeleteEthernetUniHistoryME(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03003932 create bool, rxChan chan Message, entityID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003933 tid := oo.GetNextTid(highPrio)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003934 logger.Debugw(ctx, "send ethernet-uni-history-me-msg:", log.Fields{"device-id": oo.deviceID,
3935 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create})
3936 meParam := me.ParamData{EntityID: entityID}
3937 var meInstance *me.ManagedEntity
3938 var omciErr me.OmciErrors
3939 meInstance, omciErr = me.NewEthernetPerformanceMonitoringHistoryData(meParam)
3940
3941 if omciErr.GetError() == nil {
3942 var omciLayer *omci.OMCI
3943 var msgLayer gopacket.SerializableLayer
3944 var err error
3945 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00003946 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
3947 oframe.AddDefaults(true))
Girish Gowdrae0140f02021-02-02 16:55:09 -08003948 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00003949 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
3950 oframe.AddDefaults(true))
Girish Gowdrae0140f02021-02-02 16:55:09 -08003951 }
3952 if err != nil {
3953 logger.Errorw(ctx, "Cannot encode ethernet uni history data ME",
3954 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003955 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08003956 }
3957
3958 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
3959 if err != nil {
3960 logger.Errorw(ctx, "Cannot serialize ethernet uni history data ME",
3961 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003962 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08003963 }
3964
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003965 omciRxCallbackPair := CallbackPair{CbKey: tid,
3966 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdrae0140f02021-02-02 16:55:09 -08003967 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003968 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdrae0140f02021-02-02 16:55:09 -08003969 if err != nil {
3970 logger.Errorw(ctx, "Cannot send ethernet uni history data ME",
3971 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003972 return nil, err
Girish Gowdrae0140f02021-02-02 16:55:09 -08003973 }
3974 logger.Debugw(ctx, "send ethernet uni history data ME done",
3975 log.Fields{"device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003976 return meInstance, nil
Girish Gowdrae0140f02021-02-02 16:55:09 -08003977 }
3978 logger.Errorw(ctx, "Cannot generate ethernet uni history data ME Instance",
3979 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03003980 return nil, omciErr.GetError()
Girish Gowdrae0140f02021-02-02 16:55:09 -08003981}
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08003982
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003983// SendCreateOrDeleteFecHistoryME creates or deletes FecPerformanceMonitoringHistoryData ME instance
3984func (oo *OmciCC) SendCreateOrDeleteFecHistoryME(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03003985 create bool, rxChan chan Message, entityID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00003986 tid := oo.GetNextTid(highPrio)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08003987 logger.Debugw(ctx, "send fec-history-me-msg:", log.Fields{"device-id": oo.deviceID,
3988 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create})
3989 meParam := me.ParamData{EntityID: entityID}
3990 var meInstance *me.ManagedEntity
3991 var omciErr me.OmciErrors
3992 meInstance, omciErr = me.NewFecPerformanceMonitoringHistoryData(meParam)
3993
3994 if omciErr.GetError() == nil {
3995 var omciLayer *omci.OMCI
3996 var msgLayer gopacket.SerializableLayer
3997 var err error
3998 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00003999 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
4000 oframe.AddDefaults(true))
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004001 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00004002 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
4003 oframe.AddDefaults(true))
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004004 }
4005 if err != nil {
4006 logger.Errorw(ctx, "Cannot encode fec history data ME",
4007 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004008 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004009 }
4010
4011 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
4012 if err != nil {
4013 logger.Errorw(ctx, "Cannot serialize fec history data ME",
4014 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004015 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004016 }
4017
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004018 omciRxCallbackPair := CallbackPair{CbKey: tid,
4019 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004020 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004021 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004022 if err != nil {
4023 logger.Errorw(ctx, "Cannot send fec history data ME",
4024 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004025 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004026 }
4027 logger.Debugw(ctx, "send fec history data ME done",
4028 log.Fields{"device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004029 return meInstance, nil
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004030 }
4031 logger.Errorw(ctx, "Cannot generate fec history data ME Instance",
4032 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004033 return nil, omciErr.GetError()
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004034}
4035
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004036// SendCreateOrDeleteGemPortHistoryME deletes GemPortNetworkCtpPerformanceMonitoringHistoryData ME instance
4037func (oo *OmciCC) SendCreateOrDeleteGemPortHistoryME(ctx context.Context, timeout int, highPrio bool,
ozgecanetsiab36ed572021-04-01 10:38:48 +03004038 create bool, rxChan chan Message, entityID uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004039 tid := oo.GetNextTid(highPrio)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004040 logger.Debugw(ctx, "send gemport-history-me-msg:", log.Fields{"device-id": oo.deviceID,
4041 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create})
4042 meParam := me.ParamData{EntityID: entityID}
4043 var meInstance *me.ManagedEntity
4044 var omciErr me.OmciErrors
4045 meInstance, omciErr = me.NewGemPortNetworkCtpPerformanceMonitoringHistoryData(meParam)
4046
4047 if omciErr.GetError() == nil {
4048 var omciLayer *omci.OMCI
4049 var msgLayer gopacket.SerializableLayer
4050 var err error
4051 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00004052 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
4053 oframe.AddDefaults(true))
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004054 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00004055 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
4056 oframe.AddDefaults(true))
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004057 }
4058 if err != nil {
4059 logger.Errorw(ctx, "Cannot encode gemport history data ME",
4060 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004061 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004062 }
4063
4064 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
4065 if err != nil {
4066 logger.Errorw(ctx, "Cannot serialize gemport history data ME",
4067 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004068 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004069 }
4070
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004071 omciRxCallbackPair := CallbackPair{CbKey: tid,
4072 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004073 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004074 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004075 if err != nil {
4076 logger.Errorw(ctx, "Cannot send gemport history data ME",
4077 log.Fields{"Err": err, "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004078 return nil, err
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004079 }
4080 logger.Debugw(ctx, "send gemport history data ME done",
4081 log.Fields{"device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004082 return meInstance, nil
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004083 }
4084 logger.Errorw(ctx, "Cannot generate gemport history data ME Instance",
4085 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "create": create, "InstId": strconv.FormatInt(int64(entityID), 16)})
ozgecanetsiab36ed572021-04-01 10:38:48 +03004086 return nil, omciErr.GetError()
Girish Gowdra5c5aaf42021-02-17 19:40:50 -08004087}
4088
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004089// SendStartSoftwareDownload sends StartSoftwareDownloadRequest
4090func (oo *OmciCC) SendStartSoftwareDownload(ctx context.Context, timeout int, highPrio bool,
mpagenko80622a52021-02-09 16:53:23 +00004091 rxChan chan Message, aImageMeID uint16, aDownloadWindowSize uint8, aFileLen uint32) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004092 tid := oo.GetNextTid(highPrio)
mpagenko80622a52021-02-09 16:53:23 +00004093 logger.Debugw(ctx, "send StartSwDlRequest:", log.Fields{"device-id": oo.deviceID,
4094 "SequNo": strconv.FormatInt(int64(tid), 16),
4095 "InstId": strconv.FormatInt(int64(aImageMeID), 16)})
4096
4097 omciLayer := &omci.OMCI{
4098 TransactionID: tid,
4099 MessageType: omci.StartSoftwareDownloadRequestType,
4100 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4101 // Length: 0x28, // Optional, defaults to 40 octets
4102 }
4103 request := &omci.StartSoftwareDownloadRequest{
4104 MeBasePacket: omci.MeBasePacket{
4105 EntityClass: me.SoftwareImageClassID,
4106 EntityInstance: aImageMeID, //inactive image
4107 },
4108 WindowSize: aDownloadWindowSize,
4109 ImageSize: aFileLen,
4110 NumberOfCircuitPacks: 1, //parallel download to multiple circuit packs not supported
4111 CircuitPacks: []uint16{0}, //circuit pack indication don't care for NumberOfCircuitPacks=1, but needed by omci-lib
4112 }
4113
4114 var options gopacket.SerializeOptions
4115 options.FixLengths = true
4116 buffer := gopacket.NewSerializeBuffer()
4117 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4118 if err != nil {
4119 logger.Errorw(ctx, "Cannot serialize StartSwDlRequest", log.Fields{"Err": err,
4120 "device-id": oo.deviceID})
4121 return err
4122 }
4123 outgoingPacket := buffer.Bytes()
4124
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004125 omciRxCallbackPair := CallbackPair{CbKey: tid,
4126 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko80622a52021-02-09 16:53:23 +00004127 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004128 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko80622a52021-02-09 16:53:23 +00004129 if err != nil {
4130 logger.Errorw(ctx, "Cannot send StartSwDlRequest", log.Fields{"Err": err,
4131 "device-id": oo.deviceID})
4132 return err
4133 }
4134 logger.Debug(ctx, "send StartSwDlRequest done")
mpagenko80622a52021-02-09 16:53:23 +00004135 return nil
4136}
4137
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004138// SendDownloadSection sends DownloadSectionRequestWithResponse
4139func (oo *OmciCC) SendDownloadSection(ctx context.Context, aTimeout int, highPrio bool,
mpagenko80622a52021-02-09 16:53:23 +00004140 rxChan chan Message, aImageMeID uint16, aAckRequest uint8, aDownloadSectionNo uint8, aSection []byte, aPrint bool) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004141 tid := oo.GetNextTid(highPrio)
mpagenko80622a52021-02-09 16:53:23 +00004142 logger.Debugw(ctx, "send DlSectionRequest:", log.Fields{"device-id": oo.deviceID,
4143 "SequNo": strconv.FormatInt(int64(tid), 16),
mpagenko15ff4a52021-03-02 10:09:20 +00004144 "InstId": strconv.FormatInt(int64(aImageMeID), 16), "omci-ack": aAckRequest})
mpagenko80622a52021-02-09 16:53:23 +00004145
4146 //TODO!!!: don't know by now on how to generate the possibly needed AR (or enforce it to 0) with current omci-lib
4147 // by now just try to send it as defined by omci-lib
mpagenko15ff4a52021-03-02 10:09:20 +00004148 msgType := omci.DownloadSectionRequestType
mpagenkoc26d4c02021-05-06 14:27:57 +00004149 var timeout int = 0 //default value for no response expected
mpagenko15ff4a52021-03-02 10:09:20 +00004150 if aAckRequest > 0 {
4151 msgType = omci.DownloadSectionRequestWithResponseType
mpagenkoc26d4c02021-05-06 14:27:57 +00004152 timeout = aTimeout
mpagenko15ff4a52021-03-02 10:09:20 +00004153 }
mpagenko80622a52021-02-09 16:53:23 +00004154 omciLayer := &omci.OMCI{
4155 TransactionID: tid,
mpagenko15ff4a52021-03-02 10:09:20 +00004156 MessageType: msgType,
mpagenko80622a52021-02-09 16:53:23 +00004157 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4158 // Length: 0x28, // Optional, defaults to 40 octets
4159 }
Himani Chawla43f95ff2021-06-03 00:24:12 +05304160 localSectionData := make([]byte, len(aSection))
4161
mpagenko15ff4a52021-03-02 10:09:20 +00004162 copy(localSectionData[:], aSection) // as long as DownloadSectionRequest defines array for SectionData we need to copy into the array
mpagenko80622a52021-02-09 16:53:23 +00004163 request := &omci.DownloadSectionRequest{
4164 MeBasePacket: omci.MeBasePacket{
4165 EntityClass: me.SoftwareImageClassID,
4166 EntityInstance: aImageMeID, //inactive image
4167 },
4168 SectionNumber: aDownloadSectionNo,
4169 SectionData: localSectionData,
4170 }
4171
4172 var options gopacket.SerializeOptions
4173 options.FixLengths = true
4174 buffer := gopacket.NewSerializeBuffer()
4175 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4176 if err != nil {
4177 logger.Errorw(ctx, "Cannot serialize DlSectionRequest", log.Fields{"Err": err,
4178 "device-id": oo.deviceID})
4179 return err
4180 }
4181 outgoingPacket := buffer.Bytes()
4182
mpagenko15ff4a52021-03-02 10:09:20 +00004183 //for initial debug purpose overrule the requested print state for some frames
4184 printFrame := aPrint
4185 if aAckRequest > 0 || aDownloadSectionNo == 0 {
4186 printFrame = true
4187 }
4188
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004189 omciRxCallbackPair := CallbackPair{CbKey: tid,
mpagenkoc26d4c02021-05-06 14:27:57 +00004190 // the callback is set even though no response might be required here, the tid (key) setting is needed here anyway
4191 // (used to avoid retransmission of frames with the same TID)
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004192 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, printFrame /*aPrint*/},
mpagenko80622a52021-02-09 16:53:23 +00004193 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004194 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko80622a52021-02-09 16:53:23 +00004195 if err != nil {
4196 logger.Errorw(ctx, "Cannot send DlSectionRequest", log.Fields{"Err": err,
4197 "device-id": oo.deviceID})
4198 return err
4199 }
4200 logger.Debug(ctx, "send DlSectionRequest done")
mpagenko80622a52021-02-09 16:53:23 +00004201 return nil
4202}
4203
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004204//SendEndSoftwareDownload sends EndSoftwareDownloadRequest
4205func (oo *OmciCC) SendEndSoftwareDownload(ctx context.Context, timeout int, highPrio bool,
mpagenko80622a52021-02-09 16:53:23 +00004206 rxChan chan Message, aImageMeID uint16, aFileLen uint32, aImageCrc uint32) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004207 tid := oo.GetNextTid(highPrio)
mpagenko80622a52021-02-09 16:53:23 +00004208 logger.Debugw(ctx, "send EndSwDlRequest:", log.Fields{"device-id": oo.deviceID,
4209 "SequNo": strconv.FormatInt(int64(tid), 16),
4210 "InstId": strconv.FormatInt(int64(aImageMeID), 16)})
4211
mpagenko15ff4a52021-03-02 10:09:20 +00004212 omciLayer := &omci.OMCI{
mpagenko80622a52021-02-09 16:53:23 +00004213 TransactionID: tid,
mpagenko15ff4a52021-03-02 10:09:20 +00004214 MessageType: omci.EndSoftwareDownloadRequestType,
mpagenko80622a52021-02-09 16:53:23 +00004215 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4216 // Length: 0x28, // Optional, defaults to 40 octets
4217 }
mpagenko15ff4a52021-03-02 10:09:20 +00004218 request := &omci.EndSoftwareDownloadRequest{
mpagenko80622a52021-02-09 16:53:23 +00004219 MeBasePacket: omci.MeBasePacket{
4220 EntityClass: me.SoftwareImageClassID,
4221 EntityInstance: aImageMeID, //inactive image
4222 },
mpagenko15ff4a52021-03-02 10:09:20 +00004223 CRC32: aImageCrc,
4224 ImageSize: aFileLen,
4225 NumberOfInstances: 1, //parallel download to multiple circuit packs not supported
4226 ImageInstances: []uint16{0}, //don't care for NumberOfInstances=1, but probably needed by omci-lib as in startSwDlRequest
mpagenko80622a52021-02-09 16:53:23 +00004227 }
mpagenko15ff4a52021-03-02 10:09:20 +00004228
4229 var options gopacket.SerializeOptions
4230 options.FixLengths = true
4231 buffer := gopacket.NewSerializeBuffer()
4232 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4233 if err != nil {
4234 logger.Errorw(ctx, "Cannot serialize EndSwDlRequest", log.Fields{"Err": err,
mpagenko80622a52021-02-09 16:53:23 +00004235 "device-id": oo.deviceID})
mpagenko15ff4a52021-03-02 10:09:20 +00004236 return err
mpagenko80622a52021-02-09 16:53:23 +00004237 }
mpagenko15ff4a52021-03-02 10:09:20 +00004238 outgoingPacket := buffer.Bytes()
4239
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004240 omciRxCallbackPair := CallbackPair{CbKey: tid,
4241 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko15ff4a52021-03-02 10:09:20 +00004242 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004243 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko15ff4a52021-03-02 10:09:20 +00004244 if err != nil {
4245 logger.Errorw(ctx, "Cannot send EndSwDlRequest", log.Fields{"Err": err,
4246 "device-id": oo.deviceID})
4247 return err
4248 }
4249 logger.Debug(ctx, "send EndSwDlRequest done")
mpagenko80622a52021-02-09 16:53:23 +00004250 return nil
4251}
4252
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004253// SendActivateSoftware sends ActivateSoftwareRequest
4254func (oo *OmciCC) SendActivateSoftware(ctx context.Context, timeout int, highPrio bool,
mpagenko80622a52021-02-09 16:53:23 +00004255 rxChan chan Message, aImageMeID uint16) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004256 tid := oo.GetNextTid(highPrio)
mpagenko80622a52021-02-09 16:53:23 +00004257 logger.Debugw(ctx, "send ActivateSwRequest:", log.Fields{"device-id": oo.deviceID,
4258 "SequNo": strconv.FormatInt(int64(tid), 16),
4259 "InstId": strconv.FormatInt(int64(aImageMeID), 16)})
4260
4261 omciLayer := &omci.OMCI{
4262 TransactionID: tid,
4263 MessageType: omci.ActivateSoftwareRequestType,
4264 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4265 // Length: 0x28, // Optional, defaults to 40 octets
4266 }
4267 request := &omci.ActivateSoftwareRequest{
4268 MeBasePacket: omci.MeBasePacket{
4269 EntityClass: me.SoftwareImageClassID,
4270 EntityInstance: aImageMeID, //inactive image
4271 },
4272 ActivateFlags: 0, //unconditionally reset as the only relevant option here (regardless of VOIP)
4273 }
4274
4275 var options gopacket.SerializeOptions
4276 options.FixLengths = true
4277 buffer := gopacket.NewSerializeBuffer()
4278 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4279 if err != nil {
4280 logger.Errorw(ctx, "Cannot serialize ActivateSwRequest", log.Fields{"Err": err,
4281 "device-id": oo.deviceID})
4282 return err
4283 }
4284 outgoingPacket := buffer.Bytes()
4285
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004286 omciRxCallbackPair := CallbackPair{CbKey: tid,
4287 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko80622a52021-02-09 16:53:23 +00004288 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004289 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko80622a52021-02-09 16:53:23 +00004290 if err != nil {
4291 logger.Errorw(ctx, "Cannot send ActivateSwRequest", log.Fields{"Err": err,
4292 "device-id": oo.deviceID})
4293 return err
4294 }
4295 logger.Debug(ctx, "send ActivateSwRequest done")
mpagenko15ff4a52021-03-02 10:09:20 +00004296 return nil
4297}
mpagenko80622a52021-02-09 16:53:23 +00004298
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004299// SendCommitSoftware sends CommitSoftwareRequest
4300func (oo *OmciCC) SendCommitSoftware(ctx context.Context, timeout int, highPrio bool,
mpagenko15ff4a52021-03-02 10:09:20 +00004301 rxChan chan Message, aImageMeID uint16) error {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004302 tid := oo.GetNextTid(highPrio)
mpagenko15ff4a52021-03-02 10:09:20 +00004303 logger.Debugw(ctx, "send CommitSwRequest:", log.Fields{"device-id": oo.deviceID,
4304 "SequNo": strconv.FormatInt(int64(tid), 16),
4305 "InstId": strconv.FormatInt(int64(aImageMeID), 16)})
4306
4307 omciLayer := &omci.OMCI{
mpagenko80622a52021-02-09 16:53:23 +00004308 TransactionID: tid,
mpagenko15ff4a52021-03-02 10:09:20 +00004309 MessageType: omci.CommitSoftwareRequestType,
mpagenko80622a52021-02-09 16:53:23 +00004310 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4311 // Length: 0x28, // Optional, defaults to 40 octets
4312 }
mpagenko15ff4a52021-03-02 10:09:20 +00004313 request := &omci.CommitSoftwareRequest{
mpagenko80622a52021-02-09 16:53:23 +00004314 MeBasePacket: omci.MeBasePacket{
4315 EntityClass: me.SoftwareImageClassID,
4316 EntityInstance: aImageMeID, //inactive image
4317 },
mpagenko80622a52021-02-09 16:53:23 +00004318 }
mpagenko15ff4a52021-03-02 10:09:20 +00004319
4320 var options gopacket.SerializeOptions
4321 options.FixLengths = true
4322 buffer := gopacket.NewSerializeBuffer()
4323 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4324 if err != nil {
4325 logger.Errorw(ctx, "Cannot serialize CommitSwRequest", log.Fields{"Err": err,
mpagenko80622a52021-02-09 16:53:23 +00004326 "device-id": oo.deviceID})
mpagenko15ff4a52021-03-02 10:09:20 +00004327 return err
mpagenko80622a52021-02-09 16:53:23 +00004328 }
mpagenko15ff4a52021-03-02 10:09:20 +00004329 outgoingPacket := buffer.Bytes()
4330
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004331 omciRxCallbackPair := CallbackPair{CbKey: tid,
4332 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
mpagenko15ff4a52021-03-02 10:09:20 +00004333 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004334 err = oo.Send(ctx, outgoingPacket, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
mpagenko15ff4a52021-03-02 10:09:20 +00004335 if err != nil {
4336 logger.Errorw(ctx, "Cannot send CommitSwRequest", log.Fields{"Err": err,
4337 "device-id": oo.deviceID})
4338 return err
4339 }
4340 logger.Debug(ctx, "send CommitSwRequest done")
mpagenko80622a52021-02-09 16:53:23 +00004341 return nil
4342}
4343
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004344//SendSelfTestReq sends TestRequest
4345func (oo *OmciCC) SendSelfTestReq(ctx context.Context, classID me.ClassID, instdID uint16, timeout int, highPrio bool, rxChan chan Message) error {
4346 tid := oo.GetNextTid(highPrio)
Girish Gowdra6afb56a2021-04-27 17:47:57 -07004347 logger.Debugw(ctx, "send self test request:", log.Fields{"device-id": oo.deviceID,
4348 "SequNo": strconv.FormatInt(int64(tid), 16),
4349 "InstId": strconv.FormatInt(int64(instdID), 16)})
4350 omciLayer := &omci.OMCI{
4351 TransactionID: tid,
4352 MessageType: omci.TestRequestType,
4353 // DeviceIdentifier: omci.BaselineIdent, // Optional, defaults to Baseline
4354 // Length: 0x28, // Optional, defaults to 40 octets
4355 }
4356
4357 var request *omci.OpticalLineSupervisionTestRequest
4358 switch classID {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004359 case me.AniGClassID:
Girish Gowdra6afb56a2021-04-27 17:47:57 -07004360 request = &omci.OpticalLineSupervisionTestRequest{
4361 MeBasePacket: omci.MeBasePacket{
4362 EntityClass: classID,
4363 EntityInstance: instdID,
4364 },
4365 SelectTest: uint8(7), // self test
4366 GeneralPurposeBuffer: uint16(0),
4367 VendorSpecificParameters: uint16(0),
4368 }
4369 default:
4370 logger.Errorw(ctx, "unsupported class id for self test request", log.Fields{"device-id": oo.deviceID, "classID": classID})
4371 return fmt.Errorf("unsupported-class-id-for-self-test-request-%v", classID)
4372 }
4373 // Test serialization back to former string
4374 var options gopacket.SerializeOptions
4375 options.FixLengths = true
4376
4377 buffer := gopacket.NewSerializeBuffer()
4378 err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
4379 if err != nil {
4380 logger.Errorw(ctx, "Cannot serialize self test request", log.Fields{"Err": err,
4381 "device-id": oo.deviceID})
4382 return err
4383 }
4384 outgoingPacket := buffer.Bytes()
4385
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004386 omciRxCallbackPair := CallbackPair{CbKey: tid,
4387 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Girish Gowdra6afb56a2021-04-27 17:47:57 -07004388 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004389 err = oo.Send(ctx, outgoingPacket, timeout, 0, highPrio, omciRxCallbackPair)
Girish Gowdra6afb56a2021-04-27 17:47:57 -07004390 if err != nil {
4391 logger.Errorw(ctx, "Cannot send self test request", log.Fields{"Err": err,
4392 "device-id": oo.deviceID})
4393 return err
4394 }
4395 logger.Debug(ctx, "send self test request done")
4396 return nil
4397}
4398
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004399//nolint: gocyclo
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004400func isSuccessfulResponseWithMibDataSync(omciMsg *omci.OMCI, packet *gp.Packet) bool {
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +00004401 for _, v := range responsesWithMibDataSync {
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004402 if v == omciMsg.MessageType {
Girish Gowdra6afb56a2021-04-27 17:47:57 -07004403 nextLayer, _ := omci.MsgTypeToNextLayer(v, false)
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004404 msgLayer := (*packet).Layer(nextLayer)
4405 switch nextLayer {
4406 case omci.LayerTypeCreateResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004407 if resp := msgLayer.(*omci.CreateResponse); resp != nil {
4408 if resp.Result == me.Success {
4409 return true
4410 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004411 }
4412 case omci.LayerTypeDeleteResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004413 if resp := msgLayer.(*omci.DeleteResponse); resp != nil {
4414 if resp.Result == me.Success {
4415 return true
4416 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004417 }
4418 case omci.LayerTypeSetResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004419 if resp := msgLayer.(*omci.SetResponse); resp != nil {
4420 if resp.Result == me.Success {
4421 return true
4422 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004423 }
4424 case omci.LayerTypeStartSoftwareDownloadResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004425 if resp := msgLayer.(*omci.StartSoftwareDownloadResponse); resp != nil {
4426 if resp.Result == me.Success {
4427 return true
4428 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004429 }
4430 case omci.LayerTypeEndSoftwareDownloadResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004431 if resp := msgLayer.(*omci.EndSoftwareDownloadResponse); resp != nil {
4432 if resp.Result == me.Success {
4433 return true
4434 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004435 }
4436 case omci.LayerTypeActivateSoftwareResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004437 if resp := msgLayer.(*omci.ActivateSoftwareResponse); resp != nil {
4438 if resp.Result == me.Success {
4439 return true
4440 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004441 }
4442 case omci.LayerTypeCommitSoftwareResponse:
Holger Hildebrandt8680ca32021-05-19 10:30:53 +00004443 if resp := msgLayer.(*omci.CommitSoftwareResponse); resp != nil {
4444 if resp.Result == me.Success {
4445 return true
4446 }
Holger Hildebrandt3124e302021-03-23 12:47:03 +00004447 }
4448 }
Holger Hildebrandt0bd45f82021-01-11 13:29:37 +00004449 }
4450 }
4451 return false
4452}
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004453
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004454func (oo *OmciCC) processRequestMonitoring(ctx context.Context, aOmciTxRequest OmciTransferStructure) {
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004455 timeout := aOmciTxRequest.timeout
mpagenkoc26d4c02021-05-06 14:27:57 +00004456 if timeout == 0 {
4457 //timeout 0 indicates that no response is expected - fire and forget
Holger Hildebrandt34555512021-10-01 16:26:59 +00004458 // enqueue
4459 if aOmciTxRequest.highPrio {
4460 oo.mutexHighPrioTxQueue.Lock()
4461 oo.highPrioTxQueue.PushBack(aOmciTxRequest)
4462 oo.mutexHighPrioTxQueue.Unlock()
4463 } else {
4464 oo.mutexLowPrioTxQueue.Lock()
4465 oo.lowPrioTxQueue.PushBack(aOmciTxRequest)
4466 oo.mutexLowPrioTxQueue.Unlock()
4467 }
4468 go oo.sendQueuedRequests(ctx)
mpagenkoc26d4c02021-05-06 14:27:57 +00004469 } else {
mpagenko7455fd42021-06-10 16:25:55 +00004470 //the supervised sending with waiting on the response (based on TID) is called in background
4471 // to avoid blocking of the sender for the complete OMCI handshake procedure
4472 // to stay consistent with the processing tested so far, sending of next messages of the same control procedure
4473 // is ensured by the according control instances (FSM's etc.) (by waiting for the respective responses there)
4474 go oo.sendWithRxSupervision(ctx, aOmciTxRequest, timeout)
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004475 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004476}
4477
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004478func (oo *OmciCC) sendWithRxSupervision(ctx context.Context, aOmciTxRequest OmciTransferStructure, aTimeout int) {
mpagenko7455fd42021-06-10 16:25:55 +00004479 chSuccess := make(chan bool)
4480 aOmciTxRequest.chSuccess = chSuccess
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004481 tid := aOmciTxRequest.cbPair.CbKey
mpagenko7455fd42021-06-10 16:25:55 +00004482 oo.mutexMonReq.Lock()
4483 oo.monitoredRequests[tid] = aOmciTxRequest
4484 oo.mutexMonReq.Unlock()
4485
4486 retries := aOmciTxRequest.retries
4487 retryCounter := 0
4488loop:
4489 for retryCounter <= retries {
Holger Hildebrandt34555512021-10-01 16:26:59 +00004490 // enqueue
4491 if aOmciTxRequest.highPrio {
4492 oo.mutexHighPrioTxQueue.Lock()
4493 oo.highPrioTxQueue.PushBack(aOmciTxRequest)
4494 oo.mutexHighPrioTxQueue.Unlock()
4495 } else {
4496 oo.mutexLowPrioTxQueue.Lock()
4497 oo.lowPrioTxQueue.PushBack(aOmciTxRequest)
4498 oo.mutexLowPrioTxQueue.Unlock()
4499 }
4500 go oo.sendQueuedRequests(ctx)
mpagenko7455fd42021-06-10 16:25:55 +00004501
4502 select {
4503 case success := <-chSuccess:
4504 if success {
4505 logger.Debugw(ctx, "reqMon: response received in time",
4506 log.Fields{"tid": tid, "device-id": oo.deviceID})
4507 } else {
4508 logger.Debugw(ctx, "reqMon: wait for response aborted",
4509 log.Fields{"tid": tid, "device-id": oo.deviceID})
4510 }
4511 break loop
4512 case <-time.After(time.Duration(aTimeout) * time.Second):
4513 if retryCounter == retries {
4514 logger.Errorw(ctx, "reqMon: timeout waiting for response - no of max retries reached!",
4515 log.Fields{"tid": tid, "retries": retryCounter, "device-id": oo.deviceID})
4516 break loop
4517 } else {
4518 logger.Infow(ctx, "reqMon: timeout waiting for response - retry",
4519 log.Fields{"tid": tid, "retries": retryCounter, "device-id": oo.deviceID})
4520 }
4521 }
4522 retryCounter++
4523 }
4524 oo.mutexMonReq.Lock()
4525 delete(oo.monitoredRequests, tid)
4526 oo.mutexMonReq.Unlock()
4527}
4528
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004529//CancelRequestMonitoring terminates monitoring of outstanding omci requests
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004530func (oo *OmciCC) CancelRequestMonitoring(ctx context.Context) {
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004531 oo.mutexMonReq.RLock()
4532 for k := range oo.monitoredRequests {
mpagenko8cd1bf72021-06-22 10:11:19 +00004533 //implement non-blocking channel send to avoid blocking on mutexMonReq later
4534 select {
4535 case oo.monitoredRequests[k].chSuccess <- false:
4536 default:
4537 logger.Debugw(ctx, "cancel not send on omciRespChannel (no receiver)", log.Fields{
4538 "index": k, "device-id": oo.deviceID})
4539 }
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004540 }
4541 oo.mutexMonReq.RUnlock()
4542}
4543
4544//GetMaxOmciTimeoutWithRetries provides a timeout value greater than the maximum
4545//time consumed for retry processing of a particular OMCI-request
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004546func (oo *OmciCC) GetMaxOmciTimeoutWithRetries() time.Duration {
4547 return time.Duration((CDefaultRetries+1)*oo.pBaseDeviceHandler.GetOmciTimeout() + 1)
Holger Hildebrandt366ef192021-05-05 11:07:44 +00004548}
Himani Chawla43f95ff2021-06-03 00:24:12 +05304549
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004550// SendCreateOrDeleteEthernetFrameExtendedPMME deletes EthernetFrameExtendedPm ME instance
4551func (oo *OmciCC) SendCreateOrDeleteEthernetFrameExtendedPMME(ctx context.Context, timeout int, highPrio bool,
Himani Chawla43f95ff2021-06-03 00:24:12 +05304552 upstream bool, create bool, rxChan chan Message, entityID uint16, classID me.ClassID, controlBlock []uint16) (*me.ManagedEntity, error) {
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004553 tid := oo.GetNextTid(highPrio)
Himani Chawla43f95ff2021-06-03 00:24:12 +05304554 logger.Debugw(ctx, "send-ethernet-frame-extended-pm-me-msg:", log.Fields{"device-id": oo.deviceID,
4555 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create, "upstream": upstream})
4556
4557 meParam := me.ParamData{EntityID: entityID,
4558 Attributes: me.AttributeValueMap{"ControlBlock": controlBlock},
4559 }
4560 var meInstance *me.ManagedEntity
4561 var omciErr me.OmciErrors
4562 if classID == me.EthernetFrameExtendedPmClassID {
4563 meInstance, omciErr = me.NewEthernetFrameExtendedPm(meParam)
4564 } else {
4565 meInstance, omciErr = me.NewEthernetFrameExtendedPm64Bit(meParam)
4566 }
4567
4568 if omciErr.GetError() == nil {
4569 var omciLayer *omci.OMCI
4570 var msgLayer gopacket.SerializableLayer
4571 var err error
4572 if create {
mpagenko836a1fd2021-11-01 16:12:42 +00004573 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.CreateRequestType, oframe.TransactionID(tid),
4574 oframe.AddDefaults(true))
Himani Chawla43f95ff2021-06-03 00:24:12 +05304575 } else {
mpagenko836a1fd2021-11-01 16:12:42 +00004576 omciLayer, msgLayer, err = oframe.EncodeFrame(meInstance, omci.DeleteRequestType, oframe.TransactionID(tid),
4577 oframe.AddDefaults(true))
Himani Chawla43f95ff2021-06-03 00:24:12 +05304578 }
4579 if err != nil {
4580 logger.Errorw(ctx, "cannot-encode-ethernet-frame-extended-pm-me",
4581 log.Fields{"err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4582 return nil, err
4583 }
4584
4585 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
4586 if err != nil {
4587 logger.Errorw(ctx, "cannot-serialize-ethernet-frame-extended-pm-me",
4588 log.Fields{"err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4589 return nil, err
4590 }
4591
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004592 omciRxCallbackPair := CallbackPair{CbKey: tid,
4593 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
Himani Chawla43f95ff2021-06-03 00:24:12 +05304594 }
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004595 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
Himani Chawla43f95ff2021-06-03 00:24:12 +05304596 if err != nil {
4597 logger.Errorw(ctx, "Cannot send ethernet-frame-extended-pm-me",
4598 log.Fields{"Err": err, "device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4599 return nil, err
4600 }
4601 logger.Debugw(ctx, "send-ethernet-frame-extended-pm-me-done",
4602 log.Fields{"device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4603 return meInstance, nil
4604 }
4605 logger.Errorw(ctx, "cannot-generate-ethernet-frame-extended-pm-me-instance",
4606 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "upstream": upstream, "create": create, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4607 return nil, omciErr.GetError()
4608}
Holger Hildebrandt4b5e73f2021-08-19 06:51:21 +00004609
4610// RLockMutexMonReq lock read access to monitoredRequests
4611func (oo *OmciCC) RLockMutexMonReq() {
4612 oo.mutexMonReq.RLock()
4613}
4614
4615// RUnlockMutexMonReq unlock read access to monitoredRequests
4616func (oo *OmciCC) RUnlockMutexMonReq() {
4617 oo.mutexMonReq.RUnlock()
4618}
4619
4620// GetMonitoredRequest get OmciTransferStructure for an omciTransID
4621func (oo *OmciCC) GetMonitoredRequest(omciTransID uint16) (value OmciTransferStructure, exist bool) {
4622 value, exist = oo.monitoredRequests[omciTransID]
4623 return value, exist
4624}
4625
4626// SetChMonitoredRequest sets chSuccess to indicate whether response was received or not
4627func (oo *OmciCC) SetChMonitoredRequest(omciTransID uint16, chVal bool) {
4628 oo.monitoredRequests[omciTransID].chSuccess <- chVal
4629}
Himani Chawlaee10b542021-09-20 16:46:40 +05304630
4631// SendSetEthernetFrameExtendedPMME sends the set request for ethernet frame extended type me
4632func (oo *OmciCC) SendSetEthernetFrameExtendedPMME(ctx context.Context, timeout int, highPrio bool,
4633 rxChan chan Message, entityID uint16, classID me.ClassID, controlBlock []uint16) (*me.ManagedEntity, error) {
4634 tid := oo.GetNextTid(highPrio)
4635 logger.Debugw(ctx, "send-set-ethernet-frame-extended-pm-me-control-block:", log.Fields{"device-id": oo.deviceID,
4636 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16)})
4637
4638 meParams := me.ParamData{EntityID: entityID,
4639 Attributes: me.AttributeValueMap{"ControlBlock": controlBlock},
4640 }
4641 var meInstance *me.ManagedEntity
4642 var omciErr me.OmciErrors
4643 if classID == me.EthernetFrameExtendedPmClassID {
4644 meInstance, omciErr = me.NewEthernetFrameExtendedPm(meParams)
4645 } else {
4646 meInstance, omciErr = me.NewEthernetFrameExtendedPm64Bit(meParams)
4647 }
4648
4649 if omciErr.GetError() == nil {
mpagenko836a1fd2021-11-01 16:12:42 +00004650 omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.SetRequestType, oframe.TransactionID(tid))
Himani Chawlaee10b542021-09-20 16:46:40 +05304651 if err != nil {
4652 logger.Errorw(ctx, "cannot-encode-ethernet-frame-extended-pm-me",
4653 log.Fields{"err": err, "device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4654 return nil, err
4655 }
4656 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
4657 if err != nil {
4658 logger.Errorw(ctx, "cannot-serialize-ethernet-frame-extended-pm-me-set-msg",
4659 log.Fields{"err": err, "device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4660 return nil, err
4661 }
4662 omciRxCallbackPair := CallbackPair{
4663 CbKey: tid,
4664 CbEntry: CallbackPairEntry{rxChan, oo.receiveOmciResponse, true},
4665 }
4666 err = oo.Send(ctx, pkt, timeout, CDefaultRetries, highPrio, omciRxCallbackPair)
4667 if err != nil {
4668 logger.Errorw(ctx, "Cannot send ethernet-frame-extended-pm-me",
4669 log.Fields{"Err": err, "device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4670 return nil, err
4671 }
4672 logger.Debugw(ctx, "send-ethernet-frame-extended-pm-me-set-msg-done",
4673 log.Fields{"device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4674 return meInstance, nil
4675 }
4676 logger.Errorw(ctx, "cannot-generate-ethernet-frame-extended-pm-me-instance",
4677 log.Fields{"Err": omciErr.GetError(), "device-id": oo.deviceID, "inst-id": strconv.FormatInt(int64(entityID), 16)})
4678 return nil, omciErr.GetError()
4679}