blob: e9d8264f44cb62d4524f0127e2cfd2797f1eeb0f [file] [log] [blame]
Holger Hildebrandtfa074992020-03-27 15:42:06 +00001/*
2 * Copyright 2020-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +000017//Package adaptercoreonu provides the utility for onu devices, flows and statistics
18package adaptercoreonu
Holger Hildebrandtfa074992020-03-27 15:42:06 +000019
20import (
21 "container/list"
22 "context"
23 "encoding/binary"
24 "encoding/hex"
25 "errors"
Andrea Campanella6515c582020-10-05 11:25:00 +020026 "fmt"
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000027 "strconv"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000028 "sync"
mpagenkodff5dda2020-08-28 11:52:01 +000029
Holger Hildebrandtfa074992020-03-27 15:42:06 +000030 //"time"
31
32 "github.com/google/gopacket"
33 // TODO!!! Some references could be resolved auto, but some need specific context ....
34 gp "github.com/google/gopacket"
35
36 "github.com/opencord/omci-lib-go"
37 me "github.com/opencord/omci-lib-go/generated"
dbainbri4d3a0dc2020-12-02 00:33:42 +000038 "github.com/opencord/voltha-lib-go/v4/pkg/adapters/adapterif"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000039
dbainbri4d3a0dc2020-12-02 00:33:42 +000040 //"github.com/opencord/voltha-lib-go/v4/pkg/kafka"
41 "github.com/opencord/voltha-lib-go/v4/pkg/log"
42 ic "github.com/opencord/voltha-protos/v4/go/inter_container"
43 //"github.com/opencord/voltha-protos/v4/go/openflow_13"
44 //"github.com/opencord/voltha-protos/v4/go/voltha"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000045)
46
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000047// ### OMCI related definitions - retrieved from Python adapter code/trace ####
Himani Chawla6d2ae152020-09-02 13:11:20 +053048
49//ConstDefaultOmciTimeout - Default OMCI Timeout
Holger Hildebrandtfa074992020-03-27 15:42:06 +000050const ConstDefaultOmciTimeout = 10 // ( 3 ?) Seconds
51
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000052const galEthernetEID = uint16(1)
53const maxGemPayloadSize = uint16(48)
54const connectivityModeValue = uint8(5)
Himani Chawla4d908332020-08-31 12:30:20 +053055
56//const defaultTPID = uint16(0x8100)
57//const broadComDefaultVID = uint16(4091)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000058const macBridgeServiceProfileEID = uint16(0x201) // TODO: most all these need better definition or tuning
59const ieeeMapperServiceProfileEID = uint16(0x8001)
60const macBridgePortAniEID = uint16(0x2102)
61
mpagenko8b07c1b2020-11-26 10:36:31 +000062const unusedTcontAllocID = uint16(0xFFFF) //common unused AllocId for G.984 and G.987 systems
63
Holger Hildebrandtb5ea2362021-01-26 14:51:26 +000064const cOmciBaseMessageTrailerLen = 40
65
66// tOmciReceiveError - enum type for detected problems/errors in the received OMCI message (format)
67type tOmciReceiveError uint8
68
69const (
70 // cOmciMessageReceiveNoError - default start state
71 cOmciMessageReceiveNoError tOmciReceiveError = iota
72 // Error indication wrong trailer length within the message
73 cOmciMessageReceiveErrorTrailerLen
74 // Error indication missing trailer within the message
75 cOmciMessageReceiveErrorMissTrailer
76)
77
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +000078// ### OMCI related definitions - end
79
Himani Chawla6d2ae152020-09-02 13:11:20 +053080//callbackPairEntry to be used for OMCI send/receive correlation
81type callbackPairEntry struct {
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000082 cbRespChannel chan Message
dbainbri4d3a0dc2020-12-02 00:33:42 +000083 cbFunction func(context.Context, *omci.OMCI, *gp.Packet, chan Message) error
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000084}
85
Himani Chawla6d2ae152020-09-02 13:11:20 +053086//callbackPair to be used for ReceiveCallback init
87type callbackPair struct {
Holger Hildebrandtccd390c2020-05-29 13:49:04 +000088 cbKey uint16
Himani Chawla6d2ae152020-09-02 13:11:20 +053089 cbEntry callbackPairEntry
Holger Hildebrandtfa074992020-03-27 15:42:06 +000090}
91
92type omciTransferStructure struct {
93 txFrame []byte
94 timeout int
95 retry int
96 highPrio bool
97}
98
Himani Chawla6d2ae152020-09-02 13:11:20 +053099//omciCC structure holds information needed for OMCI communication (to/from OLT Adapter)
100type omciCC struct {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000101 enabled bool
102 pOnuDeviceEntry *OnuDeviceEntry
103 deviceID string
Himani Chawla6d2ae152020-09-02 13:11:20 +0530104 pBaseDeviceHandler *deviceHandler
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000105 coreProxy adapterif.CoreProxy
106 adapterProxy adapterif.AdapterProxy
107 supportExtMsg bool
Holger Hildebrandtb5ea2362021-01-26 14:51:26 +0000108 rxOmciFrameError tOmciReceiveError
109
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000110 txFrames, txOnuFrames uint32
111 rxFrames, rxOnuFrames, rxOnuDiscards uint32
112
113 // OMCI params
114 mutexTid sync.Mutex
115 tid uint16
116 mutexHpTid sync.Mutex
117 hpTid uint16
118 uploadSequNo uint16
119 uploadNoOfCmds uint16
120
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000121 mutexTxQueue sync.Mutex
122 txQueue *list.List
123 mutexRxSchedMap sync.Mutex
Himani Chawla6d2ae152020-09-02 13:11:20 +0530124 rxSchedulerMap map[uint16]callbackPairEntry
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000125 pLastTxMeInstance *me.ManagedEntity
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000126}
127
Himani Chawla6d2ae152020-09-02 13:11:20 +0530128//newOmciCC constructor returns a new instance of a OmciCC
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000129//mib_db (as well as not inluded alarm_db not really used in this code? VERIFY!!)
Himani Chawla6d2ae152020-09-02 13:11:20 +0530130func newOmciCC(ctx context.Context, onuDeviceEntry *OnuDeviceEntry,
131 deviceID string, deviceHandler *deviceHandler,
132 coreProxy adapterif.CoreProxy, adapterProxy adapterif.AdapterProxy) *omciCC {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000133 logger.Debugw(ctx, "init-omciCC", log.Fields{"device-id": deviceID})
Himani Chawla6d2ae152020-09-02 13:11:20 +0530134 var omciCC omciCC
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000135 omciCC.enabled = false
Himani Chawla4d908332020-08-31 12:30:20 +0530136 omciCC.pOnuDeviceEntry = onuDeviceEntry
137 omciCC.deviceID = deviceID
138 omciCC.pBaseDeviceHandler = deviceHandler
139 omciCC.coreProxy = coreProxy
140 omciCC.adapterProxy = adapterProxy
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000141 omciCC.supportExtMsg = false
Holger Hildebrandtb5ea2362021-01-26 14:51:26 +0000142 omciCC.rxOmciFrameError = cOmciMessageReceiveNoError
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000143 omciCC.txFrames = 0
144 omciCC.txOnuFrames = 0
145 omciCC.rxFrames = 0
146 omciCC.rxOnuFrames = 0
147 omciCC.rxOnuDiscards = 0
148 omciCC.tid = 0x1
149 omciCC.hpTid = 0x8000
150 omciCC.uploadSequNo = 0
151 omciCC.uploadNoOfCmds = 0
152
153 omciCC.txQueue = list.New()
Himani Chawla6d2ae152020-09-02 13:11:20 +0530154 omciCC.rxSchedulerMap = make(map[uint16]callbackPairEntry)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000155
156 return &omciCC
157}
158
mpagenko900ee4b2020-10-12 11:56:34 +0000159//stop stops/resets the omciCC
160func (oo *omciCC) stop(ctx context.Context) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000161 logger.Debugw(ctx, "omciCC-stopping", log.Fields{"device-id": oo.deviceID})
mpagenko900ee4b2020-10-12 11:56:34 +0000162 //reseting all internal data, which might also be helpful for discarding any lingering tx/rx requests
163 oo.mutexTxQueue.Lock()
164 oo.txQueue.Init() // clear the tx queue
165 oo.mutexTxQueue.Unlock()
166 oo.mutexRxSchedMap.Lock()
167 for k := range oo.rxSchedulerMap {
168 delete(oo.rxSchedulerMap, k) //clear the scheduler map
169 }
170 oo.mutexRxSchedMap.Unlock()
171 oo.mutexHpTid.Lock()
172 oo.hpTid = 0x8000 //reset the high prio transactionId
173 oo.mutexHpTid.Unlock()
174 oo.mutexTid.Lock()
175 oo.tid = 1 //reset the low prio transactionId
176 oo.mutexTid.Unlock()
177 //reset control values
178 oo.uploadSequNo = 0
179 oo.uploadNoOfCmds = 0
Holger Hildebrandtb5ea2362021-01-26 14:51:26 +0000180 oo.rxOmciFrameError = cOmciMessageReceiveNoError
mpagenko900ee4b2020-10-12 11:56:34 +0000181 //reset the stats counter - which might be topic of discussion ...
182 oo.txFrames = 0
183 oo.txOnuFrames = 0
184 oo.rxFrames = 0
185 oo.rxOnuFrames = 0
186 oo.rxOnuDiscards = 0
187
188 return nil
189}
190
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000191// Rx handler for omci messages
Himani Chawla6d2ae152020-09-02 13:11:20 +0530192func (oo *omciCC) receiveOnuMessage(ctx context.Context, omciMsg *omci.OMCI) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000193 logger.Debugw(ctx, "rx-onu-autonomous-message", log.Fields{"omciMsgType": omciMsg.MessageType,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000194 "payload": hex.EncodeToString(omciMsg.Payload)})
195 /*
196 msgType = rxFrame.fields["message_type"] //assumed OmciOperationsValue
197 rxOnuFrames++
198
199 switch msgType {
200 case AlarmNotification:
201 {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000202 logger.Info("Unhandled: received-onu-alarm-message")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000203 // python code was:
204 //if msg_type == EntityOperations.AlarmNotification.value:
205 // topic = OMCI_CC.event_bus_topic(self._device_id, RxEvent.Alarm_Notification)
206 // self.reactor.callLater(0, self.event_bus.publish, topic, msg)
207 //
208 return errors.New("RxAlarmNotification unimplemented")
209 }
210 case AttributeValueChange:
211 {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000212 logger.Info("Unhandled: received-attribute-value-change")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000213 // python code was:
214 //elif msg_type == EntityOperations.AttributeValueChange.value:
215 // topic = OMCI_CC.event_bus_topic(self._device_id, RxEvent.AVC_Notification)
216 // self.reactor.callLater(0, self.event_bus.publish, topic, msg)
217 //
218 return errors.New("RxAttributeValueChange unimplemented")
219 }
220 case TestResult:
221 {
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000222 logger.Info("Unhandled: received-test-result")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000223 // python code was:
224 //elif msg_type == EntityOperations.TestResult.value:
225 // topic = OMCI_CC.event_bus_topic(self._device_id, RxEvent.Test_Result)
226 // self.reactor.callLater(0, self.event_bus.publish, topic, msg)
227 //
228 return errors.New("RxTestResult unimplemented")
229 }
230 default:
231 {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000232 logger.Errorw(ctx,"rx-onu-unsupported-autonomous-message", log.Fields{"msgType": msgType})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000233 rxOnuDiscards++
234 return errors.New("RxOnuMsgType unimplemented")
235 }
236 }
237 */
Himani Chawla4d908332020-08-31 12:30:20 +0530238 return errors.New("receiveOnuMessage unimplemented")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000239}
240
241// Rx handler for onu messages
242// e.g. would call ReceiveOnuMessage() in case of TID=0 or Action=test ...
Himani Chawla6d2ae152020-09-02 13:11:20 +0530243func (oo *omciCC) receiveMessage(ctx context.Context, rxMsg []byte) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000244 //logger.Debugw(ctx,"cc-receive-omci-message", log.Fields{"RxOmciMessage-x2s": hex.EncodeToString(rxMsg)})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000245 if len(rxMsg) >= 44 { // then it should normally include the BaseFormat trailer Len
246 // NOTE: autocorrection only valid for OmciBaseFormat, which is not specifically verified here!!!
Holger Hildebrandtb5ea2362021-01-26 14:51:26 +0000247 // (an extendedFormat message could be destroyed this way!)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000248 trailerLenData := rxMsg[42:44]
249 trailerLen := binary.BigEndian.Uint16(trailerLenData)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000250 //logger.Debugw(ctx,"omci-received-trailer-len", log.Fields{"Length": trailerLen})
Holger Hildebrandtb5ea2362021-01-26 14:51:26 +0000251 if trailerLen != cOmciBaseMessageTrailerLen { // invalid base Format entry -> autocorrect
252 binary.BigEndian.PutUint16(rxMsg[42:44], cOmciBaseMessageTrailerLen)
253 if oo.rxOmciFrameError != cOmciMessageReceiveErrorTrailerLen {
254 //do just one error log, expectation is: if seen once it should appear regularly - avoid to many log entries
255 logger.Errorw(ctx, "wrong omci-message trailer length: trailer len auto-corrected",
256 log.Fields{"trailer-length": trailerLen, "device-id": oo.deviceID})
257 oo.rxOmciFrameError = cOmciMessageReceiveErrorTrailerLen
258 }
259 }
260 } else if len(rxMsg) >= cOmciBaseMessageTrailerLen { // workaround for Adtran OLT Sim, which currently does not send trailer bytes at all!
261 // NOTE: autocorrection only valid for OmciBaseFormat, which is not specifically verified here!!!
262 // (an extendedFormat message could be destroyed this way!)
263 // extend/overwrite with trailer
264 trailer := make([]byte, 8)
265 binary.BigEndian.PutUint16(trailer[2:], cOmciBaseMessageTrailerLen) //set the defined baseline length
266 rxMsg = append(rxMsg[:cOmciBaseMessageTrailerLen], trailer...)
267 if oo.rxOmciFrameError != cOmciMessageReceiveErrorMissTrailer {
268 //do just one error log, expectation is: if seen once it should appear regularly - avoid to many log entries
269 logger.Errorw(ctx, "omci-message to short to include trailer len: trailer auto-corrected (added)",
270 log.Fields{"message-length": len(rxMsg), "device-id": oo.deviceID})
271 oo.rxOmciFrameError = cOmciMessageReceiveErrorMissTrailer
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000272 }
273 } else {
Holger Hildebrandtb5ea2362021-01-26 14:51:26 +0000274 logger.Errorw(ctx, "received omci-message too small for OmciBaseFormat - abort",
275 log.Fields{"Length": len(rxMsg), "device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200276 return fmt.Errorf("rxOmciMessage too small for BaseFormat %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000277 }
278
279 packet := gopacket.NewPacket(rxMsg, omci.LayerTypeOMCI, gopacket.NoCopy)
280 if packet == nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000281 logger.Errorw(ctx, "omci-message could not be decoded", log.Fields{"device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200282 return fmt.Errorf("could not decode rxMsg as OMCI %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000283 }
284 omciLayer := packet.Layer(omci.LayerTypeOMCI)
285 if omciLayer == nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000286 logger.Errorw(ctx, "omci-message could not decode omci layer", log.Fields{"device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200287 return fmt.Errorf("could not decode omci layer %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000288 }
289 omciMsg, ok := omciLayer.(*omci.OMCI)
290 if !ok {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000291 logger.Errorw(ctx, "omci-message could not assign omci layer", log.Fields{"device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200292 return fmt.Errorf("could not assign omci layer %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000293 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000294 logger.Debugw(ctx, "omci-message-decoded:", log.Fields{"omciMsgType": omciMsg.MessageType,
mpagenko3dbcdd22020-07-22 07:38:45 +0000295 "transCorrId": strconv.FormatInt(int64(omciMsg.TransactionID), 16), "DeviceIdent": omciMsg.DeviceIdentifier})
Holger Hildebrandt2fb70892020-10-28 11:53:18 +0000296 if byte(omciMsg.MessageType)&me.AK == 0 {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000297 // Not a response
dbainbri4d3a0dc2020-12-02 00:33:42 +0000298 logger.Debug(ctx, "RxMsg is no Omci Response Message")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000299 if omciMsg.TransactionID == 0 {
Himani Chawla6d2ae152020-09-02 13:11:20 +0530300 return oo.receiveOnuMessage(ctx, omciMsg)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000301 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000302 logger.Errorw(ctx, "Unexpected TransCorrId != 0 not accepted for autonomous messages",
Andrea Campanella6515c582020-10-05 11:25:00 +0200303 log.Fields{"msgType": omciMsg.MessageType, "payload": hex.EncodeToString(omciMsg.Payload),
mpagenko8b07c1b2020-11-26 10:36:31 +0000304 "device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200305 return fmt.Errorf("autonomous Omci Message with TranSCorrId != 0 not acccepted %s", oo.deviceID)
Himani Chawla4d908332020-08-31 12:30:20 +0530306
307 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000308 //logger.Debug(ctx,"RxMsg is a Omci Response Message: try to schedule it to the requester")
Himani Chawla4d908332020-08-31 12:30:20 +0530309 oo.mutexRxSchedMap.Lock()
310 rxCallbackEntry, ok := oo.rxSchedulerMap[omciMsg.TransactionID]
311 if ok && rxCallbackEntry.cbFunction != nil {
312 //disadvantage of decoupling: error verification made difficult, but anyway the question is
313 // how to react on erroneous frame reception, maybe can simply be ignored
dbainbri4d3a0dc2020-12-02 00:33:42 +0000314 go rxCallbackEntry.cbFunction(ctx, omciMsg, &packet, rxCallbackEntry.cbRespChannel)
Holger Hildebrandtb5ea2362021-01-26 14:51:26 +0000315
Himani Chawla4d908332020-08-31 12:30:20 +0530316 // having posted the response the request is regarded as 'done'
317 delete(oo.rxSchedulerMap, omciMsg.TransactionID)
318 oo.mutexRxSchedMap.Unlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000319 } else {
Himani Chawla4d908332020-08-31 12:30:20 +0530320 oo.mutexRxSchedMap.Unlock()
dbainbri4d3a0dc2020-12-02 00:33:42 +0000321 logger.Errorw(ctx, "omci-message-response for not registered transCorrId", log.Fields{"device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200322 return fmt.Errorf("could not find registered response handler tor transCorrId %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000323 }
324
325 return nil
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000326}
327
Himani Chawla6d2ae152020-09-02 13:11:20 +0530328/*
329func (oo *omciCC) publishRxResponseFrame(ctx context.Context, txFrame []byte, rxFrame []byte) error {
Himani Chawla4d908332020-08-31 12:30:20 +0530330 return errors.New("publishRxResponseFrame unimplemented")
Himani Chawla6d2ae152020-09-02 13:11:20 +0530331 //def _publish_rx_frame(self, tx_frame, rx_frame):
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000332}
Himani Chawla6d2ae152020-09-02 13:11:20 +0530333*/
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000334
335//Queue the OMCI Frame for a transmit to the ONU via the proxy_channel
Himani Chawla6d2ae152020-09-02 13:11:20 +0530336func (oo *omciCC) send(ctx context.Context, txFrame []byte, timeout int, retry int, highPrio bool,
337 receiveCallbackPair callbackPair) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000338
dbainbri4d3a0dc2020-12-02 00:33:42 +0000339 logger.Debugw(ctx, "register-response-callback:", log.Fields{"for TansCorrId": receiveCallbackPair.cbKey})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000340 // it could be checked, if the callback keay is already registered - but simply overwrite may be acceptable ...
341 oo.mutexRxSchedMap.Lock()
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000342 oo.rxSchedulerMap[receiveCallbackPair.cbKey] = receiveCallbackPair.cbEntry
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000343 oo.mutexRxSchedMap.Unlock()
344
345 //just use a simple list for starting - might need some more effort, especially for multi source write access
346 omciTxRequest := omciTransferStructure{
347 txFrame,
348 timeout,
349 retry,
350 highPrio,
351 }
352 oo.mutexTxQueue.Lock()
353 oo.txQueue.PushBack(omciTxRequest) // enqueue
354 oo.mutexTxQueue.Unlock()
355
356 // for first test just bypass and send directly:
357 go oo.sendNextRequest(ctx)
358 return nil
359}
360
361//Pull next tx request and send it
Himani Chawla6d2ae152020-09-02 13:11:20 +0530362func (oo *omciCC) sendNextRequest(ctx context.Context) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000363 // return errors.New("sendNextRequest unimplemented")
364
365 // just try to get something transferred !!
366 // avoid accessing the txQueue from parallel send requests
367 // block parallel omci send requests at least until SendIAP is 'committed'
368 // that should be feasible for an onu instance as on OMCI anyway window size 1 is assumed
369 oo.mutexTxQueue.Lock()
mpagenkodff5dda2020-08-28 11:52:01 +0000370 defer oo.mutexTxQueue.Unlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000371 for oo.txQueue.Len() > 0 {
372 queueElement := oo.txQueue.Front() // First element
373 omciTxRequest := queueElement.Value.(omciTransferStructure)
374 /* compare olt device handler code:
375 func (dh *DeviceHandler) omciIndication(omciInd *oop.OmciIndication) {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000376 logger.Debugw(ctx,"omci indication", log.Fields{"intfID": omciInd.IntfId, "onuID": omciInd.OnuId})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000377 var deviceType string
378 var deviceID string
379 var proxyDeviceID string
380
381 onuKey := dh.formOnuKey(omciInd.IntfId, omciInd.OnuId)
382
383 if onuInCache, ok := dh.onus.Load(onuKey); !ok {
384
dbainbri4d3a0dc2020-12-02 00:33:42 +0000385 logger.Debugw(ctx,"omci indication for a device not in cache.", log.Fields{"intfID": omciInd.IntfId, "onuID": omciInd.OnuId})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000386 ponPort := IntfIDToPortNo(omciInd.GetIntfId(), voltha.Port_PON_OLT)
387 kwargs := make(map[string]interface{})
388 kwargs["onu_id"] = omciInd.OnuId
389 kwargs["parent_port_no"] = ponPort
390
dbainbri4d3a0dc2020-12-02 00:33:42 +0000391 onuDevice, err := dh.coreProxy.GetChildDevice(log.WithSpanFromContext(context.TODO(), ctx), dh.device.Id, kwargs)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000392 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000393 logger.Errorw(ctx,"onu not found", log.Fields{"intfID": omciInd.IntfId, "onuID": omciInd.OnuId, "error": err})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000394 return
395 }
396 deviceType = onuDevice.Type
397 deviceID = onuDevice.Id
398 proxyDeviceID = onuDevice.ProxyAddress.DeviceId
399 //if not exist in cache, then add to cache.
400 dh.onus.Store(onuKey, NewOnuDevice(deviceID, deviceType, onuDevice.SerialNumber, omciInd.OnuId, omciInd.IntfId, proxyDeviceID))
401 } else {
402 //found in cache
dbainbri4d3a0dc2020-12-02 00:33:42 +0000403 logger.Debugw(ctx,"omci indication for a device in cache.", log.Fields{"intfID": omciInd.IntfId, "onuID": omciInd.OnuId})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000404 deviceType = onuInCache.(*OnuDevice).deviceType
405 deviceID = onuInCache.(*OnuDevice).deviceID
406 proxyDeviceID = onuInCache.(*OnuDevice).proxyDeviceID
407 }
408 */
409 /* and compare onu_adapter py code:
410 omci_msg = InterAdapterOmciMessage(
411 message=bytes(frame),
412 proxy_address=self._proxy_address,
413 connect_status=self._device.connect_status)
414
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000415 self.logger.debug('sent-omci-msg', tid=tx_tid, omci_msg=hexlify(bytes(frame)))
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000416
417 yield self._adapter_proxy.send_inter_adapter_message(
418 msg=omci_msg,
419 type=InterAdapterMessageType.OMCI_REQUEST,
420 from_adapter=self._device.type,
421 to_adapter=self._proxy_address.device_type,
422 to_device_id=self._device_id,
423 proxy_device_id=self._proxy_address.device_id
424 )
425 */
426 device, err := oo.coreProxy.GetDevice(ctx,
427 oo.pBaseDeviceHandler.deviceID, oo.deviceID) //parent, child
428 if err != nil || device == nil {
429 /*TODO: needs to handle error scenarios */
dbainbri4d3a0dc2020-12-02 00:33:42 +0000430 logger.Errorw(ctx, "Failed to fetch device", log.Fields{"err": err, "ParentId": oo.pBaseDeviceHandler.deviceID,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000431 "ChildId": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200432 return fmt.Errorf("failed to fetch device %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000433 }
434
dbainbri4d3a0dc2020-12-02 00:33:42 +0000435 logger.Debugw(ctx, "omci-message-to-send:", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +0000436 "TxOmciMessage": hex.EncodeToString(omciTxRequest.txFrame),
437 "device-id": oo.deviceID,
438 "toDeviceType": oo.pBaseDeviceHandler.ProxyAddressType,
439 "proxyDeviceID": oo.pBaseDeviceHandler.ProxyAddressID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000440
441 omciMsg := &ic.InterAdapterOmciMessage{Message: omciTxRequest.txFrame}
dbainbri4d3a0dc2020-12-02 00:33:42 +0000442 if sendErr := oo.adapterProxy.SendInterAdapterMessage(log.WithSpanFromContext(context.Background(), ctx), omciMsg,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000443 ic.InterAdapterMessageType_OMCI_REQUEST,
Matteo Scandoloefbec272020-11-17 10:33:09 -0800444 //fromTopic,toType,toDevId, ProxyDevId
445 oo.pOnuDeviceEntry.baseDeviceHandler.pOpenOnuAc.config.Topic, oo.pBaseDeviceHandler.ProxyAddressType,
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000446 oo.deviceID, oo.pBaseDeviceHandler.ProxyAddressID, ""); sendErr != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000447 logger.Errorw(ctx, "send omci request error", log.Fields{"ChildId": oo.deviceID, "error": sendErr})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000448 return sendErr
449 }
450 oo.txQueue.Remove(queueElement) // Dequeue
451 }
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000452 return nil
453}
454
Himani Chawla6d2ae152020-09-02 13:11:20 +0530455func (oo *omciCC) getNextTid(highPriority bool) uint16 {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000456 var next uint16
457 if highPriority {
mpagenko900ee4b2020-10-12 11:56:34 +0000458 oo.mutexHpTid.Lock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000459 next = oo.hpTid
Himani Chawla4d908332020-08-31 12:30:20 +0530460 oo.hpTid++
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000461 if oo.hpTid < 0x8000 {
462 oo.hpTid = 0x8000
463 }
mpagenko900ee4b2020-10-12 11:56:34 +0000464 oo.mutexHpTid.Unlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000465 } else {
mpagenko900ee4b2020-10-12 11:56:34 +0000466 oo.mutexTid.Lock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000467 next = oo.tid
Himani Chawla4d908332020-08-31 12:30:20 +0530468 oo.tid++
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000469 if oo.tid >= 0x8000 {
470 oo.tid = 1
471 }
mpagenko900ee4b2020-10-12 11:56:34 +0000472 oo.mutexTid.Unlock()
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000473 }
474 return next
475}
476
477// ###################################################################################
478// # utility methods provided to work on OMCI messages
dbainbri4d3a0dc2020-12-02 00:33:42 +0000479func serialize(ctx context.Context, msgType omci.MessageType, request gopacket.SerializableLayer, tid uint16) ([]byte, error) {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000480 omciLayer := &omci.OMCI{
481 TransactionID: tid,
482 MessageType: msgType,
483 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000484 return serializeOmciLayer(ctx, omciLayer, request)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000485}
486
dbainbri4d3a0dc2020-12-02 00:33:42 +0000487func serializeOmciLayer(ctx context.Context, aOmciLayer *omci.OMCI, aRequest gopacket.SerializableLayer) ([]byte, error) {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000488 var options gopacket.SerializeOptions
489 options.FixLengths = true
490
491 buffer := gopacket.NewSerializeBuffer()
Himani Chawla4d908332020-08-31 12:30:20 +0530492 err := gopacket.SerializeLayers(buffer, options, aOmciLayer, aRequest)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000493 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000494 logger.Errorw(ctx, "Could not create goPacket Omci serial buffer", log.Fields{"Err": err})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000495 return nil, err
496 }
497 return buffer.Bytes(), nil
498}
499
Himani Chawla4d908332020-08-31 12:30:20 +0530500/*
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000501func hexEncode(omciPkt []byte) ([]byte, error) {
502 dst := make([]byte, hex.EncodedLen(len(omciPkt)))
503 hex.Encode(dst, omciPkt)
504 return dst, nil
505}
Himani Chawla4d908332020-08-31 12:30:20 +0530506*/
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000507
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000508//supply a response handler for omci response messages to be transferred to the requested FSM
dbainbri4d3a0dc2020-12-02 00:33:42 +0000509func (oo *omciCC) receiveOmciResponse(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet, respChan chan Message) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000510
dbainbri4d3a0dc2020-12-02 00:33:42 +0000511 logger.Debugw(ctx, "omci-message-response - transfer on omciRespChannel", log.Fields{"omciMsgType": omciMsg.MessageType,
divyadesai4d299552020-08-18 07:13:49 +0000512 "transCorrId": strconv.FormatInt(int64(omciMsg.TransactionID), 16), "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000513
514 if oo.pOnuDeviceEntry == nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000515 logger.Errorw(ctx, "Abort receiving OMCI response, DeviceEntryPointer is nil", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000516 "device-id": oo.deviceID})
Andrea Campanella6515c582020-10-05 11:25:00 +0200517 return fmt.Errorf("deviceEntryPointer is nil %s", oo.deviceID)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000518 }
519
520 // no further test on SeqNo is done here, assignment from rxScheduler is trusted
521 // MibSync responses are simply transferred via deviceEntry to MibSync, no specific analysis here
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000522 omciRespMsg := Message{
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000523 Type: OMCI,
524 Data: OmciMessage{
525 OmciMsg: omciMsg,
526 OmciPacket: packet,
527 },
528 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000529 //logger.Debugw(ctx,"Message to be sent into channel:", log.Fields{"mibSyncMsg": mibSyncMsg})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000530 respChan <- omciRespMsg
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000531
532 return nil
533}
534
Himani Chawla6d2ae152020-09-02 13:11:20 +0530535func (oo *omciCC) sendMibReset(ctx context.Context, timeout int, highPrio bool) error {
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000536
dbainbri4d3a0dc2020-12-02 00:33:42 +0000537 logger.Debugw(ctx, "send MibReset-msg to:", log.Fields{"device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000538 request := &omci.MibResetRequest{
539 MeBasePacket: omci.MeBasePacket{
540 EntityClass: me.OnuDataClassID,
541 },
542 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530543 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000544 pkt, err := serialize(ctx, omci.MibResetRequestType, request, tid)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000545 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000546 logger.Errorw(ctx, "Cannot serialize MibResetRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000547 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000548 return err
549 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530550 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000551 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530552 cbEntry: callbackPairEntry{(*oo.pOnuDeviceEntry).pMibUploadFsm.commChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000553 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530554 return oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000555}
556
Himani Chawla6d2ae152020-09-02 13:11:20 +0530557func (oo *omciCC) sendReboot(ctx context.Context, timeout int, highPrio bool, responseChannel chan Message) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000558 logger.Debugw(ctx, "send Reboot-msg to:", log.Fields{"device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300559 request := &omci.RebootRequest{
560 MeBasePacket: omci.MeBasePacket{
561 EntityClass: me.OnuGClassID,
562 },
563 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530564 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000565 pkt, err := serialize(ctx, omci.RebootRequestType, request, tid)
ozgecanetsiae11479f2020-07-06 09:44:47 +0300566 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000567 logger.Errorw(ctx, "Cannot serialize RebootRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000568 "Err": err, "device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300569 return err
570 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530571 omciRxCallbackPair := callbackPair{
ozgecanetsiae11479f2020-07-06 09:44:47 +0300572 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530573 cbEntry: callbackPairEntry{oo.pOnuDeviceEntry.omciRebootMessageReceivedChannel, oo.receiveOmciResponse},
ozgecanetsiae11479f2020-07-06 09:44:47 +0300574 }
575
Himani Chawla6d2ae152020-09-02 13:11:20 +0530576 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
ozgecanetsiae11479f2020-07-06 09:44:47 +0300577 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000578 logger.Errorw(ctx, "Cannot send RebootRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000579 "Err": err, "device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300580 return err
581 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000582 err = oo.pOnuDeviceEntry.waitForRebootResponse(ctx, responseChannel)
ozgecanetsiae11479f2020-07-06 09:44:47 +0300583 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000584 logger.Errorw(ctx, "aborting ONU Reboot!", log.Fields{
Andrea Campanella6515c582020-10-05 11:25:00 +0200585 "Err": err, "device-id": oo.deviceID})
ozgecanetsiae11479f2020-07-06 09:44:47 +0300586 return err
587 }
588 return nil
589}
590
Himani Chawla6d2ae152020-09-02 13:11:20 +0530591func (oo *omciCC) sendMibUpload(ctx context.Context, timeout int, highPrio bool) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000592 logger.Debugw(ctx, "send MibUpload-msg to:", log.Fields{"device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000593 request := &omci.MibUploadRequest{
594 MeBasePacket: omci.MeBasePacket{
595 EntityClass: me.OnuDataClassID,
596 },
597 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530598 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000599 pkt, err := serialize(ctx, omci.MibUploadRequestType, request, tid)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000600 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000601 logger.Errorw(ctx, "Cannot serialize MibUploadRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000602 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000603 return err
604 }
605 oo.uploadSequNo = 0
606 oo.uploadNoOfCmds = 0
607
Himani Chawla6d2ae152020-09-02 13:11:20 +0530608 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000609 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530610 cbEntry: callbackPairEntry{(*oo.pOnuDeviceEntry).pMibUploadFsm.commChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000611 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530612 return oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000613}
614
Himani Chawla6d2ae152020-09-02 13:11:20 +0530615func (oo *omciCC) sendMibUploadNext(ctx context.Context, timeout int, highPrio bool) error {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000616 logger.Debugw(ctx, "send MibUploadNext-msg to:", log.Fields{"device-id": oo.deviceID, "uploadSequNo": oo.uploadSequNo})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000617 request := &omci.MibUploadNextRequest{
618 MeBasePacket: omci.MeBasePacket{
619 EntityClass: me.OnuDataClassID,
620 },
621 CommandSequenceNumber: oo.uploadSequNo,
622 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530623 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000624 pkt, err := serialize(ctx, omci.MibUploadNextRequestType, request, tid)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000625 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000626 logger.Errorw(ctx, "Cannot serialize MibUploadNextRequest", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000627 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000628 return err
629 }
630 oo.uploadSequNo++
631
Himani Chawla6d2ae152020-09-02 13:11:20 +0530632 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000633 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530634 cbEntry: callbackPairEntry{(*oo.pOnuDeviceEntry).pMibUploadFsm.commChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000635 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530636 return oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000637}
638
Himani Chawla6d2ae152020-09-02 13:11:20 +0530639func (oo *omciCC) sendCreateGalEthernetProfile(ctx context.Context, timeout int, highPrio bool) *me.ManagedEntity {
640 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000641 logger.Debugw(ctx, "send GalEnetProfile-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000642 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000643
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000644 meParams := me.ParamData{
645 EntityID: galEthernetEID,
646 Attributes: me.AttributeValueMap{"MaximumGemPayloadSize": maxGemPayloadSize},
647 }
648 meInstance, omciErr := me.NewGalEthernetProfile(meParams)
649 if omciErr.GetError() == nil {
650 //all setByCreate parameters already set, no default option required ...
651 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType, omci.TransactionID(tid))
652 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000653 logger.Errorw(ctx, "Cannot encode GalEnetProfileInstance for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000654 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000655 return nil
656 }
657
dbainbri4d3a0dc2020-12-02 00:33:42 +0000658 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000659 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000660 logger.Errorw(ctx, "Cannot serialize GalEnetProfile create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000661 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000662 return nil
663 }
664
Himani Chawla6d2ae152020-09-02 13:11:20 +0530665 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000666 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530667 cbEntry: callbackPairEntry{(*oo.pOnuDeviceEntry).pMibDownloadFsm.commChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000668 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530669 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000670 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000671 logger.Errorw(ctx, "Cannot send GalEnetProfile create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000672 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000673 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000674 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000675 logger.Debug(ctx, "send GalEnetProfile-Create-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +0000676 return meInstance
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000677 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000678 logger.Errorw(ctx, "Cannot generate GalEnetProfileInstance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000679 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +0000680 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000681}
682
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000683// might be needed to extend for parameter arguments, here just for setting the ConnectivityMode!!
Himani Chawla6d2ae152020-09-02 13:11:20 +0530684func (oo *omciCC) sendSetOnu2g(ctx context.Context, timeout int, highPrio bool) *me.ManagedEntity {
685 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000686 logger.Debugw(ctx, "send ONU2-G-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000687 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000688
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000689 // ONU-G ME-ID is defined to be 0, but we could verify, if the ONU really supports the desired
690 // connectivity mode 5 (in ConnCap)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000691 // By now we just use fix values to fire - this is anyway what the python adapter does
692 // read ONU-2G from DB ???? //TODO!!!
693 meParams := me.ParamData{
694 EntityID: 0,
695 Attributes: me.AttributeValueMap{"CurrentConnectivityMode": connectivityModeValue},
696 }
697 meInstance, omciErr := me.NewOnu2G(meParams)
698 if omciErr.GetError() == nil {
699 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid))
700 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000701 logger.Errorw(ctx, "Cannot encode ONU2-G instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000702 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000703 return nil
704 }
705
dbainbri4d3a0dc2020-12-02 00:33:42 +0000706 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000707 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000708 logger.Errorw(ctx, "Cannot serialize ONU2-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000709 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000710 return nil
711 }
712
Himani Chawla6d2ae152020-09-02 13:11:20 +0530713 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000714 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530715 cbEntry: callbackPairEntry{(*oo.pOnuDeviceEntry).pMibDownloadFsm.commChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000716 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530717 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000718 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000719 logger.Errorw(ctx, "Cannot send ONU2-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000720 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000721 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000722 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000723 logger.Debug(ctx, "send ONU2-G-Set-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +0000724 return meInstance
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000725 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000726 logger.Errorw(ctx, "Cannot generate ONU2-G", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000727 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +0000728 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000729}
730
Himani Chawla6d2ae152020-09-02 13:11:20 +0530731func (oo *omciCC) sendCreateMBServiceProfile(ctx context.Context,
732 aPUniPort *onuUniPort, timeout int, highPrio bool) *me.ManagedEntity {
733 tid := oo.getNextTid(highPrio)
Himani Chawla4d908332020-08-31 12:30:20 +0530734 instID := macBridgeServiceProfileEID + uint16(aPUniPort.macBpNo)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000735 logger.Debugw(ctx, "send MBSP-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000736 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(instID), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000737
738 meParams := me.ParamData{
739 EntityID: instID,
740 Attributes: me.AttributeValueMap{
ozgecanetsiab5000ef2020-11-27 14:38:20 +0300741 "Priority": 0x8000,
742 "MaxAge": 20 * 256, //20s
743 "HelloTime": 2 * 256, //2s
744 "ForwardDelay": 15 * 256, //15s
745 "DynamicFilteringAgeingTime": 0,
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000746 },
747 }
748
749 meInstance, omciErr := me.NewMacBridgeServiceProfile(meParams)
750 if omciErr.GetError() == nil {
751 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
752 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType,
753 omci.TransactionID(tid), omci.AddDefaults(true))
754 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000755 logger.Errorw(ctx, "Cannot encode MBSP for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000756 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000757 return nil
758 }
759
dbainbri4d3a0dc2020-12-02 00:33:42 +0000760 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000761 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000762 logger.Errorw(ctx, "Cannot serialize MBSP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000763 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000764 return nil
765 }
766
Himani Chawla6d2ae152020-09-02 13:11:20 +0530767 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000768 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530769 cbEntry: callbackPairEntry{(*oo.pOnuDeviceEntry).pMibDownloadFsm.commChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000770 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530771 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000772 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000773 logger.Errorw(ctx, "Cannot send MBSP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000774 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000775 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000776 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000777 logger.Debug(ctx, "send MBSP-Create-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +0000778 return meInstance
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000779 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000780 logger.Errorw(ctx, "Cannot generate MBSP Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000781 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +0000782 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000783}
784
Himani Chawla6d2ae152020-09-02 13:11:20 +0530785func (oo *omciCC) sendCreateMBPConfigData(ctx context.Context,
786 aPUniPort *onuUniPort, timeout int, highPrio bool) *me.ManagedEntity {
787 tid := oo.getNextTid(highPrio)
Himani Chawla26e555c2020-08-31 12:30:20 +0530788 instID := macBridgePortAniEID + aPUniPort.entityID
dbainbri4d3a0dc2020-12-02 00:33:42 +0000789 logger.Debugw(ctx, "send MBPCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000790 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(instID), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000791
792 meParams := me.ParamData{
793 EntityID: instID,
794 Attributes: me.AttributeValueMap{
Himani Chawla4d908332020-08-31 12:30:20 +0530795 "BridgeIdPointer": macBridgeServiceProfileEID + uint16(aPUniPort.macBpNo),
796 "PortNum": aPUniPort.macBpNo,
797 "TpType": uint8(aPUniPort.portType),
Himani Chawla26e555c2020-08-31 12:30:20 +0530798 "TpPointer": aPUniPort.entityID,
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000799 },
800 }
801 meInstance, omciErr := me.NewMacBridgePortConfigurationData(meParams)
802 if omciErr.GetError() == nil {
803 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
804 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType,
805 omci.TransactionID(tid), omci.AddDefaults(true))
806 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000807 logger.Errorw(ctx, "Cannot encode MBPCD for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000808 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000809 return nil
810 }
811
dbainbri4d3a0dc2020-12-02 00:33:42 +0000812 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000813 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000814 logger.Errorw(ctx, "Cannot serialize MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000815 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000816 return nil
817 }
818
Himani Chawla6d2ae152020-09-02 13:11:20 +0530819 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000820 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530821 cbEntry: callbackPairEntry{(*oo.pOnuDeviceEntry).pMibDownloadFsm.commChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000822 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530823 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000824 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000825 logger.Errorw(ctx, "Cannot send MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000826 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000827 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000828 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000829 logger.Debug(ctx, "send MBPCD-Create-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +0000830 return meInstance
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000831 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000832 logger.Errorw(ctx, "Cannot generate MBPCD Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000833 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +0000834 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000835}
836
Himani Chawla6d2ae152020-09-02 13:11:20 +0530837func (oo *omciCC) sendCreateEVTOConfigData(ctx context.Context,
838 aPUniPort *onuUniPort, timeout int, highPrio bool) *me.ManagedEntity {
839 tid := oo.getNextTid(highPrio)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000840 //same entityId is used as for MBSP (see there), but just arbitrary ...
Himani Chawla4d908332020-08-31 12:30:20 +0530841 instID := macBridgeServiceProfileEID + uint16(aPUniPort.macBpNo)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000842 logger.Debugw(ctx, "send EVTOCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000843 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(instID), 16)})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000844
845 // compare python adapter code WA VOL-1311: this is not done here!
846 // (setting TPID values for the create would probably anyway be ignored by the omci lib)
847 // but perhaps we have to be aware of possible problems at get(Next) Request handling for EVTOOCD tables later ...
848 assType := uint8(2) // default AssociationType is PPTPEthUni
Himani Chawla6d2ae152020-09-02 13:11:20 +0530849 if aPUniPort.portType == uniVEIP {
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000850 assType = uint8(10) // for VEIP
851 }
852 meParams := me.ParamData{
853 EntityID: instID,
854 Attributes: me.AttributeValueMap{
855 "AssociationType": assType,
Himani Chawla26e555c2020-08-31 12:30:20 +0530856 "AssociatedMePointer": aPUniPort.entityID,
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000857 },
858 }
859 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(meParams)
860 if omciErr.GetError() == nil {
861 //all setByCreate parameters already set, no default option required ...
862 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType, omci.TransactionID(tid))
863 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000864 logger.Errorw(ctx, "Cannot encode EVTOCD for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000865 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000866 return nil
867 }
868
dbainbri4d3a0dc2020-12-02 00:33:42 +0000869 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000870 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000871 logger.Errorw(ctx, "Cannot serialize EVTOCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000872 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000873 return nil
874 }
875
Himani Chawla6d2ae152020-09-02 13:11:20 +0530876 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000877 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530878 cbEntry: callbackPairEntry{(*oo.pOnuDeviceEntry).pMibDownloadFsm.commChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000879 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530880 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000881 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000882 logger.Errorw(ctx, "Cannot send EVTOCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000883 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000884 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +0000885 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000886 logger.Debug(ctx, "send EVTOCD-Create-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +0000887 return meInstance
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000888 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000889 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000890 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +0000891 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000892}
893
Himani Chawla6d2ae152020-09-02 13:11:20 +0530894func (oo *omciCC) sendSetOnuGLS(ctx context.Context, timeout int,
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000895 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +0530896 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000897 logger.Debugw(ctx, "send ONU-G-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000898 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000899
900 // ONU-G ME-ID is defined to be 0, no need to perform a DB lookup
901 meParams := me.ParamData{
902 EntityID: 0,
903 Attributes: requestedAttributes,
904 }
905 meInstance, omciErr := me.NewOnuG(meParams)
906 if omciErr.GetError() == nil {
907 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid))
908 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000909 logger.Errorw(ctx, "Cannot encode ONU-G instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000910 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000911 return nil
912 }
913
dbainbri4d3a0dc2020-12-02 00:33:42 +0000914 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000915 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000916 logger.Errorw(ctx, "Cannot serialize ONU-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000917 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000918 return nil
919 }
920
Himani Chawla6d2ae152020-09-02 13:11:20 +0530921 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000922 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +0530923 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000924 }
Himani Chawla6d2ae152020-09-02 13:11:20 +0530925 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000926 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000927 logger.Errorw(ctx, "Cannot send ONU-G set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000928 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000929 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000930 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000931 logger.Debug(ctx, "send ONU-G-Set-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +0000932 return meInstance
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000933 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000934 logger.Errorw(ctx, "Cannot generate ONU-G", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +0000935 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +0000936 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000937}
938
Holger Hildebrandt2fb70892020-10-28 11:53:18 +0000939func (oo *omciCC) sendSetPptpEthUniLS(ctx context.Context, aInstNo uint16, timeout int,
940 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) *me.ManagedEntity {
941 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000942 logger.Debugw(ctx, "send PPTPEthUni-Set-msg:", log.Fields{"device-id": oo.deviceID,
Holger Hildebrandt2fb70892020-10-28 11:53:18 +0000943 "SequNo": strconv.FormatInt(int64(tid), 16)})
944
945 // PPTPEthUni ME-ID is taken from Mib Upload stored OnuUniPort instance (argument)
946 meParams := me.ParamData{
947 EntityID: aInstNo,
948 Attributes: requestedAttributes,
949 }
950 meInstance, omciErr := me.NewPhysicalPathTerminationPointEthernetUni(meParams)
951 if omciErr.GetError() == nil {
952 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid))
953 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000954 logger.Errorw(ctx, "Cannot encode PPTPEthUni instance for set", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +0000955 "Err": err, "device-id": oo.deviceID})
956 return nil
957 }
958
dbainbri4d3a0dc2020-12-02 00:33:42 +0000959 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandt2fb70892020-10-28 11:53:18 +0000960 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000961 logger.Errorw(ctx, "Cannot serialize PPTPEthUni-Set", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +0000962 "Err": err, "device-id": oo.deviceID})
963 return nil
964 }
965
966 omciRxCallbackPair := callbackPair{
967 cbKey: tid,
968 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
969 }
970 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
971 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +0000972 logger.Errorw(ctx, "Cannot send PPTPEthUni-Set", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +0000973 "Err": err, "device-id": oo.deviceID})
974 return nil
975 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000976 logger.Debug(ctx, "send PPTPEthUni-Set-msg done")
Holger Hildebrandt2fb70892020-10-28 11:53:18 +0000977 return meInstance
978 }
dbainbri4d3a0dc2020-12-02 00:33:42 +0000979 logger.Errorw(ctx, "Cannot generate PPTPEthUni", log.Fields{
Holger Hildebrandt2fb70892020-10-28 11:53:18 +0000980 "Err": omciErr.GetError(), "device-id": oo.deviceID})
981 return nil
982}
983
984/* UniG obsolete by now, left here in case it should be needed once again
985 UniG AdminState anyway should be ignored by ONU acc. to G988
Himani Chawla6d2ae152020-09-02 13:11:20 +0530986func (oo *omciCC) sendSetUniGLS(ctx context.Context, aInstNo uint16, timeout int,
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000987 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +0530988 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +0000989 logger.Debugw(ctx,"send UNI-G-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +0000990 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +0000991
992 // UNI-G ME-ID is taken from Mib Upload stored OnuUniPort instance (argument)
993 meParams := me.ParamData{
994 EntityID: aInstNo,
995 Attributes: requestedAttributes,
996 }
997 meInstance, omciErr := me.NewUniG(meParams)
998 if omciErr.GetError() == nil {
999 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid))
1000 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001001 logger.Errorw(ctx,"Cannot encode UNI-G instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001002 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001003 return nil
1004 }
1005
1006 pkt, err := serializeOmciLayer(omciLayer, msgLayer)
1007 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001008 logger.Errorw(ctx,"Cannot serialize UNI-G-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001009 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001010 return nil
1011 }
1012
Himani Chawla6d2ae152020-09-02 13:11:20 +05301013 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001014 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301015 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001016 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301017 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001018 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001019 logger.Errorw(ctx,"Cannot send UNIG-G-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001020 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001021 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001022 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001023 logger.Debug(ctx,"send UNI-G-Set-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001024 return meInstance
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001025 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001026 logger.Errorw(ctx,"Cannot generate UNI-G", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001027 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001028 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001029}
Holger Hildebrandt2fb70892020-10-28 11:53:18 +00001030*/
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001031
Himani Chawla6d2ae152020-09-02 13:11:20 +05301032func (oo *omciCC) sendSetVeipLS(ctx context.Context, aInstNo uint16, timeout int,
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001033 highPrio bool, requestedAttributes me.AttributeValueMap, rxChan chan Message) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301034 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001035 logger.Debugw(ctx, "send VEIP-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001036 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001037
1038 // ONU-G ME-ID is defined to be 0, no need to perform a DB lookup
1039 meParams := me.ParamData{
1040 EntityID: aInstNo,
1041 Attributes: requestedAttributes,
1042 }
1043 meInstance, omciErr := me.NewVirtualEthernetInterfacePoint(meParams)
1044 if omciErr.GetError() == nil {
1045 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid))
1046 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001047 logger.Errorw(ctx, "Cannot encode VEIP instance for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001048 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001049 return nil
1050 }
1051
dbainbri4d3a0dc2020-12-02 00:33:42 +00001052 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001053 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001054 logger.Errorw(ctx, "Cannot serialize VEIP-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001055 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001056 return nil
1057 }
1058
Himani Chawla6d2ae152020-09-02 13:11:20 +05301059 omciRxCallbackPair := callbackPair{
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001060 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301061 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001062 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301063 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001064 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001065 logger.Errorw(ctx, "Cannot send VEIP-Set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001066 "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001067 return nil
Holger Hildebrandtccd390c2020-05-29 13:49:04 +00001068 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001069 logger.Debug(ctx, "send VEIP-Set-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001070 return meInstance
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001071 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001072 logger.Errorw(ctx, "Cannot generate VEIP", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001073 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001074 return nil
Holger Hildebrandtdd23cc22020-05-19 13:32:18 +00001075}
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001076
Himani Chawla6d2ae152020-09-02 13:11:20 +05301077func (oo *omciCC) sendGetMe(ctx context.Context, classID me.ClassID, entityID uint16, requestedAttributes me.AttributeValueMap,
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001078 timeout int, highPrio bool) *me.ManagedEntity {
1079
Himani Chawla6d2ae152020-09-02 13:11:20 +05301080 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001081 logger.Debugw(ctx, "send get-request-msg", log.Fields{"classID": classID, "device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001082 "SequNo": strconv.FormatInt(int64(tid), 16)})
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001083
1084 meParams := me.ParamData{
1085 EntityID: entityID,
1086 Attributes: requestedAttributes,
1087 }
1088 meInstance, omciErr := me.LoadManagedEntityDefinition(classID, meParams)
1089 if omciErr.GetError() == nil {
Himani Chawla4d908332020-08-31 12:30:20 +05301090 meClassIDName := meInstance.GetName()
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001091 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.GetRequestType, omci.TransactionID(tid))
1092 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001093 logger.Errorf(ctx, "Cannot encode instance for get-request", log.Fields{"meClassIDName": meClassIDName, "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001094 return nil
1095 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001096 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001097 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001098 logger.Errorw(ctx, "Cannot serialize get-request", log.Fields{"meClassIDName": meClassIDName, "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001099 return nil
1100 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301101 omciRxCallbackPair := callbackPair{
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001102 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301103 cbEntry: callbackPairEntry{(*oo.pOnuDeviceEntry).pMibUploadFsm.commChan, oo.receiveOmciResponse},
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001104 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301105 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001106 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001107 logger.Errorw(ctx, "Cannot send get-request-msg", log.Fields{"meClassIDName": meClassIDName, "Err": err, "device-id": oo.deviceID})
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001108 return nil
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001109 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001110 logger.Debugw(ctx, "send get-request-msg done", log.Fields{"meClassIDName": meClassIDName, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001111 return meInstance
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001112 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001113 logger.Errorw(ctx, "Cannot generate meDefinition", log.Fields{"classID": classID, "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001114 return nil
1115}
1116
Himani Chawla6d2ae152020-09-02 13:11:20 +05301117func (oo *omciCC) sendCreateDot1PMapper(ctx context.Context, timeout int, highPrio bool,
mpagenko3dbcdd22020-07-22 07:38:45 +00001118 aInstID uint16, rxChan chan Message) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301119 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001120 logger.Debugw(ctx, "send .1pMapper-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001121 "SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(aInstID), 16)})
1122
1123 meParams := me.ParamData{
1124 EntityID: aInstID,
1125 Attributes: me.AttributeValueMap{},
1126 }
1127 meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(meParams)
1128 if omciErr.GetError() == nil {
1129 //we have to set all 'untouched' parameters to default by some additional option parameter!!
1130 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType,
1131 omci.TransactionID(tid), omci.AddDefaults(true))
1132 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001133 logger.Errorw(ctx, "Cannot encode .1pMapper for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001134 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001135 return nil
1136 }
1137
dbainbri4d3a0dc2020-12-02 00:33:42 +00001138 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001139 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001140 logger.Errorw(ctx, "Cannot serialize .1pMapper create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001141 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001142 return nil
1143 }
1144
Himani Chawla6d2ae152020-09-02 13:11:20 +05301145 omciRxCallbackPair := callbackPair{
mpagenko3dbcdd22020-07-22 07:38:45 +00001146 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301147 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
mpagenko3dbcdd22020-07-22 07:38:45 +00001148 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301149 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001150 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001151 logger.Errorw(ctx, "Cannot send .1pMapper create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001152 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001153 return nil
1154 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001155 logger.Debug(ctx, "send .1pMapper-create-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001156 return meInstance
1157 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001158 logger.Errorw(ctx, "Cannot generate .1pMapper", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001159 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001160 return nil
1161}
1162
Himani Chawla6d2ae152020-09-02 13:11:20 +05301163func (oo *omciCC) sendCreateMBPConfigDataVar(ctx context.Context, timeout int, highPrio bool,
mpagenko3dbcdd22020-07-22 07:38:45 +00001164 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301165 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001166 logger.Debugw(ctx, "send MBPCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001167 "SequNo": strconv.FormatInt(int64(tid), 16),
1168 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1169
1170 meInstance, omciErr := me.NewMacBridgePortConfigurationData(params[0])
1171 if omciErr.GetError() == nil {
1172 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
1173 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType,
1174 omci.TransactionID(tid), omci.AddDefaults(true))
1175 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001176 logger.Errorw(ctx, "Cannot encode MBPCD for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001177 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001178 return nil
1179 }
1180
dbainbri4d3a0dc2020-12-02 00:33:42 +00001181 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001182 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001183 logger.Errorw(ctx, "Cannot serialize MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001184 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001185 return nil
1186 }
1187
Himani Chawla6d2ae152020-09-02 13:11:20 +05301188 omciRxCallbackPair := callbackPair{
mpagenko3dbcdd22020-07-22 07:38:45 +00001189 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301190 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
mpagenko3dbcdd22020-07-22 07:38:45 +00001191 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301192 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001193 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001194 logger.Errorw(ctx, "Cannot send MBPCD create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001195 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001196 return nil
1197 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001198 logger.Debug(ctx, "send MBPCD-Create-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001199 return meInstance
1200 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001201 logger.Errorw(ctx, "Cannot generate MBPCD Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001202 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001203 return nil
1204}
1205
Himani Chawla6d2ae152020-09-02 13:11:20 +05301206func (oo *omciCC) sendCreateGemNCTPVar(ctx context.Context, timeout int, highPrio bool,
mpagenko3dbcdd22020-07-22 07:38:45 +00001207 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301208 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001209 logger.Debugw(ctx, "send GemNCTP-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001210 "SequNo": strconv.FormatInt(int64(tid), 16),
1211 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1212
1213 meInstance, omciErr := me.NewGemPortNetworkCtp(params[0])
1214 if omciErr.GetError() == nil {
1215 //obviously we have to set all 'untouched' parameters to default by some additional option parameter!!
1216 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType,
1217 omci.TransactionID(tid), omci.AddDefaults(true))
1218 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001219 logger.Errorw(ctx, "Cannot encode GemNCTP for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001220 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001221 return nil
1222 }
1223
dbainbri4d3a0dc2020-12-02 00:33:42 +00001224 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001225 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001226 logger.Errorw(ctx, "Cannot serialize GemNCTP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001227 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001228 return nil
1229 }
1230
Himani Chawla6d2ae152020-09-02 13:11:20 +05301231 omciRxCallbackPair := callbackPair{
mpagenko3dbcdd22020-07-22 07:38:45 +00001232 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301233 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
mpagenko3dbcdd22020-07-22 07:38:45 +00001234 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301235 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001236 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001237 logger.Errorw(ctx, "Cannot send GemNCTP create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001238 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001239 return nil
1240 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001241 logger.Debug(ctx, "send GemNCTP-Create-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001242 return meInstance
1243 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001244 logger.Errorw(ctx, "Cannot generate GemNCTP Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001245 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001246 return nil
1247}
1248
Himani Chawla6d2ae152020-09-02 13:11:20 +05301249func (oo *omciCC) sendCreateGemIWTPVar(ctx context.Context, timeout int, highPrio bool,
mpagenko3dbcdd22020-07-22 07:38:45 +00001250 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301251 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001252 logger.Debugw(ctx, "send GemIwTp-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001253 "SequNo": strconv.FormatInt(int64(tid), 16),
1254 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1255
1256 meInstance, omciErr := me.NewGemInterworkingTerminationPoint(params[0])
1257 if omciErr.GetError() == nil {
1258 //all SetByCreate Parameters (assumed to be) set here, for optimisation no 'AddDefaults'
1259 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType,
1260 omci.TransactionID(tid))
1261 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001262 logger.Errorw(ctx, "Cannot encode GemIwTp for create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001263 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001264 return nil
1265 }
1266
dbainbri4d3a0dc2020-12-02 00:33:42 +00001267 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001268 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001269 logger.Errorw(ctx, "Cannot serialize GemIwTp create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001270 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001271 return nil
1272 }
1273
Himani Chawla6d2ae152020-09-02 13:11:20 +05301274 omciRxCallbackPair := callbackPair{
mpagenko3dbcdd22020-07-22 07:38:45 +00001275 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301276 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
mpagenko3dbcdd22020-07-22 07:38:45 +00001277 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301278 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001279 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001280 logger.Errorw(ctx, "Cannot send GemIwTp create", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001281 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001282 return nil
1283 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001284 logger.Debug(ctx, "send GemIwTp-Create-msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001285 return meInstance
1286 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001287 logger.Errorw(ctx, "Cannot generate GemIwTp Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001288 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001289 return nil
1290}
1291
Himani Chawla6d2ae152020-09-02 13:11:20 +05301292func (oo *omciCC) sendSetTcontVar(ctx context.Context, timeout int, highPrio bool,
mpagenko3dbcdd22020-07-22 07:38:45 +00001293 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301294 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001295 logger.Debugw(ctx, "send TCont-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001296 "SequNo": strconv.FormatInt(int64(tid), 16),
1297 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1298
1299 meInstance, omciErr := me.NewTCont(params[0])
1300 if omciErr.GetError() == nil {
1301 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid))
1302 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001303 logger.Errorw(ctx, "Cannot encode TCont for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001304 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001305 return nil
1306 }
1307
dbainbri4d3a0dc2020-12-02 00:33:42 +00001308 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001309 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001310 logger.Errorw(ctx, "Cannot serialize TCont set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001311 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001312 return nil
1313 }
1314
Himani Chawla6d2ae152020-09-02 13:11:20 +05301315 omciRxCallbackPair := callbackPair{
mpagenko3dbcdd22020-07-22 07:38:45 +00001316 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301317 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
mpagenko3dbcdd22020-07-22 07:38:45 +00001318 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301319 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001320 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001321 logger.Errorw(ctx, "Cannot send TCont set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001322 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001323 return nil
1324 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001325 logger.Debug(ctx, "send TCont-set msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001326 return meInstance
1327 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001328 logger.Errorw(ctx, "Cannot generate TCont Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001329 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001330 return nil
1331}
1332
Himani Chawla6d2ae152020-09-02 13:11:20 +05301333func (oo *omciCC) sendSetPrioQueueVar(ctx context.Context, timeout int, highPrio bool,
mpagenko3dbcdd22020-07-22 07:38:45 +00001334 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301335 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001336 logger.Debugw(ctx, "send PrioQueue-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001337 "SequNo": strconv.FormatInt(int64(tid), 16),
1338 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1339
1340 meInstance, omciErr := me.NewPriorityQueue(params[0])
1341 if omciErr.GetError() == nil {
1342 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid))
1343 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001344 logger.Errorw(ctx, "Cannot encode PrioQueue for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001345 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001346 return nil
1347 }
1348
dbainbri4d3a0dc2020-12-02 00:33:42 +00001349 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001350 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001351 logger.Errorw(ctx, "Cannot serialize PrioQueue set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001352 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001353 return nil
1354 }
1355
Himani Chawla6d2ae152020-09-02 13:11:20 +05301356 omciRxCallbackPair := callbackPair{
mpagenko3dbcdd22020-07-22 07:38:45 +00001357 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301358 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
mpagenko3dbcdd22020-07-22 07:38:45 +00001359 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301360 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001361 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001362 logger.Errorw(ctx, "Cannot send PrioQueue set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001363 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001364 return nil
1365 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001366 logger.Debug(ctx, "send PrioQueue-set msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001367 return meInstance
1368 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001369 logger.Errorw(ctx, "Cannot generate PrioQueue Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001370 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001371 return nil
1372}
1373
Himani Chawla6d2ae152020-09-02 13:11:20 +05301374func (oo *omciCC) sendSetDot1PMapperVar(ctx context.Context, timeout int, highPrio bool,
mpagenko3dbcdd22020-07-22 07:38:45 +00001375 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301376 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001377 logger.Debugw(ctx, "send 1PMapper-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko3dbcdd22020-07-22 07:38:45 +00001378 "SequNo": strconv.FormatInt(int64(tid), 16),
1379 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1380
1381 meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(params[0])
1382 if omciErr.GetError() == nil {
1383 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid))
1384 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001385 logger.Errorw(ctx, "Cannot encode 1PMapper for set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001386 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001387 return nil
1388 }
1389
dbainbri4d3a0dc2020-12-02 00:33:42 +00001390 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko3dbcdd22020-07-22 07:38:45 +00001391 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001392 logger.Errorw(ctx, "Cannot serialize 1PMapper set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001393 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001394 return nil
1395 }
1396
Himani Chawla6d2ae152020-09-02 13:11:20 +05301397 omciRxCallbackPair := callbackPair{
mpagenko3dbcdd22020-07-22 07:38:45 +00001398 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301399 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
mpagenko3dbcdd22020-07-22 07:38:45 +00001400 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301401 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
mpagenko3dbcdd22020-07-22 07:38:45 +00001402 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001403 logger.Errorw(ctx, "Cannot send 1PMapper set", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001404 "Err": err, "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001405 return nil
1406 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001407 logger.Debug(ctx, "send 1PMapper-set msg done")
mpagenko3dbcdd22020-07-22 07:38:45 +00001408 return meInstance
1409 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001410 logger.Errorw(ctx, "Cannot generate 1PMapper Instance", log.Fields{
divyadesai4d299552020-08-18 07:13:49 +00001411 "Err": omciErr.GetError(), "device-id": oo.deviceID})
mpagenko3dbcdd22020-07-22 07:38:45 +00001412 return nil
Holger Hildebrandtc54939a2020-06-17 08:14:27 +00001413}
mpagenkodff5dda2020-08-28 11:52:01 +00001414
Himani Chawla6d2ae152020-09-02 13:11:20 +05301415func (oo *omciCC) sendCreateVtfdVar(ctx context.Context, timeout int, highPrio bool,
mpagenkodff5dda2020-08-28 11:52:01 +00001416 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301417 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001418 logger.Debugw(ctx, "send VTFD-Create-msg:", log.Fields{"device-id": oo.deviceID,
mpagenkodff5dda2020-08-28 11:52:01 +00001419 "SequNo": strconv.FormatInt(int64(tid), 16),
1420 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1421
1422 meInstance, omciErr := me.NewVlanTaggingFilterData(params[0])
1423 if omciErr.GetError() == nil {
1424 //all SetByCreate Parameters (assumed to be) set here, for optimisation no 'AddDefaults'
1425 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType,
1426 omci.TransactionID(tid))
1427 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001428 logger.Errorw(ctx, "Cannot encode VTFD for create", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001429 "Err": err, "device-id": oo.deviceID})
1430 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1431 // return (dual format) error code that can be used at caller for immediate error treatment
1432 // (relevant to all used sendXX() methods and their error conditions)
1433 return nil
1434 }
1435
dbainbri4d3a0dc2020-12-02 00:33:42 +00001436 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenkodff5dda2020-08-28 11:52:01 +00001437 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001438 logger.Errorw(ctx, "Cannot serialize VTFD create", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001439 "Err": err, "device-id": oo.deviceID})
1440 return nil
1441 }
1442
Himani Chawla6d2ae152020-09-02 13:11:20 +05301443 omciRxCallbackPair := callbackPair{
mpagenkodff5dda2020-08-28 11:52:01 +00001444 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301445 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
mpagenkodff5dda2020-08-28 11:52:01 +00001446 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301447 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
mpagenkodff5dda2020-08-28 11:52:01 +00001448 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001449 logger.Errorw(ctx, "Cannot send VTFD create", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001450 "Err": err, "device-id": oo.deviceID})
1451 return nil
1452 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001453 logger.Debug(ctx, "send VTFD-Create-msg done")
mpagenkodff5dda2020-08-28 11:52:01 +00001454 return meInstance
1455 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001456 logger.Errorw(ctx, "Cannot generate VTFD Instance", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001457 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1458 return nil
1459}
1460
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001461// nolint: unused
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001462func (oo *omciCC) sendSetVtfdVar(ctx context.Context, timeout int, highPrio bool,
1463 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
1464 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001465 logger.Debugw(ctx, "send VTFD-Set-msg:", log.Fields{"device-id": oo.deviceID,
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001466 "SequNo": strconv.FormatInt(int64(tid), 16),
1467 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1468
1469 meInstance, omciErr := me.NewVlanTaggingFilterData(params[0])
1470 if omciErr.GetError() == nil {
1471 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType,
1472 omci.TransactionID(tid))
1473 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001474 logger.Errorw(ctx, "Cannot encode VTFD for set", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001475 "Err": err, "device-id": oo.deviceID})
1476 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1477 // return (dual format) error code that can be used at caller for immediate error treatment
1478 // (relevant to all used sendXX() methods and their error conditions)
1479 return nil
1480 }
1481
dbainbri4d3a0dc2020-12-02 00:33:42 +00001482 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001483 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001484 logger.Errorw(ctx, "Cannot serialize VTFD set", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001485 "Err": err, "device-id": oo.deviceID})
1486 return nil
1487 }
1488
1489 omciRxCallbackPair := callbackPair{
1490 cbKey: tid,
1491 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1492 }
1493 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1494 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001495 logger.Errorw(ctx, "Cannot send VTFD set", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001496 "Err": err, "device-id": oo.deviceID})
1497 return nil
1498 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001499 logger.Debug(ctx, "send VTFD-Set-msg done")
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001500 return meInstance
1501 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001502 logger.Errorw(ctx, "Cannot generate VTFD Instance", log.Fields{
Holger Hildebrandt394c5522020-09-11 11:23:01 +00001503 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1504 return nil
1505}
1506
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001507func (oo *omciCC) sendCreateEvtocdVar(ctx context.Context, timeout int, highPrio bool,
1508 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
1509 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001510 logger.Debugw(ctx, "send EVTOCD-Create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001511 "SequNo": strconv.FormatInt(int64(tid), 16),
1512 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1513
1514 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(params[0])
1515 if omciErr.GetError() == nil {
1516 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType, omci.TransactionID(tid))
1517 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001518 logger.Errorw(ctx, "Cannot encode EVTOCD for create", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001519 "Err": err, "device-id": oo.deviceID})
1520 return nil
1521 }
1522
dbainbri4d3a0dc2020-12-02 00:33:42 +00001523 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001524 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001525 logger.Errorw(ctx, "Cannot serialize EVTOCD create", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001526 "Err": err, "device-id": oo.deviceID})
1527 return nil
1528 }
1529
1530 omciRxCallbackPair := callbackPair{
1531 cbKey: tid,
1532 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1533 }
1534 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1535 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001536 logger.Errorw(ctx, "Cannot send EVTOCD create", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001537 "Err": err, "device-id": oo.deviceID})
1538 return nil
1539 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001540 logger.Debug(ctx, "send EVTOCD-set msg done")
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001541 return meInstance
1542 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001543 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001544 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1545 return nil
1546}
1547
Himani Chawla6d2ae152020-09-02 13:11:20 +05301548func (oo *omciCC) sendSetEvtocdVar(ctx context.Context, timeout int, highPrio bool,
mpagenkodff5dda2020-08-28 11:52:01 +00001549 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
Himani Chawla6d2ae152020-09-02 13:11:20 +05301550 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001551 logger.Debugw(ctx, "send EVTOCD-Set-msg:", log.Fields{"device-id": oo.deviceID,
mpagenkodff5dda2020-08-28 11:52:01 +00001552 "SequNo": strconv.FormatInt(int64(tid), 16),
1553 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1554
1555 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(params[0])
1556 if omciErr.GetError() == nil {
1557 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid))
1558 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001559 logger.Errorw(ctx, "Cannot encode EVTOCD for set", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001560 "Err": err, "device-id": oo.deviceID})
1561 return nil
1562 }
1563
dbainbri4d3a0dc2020-12-02 00:33:42 +00001564 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenkodff5dda2020-08-28 11:52:01 +00001565 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001566 logger.Errorw(ctx, "Cannot serialize EVTOCD set", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001567 "Err": err, "device-id": oo.deviceID})
1568 return nil
1569 }
1570
Himani Chawla6d2ae152020-09-02 13:11:20 +05301571 omciRxCallbackPair := callbackPair{
mpagenkodff5dda2020-08-28 11:52:01 +00001572 cbKey: tid,
Himani Chawla6d2ae152020-09-02 13:11:20 +05301573 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
mpagenkodff5dda2020-08-28 11:52:01 +00001574 }
Himani Chawla6d2ae152020-09-02 13:11:20 +05301575 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
mpagenkodff5dda2020-08-28 11:52:01 +00001576 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001577 logger.Errorw(ctx, "Cannot send EVTOCD set", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001578 "Err": err, "device-id": oo.deviceID})
1579 return nil
1580 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001581 logger.Debug(ctx, "send EVTOCD-set msg done")
mpagenkodff5dda2020-08-28 11:52:01 +00001582 return meInstance
1583 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001584 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
mpagenkodff5dda2020-08-28 11:52:01 +00001585 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1586 return nil
1587}
mpagenko01e726e2020-10-23 09:45:29 +00001588
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001589func (oo *omciCC) sendDeleteEvtocd(ctx context.Context, timeout int, highPrio bool,
1590 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
1591 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001592 logger.Debugw(ctx, "send EVTOCD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001593 "SequNo": strconv.FormatInt(int64(tid), 16),
1594 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1595
1596 meInstance, omciErr := me.NewExtendedVlanTaggingOperationConfigurationData(params[0])
1597 if omciErr.GetError() == nil {
1598 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.DeleteRequestType, omci.TransactionID(tid))
1599 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001600 logger.Errorw(ctx, "Cannot encode EVTOCD for delete", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001601 "Err": err, "device-id": oo.deviceID})
1602 return nil
1603 }
1604
dbainbri4d3a0dc2020-12-02 00:33:42 +00001605 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001606 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001607 logger.Errorw(ctx, "Cannot serialize EVTOCD delete", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001608 "Err": err, "device-id": oo.deviceID})
1609 return nil
1610 }
1611
1612 omciRxCallbackPair := callbackPair{
1613 cbKey: tid,
1614 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1615 }
1616 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1617 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001618 logger.Errorw(ctx, "Cannot send EVTOCD delete", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001619 "Err": err, "device-id": oo.deviceID})
1620 return nil
1621 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001622 logger.Debug(ctx, "send EVTOCD-delete msg done")
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001623 return meInstance
1624 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001625 logger.Errorw(ctx, "Cannot generate EVTOCD Instance", log.Fields{
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001626 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1627 return nil
1628}
1629
mpagenko01e726e2020-10-23 09:45:29 +00001630func (oo *omciCC) sendDeleteVtfd(ctx context.Context, timeout int, highPrio bool,
1631 rxChan chan Message, aInstID uint16) *me.ManagedEntity {
1632 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001633 logger.Debugw(ctx, "send VTFD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko01e726e2020-10-23 09:45:29 +00001634 "SequNo": strconv.FormatInt(int64(tid), 16),
1635 "InstId": strconv.FormatInt(int64(aInstID), 16)})
1636
1637 meParams := me.ParamData{EntityID: aInstID}
1638 meInstance, omciErr := me.NewVlanTaggingFilterData(meParams)
1639 if omciErr.GetError() == nil {
1640 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.DeleteRequestType,
1641 omci.TransactionID(tid))
1642 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001643 logger.Errorw(ctx, "Cannot encode VTFD for delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00001644 "Err": err, "device-id": oo.deviceID})
1645 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1646 // return (dual format) error code that can be used at caller for immediate error treatment
1647 // (relevant to all used sendXX() methods and their error conditions)
1648 return nil
1649 }
1650
dbainbri4d3a0dc2020-12-02 00:33:42 +00001651 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko01e726e2020-10-23 09:45:29 +00001652 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001653 logger.Errorw(ctx, "Cannot serialize VTFD delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00001654 "Err": err, "device-id": oo.deviceID})
1655 return nil
1656 }
1657
1658 omciRxCallbackPair := callbackPair{
1659 cbKey: tid,
1660 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1661 }
1662 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1663 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001664 logger.Errorw(ctx, "Cannot send VTFD delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00001665 "Err": err, "device-id": oo.deviceID})
1666 return nil
1667 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001668 logger.Debug(ctx, "send VTFD-Delete-msg done")
mpagenko01e726e2020-10-23 09:45:29 +00001669 return meInstance
1670 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001671 logger.Errorw(ctx, "Cannot generate VTFD Instance for delete", log.Fields{
mpagenko01e726e2020-10-23 09:45:29 +00001672 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1673 return nil
1674}
ozgecanetsia422dbf32020-10-28 14:07:19 +03001675
mpagenko8b07c1b2020-11-26 10:36:31 +00001676func (oo *omciCC) sendDeleteGemIWTP(ctx context.Context, timeout int, highPrio bool,
1677 rxChan chan Message, aInstID uint16) *me.ManagedEntity {
1678 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001679 logger.Debugw(ctx, "send GemIwTp-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00001680 "SequNo": strconv.FormatInt(int64(tid), 16),
1681 "InstId": strconv.FormatInt(int64(aInstID), 16)})
1682
1683 meParams := me.ParamData{EntityID: aInstID}
1684 meInstance, omciErr := me.NewGemInterworkingTerminationPoint(meParams)
1685 if omciErr.GetError() == nil {
1686 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.DeleteRequestType,
1687 omci.TransactionID(tid))
1688 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001689 logger.Errorw(ctx, "Cannot encode GemIwTp for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001690 "Err": err, "device-id": oo.deviceID})
1691 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1692 // return (dual format) error code that can be used at caller for immediate error treatment
1693 // (relevant to all used sendXX() methods and their error conditions)
1694 return nil
1695 }
1696
dbainbri4d3a0dc2020-12-02 00:33:42 +00001697 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00001698 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001699 logger.Errorw(ctx, "Cannot serialize GemIwTp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001700 "Err": err, "device-id": oo.deviceID})
1701 return nil
1702 }
1703
1704 omciRxCallbackPair := callbackPair{
1705 cbKey: tid,
1706 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1707 }
1708 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1709 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001710 logger.Errorw(ctx, "Cannot send GemIwTp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001711 "Err": err, "device-id": oo.deviceID})
1712 return nil
1713 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001714 logger.Debug(ctx, "send GemIwTp-Delete-msg done")
mpagenko8b07c1b2020-11-26 10:36:31 +00001715 return meInstance
1716 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001717 logger.Errorw(ctx, "Cannot generate GemIwTp Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001718 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1719 return nil
1720}
1721
1722func (oo *omciCC) sendDeleteGemNCTP(ctx context.Context, timeout int, highPrio bool,
1723 rxChan chan Message, aInstID uint16) *me.ManagedEntity {
1724 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001725 logger.Debugw(ctx, "send GemNCtp-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00001726 "SequNo": strconv.FormatInt(int64(tid), 16),
1727 "InstId": strconv.FormatInt(int64(aInstID), 16)})
1728
1729 meParams := me.ParamData{EntityID: aInstID}
1730 meInstance, omciErr := me.NewGemPortNetworkCtp(meParams)
1731 if omciErr.GetError() == nil {
1732 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.DeleteRequestType,
1733 omci.TransactionID(tid))
1734 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001735 logger.Errorw(ctx, "Cannot encode GemNCtp for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001736 "Err": err, "device-id": oo.deviceID})
1737 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1738 // return (dual format) error code that can be used at caller for immediate error treatment
1739 // (relevant to all used sendXX() methods and their error conditions)
1740 return nil
1741 }
1742
dbainbri4d3a0dc2020-12-02 00:33:42 +00001743 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00001744 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001745 logger.Errorw(ctx, "Cannot serialize GemNCtp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001746 "Err": err, "device-id": oo.deviceID})
1747 return nil
1748 }
1749
1750 omciRxCallbackPair := callbackPair{
1751 cbKey: tid,
1752 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1753 }
1754 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1755 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001756 logger.Errorw(ctx, "Cannot send GemNCtp delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001757 "Err": err, "device-id": oo.deviceID})
1758 return nil
1759 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001760 logger.Debug(ctx, "send GemNCtp-Delete-msg done")
mpagenko8b07c1b2020-11-26 10:36:31 +00001761 return meInstance
1762 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001763 logger.Errorw(ctx, "Cannot generate GemNCtp Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001764 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1765 return nil
1766}
1767
1768func (oo *omciCC) sendDeleteDot1PMapper(ctx context.Context, timeout int, highPrio bool,
1769 rxChan chan Message, aInstID uint16) *me.ManagedEntity {
1770 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001771 logger.Debugw(ctx, "send .1pMapper-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00001772 "SequNo": strconv.FormatInt(int64(tid), 16),
1773 "InstId": strconv.FormatInt(int64(aInstID), 16)})
1774
1775 meParams := me.ParamData{EntityID: aInstID}
1776 meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(meParams)
1777 if omciErr.GetError() == nil {
1778 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.DeleteRequestType,
1779 omci.TransactionID(tid))
1780 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001781 logger.Errorw(ctx, "Cannot encode .1pMapper for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001782 "Err": err, "device-id": oo.deviceID})
1783 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1784 // return (dual format) error code that can be used at caller for immediate error treatment
1785 // (relevant to all used sendXX() methods and their error conditions)
1786 return nil
1787 }
1788
dbainbri4d3a0dc2020-12-02 00:33:42 +00001789 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00001790 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001791 logger.Errorw(ctx, "Cannot serialize .1pMapper delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001792 "Err": err, "device-id": oo.deviceID})
1793 return nil
1794 }
1795
1796 omciRxCallbackPair := callbackPair{
1797 cbKey: tid,
1798 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1799 }
1800 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1801 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001802 logger.Errorw(ctx, "Cannot send .1pMapper delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001803 "Err": err, "device-id": oo.deviceID})
1804 return nil
1805 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001806 logger.Debug(ctx, "send .1pMapper-Delete-msg done")
mpagenko8b07c1b2020-11-26 10:36:31 +00001807 return meInstance
1808 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001809 logger.Errorw(ctx, "Cannot generate .1pMapper Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001810 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1811 return nil
1812}
1813
1814func (oo *omciCC) sendDeleteMBPConfigData(ctx context.Context, timeout int, highPrio bool,
1815 rxChan chan Message, aInstID uint16) *me.ManagedEntity {
1816 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001817 logger.Debugw(ctx, "send MBPCD-Delete-msg:", log.Fields{"device-id": oo.deviceID,
mpagenko8b07c1b2020-11-26 10:36:31 +00001818 "SequNo": strconv.FormatInt(int64(tid), 16),
1819 "InstId": strconv.FormatInt(int64(aInstID), 16)})
1820
1821 meParams := me.ParamData{EntityID: aInstID}
1822 meInstance, omciErr := me.NewMacBridgePortConfigurationData(meParams)
1823 if omciErr.GetError() == nil {
1824 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.DeleteRequestType,
1825 omci.TransactionID(tid))
1826 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001827 logger.Errorw(ctx, "Cannot encode MBPCD for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001828 "Err": err, "device-id": oo.deviceID})
1829 //TODO!!: refactoring improvement requested, here as an example for [VOL-3457]:
1830 // return (dual format) error code that can be used at caller for immediate error treatment
1831 // (relevant to all used sendXX() methods and their error conditions)
1832 return nil
1833 }
1834
dbainbri4d3a0dc2020-12-02 00:33:42 +00001835 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
mpagenko8b07c1b2020-11-26 10:36:31 +00001836 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001837 logger.Errorw(ctx, "Cannot serialize MBPCD delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001838 "Err": err, "device-id": oo.deviceID})
1839 return nil
1840 }
1841
1842 omciRxCallbackPair := callbackPair{
1843 cbKey: tid,
1844 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1845 }
1846 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1847 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001848 logger.Errorw(ctx, "Cannot send MBPCD delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001849 "Err": err, "device-id": oo.deviceID})
1850 return nil
1851 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001852 logger.Debug(ctx, "send MBPCD-Delete-msg done")
mpagenko8b07c1b2020-11-26 10:36:31 +00001853 return meInstance
1854 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001855 logger.Errorw(ctx, "Cannot generate MBPCD Instance for delete", log.Fields{
mpagenko8b07c1b2020-11-26 10:36:31 +00001856 "Err": omciErr.GetError(), "device-id": oo.deviceID})
1857 return nil
1858}
1859
mpagenkofc4f56e2020-11-04 17:17:49 +00001860// nolint: unused
ozgecanetsia422dbf32020-10-28 14:07:19 +03001861func (oo *omciCC) sendCreateMulticastGemIWTPVar(ctx context.Context, timeout int, highPrio bool,
1862 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
1863 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001864 logger.Debugw(ctx, "send MulticastGemIWTP-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03001865 "SequNo": strconv.FormatInt(int64(tid), 16),
1866 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1867
1868 meInstance, omciErr := me.NewMulticastGemInterworkingTerminationPoint(params[0])
1869 if omciErr.GetError() == nil {
1870 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType, omci.TransactionID(tid),
1871 omci.AddDefaults(true))
1872 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001873 logger.Errorw(ctx, "Cannot encode MulticastGEMIWTP for create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsia422dbf32020-10-28 14:07:19 +03001874 return nil
1875 }
1876
dbainbri4d3a0dc2020-12-02 00:33:42 +00001877 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03001878 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001879 logger.Errorw(ctx, "Cannot serialize MulticastGEMIWTP create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsia422dbf32020-10-28 14:07:19 +03001880 return nil
1881 }
1882
1883 omciRxCallbackPair := callbackPair{cbKey: tid,
1884 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1885 }
1886 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1887 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001888 logger.Errorw(ctx, "Cannot send MulticastGEMIWTP create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsia422dbf32020-10-28 14:07:19 +03001889 return nil
1890 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001891 logger.Debug(ctx, "send MulticastGEMIWTP-create-msg done")
ozgecanetsia422dbf32020-10-28 14:07:19 +03001892 return meInstance
1893 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001894 logger.Errorw(ctx, "Cannot generate MulticastGEMIWTP Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03001895 "device-id": oo.deviceID})
1896 return nil
1897}
1898
mpagenkofc4f56e2020-11-04 17:17:49 +00001899// nolint: unused
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001900func (oo *omciCC) sendSetMulticastGemIWTPVar(ctx context.Context, timeout int, highPrio bool,
1901 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
1902 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001903 logger.Debugw(ctx, "send MulticastGemIWTP-set-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001904 "SequNo": strconv.FormatInt(int64(tid), 16),
1905 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1906
1907 meInstance, omciErr := me.NewMulticastGemInterworkingTerminationPoint(params[0])
1908 if omciErr.GetError() == nil {
1909 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid),
1910 omci.AddDefaults(true))
1911 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001912 logger.Errorw(ctx, "Cannot encode MulticastGEMIWTP for set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001913 return nil
1914 }
1915
dbainbri4d3a0dc2020-12-02 00:33:42 +00001916 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001917 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001918 logger.Errorw(ctx, "Cannot serialize MulticastGEMIWTP create", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001919 return nil
1920 }
1921
1922 omciRxCallbackPair := callbackPair{cbKey: tid,
1923 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1924 }
1925 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1926 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001927 logger.Errorw(ctx, "Cannot send MulticastGEMIWTP set", log.Fields{"Err": err, "device-id": oo.deviceID})
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001928 return nil
1929 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001930 logger.Debug(ctx, "send MulticastGEMIWTP-set-msg done")
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001931 return meInstance
1932 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001933 logger.Errorw(ctx, "Cannot generate MulticastGEMIWTP Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsiab5000ef2020-11-27 14:38:20 +03001934 "device-id": oo.deviceID})
1935 return nil
1936}
1937
1938// nolint: unused
ozgecanetsia422dbf32020-10-28 14:07:19 +03001939func (oo *omciCC) sendCreateMulticastOperationProfileVar(ctx context.Context, timeout int, highPrio bool,
1940 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
1941 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001942 logger.Debugw(ctx, "send MulticastOperationProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03001943 "SequNo": strconv.FormatInt(int64(tid), 16),
1944 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1945
1946 meInstance, omciErr := me.NewMulticastOperationsProfile(params[0])
1947 if omciErr.GetError() == nil {
1948 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType, omci.TransactionID(tid),
1949 omci.AddDefaults(true))
1950 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001951 logger.Errorw(ctx, "Cannot encode MulticastOperationProfile for create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03001952 "device-id": oo.deviceID})
1953 return nil
1954 }
1955
dbainbri4d3a0dc2020-12-02 00:33:42 +00001956 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03001957 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001958 logger.Errorw(ctx, "Cannot serialize MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03001959 "device-id": oo.deviceID})
1960 return nil
1961 }
1962
1963 omciRxCallbackPair := callbackPair{cbKey: tid,
1964 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
1965 }
1966 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
1967 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001968 logger.Errorw(ctx, "Cannot send MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03001969 "device-id": oo.deviceID})
1970 return nil
1971 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001972 logger.Debug(ctx, "send MulticastOperationProfile-create-msg done")
ozgecanetsia422dbf32020-10-28 14:07:19 +03001973 return meInstance
1974 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00001975 logger.Errorw(ctx, "Cannot generate MulticastOperationProfile Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03001976 "device-id": oo.deviceID})
1977 return nil
1978}
1979
mpagenkofc4f56e2020-11-04 17:17:49 +00001980// nolint: unused
ozgecanetsia422dbf32020-10-28 14:07:19 +03001981func (oo *omciCC) sendSetMulticastOperationProfileVar(ctx context.Context, timeout int, highPrio bool,
1982 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
1983 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00001984 logger.Debugw(ctx, "send MulticastOperationProfile-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03001985 "SequNo": strconv.FormatInt(int64(tid), 16),
1986 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
1987
1988 meInstance, omciErr := me.NewMulticastOperationsProfile(params[0])
1989 if omciErr.GetError() == nil {
1990 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.SetRequestType, omci.TransactionID(tid),
1991 omci.AddDefaults(true))
1992 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00001993 logger.Errorw(ctx, "Cannot encode MulticastOperationProfile for create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03001994 "device-id": oo.deviceID})
1995 return nil
1996 }
1997
dbainbri4d3a0dc2020-12-02 00:33:42 +00001998 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03001999 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002000 logger.Errorw(ctx, "Cannot serialize MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002001 "device-id": oo.deviceID})
2002 return nil
2003 }
2004
2005 omciRxCallbackPair := callbackPair{cbKey: tid,
2006 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
2007 }
2008 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
2009 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002010 logger.Errorw(ctx, "Cannot send MulticastOperationProfile create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002011 "device-id": oo.deviceID})
2012 return nil
2013 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002014 logger.Debug(ctx, "send MulticastOperationProfile-create-msg done")
ozgecanetsia422dbf32020-10-28 14:07:19 +03002015 return meInstance
2016 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002017 logger.Errorw(ctx, "Cannot generate MulticastOperationProfile Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002018 "device-id": oo.deviceID})
2019 return nil
2020}
2021
mpagenkofc4f56e2020-11-04 17:17:49 +00002022// nolint: unused
ozgecanetsia422dbf32020-10-28 14:07:19 +03002023func (oo *omciCC) sendCreateMulticastSubConfigInfoVar(ctx context.Context, timeout int, highPrio bool,
2024 rxChan chan Message, params ...me.ParamData) *me.ManagedEntity {
2025 tid := oo.getNextTid(highPrio)
dbainbri4d3a0dc2020-12-02 00:33:42 +00002026 logger.Debugw(ctx, "send MulticastSubConfigInfo-create-msg:", log.Fields{"device-id": oo.deviceID,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002027 "SequNo": strconv.FormatInt(int64(tid), 16),
2028 "InstId": strconv.FormatInt(int64(params[0].EntityID), 16)})
2029
2030 meInstance, omciErr := me.NewMulticastSubscriberConfigInfo(params[0])
2031 if omciErr.GetError() == nil {
2032 omciLayer, msgLayer, err := omci.EncodeFrame(meInstance, omci.CreateRequestType, omci.TransactionID(tid),
2033 omci.AddDefaults(true))
2034 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002035 logger.Errorw(ctx, "Cannot encode MulticastSubConfigInfo for create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002036 "device-id": oo.deviceID})
2037 return nil
2038 }
2039
dbainbri4d3a0dc2020-12-02 00:33:42 +00002040 pkt, err := serializeOmciLayer(ctx, omciLayer, msgLayer)
ozgecanetsia422dbf32020-10-28 14:07:19 +03002041 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002042 logger.Errorw(ctx, "Cannot serialize MulticastSubConfigInfo create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002043 "device-id": oo.deviceID})
2044 return nil
2045 }
2046
2047 omciRxCallbackPair := callbackPair{cbKey: tid,
2048 cbEntry: callbackPairEntry{rxChan, oo.receiveOmciResponse},
2049 }
2050 err = oo.send(ctx, pkt, timeout, 0, highPrio, omciRxCallbackPair)
2051 if err != nil {
dbainbri4d3a0dc2020-12-02 00:33:42 +00002052 logger.Errorw(ctx, "Cannot send MulticastSubConfigInfo create", log.Fields{"Err": err,
ozgecanetsia422dbf32020-10-28 14:07:19 +03002053 "device-id": oo.deviceID})
2054 return nil
2055 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002056 logger.Debug(ctx, "send MulticastSubConfigInfo-create-msg done")
ozgecanetsia422dbf32020-10-28 14:07:19 +03002057 return meInstance
2058 }
dbainbri4d3a0dc2020-12-02 00:33:42 +00002059 logger.Errorw(ctx, "Cannot generate MulticastSubConfigInfo Instance", log.Fields{"Err": omciErr.GetError(),
ozgecanetsia422dbf32020-10-28 14:07:19 +03002060 "device-id": oo.deviceID})
2061 return nil
2062}