blob: 71d7d87f29e3f6f724d3894922e885a7a5ed3615 [file] [log] [blame]
Matteo Scandolof9d43412021-01-12 11:11:34 -08001/*
2 * Copyright 2018-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
17package omci
18
19import (
20 "encoding/hex"
21 "errors"
22 "fmt"
Elia Battistonac63b112022-01-12 18:40:49 +010023 "math/rand"
24 "strconv"
25
Matteo Scandolof9d43412021-01-12 11:11:34 -080026 "github.com/google/gopacket"
Andrea Campanella10426e22021-10-15 17:58:04 +020027 "github.com/opencord/omci-lib-go/v2"
28 me "github.com/opencord/omci-lib-go/v2/generated"
David K. Bainbridgec415efe2021-08-19 13:05:21 +000029 "github.com/opencord/voltha-protos/v5/go/openolt"
Matteo Scandolof9d43412021-01-12 11:11:34 -080030 log "github.com/sirupsen/logrus"
Matteo Scandolof9d43412021-01-12 11:11:34 -080031)
32
33func ParseGetRequest(omciPkt gopacket.Packet) (*omci.GetRequest, error) {
34 msgLayer := omciPkt.Layer(omci.LayerTypeGetRequest)
35 if msgLayer == nil {
36 err := "omci Msg layer could not be detected for LayerTypeGetRequest"
37 omciLogger.Error(err)
38 return nil, errors.New(err)
39 }
40 msgObj, msgOk := msgLayer.(*omci.GetRequest)
41 if !msgOk {
42 err := "omci Msg layer could not be assigned for LayerTypeGetRequest"
43 omciLogger.Error(err)
44 return nil, errors.New(err)
45 }
46 return msgObj, nil
47}
48
Matteo Scandoloc00e97a2021-05-27 11:45:27 -070049func CreateGetResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, onuSn *openolt.SerialNumber, mds uint8,
50 activeImageEntityId uint16, committedImageEntityId uint16, standbyImageVersion string, activeImageVersion string,
51 committedImageVersion string, onuDown bool) ([]byte, error) {
Matteo Scandolof9d43412021-01-12 11:11:34 -080052 msgObj, err := ParseGetRequest(omciPkt)
Matteo Scandolof9d43412021-01-12 11:11:34 -080053 if err != nil {
54 return nil, err
55 }
Matteo Scandolof9d43412021-01-12 11:11:34 -080056 omciLogger.WithFields(log.Fields{
Holger Hildebrandt02101a62022-04-06 13:00:51 +000057 "DeviceIdent": omciMsg.DeviceIdentifier,
Matteo Scandolof9d43412021-01-12 11:11:34 -080058 "EntityClass": msgObj.EntityClass,
59 "EntityInstance": msgObj.EntityInstance,
60 "AttributeMask": fmt.Sprintf("%x", msgObj.AttributeMask),
Matteo Scandolo992a23e2021-02-04 15:35:04 -080061 }).Trace("received-omci-get-request")
Matteo Scandolof9d43412021-01-12 11:11:34 -080062
63 var response *omci.GetResponse
Holger Hildebrandt02101a62022-04-06 13:00:51 +000064
65 isExtended := false
66 if omciMsg.DeviceIdentifier == omci.ExtendedIdent {
67 isExtended = true
68 }
Matteo Scandolof9d43412021-01-12 11:11:34 -080069 switch msgObj.EntityClass {
70 case me.Onu2GClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000071 response = createOnu2gResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance)
Matteo Scandolof9d43412021-01-12 11:11:34 -080072 case me.OnuGClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000073 response = createOnugResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance, onuSn)
Matteo Scandolof9d43412021-01-12 11:11:34 -080074 case me.SoftwareImageClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000075 response = createSoftwareImageResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance,
Matteo Scandoloc00e97a2021-05-27 11:45:27 -070076 activeImageEntityId, committedImageEntityId, standbyImageVersion, activeImageVersion, committedImageVersion)
Matteo Scandolof9d43412021-01-12 11:11:34 -080077 case me.IpHostConfigDataClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000078 response = createIpHostResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance)
Elia Battistonac63b112022-01-12 18:40:49 +010079 case me.VoipConfigDataClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000080 response = createVoipConfigDataResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance)
Matteo Scandolof9d43412021-01-12 11:11:34 -080081 case me.UniGClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000082 response = createUnigResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance, onuDown)
Matteo Scandolof9d43412021-01-12 11:11:34 -080083 case me.PhysicalPathTerminationPointEthernetUniClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000084 response = createPptpEthernetResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance, onuDown)
Elia Battistonac63b112022-01-12 18:40:49 +010085 case me.PhysicalPathTerminationPointPotsUniClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000086 response = createPptpPotsResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance, onuDown)
Matteo Scandolof9d43412021-01-12 11:11:34 -080087 case me.AniGClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000088 response = createAnigResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance)
Matteo Scandolof9d43412021-01-12 11:11:34 -080089 case me.OnuDataClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000090 response = createOnuDataResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance, mds)
Girish Gowdraa539f522021-02-15 23:00:45 -080091 case me.EthernetFramePerformanceMonitoringHistoryDataUpstreamClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000092 response = createEthernetFramePerformanceMonitoringHistoryDataUpstreamResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance)
Girish Gowdraa539f522021-02-15 23:00:45 -080093 case me.EthernetFramePerformanceMonitoringHistoryDataDownstreamClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000094 response = createEthernetFramePerformanceMonitoringHistoryDataDownstreamResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance)
Girish Gowdraa539f522021-02-15 23:00:45 -080095 case me.EthernetPerformanceMonitoringHistoryDataClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000096 response = createEthernetPerformanceMonitoringHistoryDataResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance)
Girish Gowdra6d9a1a42021-03-05 16:07:15 -080097 case me.FecPerformanceMonitoringHistoryDataClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +000098 response = createFecPerformanceMonitoringHistoryDataResponse(isExtended, msgObj.AttributeMask, msgObj.EntityInstance)
Girish Gowdra6d9a1a42021-03-05 16:07:15 -080099 case me.GemPortNetworkCtpPerformanceMonitoringHistoryDataClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000100 response = createGemPortNetworkCtpPerformanceMonitoringHistoryData(isExtended, msgObj.AttributeMask, msgObj.EntityInstance)
Himani Chawla6bd190a2021-07-09 15:31:01 +0530101 case me.EthernetFrameExtendedPmClassID,
102 me.EthernetFrameExtendedPm64BitClassID:
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000103 response = createEthernetFrameExtendedPmGetResponse(isExtended, msgObj.EntityClass, msgObj.AttributeMask, msgObj.EntityInstance)
Matteo Scandolof9d43412021-01-12 11:11:34 -0800104 default:
105 omciLogger.WithFields(log.Fields{
106 "EntityClass": msgObj.EntityClass,
107 "EntityInstance": msgObj.EntityInstance,
108 "AttributeMask": fmt.Sprintf("%x", msgObj.AttributeMask),
109 }).Warnf("do-not-know-how-to-handle-get-request-for-me-class")
110 return nil, nil
111 }
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000112 omciLayer := &omci.OMCI{
113 TransactionID: omciMsg.TransactionID,
114 MessageType: omci.GetResponseType,
115 DeviceIdentifier: omciMsg.DeviceIdentifier,
116 }
117 var options gopacket.SerializeOptions
118 options.FixLengths = true
Matteo Scandolof9d43412021-01-12 11:11:34 -0800119
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000120 buffer := gopacket.NewSerializeBuffer()
121 err = gopacket.SerializeLayers(buffer, options, omciLayer, response)
Matteo Scandolof9d43412021-01-12 11:11:34 -0800122 if err != nil {
123 omciLogger.WithFields(log.Fields{
124 "Err": err,
125 "TxID": strconv.FormatInt(int64(omciMsg.TransactionID), 16),
Matteo Scandolo78d5ee12021-04-14 11:11:32 -0700126 }).Error("cannot-Serialize-GetResponse")
Matteo Scandolof9d43412021-01-12 11:11:34 -0800127 return nil, err
128 }
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000129 pkt := buffer.Bytes()
Matteo Scandolof9d43412021-01-12 11:11:34 -0800130
131 log.WithFields(log.Fields{
132 "TxID": strconv.FormatInt(int64(omciMsg.TransactionID), 16),
133 "pkt": hex.EncodeToString(pkt),
134 }).Trace("omci-get-response")
135
136 return pkt, nil
137}
138
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000139func createOnu2gResponse(isExtended bool, attributeMask uint16, entityID uint16) *omci.GetResponse {
Matteo Scandolof9d43412021-01-12 11:11:34 -0800140
141 managedEntity, meErr := me.NewOnu2G(me.ParamData{
142 EntityID: entityID,
143 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100144 me.ManagedEntityID: entityID,
145 me.Onu2G_EquipmentId: ToOctets("12345123451234512345", 20),
146 me.Onu2G_OpticalNetworkUnitManagementAndControlChannelOmccVersion: 180,
147 me.Onu2G_VendorProductCode: 0,
148 me.Onu2G_SecurityCapability: 1,
149 me.Onu2G_SecurityMode: 1,
150 me.Onu2G_TotalPriorityQueueNumber: 1,
151 me.Onu2G_TotalTrafficSchedulerNumber: 1,
152 me.Onu2G_Deprecated: 1,
153 me.Onu2G_TotalGemPortIdNumber: 32,
154 me.Onu2G_Sysuptime: 319389947, // NOTE need to be smarter?
155 me.Onu2G_ConnectivityCapability: 127,
156 me.Onu2G_CurrentConnectivityMode: 5,
157 me.Onu2G_QualityOfServiceQosConfigurationFlexibility: 48,
158 me.Onu2G_PriorityQueueScaleFactor: 1,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800159 },
160 })
161
162 if meErr.GetError() != nil {
163 omciLogger.Errorf("NewOnu2G %v", meErr.Error())
164 return nil
165 }
166
167 return &omci.GetResponse{
168 MeBasePacket: omci.MeBasePacket{
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000169 EntityClass: me.Onu2GClassID,
170 EntityInstance: entityID,
171 Extended: isExtended,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800172 },
173 Attributes: managedEntity.GetAttributeValueMap(),
174 AttributeMask: attributeMask,
175 Result: me.Success,
176 }
177}
178
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000179func createOnugResponse(isExtended bool, attributeMask uint16, entityID uint16, onuSn *openolt.SerialNumber) *omci.GetResponse {
Matteo Scandolo5863f002021-02-08 08:08:14 -0800180
181 managedEntity, meErr := me.NewOnuG(me.ParamData{
182 EntityID: entityID,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800183 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100184 me.ManagedEntityID: entityID,
185 me.OnuG_VendorId: ToOctets("BBSM", 4),
186 me.OnuG_Version: ToOctets("v0.0.1", 14),
187 me.OnuG_SerialNumber: append(onuSn.VendorId, onuSn.VendorSpecific...),
188 me.OnuG_TrafficManagementOption: 0,
189 me.OnuG_Deprecated: 0,
190 me.OnuG_BatteryBackup: 0,
191 me.OnuG_AdministrativeState: 0,
192 me.OnuG_OperationalState: 0,
193 me.OnuG_OnuSurvivalTime: 10,
194 me.OnuG_LogicalOnuId: ToOctets("BBSM", 24),
195 me.OnuG_LogicalPassword: ToOctets("BBSM", 12),
196 me.OnuG_CredentialsStatus: 0,
197 me.OnuG_ExtendedTcLayerOptions: 0,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800198 },
Matteo Scandolo5863f002021-02-08 08:08:14 -0800199 })
200
201 if meErr.GetError() != nil {
202 omciLogger.Errorf("NewOnu2G %v", meErr.Error())
203 return nil
Matteo Scandolof9d43412021-01-12 11:11:34 -0800204 }
Matteo Scandolo5863f002021-02-08 08:08:14 -0800205
206 return &omci.GetResponse{
207 MeBasePacket: omci.MeBasePacket{
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000208 EntityClass: me.OnuGClassID,
209 EntityInstance: entityID,
210 Extended: isExtended,
Matteo Scandolo5863f002021-02-08 08:08:14 -0800211 },
212 Attributes: managedEntity.GetAttributeValueMap(),
213 AttributeMask: attributeMask,
214 Result: me.Success,
215 }
Matteo Scandolof9d43412021-01-12 11:11:34 -0800216}
217
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000218func createSoftwareImageResponse(isExtended bool, attributeMask uint16, entityInstance uint16, activeImageEntityId uint16,
Matteo Scandoloc00e97a2021-05-27 11:45:27 -0700219 committedImageEntityId uint16, standbyImageVersion string, activeImageVersion string, committedImageVersion string) *omci.GetResponse {
Matteo Scandolocedde462021-03-09 17:37:16 -0800220
221 omciLogger.WithFields(log.Fields{
222 "EntityInstance": entityInstance,
Matteo Scandoloc00e97a2021-05-27 11:45:27 -0700223 "AttributeMask": attributeMask,
Matteo Scandolo21195d62021-04-07 14:31:23 -0700224 }).Trace("received-get-software-image-request")
Matteo Scandolocedde462021-03-09 17:37:16 -0800225
226 // Only one image can be active and committed
227 committed := 0
228 active := 0
Matteo Scandoloc00e97a2021-05-27 11:45:27 -0700229 version := standbyImageVersion
Matteo Scandolocedde462021-03-09 17:37:16 -0800230 if entityInstance == activeImageEntityId {
231 active = 1
Matteo Scandoloc00e97a2021-05-27 11:45:27 -0700232 version = activeImageVersion
Matteo Scandolocedde462021-03-09 17:37:16 -0800233 }
234 if entityInstance == committedImageEntityId {
235 committed = 1
Matteo Scandoloc00e97a2021-05-27 11:45:27 -0700236 version = committedImageVersion
237 }
238
239 imageHash, err := hex.DecodeString(hex.EncodeToString([]byte(version)))
240 if err != nil {
241 omciLogger.WithFields(log.Fields{
242 "entityId": entityInstance,
243 "active": active,
244 "committed": committed,
245 "err": err,
246 }).Error("cannot-generate-image-hash")
Matteo Scandolocedde462021-03-09 17:37:16 -0800247 }
248
Matteo Scandolof9d43412021-01-12 11:11:34 -0800249 // NOTE that we need send the response for the correct ME Instance or the adapter won't process it
Matteo Scandolocedde462021-03-09 17:37:16 -0800250 res := &omci.GetResponse{
Matteo Scandolof9d43412021-01-12 11:11:34 -0800251 MeBasePacket: omci.MeBasePacket{
252 EntityClass: me.SoftwareImageClassID,
253 EntityInstance: entityInstance,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000254 Extended: isExtended,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800255 },
256 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100257 me.ManagedEntityID: 0,
258 me.SoftwareImage_Version: ToOctets(version, 14),
259 me.SoftwareImage_IsCommitted: committed,
260 me.SoftwareImage_IsActive: active,
261 me.SoftwareImage_IsValid: 1,
262 me.SoftwareImage_ProductCode: ToOctets("BBSIM-ONU", 25),
263 me.SoftwareImage_ImageHash: imageHash,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800264 },
265 Result: me.Success,
266 AttributeMask: attributeMask,
267 }
Matteo Scandolocedde462021-03-09 17:37:16 -0800268
269 omciLogger.WithFields(log.Fields{
270 "omciMessage": res,
271 "entityId": entityInstance,
272 "active": active,
273 "committed": committed,
Matteo Scandolo21195d62021-04-07 14:31:23 -0700274 }).Trace("Reporting SoftwareImage")
Matteo Scandolocedde462021-03-09 17:37:16 -0800275
276 return res
Matteo Scandolof9d43412021-01-12 11:11:34 -0800277}
278
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000279func createIpHostResponse(isExtended bool, attributeMask uint16, entityInstance uint16) *omci.GetResponse {
Matteo Scandolof9d43412021-01-12 11:11:34 -0800280 return &omci.GetResponse{
281 MeBasePacket: omci.MeBasePacket{
282 EntityClass: me.IpHostConfigDataClassID,
283 EntityInstance: entityInstance,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000284 Extended: isExtended,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800285 },
286 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100287 me.ManagedEntityID: 0,
288 me.IpHostConfigData_MacAddress: ToOctets("aabbcc", 6),
Matteo Scandolof9d43412021-01-12 11:11:34 -0800289 },
290 Result: me.Success,
291 AttributeMask: attributeMask,
292 }
293}
294
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000295func createVoipConfigDataResponse(isExtended bool, attributeMask uint16, entityInstance uint16) *omci.GetResponse {
Elia Battistonac63b112022-01-12 18:40:49 +0100296 return &omci.GetResponse{
297 MeBasePacket: omci.MeBasePacket{
298 EntityClass: me.VoipConfigDataClassID,
299 EntityInstance: entityInstance,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000300 Extended: isExtended,
Elia Battistonac63b112022-01-12 18:40:49 +0100301 },
302 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100303 me.ManagedEntityID: 0,
304 me.VoipConfigData_AvailableSignallingProtocols: 1,
305 me.VoipConfigData_SignallingProtocolUsed: 1,
306 me.VoipConfigData_AvailableVoipConfigurationMethods: 1,
307 me.VoipConfigData_VoipConfigurationMethodUsed: 1,
308 me.VoipConfigData_VoipConfigurationAddressPointer: 0xFFFF,
309 me.VoipConfigData_VoipConfigurationState: 0,
310 me.VoipConfigData_RetrieveProfile: 0,
311 me.VoipConfigData_ProfileVersion: 0,
Elia Battistonac63b112022-01-12 18:40:49 +0100312 },
313 Result: me.Success,
314 AttributeMask: attributeMask,
315 }
316}
317
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000318func createUnigResponse(isExtended bool, attributeMask uint16, entityID uint16, onuDown bool) *omci.GetResponse {
Girish Gowdra996d81e2021-04-21 16:16:27 -0700319 // Valid values for uni_admin_state are 0 (unlocks) and 1 (locks)
320 omciAdminState := 1
321 if !onuDown {
322 omciAdminState = 0
323 }
Matteo Scandolof9d43412021-01-12 11:11:34 -0800324 managedEntity, meErr := me.NewUniG(me.ParamData{
325 EntityID: entityID,
326 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100327 me.ManagedEntityID: entityID,
328 me.UniG_Deprecated: 0,
329 me.UniG_AdministrativeState: omciAdminState,
330 me.UniG_ManagementCapability: 0,
331 me.UniG_NonOmciManagementIdentifier: 1,
332 me.UniG_RelayAgentOptions: 1,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800333 },
334 })
335
336 if meErr.GetError() != nil {
337 omciLogger.Errorf("NewUniG %v", meErr.Error())
338 return nil
339 }
340
341 return &omci.GetResponse{
342 MeBasePacket: omci.MeBasePacket{
Girish Gowdrac3fd50c2021-03-12 16:14:44 -0800343 EntityClass: me.UniGClassID,
344 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000345 Extended: isExtended,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800346 },
347 Attributes: managedEntity.GetAttributeValueMap(),
348 AttributeMask: attributeMask,
349 Result: me.Success,
350 }
351}
352
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000353func createPptpEthernetResponse(isExtended bool, attributeMask uint16, entityID uint16, onuDown bool) *omci.GetResponse {
Girish Gowdra996d81e2021-04-21 16:16:27 -0700354 // Valid values for oper_state are 0 (enabled) and 1 (disabled)
355 // Valid values for uni_admin_state are 0 (unlocks) and 1 (locks)
356 onuAdminState := 1
357 if !onuDown {
358 onuAdminState = 0
359 }
360 onuOperState := onuAdminState // For now make the assumption that oper state reflects the admin state
Matteo Scandolof9d43412021-01-12 11:11:34 -0800361 managedEntity, meErr := me.NewPhysicalPathTerminationPointEthernetUni(me.ParamData{
362 EntityID: entityID,
363 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100364 me.ManagedEntityID: entityID,
365 me.PhysicalPathTerminationPointEthernetUni_ExpectedType: 0,
366 me.PhysicalPathTerminationPointEthernetUni_SensedType: 0,
367 me.PhysicalPathTerminationPointEthernetUni_AutoDetectionConfiguration: 0,
368 me.PhysicalPathTerminationPointEthernetUni_EthernetLoopbackConfiguration: 0,
369 me.PhysicalPathTerminationPointEthernetUni_AdministrativeState: onuAdminState,
370 me.PhysicalPathTerminationPointEthernetUni_OperationalState: onuOperState,
371 me.PhysicalPathTerminationPointEthernetUni_ConfigurationInd: 0,
372 me.PhysicalPathTerminationPointEthernetUni_MaxFrameSize: 0,
373 me.PhysicalPathTerminationPointEthernetUni_DteOrDceInd: 0,
374 me.PhysicalPathTerminationPointEthernetUni_PauseTime: 0,
375 me.PhysicalPathTerminationPointEthernetUni_BridgedOrIpInd: 0,
376 me.PhysicalPathTerminationPointEthernetUni_Arc: 0,
377 me.PhysicalPathTerminationPointEthernetUni_ArcInterval: 0,
378 me.PhysicalPathTerminationPointEthernetUni_PppoeFilter: 0,
379 me.PhysicalPathTerminationPointEthernetUni_PowerControl: 0,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800380 },
381 })
382
383 if meErr.GetError() != nil {
384 omciLogger.Errorf("NewPhysicalPathTerminationPointEthernetUni %v", meErr.Error())
385 return nil
386 }
387
388 return &omci.GetResponse{
389 MeBasePacket: omci.MeBasePacket{
Girish Gowdrac3fd50c2021-03-12 16:14:44 -0800390 EntityClass: me.PhysicalPathTerminationPointEthernetUniClassID,
391 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000392 Extended: isExtended,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800393 },
394 Attributes: managedEntity.GetAttributeValueMap(),
395 AttributeMask: attributeMask,
396 Result: me.Success,
397 }
398}
399
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000400func createPptpPotsResponse(isExtended bool, attributeMask uint16, entityID uint16, onuDown bool) *omci.GetResponse {
Elia Battistonac63b112022-01-12 18:40:49 +0100401 // Valid values for oper_state are 0 (enabled) and 1 (disabled)
402 // Valid values for uni_admin_state are 0 (unlocks) and 1 (locks)
403 onuAdminState := 1
404 if !onuDown {
405 onuAdminState = 0
406 }
407 onuOperState := onuAdminState // For now make the assumption that oper state reflects the admin state
408 managedEntity, meErr := me.NewPhysicalPathTerminationPointPotsUni(me.ParamData{
409 EntityID: entityID,
410 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100411 me.ManagedEntityID: entityID,
412 me.PhysicalPathTerminationPointPotsUni_AdministrativeState: onuAdminState,
413 me.PhysicalPathTerminationPointPotsUni_Deprecated: 0,
414 me.PhysicalPathTerminationPointPotsUni_Arc: 0,
415 me.PhysicalPathTerminationPointPotsUni_ArcInterval: 0,
416 me.PhysicalPathTerminationPointPotsUni_Impedance: 0,
417 me.PhysicalPathTerminationPointPotsUni_TransmissionPath: 0,
418 me.PhysicalPathTerminationPointPotsUni_RxGain: 0,
419 me.PhysicalPathTerminationPointPotsUni_TxGain: 0,
420 me.PhysicalPathTerminationPointPotsUni_OperationalState: onuOperState,
421 me.PhysicalPathTerminationPointPotsUni_HookState: 0,
422 me.PhysicalPathTerminationPointPotsUni_PotsHoldoverTime: 0,
423 me.PhysicalPathTerminationPointPotsUni_NominalFeedVoltage: 0,
424 me.PhysicalPathTerminationPointPotsUni_LossOfSoftswitch: 0,
Elia Battistonac63b112022-01-12 18:40:49 +0100425 },
426 })
427
428 if meErr.GetError() != nil {
429 omciLogger.Errorf("NewPhysicalPathTerminationPointPotsUni %v", meErr.Error())
430 return nil
431 }
432
433 return &omci.GetResponse{
434 MeBasePacket: omci.MeBasePacket{
435 EntityClass: me.PhysicalPathTerminationPointPotsUniClassID,
436 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000437 Extended: isExtended,
Elia Battistonac63b112022-01-12 18:40:49 +0100438 },
439 Attributes: managedEntity.GetAttributeValueMap(),
440 AttributeMask: attributeMask,
441 Result: me.Success,
442 }
443}
444
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000445func createEthernetFramePerformanceMonitoringHistoryDataUpstreamResponse(isExtended bool, attributeMask uint16, entityID uint16) *omci.GetResponse {
Girish Gowdraa539f522021-02-15 23:00:45 -0800446 managedEntity, meErr := me.NewEthernetFramePerformanceMonitoringHistoryDataUpstream(me.ParamData{
Matteo Scandolof9d43412021-01-12 11:11:34 -0800447 EntityID: entityID,
448 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100449 me.ManagedEntityID: entityID,
450 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_IntervalEndTime: 0, // This ideally should increment by 1 every collection interval, but staying 0 for simulation is Ok for now.
451 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_ThresholdData12Id: 0,
452 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_DropEvents: rand.Intn(100),
453 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Octets: rand.Intn(100),
454 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets: rand.Intn(100),
455 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_BroadcastPackets: rand.Intn(100),
456 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_MulticastPackets: rand.Intn(100),
457 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_CrcErroredPackets: rand.Intn(100),
458 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_UndersizePackets: rand.Intn(100),
459 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_OversizePackets: rand.Intn(100),
460 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets64Octets: rand.Intn(100),
461 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets65To127Octets: rand.Intn(100),
462 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets128To255Octets: rand.Intn(100),
463 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets256To511Octets: rand.Intn(100),
464 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets512To1023Octets: rand.Intn(100),
465 me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets1024To1518Octets: rand.Intn(100),
Matteo Scandolof9d43412021-01-12 11:11:34 -0800466 },
467 })
468
469 if meErr.GetError() != nil {
Girish Gowdraa539f522021-02-15 23:00:45 -0800470 omciLogger.Errorf("NewEthernetFramePerformanceMonitoringHistoryDataUpstream %v", meErr.Error())
Matteo Scandolof9d43412021-01-12 11:11:34 -0800471 return nil
472 }
473
474 return &omci.GetResponse{
475 MeBasePacket: omci.MeBasePacket{
Girish Gowdraa539f522021-02-15 23:00:45 -0800476 EntityClass: me.EthernetFramePerformanceMonitoringHistoryDataUpstreamClassID,
477 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000478 Extended: isExtended,
Girish Gowdraa539f522021-02-15 23:00:45 -0800479 },
480 Attributes: managedEntity.GetAttributeValueMap(),
481 AttributeMask: attributeMask,
482 Result: me.Success,
483 }
484}
485
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000486func createEthernetFramePerformanceMonitoringHistoryDataDownstreamResponse(isExtended bool, attributeMask uint16, entityID uint16) *omci.GetResponse {
Girish Gowdraa539f522021-02-15 23:00:45 -0800487 managedEntity, meErr := me.NewEthernetFramePerformanceMonitoringHistoryDataDownstream(me.ParamData{
488 EntityID: entityID,
489 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100490 me.ManagedEntityID: entityID,
491 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_IntervalEndTime: 0, // This ideally should increment by 1 every collection interval, but staying 0 for simulation is Ok for now.
492 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_ThresholdData12Id: 0,
493 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_DropEvents: rand.Intn(100),
494 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_Octets: rand.Intn(100),
495 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_Packets: rand.Intn(100),
496 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_BroadcastPackets: rand.Intn(100),
497 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_MulticastPackets: rand.Intn(100),
498 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_CrcErroredPackets: rand.Intn(100),
499 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_UndersizePackets: rand.Intn(100),
500 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_OversizePackets: rand.Intn(100),
501 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_Packets64Octets: rand.Intn(100),
502 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_Packets65To127Octets: rand.Intn(100),
503 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_Packets128To255Octets: rand.Intn(100),
504 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_Packets256To511Octets: rand.Intn(100),
505 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_Packets512To1023Octets: rand.Intn(100),
506 me.EthernetFramePerformanceMonitoringHistoryDataDownstream_Packets1024To1518Octets: rand.Intn(100),
Girish Gowdraa539f522021-02-15 23:00:45 -0800507 },
508 })
509
510 if meErr.GetError() != nil {
511 omciLogger.Errorf("NewEthernetFramePerformanceMonitoringHistoryDataDownstream %v", meErr.Error())
512 return nil
513 }
514
Girish Gowdraa539f522021-02-15 23:00:45 -0800515 return &omci.GetResponse{
516 MeBasePacket: omci.MeBasePacket{
517 EntityClass: me.EthernetFramePerformanceMonitoringHistoryDataDownstreamClassID,
518 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000519 Extended: isExtended,
Girish Gowdraa539f522021-02-15 23:00:45 -0800520 },
521 Attributes: managedEntity.GetAttributeValueMap(),
522 AttributeMask: attributeMask,
523 Result: me.Success,
524 }
525}
526
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000527func createEthernetPerformanceMonitoringHistoryDataResponse(isExtended bool, attributeMask uint16, entityID uint16) *omci.GetResponse {
Girish Gowdraa539f522021-02-15 23:00:45 -0800528 managedEntity, meErr := me.NewEthernetPerformanceMonitoringHistoryData(me.ParamData{
529 EntityID: entityID,
530 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100531 me.ManagedEntityID: entityID,
532 me.EthernetPerformanceMonitoringHistoryData_IntervalEndTime: 0, // This ideally should increment by 1 every collection interval, but staying 0 for simulation is Ok for now.
533 me.EthernetPerformanceMonitoringHistoryData_ThresholdData12Id: 0,
534 me.EthernetPerformanceMonitoringHistoryData_FcsErrors: rand.Intn(100),
535 me.EthernetPerformanceMonitoringHistoryData_ExcessiveCollisionCounter: rand.Intn(100),
536 me.EthernetPerformanceMonitoringHistoryData_LateCollisionCounter: rand.Intn(100),
537 me.EthernetPerformanceMonitoringHistoryData_FramesTooLong: rand.Intn(100),
538 me.EthernetPerformanceMonitoringHistoryData_BufferOverflowsOnReceive: rand.Intn(100),
539 me.EthernetPerformanceMonitoringHistoryData_BufferOverflowsOnTransmit: rand.Intn(100),
540 me.EthernetPerformanceMonitoringHistoryData_SingleCollisionFrameCounter: rand.Intn(100),
541 me.EthernetPerformanceMonitoringHistoryData_MultipleCollisionsFrameCounter: rand.Intn(100),
542 me.EthernetPerformanceMonitoringHistoryData_SqeCounter: rand.Intn(100),
543 me.EthernetPerformanceMonitoringHistoryData_DeferredTransmissionCounter: rand.Intn(100),
544 me.EthernetPerformanceMonitoringHistoryData_InternalMacTransmitErrorCounter: rand.Intn(100),
545 me.EthernetPerformanceMonitoringHistoryData_CarrierSenseErrorCounter: rand.Intn(100),
546 me.EthernetPerformanceMonitoringHistoryData_AlignmentErrorCounter: rand.Intn(100),
547 me.EthernetPerformanceMonitoringHistoryData_InternalMacReceiveErrorCounter: rand.Intn(100),
Girish Gowdraa539f522021-02-15 23:00:45 -0800548 },
549 })
550
551 if meErr.GetError() != nil {
552 omciLogger.Errorf("NewEthernetPerformanceMonitoringHistoryData %v", meErr.Error())
553 return nil
554 }
555
Girish Gowdraa539f522021-02-15 23:00:45 -0800556 return &omci.GetResponse{
557 MeBasePacket: omci.MeBasePacket{
558 EntityClass: me.EthernetPerformanceMonitoringHistoryDataClassID,
559 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000560 Extended: isExtended,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800561 },
562 Attributes: managedEntity.GetAttributeValueMap(),
563 AttributeMask: attributeMask,
564 Result: me.Success,
565 }
566}
567
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000568func createFecPerformanceMonitoringHistoryDataResponse(isExtended bool, attributeMask uint16, entityID uint16) *omci.GetResponse {
Girish Gowdra6d9a1a42021-03-05 16:07:15 -0800569 managedEntity, meErr := me.NewFecPerformanceMonitoringHistoryData(me.ParamData{
570 EntityID: entityID,
571 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100572 me.ManagedEntityID: entityID,
573 me.FecPerformanceMonitoringHistoryData_IntervalEndTime: 0, // This ideally should increment by 1 every collection interval, but staying 0 for simulation is Ok for now.
574 me.FecPerformanceMonitoringHistoryData_ThresholdData12Id: 0,
575 me.FecPerformanceMonitoringHistoryData_CorrectedBytes: rand.Intn(100),
576 me.FecPerformanceMonitoringHistoryData_CorrectedCodeWords: rand.Intn(100),
577 me.FecPerformanceMonitoringHistoryData_UncorrectableCodeWords: rand.Intn(100),
578 me.FecPerformanceMonitoringHistoryData_TotalCodeWords: rand.Intn(100),
579 me.FecPerformanceMonitoringHistoryData_FecSeconds: rand.Intn(100),
Girish Gowdra6d9a1a42021-03-05 16:07:15 -0800580 },
581 })
582
583 if meErr.GetError() != nil {
584 omciLogger.Errorf("NewFecPerformanceMonitoringHistoryData %v", meErr.Error())
585 return nil
586 }
587
588 // FEC History counter fits within single gem payload.
589 // No need of the logical we use in other Ethernet History counters or Gem Port History counters
590
591 return &omci.GetResponse{
592 MeBasePacket: omci.MeBasePacket{
593 EntityClass: me.FecPerformanceMonitoringHistoryDataClassID,
594 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000595 Extended: isExtended,
Girish Gowdra6d9a1a42021-03-05 16:07:15 -0800596 },
597 Attributes: managedEntity.GetAttributeValueMap(),
598 AttributeMask: attributeMask,
599 Result: me.Success,
600 }
601}
602
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000603func createGemPortNetworkCtpPerformanceMonitoringHistoryData(isExtended bool, attributeMask uint16, entityID uint16) *omci.GetResponse {
Girish Gowdra6d9a1a42021-03-05 16:07:15 -0800604 managedEntity, meErr := me.NewGemPortNetworkCtpPerformanceMonitoringHistoryData(me.ParamData{
605 EntityID: entityID,
606 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100607 me.ManagedEntityID: entityID,
608 me.GemPortNetworkCtpPerformanceMonitoringHistoryData_IntervalEndTime: 0, // This ideally should increment by 1 every collection interval, but staying 0 for simulation is Ok for now.
609 me.GemPortNetworkCtpPerformanceMonitoringHistoryData_ThresholdData12Id: 0,
610 me.GemPortNetworkCtpPerformanceMonitoringHistoryData_TransmittedGemFrames: rand.Intn(100),
611 me.GemPortNetworkCtpPerformanceMonitoringHistoryData_ReceivedGemFrames: rand.Intn(100),
612 me.GemPortNetworkCtpPerformanceMonitoringHistoryData_ReceivedPayloadBytes: rand.Intn(100),
613 me.GemPortNetworkCtpPerformanceMonitoringHistoryData_TransmittedPayloadBytes: rand.Intn(100),
614 me.GemPortNetworkCtpPerformanceMonitoringHistoryData_EncryptionKeyErrors: rand.Intn(100),
Girish Gowdra6d9a1a42021-03-05 16:07:15 -0800615 },
616 })
617
618 if meErr.GetError() != nil {
619 omciLogger.Errorf("NewGemPortNetworkCtpPerformanceMonitoringHistoryData %v", meErr.Error())
620 return nil
621 }
622
Girish Gowdra6d9a1a42021-03-05 16:07:15 -0800623 return &omci.GetResponse{
624 MeBasePacket: omci.MeBasePacket{
625 EntityClass: me.GemPortNetworkCtpPerformanceMonitoringHistoryDataClassID,
626 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000627 Extended: isExtended,
Girish Gowdra6d9a1a42021-03-05 16:07:15 -0800628 },
629 Attributes: managedEntity.GetAttributeValueMap(),
630 AttributeMask: attributeMask,
631 Result: me.Success,
632 }
633}
634
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000635func createOnuDataResponse(isExtended bool, attributeMask uint16, entityID uint16, mds uint8) *omci.GetResponse {
Matteo Scandolof9d43412021-01-12 11:11:34 -0800636 managedEntity, meErr := me.NewOnuData(me.ParamData{
637 EntityID: entityID,
638 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100639 me.ManagedEntityID: entityID,
640 me.OnuData_MibDataSync: mds,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800641 },
642 })
643
644 if meErr.GetError() != nil {
645 omciLogger.Errorf("NewOnuData %v", meErr.Error())
646 return nil
647 }
648
649 return &omci.GetResponse{
650 MeBasePacket: omci.MeBasePacket{
Girish Gowdraa539f522021-02-15 23:00:45 -0800651 EntityClass: me.OnuDataClassID,
652 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000653 Extended: isExtended,
Girish Gowdraa539f522021-02-15 23:00:45 -0800654 },
655 Attributes: managedEntity.GetAttributeValueMap(),
656 AttributeMask: attributeMask,
657 Result: me.Success,
658 }
659}
660
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000661func createAnigResponse(isExtended bool, attributeMask uint16, entityID uint16) *omci.GetResponse {
Girish Gowdraa539f522021-02-15 23:00:45 -0800662 managedEntity, meErr := me.NewAniG(me.ParamData{
663 EntityID: entityID,
664 Attributes: me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100665 me.ManagedEntityID: entityID,
666 me.AniG_SrIndication: 0,
667 me.AniG_TotalTcontNumber: 0,
668 me.AniG_GemBlockLength: 0,
669 me.AniG_PiggybackDbaReporting: 0,
670 me.AniG_Deprecated: 0,
671 me.AniG_SignalFailThreshold: 0,
672 me.AniG_SignalDegradeThreshold: 0,
673 me.AniG_Arc: 0,
674 me.AniG_ArcInterval: 0,
675 me.AniG_OpticalSignalLevel: rand.Intn(16000), // generate some random power level than defaulting to 0
676 me.AniG_LowerOpticalThreshold: 0,
677 me.AniG_UpperOpticalThreshold: 0,
678 me.AniG_OnuResponseTime: 0,
679 me.AniG_TransmitOpticalLevel: rand.Intn(16000), // generate some random power level than defaulting to 0
680 me.AniG_LowerTransmitPowerThreshold: 0,
681 me.AniG_UpperTransmitPowerThreshold: 0,
Girish Gowdraa539f522021-02-15 23:00:45 -0800682 },
683 })
684
685 if meErr.GetError() != nil {
686 omciLogger.Errorf("NewAniG %v", meErr.Error())
687 return nil
688 }
689
690 return &omci.GetResponse{
691 MeBasePacket: omci.MeBasePacket{
692 EntityClass: me.AniGClassID,
693 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000694 Extended: isExtended,
Matteo Scandolof9d43412021-01-12 11:11:34 -0800695 },
696 Attributes: managedEntity.GetAttributeValueMap(),
697 AttributeMask: attributeMask,
698 Result: me.Success,
699 }
700}
701
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000702func createEthernetFrameExtendedPmGetResponse(isExtended bool, meClass me.ClassID, attributeMask uint16, entityID uint16) *omci.GetResponse {
Himani Chawla6bd190a2021-07-09 15:31:01 +0530703
704 callback := me.NewEthernetFrameExtendedPm
705 if meClass != me.EthernetFrameExtendedPmClassID {
706 callback = me.NewEthernetFrameExtendedPm64Bit
707 }
Elia Battiston9bfe1102022-02-03 10:38:03 +0100708
709 //The names of these attributes are left as strings
710 //rather than constants of a particular ME because
711 //they can be used with both the MEs in the lines above
Himani Chawla908a1f52022-01-27 14:39:44 +0530712 attr := me.AttributeValueMap{
Elia Battiston9bfe1102022-02-03 10:38:03 +0100713 me.ManagedEntityID: entityID,
Himani Chawla908a1f52022-01-27 14:39:44 +0530714 "DropEvents": 100,
715 "Octets": 101,
716 "Frames": 102,
717 "BroadcastFrames": 103,
718 "MulticastFrames": 104,
719 "CrcErroredFrames": 105,
720 "UndersizeFrames": 106,
721 "OversizeFrames": 107,
722 "Frames64Octets": 108,
723 "Frames65To127Octets": 109,
724 "Frames128To255Octets": 110,
725 "Frames256To511Octets": 111,
726 "Frames512To1023Octets": 112,
727 "Frames1024To1518Octets": 113,
728 }
Himani Chawla6bd190a2021-07-09 15:31:01 +0530729 managedEntity, meErr := callback(me.ParamData{
Himani Chawla908a1f52022-01-27 14:39:44 +0530730 EntityID: entityID,
731 Attributes: attr,
Himani Chawla6bd190a2021-07-09 15:31:01 +0530732 })
733
734 if meErr.GetError() != nil {
735 omciLogger.Errorf("NewEthernetFrameExtendedPm %v", meErr.Error())
736 return nil
737 }
738
739 return &omci.GetResponse{
740 MeBasePacket: omci.MeBasePacket{
741 EntityClass: meClass,
742 EntityInstance: entityID,
Holger Hildebrandt02101a62022-04-06 13:00:51 +0000743 Extended: isExtended,
Himani Chawla6bd190a2021-07-09 15:31:01 +0530744 },
745 Attributes: managedEntity.GetAttributeValueMap(),
746 AttributeMask: attributeMask,
747 Result: me.Success,
748 }
749}
750
Matteo Scandoloef4e8f82021-05-17 11:20:49 -0700751func ToOctets(str string, size int) []byte {
Matteo Scandolof9d43412021-01-12 11:11:34 -0800752 asciiBytes := []byte(str)
753
754 if len(asciiBytes) < size {
755 missing := size - len(asciiBytes)
756 for i := 0; i < missing; i++ {
757 asciiBytes = append(asciiBytes, []byte{0x00}[0])
758 }
759 }
760 return asciiBytes
761}