2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 ==================================================================================
22 // #cgo LDFLAGS: -le2ap_wrapper -le2ap -lgnbx2 -lgnbnrt -lstdc++
23 // #include <stdlib.h>
24 // #include <c_types.h>
25 // #include <E2AP_if.h>
26 // #include <memtrack.h>
27 // #include <strings.h>
29 // void initSubsRequest(RICSubscriptionRequest_t *data){
30 // bzero(data,sizeof(RICSubscriptionRequest_t));
32 // void initSubsResponse(RICSubscriptionResponse_t *data){
33 // bzero(data,sizeof(RICSubscriptionResponse_t));
35 // void initSubsFailure(RICSubscriptionFailure_t *data){
36 // bzero(data,sizeof(RICSubscriptionFailure_t));
38 // void initSubsDeleteRequest(RICSubscriptionDeleteRequest_t *data){
39 // bzero(data,sizeof(RICSubscriptionDeleteRequest_t));
41 // void initSubsDeleteResponse(RICSubscriptionDeleteResponse_t *data){
42 // bzero(data,sizeof(RICSubscriptionDeleteResponse_t));
44 // void initSubsDeleteFailure(RICSubscriptionDeleteFailure_t *data){
45 // bzero(data,sizeof(RICSubscriptionDeleteFailure_t));
53 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/conv"
54 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
59 const cLogBufferMaxSize = 40960
60 const cMsgBufferMaxSize = 40960
61 const cMsgBufferExtra = 512
63 //-----------------------------------------------------------------------------
65 //-----------------------------------------------------------------------------
66 func cMessageInfoToMessageInfo(minfo *C.E2MessageInfo_t) *e2ap.MessageInfo {
68 msgInfo := &e2ap.MessageInfo{}
70 switch minfo.messageType {
71 case C.cE2InitiatingMessage:
72 msgInfo.MsgType = e2ap.E2AP_InitiatingMessage
73 switch minfo.messageId {
74 case C.cRICSubscriptionRequest:
75 msgInfo.MsgId = e2ap.E2AP_RICSubscriptionRequest
77 case C.cRICSubscriptionDeleteRequest:
78 msgInfo.MsgId = e2ap.E2AP_RICSubscriptionDeleteRequest
81 case C.cE2SuccessfulOutcome:
82 msgInfo.MsgType = e2ap.E2AP_SuccessfulOutcome
83 switch minfo.messageId {
84 case C.cRICSubscriptionResponse:
85 msgInfo.MsgId = e2ap.E2AP_RICSubscriptionResponse
87 case C.cRICsubscriptionDeleteResponse:
88 msgInfo.MsgId = e2ap.E2AP_RICSubscriptionDeleteResponse
91 case C.cE2UnsuccessfulOutcome:
92 msgInfo.MsgType = e2ap.E2AP_UnsuccessfulOutcome
93 switch minfo.messageId {
94 case C.cRICSubscriptionFailure:
95 msgInfo.MsgId = e2ap.E2AP_RICSubscriptionFailure
97 case C.cRICsubscriptionDeleteFailure:
98 msgInfo.MsgId = e2ap.E2AP_RICSubscriptionDeleteFailure
105 //-----------------------------------------------------------------------------
107 //-----------------------------------------------------------------------------
108 type e2apEntryRequestID struct {
109 entry *C.RICRequestID_t
112 func (e2Item *e2apEntryRequestID) set(id *e2ap.RequestId) error {
113 e2Item.entry.ricRequestorID = (C.uint32_t)(id.Id)
114 e2Item.entry.ricInstanceID = (C.uint32_t)(id.InstanceId)
118 func (e2Item *e2apEntryRequestID) get(id *e2ap.RequestId) error {
119 id.Id = (uint32)(e2Item.entry.ricRequestorID)
120 id.InstanceId = (uint32)(e2Item.entry.ricInstanceID)
124 //-----------------------------------------------------------------------------
126 //-----------------------------------------------------------------------------
127 type e2apEntryActionToBeSetupItem struct {
128 entry *C.RICActionToBeSetupItem_t
131 func (e2Item *e2apEntryActionToBeSetupItem) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.ActionToBeSetupItem) error {
133 e2Item.entry.ricActionID = (C.ulong)(id.ActionId)
134 e2Item.entry.ricActionType = (C.uint64_t)(id.ActionType)
135 if id.RicActionDefinitionPresent {
136 e2Item.entry.ricActionDefinitionPresent = true
137 if err := (&e2apEntryActionDefinitionChoice{entry: &e2Item.entry.ricActionDefinitionChoice}).set(dynMemHead, &id.ActionDefinitionChoice); err != nil {
141 if id.SubsequentAction.Present {
142 e2Item.entry.ricSubsequentActionPresent = true
143 e2Item.entry.ricSubsequentAction.ricSubsequentActionType = (C.uint64_t)(id.SubsequentAction.Type)
144 e2Item.entry.ricSubsequentAction.ricTimeToWait = (C.uint64_t)(id.SubsequentAction.TimetoWait)
149 func (e2Item *e2apEntryActionToBeSetupItem) get(id *e2ap.ActionToBeSetupItem) error {
151 id.ActionId = (uint64)(e2Item.entry.ricActionID)
152 id.ActionType = (uint64)(e2Item.entry.ricActionType)
153 if e2Item.entry.ricActionDefinitionPresent {
154 id.RicActionDefinitionPresent = true
155 if err := (&e2apEntryActionDefinitionChoice{entry: &e2Item.entry.ricActionDefinitionChoice}).get(&id.ActionDefinitionChoice); err != nil {
159 if e2Item.entry.ricSubsequentActionPresent {
160 id.SubsequentAction.Present = true
161 id.SubsequentAction.Type = (uint64)(e2Item.entry.ricSubsequentAction.ricSubsequentActionType)
162 id.SubsequentAction.TimetoWait = (uint64)(e2Item.entry.ricSubsequentAction.ricTimeToWait)
167 //-----------------------------------------------------------------------------
169 //-----------------------------------------------------------------------------
170 type e2apEntryActionDefinitionChoice struct {
171 entry *C.RICActionDefinitionChoice_t
174 func (e2Item *e2apEntryActionDefinitionChoice) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.ActionDefinitionChoice) error {
176 if id.ActionDefinitionX2Format1Present {
177 e2Item.entry.actionDefinitionX2Format1Present = true
178 errorNro := C.allocActionDefinitionX2Format1(dynMemHead, &e2Item.entry.actionDefinitionX2Format1)
179 if errorNro != C.e2err_OK {
180 return fmt.Errorf("e2err(%s)", C.GoString(C.getE2ErrorString(errorNro)))
182 if err := (&e2apEntryE2SMgNBX2actionDefinition{entry: e2Item.entry.actionDefinitionX2Format1}).set(dynMemHead, &id.ActionDefinitionX2Format1); err != nil {
186 } else if id.ActionDefinitionX2Format2Present {
187 e2Item.entry.actionDefinitionX2Format2Present = true
188 errorNro := C.allocActionDefinitionX2Format2(dynMemHead, &e2Item.entry.actionDefinitionX2Format2)
189 if errorNro != C.e2err_OK {
190 return fmt.Errorf("e2err(%s)", C.GoString(C.getE2ErrorString(errorNro)))
192 if err := (&e2apEntryActionDefinitionFormat2{entry: e2Item.entry.actionDefinitionX2Format2}).set(dynMemHead, &id.ActionDefinitionX2Format2); err != nil {
195 } else if id.ActionDefinitionNRTFormat1Present {
196 e2Item.entry.actionDefinitionNRTFormat1Present = true
197 errorNro := C.allocActionDefinitionNRTFormat1(dynMemHead, &e2Item.entry.actionDefinitionNRTFormat1)
198 if errorNro != C.e2err_OK {
199 return fmt.Errorf("e2err(%s)", C.GoString(C.getE2ErrorString(errorNro)))
201 if err := (&e2apEntryE2SMgNBNRTactionDefinitionFormat1{entry: e2Item.entry.actionDefinitionNRTFormat1}).set(dynMemHead, &id.ActionDefinitionNRTFormat1); err != nil {
205 return fmt.Errorf("Set() Missing mandatory ActionDefinition element")
210 func (e2Item *e2apEntryActionDefinitionChoice) get(id *e2ap.ActionDefinitionChoice) error {
211 if e2Item.entry.actionDefinitionX2Format1Present {
212 id.ActionDefinitionX2Format1Present = true
213 if err := (&e2apEntryE2SMgNBX2actionDefinition{entry: e2Item.entry.actionDefinitionX2Format1}).get(&id.ActionDefinitionX2Format1); err != nil {
216 } else if e2Item.entry.actionDefinitionX2Format2Present {
217 id.ActionDefinitionX2Format2Present = true
218 if err := (&e2apEntryActionDefinitionFormat2{entry: e2Item.entry.actionDefinitionX2Format2}).get(&id.ActionDefinitionX2Format2); err != nil {
221 } else if e2Item.entry.actionDefinitionNRTFormat1Present {
222 id.ActionDefinitionNRTFormat1Present = true
223 if err := (&e2apEntryE2SMgNBNRTactionDefinitionFormat1{entry: e2Item.entry.actionDefinitionNRTFormat1}).get(&id.ActionDefinitionNRTFormat1); err != nil {
227 return fmt.Errorf("Get() Missing mandatory ActionDefinition element")
232 //-----------------------------------------------------------------------------
234 //-----------------------------------------------------------------------------
235 type e2apEntryE2SMgNBX2actionDefinition struct {
236 entry *C.E2SMgNBX2actionDefinition_t
239 func (e2Item *e2apEntryE2SMgNBX2actionDefinition) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.E2SMgNBX2actionDefinition) error {
241 e2Item.entry.styleID = (C.uint64_t)(id.StyleID)
243 e2Item.entry.actionParameterCount = 0
244 for i := 0; i < len(id.ActionParameterItems); i++ {
245 if err := (&e2apEntryActionParameterItem{entry: &e2Item.entry.actionParameterItem[i]}).set(dynMemHead, &id.ActionParameterItems[i]); err != nil {
248 e2Item.entry.actionParameterCount++
253 func (e2Item *e2apEntryE2SMgNBX2actionDefinition) get(id *e2ap.E2SMgNBX2actionDefinition) error {
255 id.StyleID = (uint64)(e2Item.entry.styleID)
258 length := (int)(e2Item.entry.actionParameterCount)
259 id.ActionParameterItems = make([]e2ap.ActionParameterItem, length)
260 for i := 0; i < length; i++ {
261 if err := (&e2apEntryActionParameterItem{entry: &e2Item.entry.actionParameterItem[i]}).get(&id.ActionParameterItems[i]); err != nil {
268 //-----------------------------------------------------------------------------
270 //-----------------------------------------------------------------------------
271 type e2apEntryE2SMgNBNRTactionDefinitionFormat1 struct {
272 entry *C.E2SMgNBNRTActionDefinitionFormat1_t
275 func (e2Item *e2apEntryE2SMgNBNRTactionDefinitionFormat1) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.E2SMgNBNRTActionDefinitionFormat1) error {
277 e2Item.entry.ranParameterCount = 0
278 for i := 0; i < len(id.RanParameterList); i++ {
279 if err := (&e2apEntryRANParameterItem{entry: &e2Item.entry.ranParameterList[i]}).set(dynMemHead, &id.RanParameterList[i]); err != nil {
282 e2Item.entry.ranParameterCount++
287 func (e2Item *e2apEntryE2SMgNBNRTactionDefinitionFormat1) get(id *e2ap.E2SMgNBNRTActionDefinitionFormat1) error {
289 length := (int)(e2Item.entry.ranParameterCount)
290 id.RanParameterList = make([]e2ap.RANParameterItem, length)
291 for i := 0; i < length; i++ {
292 if err := (&e2apEntryRANParameterItem{entry: &e2Item.entry.ranParameterList[i]}).get(&id.RanParameterList[i]); err != nil {
299 //-----------------------------------------------------------------------------
301 //-----------------------------------------------------------------------------
302 type e2apEntryActionParameterItem struct {
303 entry *C.ActionParameterItem_t
306 func (e2Item *e2apEntryActionParameterItem) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.ActionParameterItem) error {
308 e2Item.entry.parameterID = (C.uint32_t)(id.ParameterID)
309 if err := (&e2apEntryActionParameterValue{entry: &e2Item.entry.actionParameterValue}).set(dynMemHead, &id.ActionParameterValue); err != nil {
315 func (e2Item *e2apEntryActionParameterItem) get(id *e2ap.ActionParameterItem) error {
317 id.ParameterID = (uint32)(e2Item.entry.parameterID)
318 if err := (&e2apEntryActionParameterValue{entry: &e2Item.entry.actionParameterValue}).get(&id.ActionParameterValue); err != nil {
324 //-----------------------------------------------------------------------------
326 //-----------------------------------------------------------------------------
327 type e2apEntryActionParameterValue struct {
328 entry *C.ActionParameterValue_t
331 func (e2Item *e2apEntryActionParameterValue) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.ActionParameterValue) error {
333 if id.ValueIntPresent {
334 e2Item.entry.valueInt = (C.int64_t)(id.ValueInt)
335 e2Item.entry.valueIntPresent = true
336 } else if id.ValueEnumPresent {
337 e2Item.entry.valueEnum = (C.int64_t)(id.ValueEnum)
338 e2Item.entry.valueEnumPresent = true
339 } else if id.ValueBoolPresent {
340 e2Item.entry.valueBool = (C.bool)(id.ValueBool)
341 e2Item.entry.valueBoolPresent = true
342 } else if id.ValueBitSPresent {
343 if C.addBitString(dynMemHead, &e2Item.entry.valueBitS, (C.uint64_t)(id.ValueBitS.Length), unsafe.Pointer(&id.ValueBitS.Data[0]), (C.uint8_t)(id.ValueBitS.UnusedBits)) == false {
344 return fmt.Errorf("Alloc valueBitS fail")
346 e2Item.entry.valueBitSPresent = true
347 } else if id.ValueOctSPresent {
348 if C.addOctetString(dynMemHead, &e2Item.entry.valueOctS, (C.uint64_t)(id.ValueOctS.Length), unsafe.Pointer(&id.ValueOctS.Data[0])) == false {
349 return fmt.Errorf("Alloc valueOctS fail")
351 e2Item.entry.valueOctSPresent = true
352 } else if id.ValuePrtSPresent {
353 if C.addOctetString(dynMemHead, &e2Item.entry.valuePrtS, (C.uint64_t)(id.ValuePrtS.Length), unsafe.Pointer(&id.ValuePrtS.Data[0])) == false {
354 return fmt.Errorf("Alloc valuePrtS fail")
356 e2Item.entry.valuePrtSPresent = true
361 func (e2Item *e2apEntryActionParameterValue) get(id *e2ap.ActionParameterValue) error {
363 if e2Item.entry.valueIntPresent {
364 id.ValueInt = (int64)(e2Item.entry.valueInt)
365 id.ValueIntPresent = true
366 } else if e2Item.entry.valueEnumPresent {
367 id.ValueEnum = (int64)(e2Item.entry.valueEnum)
368 id.ValueEnumPresent = true
369 } else if e2Item.entry.valueBoolPresent {
370 id.ValueBool = (bool)(e2Item.entry.valueBool)
371 id.ValueBoolPresent = true
372 } else if e2Item.entry.valueBitSPresent {
373 id.ValueBitSPresent = true
374 id.ValueBitS.Length = (uint64)(e2Item.entry.valueBitS.byteLength)
375 id.ValueBitS.UnusedBits = (uint8)(e2Item.entry.valueBitS.unusedBits)
376 id.ValueBitS.Data = make([]uint8, id.ValueBitS.Length)
377 C.memcpy(unsafe.Pointer(&id.ValueBitS.Data[0]), unsafe.Pointer(e2Item.entry.valueBitS.data), C.size_t(e2Item.entry.valueBitS.byteLength))
378 } else if e2Item.entry.valueOctSPresent {
379 id.ValueOctSPresent = true
380 id.ValueOctS.Length = (uint64)(e2Item.entry.valueOctS.length)
381 id.ValueOctS.Data = make([]uint8, id.ValueOctS.Length)
382 C.memcpy(unsafe.Pointer(&id.ValueOctS.Data[0]), unsafe.Pointer(e2Item.entry.valueOctS.data), C.size_t(e2Item.entry.valueOctS.length))
383 } else if e2Item.entry.valuePrtSPresent {
384 id.ValuePrtSPresent = true
385 id.ValuePrtS.Length = (uint64)(e2Item.entry.valuePrtS.length)
386 id.ValuePrtS.Data = make([]uint8, id.ValuePrtS.Length)
387 C.memcpy(unsafe.Pointer(&id.ValuePrtS.Data[0]), unsafe.Pointer(e2Item.entry.valuePrtS.data), C.size_t(e2Item.entry.valuePrtS.length))
392 //-----------------------------------------------------------------------------
394 //-----------------------------------------------------------------------------
395 type e2apEntryActionDefinitionFormat2 struct {
396 entry *C.E2SMgNBX2ActionDefinitionFormat2_t
399 func (e2Item *e2apEntryActionDefinitionFormat2) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.ActionDefinitionFormat2) error {
401 e2Item.entry.ranUeGroupCount = 0
402 for i := 0; i < len(id.RanUEgroupItems); i++ {
403 if err := (&e2apEntryRANueGroupItem{entry: &e2Item.entry.ranUeGroupItem[i]}).set(dynMemHead, &id.RanUEgroupItems[i]); err != nil {
406 e2Item.entry.ranUeGroupCount++
411 func (e2Item *e2apEntryActionDefinitionFormat2) get(id *e2ap.ActionDefinitionFormat2) error {
413 length := (int)(e2Item.entry.ranUeGroupCount)
414 id.RanUEgroupItems = make([]e2ap.RANueGroupItem, length)
415 for i := 0; i < length; i++ {
416 if err := (&e2apEntryRANueGroupItem{entry: &e2Item.entry.ranUeGroupItem[i]}).get(&id.RanUEgroupItems[i]); err != nil {
423 //-----------------------------------------------------------------------------
425 //-----------------------------------------------------------------------------
426 type e2apEntryRANueGroupItem struct {
427 entry *C.RANueGroupItem_t
430 func (e2Item *e2apEntryRANueGroupItem) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.RANueGroupItem) error {
431 e2Item.entry.ranUEgroupID = (C.int64_t)(id.RanUEgroupID)
432 if err := (&e2apEntryRANueGroupDefinition{entry: &e2Item.entry.ranUEgroupDefinition}).set(dynMemHead, &id.RanUEgroupDefinition); err != nil {
435 if err := (&e2apEntryRANimperativePolicy{entry: &e2Item.entry.ranPolicy}).set(dynMemHead, &id.RanPolicy); err != nil {
441 func (e2Item *e2apEntryRANueGroupItem) get(id *e2ap.RANueGroupItem) error {
442 id.RanUEgroupID = (int64)(e2Item.entry.ranUEgroupID)
443 if err := (&e2apEntryRANueGroupDefinition{entry: &e2Item.entry.ranUEgroupDefinition}).get(&id.RanUEgroupDefinition); err != nil {
446 if err := (&e2apEntryRANimperativePolicy{entry: &e2Item.entry.ranPolicy}).get(&id.RanPolicy); err != nil {
452 //-----------------------------------------------------------------------------
454 //-----------------------------------------------------------------------------
455 type e2apEntryRANueGroupDefinition struct {
456 entry *C.RANueGroupDefinition_t
459 func (e2Item *e2apEntryRANueGroupDefinition) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.RANueGroupDefinition) error {
461 e2Item.entry.ranUeGroupDefCount = 0
462 for i := 0; i < len(id.RanUEGroupDefItems); i++ {
463 if err := (&e2apEntryRANueGroupDefItem{entry: &e2Item.entry.ranUeGroupDefItem[i]}).set(dynMemHead, &id.RanUEGroupDefItems[i]); err != nil {
466 e2Item.entry.ranUeGroupDefCount++
471 func (e2Item *e2apEntryRANueGroupDefinition) get(id *e2ap.RANueGroupDefinition) error {
473 length := (int)(e2Item.entry.ranUeGroupDefCount)
474 id.RanUEGroupDefItems = make([]e2ap.RANueGroupDefItem, length)
475 for i := 0; i < length; i++ {
476 if err := (&e2apEntryRANueGroupDefItem{entry: &e2Item.entry.ranUeGroupDefItem[i]}).get(&id.RanUEGroupDefItems[i]); err != nil {
483 //-----------------------------------------------------------------------------
485 //-----------------------------------------------------------------------------
486 type e2apEntryRANimperativePolicy struct {
487 entry *C.RANimperativePolicy_t
490 func (e2Item *e2apEntryRANimperativePolicy) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.RANimperativePolicy) error {
492 e2Item.entry.ranParameterCount = 0
493 for i := 0; i < len(id.RanParameterItems); i++ {
494 if err := (&e2apEntryRANParameterItem{entry: &e2Item.entry.ranParameterItem[i]}).set(dynMemHead, &id.RanParameterItems[i]); err != nil {
497 e2Item.entry.ranParameterCount++
502 func (e2Item *e2apEntryRANimperativePolicy) get(id *e2ap.RANimperativePolicy) error {
504 length := (int)(e2Item.entry.ranParameterCount)
505 id.RanParameterItems = make([]e2ap.RANParameterItem, length)
506 for i := 0; i < length; i++ {
507 if err := (&e2apEntryRANParameterItem{entry: &e2Item.entry.ranParameterItem[i]}).get(&id.RanParameterItems[i]); err != nil {
514 //-----------------------------------------------------------------------------
516 //-----------------------------------------------------------------------------
517 type e2apEntryRANueGroupDefItem struct {
518 entry *C.RANueGroupDefItem_t
521 func (e2Item *e2apEntryRANueGroupDefItem) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.RANueGroupDefItem) error {
523 e2Item.entry.ranParameterID = (C.uint32_t)(id.RanParameterID)
524 e2Item.entry.ranParameterTest = (C.uint8_t)(id.RanParameterTest)
525 if err := (&e2apEntryRANParameterValue{entry: &e2Item.entry.ranParameterValue}).set(dynMemHead, &id.RanParameterValue); err != nil {
531 func (e2Item *e2apEntryRANueGroupDefItem) get(id *e2ap.RANueGroupDefItem) error {
533 id.RanParameterID = (uint32)(e2Item.entry.ranParameterID)
534 id.RanParameterTest = (uint8)(e2Item.entry.ranParameterTest)
535 if err := (&e2apEntryRANParameterValue{entry: &e2Item.entry.ranParameterValue}).get(&id.RanParameterValue); err != nil {
541 //-----------------------------------------------------------------------------
543 //-----------------------------------------------------------------------------
544 type e2apEntryRANParameterItem struct {
545 entry *C.RANParameterItem_t
548 func (e2Item *e2apEntryRANParameterItem) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.RANParameterItem) error {
550 e2Item.entry.ranParameterID = (C.uint32_t)(id.RanParameterID)
551 if err := (&e2apEntryRANParameterValue{entry: &e2Item.entry.ranParameterValue}).set(dynMemHead, &id.RanParameterValue); err != nil {
557 func (e2Item *e2apEntryRANParameterItem) get(id *e2ap.RANParameterItem) error {
559 id.RanParameterID = (uint8)(e2Item.entry.ranParameterID)
560 if err := (&e2apEntryRANParameterValue{entry: &e2Item.entry.ranParameterValue}).get(&id.RanParameterValue); err != nil {
566 //-----------------------------------------------------------------------------
568 //-----------------------------------------------------------------------------
569 type e2apEntryRANParameterValue struct {
570 entry *C.RANParameterValue_t
573 func (e2Item *e2apEntryRANParameterValue) set(dynMemHead *C.mem_track_hdr_t, id *e2ap.RANParameterValue) error {
575 if id.ValueIntPresent {
576 e2Item.entry.valueInt = (C.int64_t)(id.ValueInt)
577 e2Item.entry.valueIntPresent = true
578 } else if id.ValueEnumPresent {
579 e2Item.entry.valueEnum = (C.int64_t)(id.ValueEnum)
580 e2Item.entry.valueEnumPresent = true
581 } else if id.ValueBoolPresent {
582 e2Item.entry.valueBool = (C.bool)(id.ValueBool)
583 e2Item.entry.valueBoolPresent = true
584 } else if id.ValueBitSPresent {
585 if C.addBitString(dynMemHead, &e2Item.entry.valueBitS, (C.uint64_t)(id.ValueBitS.Length), unsafe.Pointer(&id.ValueBitS.Data[0]), (C.uint8_t)(id.ValueBitS.UnusedBits)) == false {
586 return fmt.Errorf("Alloc valueBitS fail")
588 e2Item.entry.valueBitSPresent = true
589 } else if id.ValueOctSPresent {
590 if C.addOctetString(dynMemHead, &e2Item.entry.valueOctS, (C.uint64_t)(id.ValueOctS.Length), unsafe.Pointer(&id.ValueOctS.Data[0])) == false {
591 return fmt.Errorf("Alloc valueOctS fail")
593 e2Item.entry.valueOctSPresent = true
594 } else if id.ValuePrtSPresent {
595 if C.addOctetString(dynMemHead, &e2Item.entry.valuePrtS, (C.uint64_t)(id.ValuePrtS.Length), unsafe.Pointer(&id.ValuePrtS.Data[0])) == false {
596 return fmt.Errorf("Alloc valuePrtS fail")
598 e2Item.entry.valuePrtSPresent = true
603 func (e2Item *e2apEntryRANParameterValue) get(id *e2ap.RANParameterValue) error {
605 if e2Item.entry.valueIntPresent {
606 id.ValueInt = (int64)(e2Item.entry.valueInt)
607 id.ValueIntPresent = true
608 } else if e2Item.entry.valueEnumPresent {
609 id.ValueEnum = (int64)(e2Item.entry.valueEnum)
610 id.ValueEnumPresent = true
611 } else if e2Item.entry.valueBoolPresent {
612 id.ValueBool = (bool)(e2Item.entry.valueBool)
613 id.ValueBoolPresent = true
614 } else if e2Item.entry.valueBitSPresent {
615 id.ValueBitSPresent = true
616 id.ValueBitS.Length = (uint64)(e2Item.entry.valueBitS.byteLength)
617 id.ValueBitS.UnusedBits = (uint8)(e2Item.entry.valueBitS.unusedBits)
618 id.ValueBitS.Data = make([]uint8, id.ValueBitS.Length)
619 C.memcpy(unsafe.Pointer(&id.ValueBitS.Data[0]), unsafe.Pointer(e2Item.entry.valueBitS.data), C.size_t(e2Item.entry.valueBitS.byteLength))
620 } else if e2Item.entry.valueOctSPresent {
621 id.ValueOctSPresent = true
622 id.ValueOctS.Length = (uint64)(e2Item.entry.valueOctS.length)
623 id.ValueOctS.Data = make([]uint8, id.ValueOctS.Length)
624 C.memcpy(unsafe.Pointer(&id.ValueOctS.Data[0]), unsafe.Pointer(e2Item.entry.valueOctS.data), C.size_t(e2Item.entry.valueOctS.length))
625 } else if e2Item.entry.valuePrtSPresent {
626 id.ValuePrtSPresent = true
627 id.ValuePrtS.Length = (uint64)(e2Item.entry.valuePrtS.length)
628 id.ValuePrtS.Data = make([]uint8, id.ValuePrtS.Length)
629 C.memcpy(unsafe.Pointer(&id.ValuePrtS.Data[0]), unsafe.Pointer(e2Item.entry.valuePrtS.data), C.size_t(e2Item.entry.valuePrtS.length))
634 //-----------------------------------------------------------------------------
636 //-----------------------------------------------------------------------------
637 type e2apEntryPlmnIdentity struct {
638 entry *C.PLMNIdentity_t
641 func (plmnId *e2apEntryPlmnIdentity) set(id conv.PlmnIdentityIf) error {
643 buf := new(bytes.Buffer)
646 plmnId.entry.contentLength = (C.uint8_t)(len(data))
647 for i := 0; i < len(data); i++ {
648 plmnId.entry.pLMNIdentityVal[i] = (C.uint8_t)(data[i])
653 func (plmnId *e2apEntryPlmnIdentity) get(id conv.PlmnIdentityIf) error {
654 conlen := (int)(plmnId.entry.contentLength)
655 bcdBuf := make([]uint8, conlen)
656 for i := 0; i < conlen; i++ {
657 bcdBuf[i] = (uint8)(plmnId.entry.pLMNIdentityVal[i])
659 reader := bytes.NewReader(bcdBuf)
660 id.DecodeFrom(reader)
664 //-----------------------------------------------------------------------------
666 //-----------------------------------------------------------------------------
667 type e2apEntryGlobalEnbId struct {
668 entry *C.GlobalNodeID_t
671 func (enbId *e2apEntryGlobalEnbId) checkbits(bits uint8) error {
673 case e2ap.E2AP_ENBIDMacroPBits20:
675 case e2ap.E2AP_ENBIDHomeBits28:
677 case e2ap.E2AP_ENBIDShortMacroits18:
679 case e2ap.E2AP_ENBIDlongMacroBits21:
682 return fmt.Errorf("GlobalEnbId: given bits %d not match allowed: 20,28,18,21", bits)
685 func (enbId *e2apEntryGlobalEnbId) set(id *e2ap.GlobalNodeId) error {
686 if err := enbId.checkbits(id.NodeId.Bits); err != nil {
689 enbId.entry.nodeID.bits = (C.uchar)(id.NodeId.Bits)
690 enbId.entry.nodeID.nodeID = (C.uint32_t)(id.NodeId.Id)
691 return (&e2apEntryPlmnIdentity{entry: &enbId.entry.pLMNIdentity}).set(&id.PlmnIdentity)
694 func (enbId *e2apEntryGlobalEnbId) get(id *e2ap.GlobalNodeId) error {
695 if err := enbId.checkbits((uint8)(enbId.entry.nodeID.bits)); err != nil {
698 id.NodeId.Bits = (uint8)(enbId.entry.nodeID.bits)
699 id.NodeId.Id = (uint32)(enbId.entry.nodeID.nodeID)
700 return (&e2apEntryPlmnIdentity{entry: &enbId.entry.pLMNIdentity}).get(&id.PlmnIdentity)
703 //-----------------------------------------------------------------------------
705 //-----------------------------------------------------------------------------
706 type e2apEntryGlobalGnbId struct {
707 entry *C.GlobalNodeID_t
710 func (gnbId *e2apEntryGlobalGnbId) checkbits(bits uint8) error {
711 if bits < 22 || bits > 32 {
712 return fmt.Errorf("GlobalGnbId: given bits %d not match allowed: 22-32", bits)
717 func (gnbId *e2apEntryGlobalGnbId) set(id *e2ap.GlobalNodeId) error {
718 if err := gnbId.checkbits(id.NodeId.Bits); err != nil {
721 gnbId.entry.nodeID.bits = (C.uchar)(id.NodeId.Bits)
722 gnbId.entry.nodeID.nodeID = (C.uint32_t)(id.NodeId.Id)
723 return (&e2apEntryPlmnIdentity{entry: &gnbId.entry.pLMNIdentity}).set(&id.PlmnIdentity)
726 func (gnbId *e2apEntryGlobalGnbId) get(id *e2ap.GlobalNodeId) error {
727 if err := gnbId.checkbits((uint8)(gnbId.entry.nodeID.bits)); err != nil {
730 id.NodeId.Bits = (uint8)(gnbId.entry.nodeID.bits)
731 id.NodeId.Id = (uint32)(gnbId.entry.nodeID.nodeID)
732 return (&e2apEntryPlmnIdentity{entry: &gnbId.entry.pLMNIdentity}).get(&id.PlmnIdentity)
735 //-----------------------------------------------------------------------------
737 //-----------------------------------------------------------------------------
738 type e2apEntryInterfaceId struct {
739 entry *C.InterfaceID_t
742 func (indId *e2apEntryInterfaceId) set(id *e2ap.InterfaceId) error {
743 if id.GlobalEnbId.Present {
744 indId.entry.globalENBIDPresent = true
745 if err := (&e2apEntryGlobalEnbId{entry: &indId.entry.globalENBID}).set(&id.GlobalEnbId); err != nil {
750 if id.GlobalGnbId.Present {
751 indId.entry.globalGNBIDPresent = true
752 if err := (&e2apEntryGlobalGnbId{entry: &indId.entry.globalGNBID}).set(&id.GlobalGnbId); err != nil {
759 func (indId *e2apEntryInterfaceId) get(id *e2ap.InterfaceId) error {
760 if indId.entry.globalENBIDPresent == true {
761 id.GlobalEnbId.Present = true
762 if err := (&e2apEntryGlobalEnbId{entry: &indId.entry.globalENBID}).get(&id.GlobalEnbId); err != nil {
767 if indId.entry.globalGNBIDPresent == true {
768 id.GlobalGnbId.Present = true
769 if err := (&e2apEntryGlobalGnbId{entry: &indId.entry.globalGNBID}).get(&id.GlobalGnbId); err != nil {
776 //-----------------------------------------------------------------------------
778 //-----------------------------------------------------------------------------
779 type e2apEntryEventTrigger struct {
780 entry *C.RICEventTriggerDefinition_t
783 func (evtTrig *e2apEntryEventTrigger) set(id *e2ap.EventTriggerDefinition) error {
784 if id.NBX2EventTriggerDefinitionPresent {
785 evtTrig.entry.E2SMgNBX2EventTriggerDefinitionPresent = true
786 return (&e2apEntryX2EventTrigger{entry: &evtTrig.entry.e2SMgNBX2eventTriggerDefinition}).set(&id.X2EventTriggerDefinition)
788 } else if id.NBNRTEventTriggerDefinitionPresent {
789 evtTrig.entry.E2SMgNBNRTEventTriggerDefinitionPresent = true
790 return (&e2apEntryNRTEventTrigger{entry: &evtTrig.entry.e2SMgNBNRTEventTriggerDefinition}).set(&id.NBNRTEventTriggerDefinition)
792 return fmt.Errorf("Set() empty EventTriggerDefinition")
795 func (evtTrig *e2apEntryEventTrigger) get(id *e2ap.EventTriggerDefinition) error {
796 if evtTrig.entry.E2SMgNBX2EventTriggerDefinitionPresent {
797 id.NBX2EventTriggerDefinitionPresent = true
798 return (&e2apEntryX2EventTrigger{entry: &evtTrig.entry.e2SMgNBX2eventTriggerDefinition}).get(&id.X2EventTriggerDefinition)
800 } else if evtTrig.entry.E2SMgNBNRTEventTriggerDefinitionPresent {
801 id.NBNRTEventTriggerDefinitionPresent = true
802 return (&e2apEntryNRTEventTrigger{entry: &evtTrig.entry.e2SMgNBNRTEventTriggerDefinition}).get(&id.NBNRTEventTriggerDefinition)
804 return fmt.Errorf("Get() empty EventTriggerDefinition")
807 //-----------------------------------------------------------------------------
809 //-----------------------------------------------------------------------------
810 type e2apEntryX2EventTrigger struct {
811 entry *C.E2SMgNBX2eventTriggerDefinition_t
814 func (evtTrig *e2apEntryX2EventTrigger) set(id *e2ap.X2EventTriggerDefinition) error {
815 evtTrig.entry.interfaceDirection = (C.uint8_t)(id.InterfaceDirection)
816 evtTrig.entry.interfaceMessageType.procedureCode = (C.uint8_t)(id.ProcedureCode)
817 evtTrig.entry.interfaceMessageType.typeOfMessage = (C.uint8_t)(id.TypeOfMessage)
818 return (&e2apEntryInterfaceId{entry: &evtTrig.entry.interfaceID}).set(&id.InterfaceId)
821 func (evtTrig *e2apEntryX2EventTrigger) get(id *e2ap.X2EventTriggerDefinition) error {
822 id.InterfaceDirection = (uint32)(evtTrig.entry.interfaceDirection)
823 id.ProcedureCode = (uint32)(evtTrig.entry.interfaceMessageType.procedureCode)
824 id.TypeOfMessage = (uint64)(evtTrig.entry.interfaceMessageType.typeOfMessage)
825 return (&e2apEntryInterfaceId{entry: &evtTrig.entry.interfaceID}).get(&id.InterfaceId)
828 //-----------------------------------------------------------------------------
830 //-----------------------------------------------------------------------------
831 type e2apEntryNRTEventTrigger struct {
832 entry *C.E2SMgNBNRTEventTriggerDefinition_t
835 func (evtTrig *e2apEntryNRTEventTrigger) set(id *e2ap.NBNRTEventTriggerDefinition) error {
836 evtTrig.entry.eventDefinitionFormat1.triggerNature = (C.uint8_t)(id.TriggerNature)
840 func (evtTrig *e2apEntryNRTEventTrigger) get(id *e2ap.NBNRTEventTriggerDefinition) error {
841 id.TriggerNature = (uint8)(evtTrig.entry.eventDefinitionFormat1.triggerNature)
845 //-----------------------------------------------------------------------------
847 //-----------------------------------------------------------------------------
848 type e2apEntryAdmittedList struct {
849 entry *C.RICActionAdmittedList_t
852 func (item *e2apEntryAdmittedList) set(data *e2ap.ActionAdmittedList) error {
854 if len(data.Items) > 16 {
855 return fmt.Errorf("ActionAdmittedList: too long %d while allowed %d", len(data.Items), 16)
858 item.entry.contentLength = 0
859 for i := 0; i < len(data.Items); i++ {
860 item.entry.ricActionID[item.entry.contentLength] = (C.ulong)(data.Items[i].ActionId)
861 item.entry.contentLength++
866 func (item *e2apEntryAdmittedList) get(data *e2ap.ActionAdmittedList) error {
867 conlen := (int)(item.entry.contentLength)
868 data.Items = make([]e2ap.ActionAdmittedItem, conlen)
869 for i := 0; i < conlen; i++ {
870 data.Items[i].ActionId = (uint64)(item.entry.ricActionID[i])
875 //-----------------------------------------------------------------------------
877 //-----------------------------------------------------------------------------
878 type e2apEntryNotAdmittedList struct {
879 entry *C.RICActionNotAdmittedList_t
882 func (item *e2apEntryNotAdmittedList) set(data *e2ap.ActionNotAdmittedList) error {
884 if len(data.Items) > 16 {
885 return fmt.Errorf("e2apEntryNotAdmittedList: too long %d while allowed %d", len(data.Items), 16)
888 item.entry.contentLength = 0
889 for i := 0; i < len(data.Items); i++ {
890 item.entry.RICActionNotAdmittedItem[item.entry.contentLength].ricActionID = (C.ulong)(data.Items[i].ActionId)
891 item.entry.RICActionNotAdmittedItem[item.entry.contentLength].cause.content = (C.uchar)(data.Items[i].Cause.Content)
892 item.entry.RICActionNotAdmittedItem[item.entry.contentLength].cause.causeVal = (C.uchar)(data.Items[i].Cause.Value)
893 item.entry.contentLength++
899 func (item *e2apEntryNotAdmittedList) get(data *e2ap.ActionNotAdmittedList) error {
900 conlen := (int)(item.entry.contentLength)
901 data.Items = make([]e2ap.ActionNotAdmittedItem, conlen)
902 for i := 0; i < conlen; i++ {
903 data.Items[i].ActionId = (uint64)(item.entry.RICActionNotAdmittedItem[i].ricActionID)
904 data.Items[i].Cause.Content = (uint8)(item.entry.RICActionNotAdmittedItem[i].cause.content)
905 data.Items[i].Cause.Value = (uint8)(item.entry.RICActionNotAdmittedItem[i].cause.causeVal)
910 //-----------------------------------------------------------------------------
912 //-----------------------------------------------------------------------------
913 type e2apEntryCriticalityDiagnostic struct {
914 entry *C.CriticalityDiagnostics__t
917 func (item *e2apEntryCriticalityDiagnostic) set(data *e2ap.CriticalityDiagnostics) error {
919 item.entry.procedureCodePresent = (C.bool)(data.ProcCodePresent)
920 item.entry.procedureCode = (C.uchar)(data.ProcCode)
922 item.entry.triggeringMessagePresent = (C.bool)(data.TrigMsgPresent)
923 item.entry.triggeringMessage = (C.uchar)(data.TrigMsg)
925 item.entry.procedureCriticalityPresent = (C.bool)(data.ProcCritPresent)
926 item.entry.procedureCriticality = (C.uchar)(data.ProcCrit)
928 item.entry.criticalityDiagnosticsIELength = 0
929 item.entry.iEsCriticalityDiagnosticsPresent = false
930 for i := 0; i < len(data.CriticalityDiagnosticsIEList.Items); i++ {
931 item.entry.criticalityDiagnosticsIEListItem[i].iECriticality = (C.uint8_t)(data.CriticalityDiagnosticsIEList.Items[i].IeCriticality)
932 item.entry.criticalityDiagnosticsIEListItem[i].iE_ID = (C.uint32_t)(data.CriticalityDiagnosticsIEList.Items[i].IeID)
933 item.entry.criticalityDiagnosticsIEListItem[i].typeOfError = (C.uint8_t)(data.CriticalityDiagnosticsIEList.Items[i].TypeOfError)
934 item.entry.criticalityDiagnosticsIELength++
935 item.entry.iEsCriticalityDiagnosticsPresent = true
940 func (item *e2apEntryCriticalityDiagnostic) get(data *e2ap.CriticalityDiagnostics) error {
942 data.ProcCodePresent = (bool)(item.entry.procedureCodePresent)
943 data.ProcCode = (uint64)(item.entry.procedureCode)
945 data.TrigMsgPresent = (bool)(item.entry.triggeringMessagePresent)
946 data.TrigMsg = (uint64)(item.entry.triggeringMessage)
948 data.ProcCritPresent = (bool)(item.entry.procedureCriticalityPresent)
949 data.ProcCrit = (uint8)(item.entry.procedureCriticality)
951 if item.entry.iEsCriticalityDiagnosticsPresent == true {
952 conlen := (int)(item.entry.criticalityDiagnosticsIELength)
953 data.CriticalityDiagnosticsIEList.Items = make([]e2ap.CriticalityDiagnosticsIEListItem, conlen)
954 for i := 0; i < conlen; i++ {
955 data.CriticalityDiagnosticsIEList.Items[i].IeCriticality = (uint8)(item.entry.criticalityDiagnosticsIEListItem[i].iECriticality)
956 data.CriticalityDiagnosticsIEList.Items[i].IeID = (uint32)(item.entry.criticalityDiagnosticsIEListItem[i].iE_ID)
957 data.CriticalityDiagnosticsIEList.Items[i].TypeOfError = (uint8)(item.entry.criticalityDiagnosticsIEListItem[i].typeOfError)
964 //-----------------------------------------------------------------------------
966 //-----------------------------------------------------------------------------
967 type e2apEntryCallProcessId struct {
968 entry *C.RICCallProcessID_t
971 func (callProcId *e2apEntryCallProcessId) set(data *e2ap.CallProcessId) error {
972 callProcId.entry.ricCallProcessIDVal = (C.uint64_t)(data.CallProcessIDVal)
976 func (callProcId *e2apEntryCallProcessId) get(data *e2ap.CallProcessId) error {
977 data.CallProcessIDVal = (uint32)(callProcId.entry.ricCallProcessIDVal)
982 //-----------------------------------------------------------------------------
984 //-----------------------------------------------------------------------------
986 type e2apMessagePacker struct {
987 expectedInfo C.E2MessageInfo_t
988 pduMsgInfo C.E2MessageInfo_t
989 pdu *C.e2ap_pdu_ptr_t
995 func (e2apMsg *e2apMessagePacker) init(minfo C.E2MessageInfo_t) {
996 e2apMsg.expectedInfo = minfo
997 e2apMsg.lb = make([]byte, cLogBufferMaxSize)
999 e2apMsg.p = C.malloc(C.size_t(cMsgBufferMaxSize))
1000 e2apMsg.plen = C.size_t(cMsgBufferMaxSize) - cMsgBufferExtra
1003 func (e2apMsg *e2apMessagePacker) fini() {
1009 func (e2apMsg *e2apMessagePacker) lbString() string {
1010 return "logbuffer(" + string(e2apMsg.lb[:strings.Index(string(e2apMsg.lb[:]), "\000")]) + ")"
1013 func (e2apMsg *e2apMessagePacker) packeddata() *e2ap.PackedData {
1014 return &e2ap.PackedData{C.GoBytes(e2apMsg.p, C.int(e2apMsg.plen))}
1017 func (e2apMsg *e2apMessagePacker) checkerr(errorNro C.uint64_t) error {
1018 if errorNro != C.e2err_OK {
1019 return fmt.Errorf("e2err(%s) %s", C.GoString(C.getE2ErrorString(errorNro)), e2apMsg.lbString())
1024 func (e2apMsg *e2apMessagePacker) unpacktopdu(data *e2ap.PackedData) error {
1025 e2apMsg.pdu = C.unpackE2AP_pdu((C.size_t)(len(data.Buf)), (*C.uchar)(unsafe.Pointer(&data.Buf[0])), (*C.char)(unsafe.Pointer(&e2apMsg.lb[0])), &e2apMsg.pduMsgInfo)
1026 if e2apMsg.pduMsgInfo.messageType != e2apMsg.expectedInfo.messageType || e2apMsg.pduMsgInfo.messageId != e2apMsg.expectedInfo.messageId {
1027 return fmt.Errorf("unpack e2ap %s %s", e2apMsg.lbString(), e2apMsg.String())
1032 func (e2apMsg *e2apMessagePacker) messageInfoPdu() *e2ap.MessageInfo {
1033 return cMessageInfoToMessageInfo(&e2apMsg.pduMsgInfo)
1036 func (e2apMsg *e2apMessagePacker) messageInfoExpected() *e2ap.MessageInfo {
1037 return cMessageInfoToMessageInfo(&e2apMsg.expectedInfo)
1040 func (e2apMsg *e2apMessagePacker) String() string {
1042 pduInfo := e2apMsg.messageInfoPdu()
1044 ret += "pduinfo(" + pduInfo.String() + ")"
1046 ret += "pduinfo(N/A)"
1048 expInfo := e2apMsg.messageInfoExpected()
1050 ret += " expinfo(" + expInfo.String() + ")"
1052 ret += " expinfo(N/A)"
1057 //-----------------------------------------------------------------------------
1059 //-----------------------------------------------------------------------------
1061 type e2apMsgPackerSubscriptionRequest struct {
1063 msgC *C.RICSubscriptionRequest_t
1064 msgG *e2ap.E2APSubscriptionRequest
1067 func (e2apMsg *e2apMsgPackerSubscriptionRequest) init() {
1068 e2apMsg.e2apMessagePacker.init(C.E2MessageInfo_t{C.cE2InitiatingMessage, C.cRICSubscriptionRequest})
1069 e2apMsg.msgC = &C.RICSubscriptionRequest_t{}
1070 e2apMsg.msgG = &e2ap.E2APSubscriptionRequest{}
1071 C.initSubsRequest(e2apMsg.msgC)
1074 func (e2apMsg *e2apMsgPackerSubscriptionRequest) Pack(data *e2ap.E2APSubscriptionRequest) (error, *e2ap.PackedData) {
1078 defer e2apMsg.fini()
1081 var dynMemHead C.mem_track_hdr_t
1082 C.mem_track_init(&dynMemHead)
1083 defer C.mem_track_free(&dynMemHead)
1085 e2apMsg.msgC.ranFunctionID = (C.uint16_t)(e2apMsg.msgG.FunctionId)
1086 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).set(&e2apMsg.msgG.RequestId); err != nil {
1089 if err := (&e2apEntryEventTrigger{entry: &e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition}).set(&e2apMsg.msgG.EventTriggerDefinition); err != nil {
1092 if len(e2apMsg.msgG.ActionSetups) > 16 {
1093 return fmt.Errorf("IndicationMessage.InterfaceMessage: too long %d while allowed %d", len(e2apMsg.msgG.ActionSetups), 16), nil
1095 e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength = 0
1096 for i := 0; i < len(e2apMsg.msgG.ActionSetups); i++ {
1097 item := &e2apEntryActionToBeSetupItem{entry: &e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength]}
1098 e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength += 1
1099 if err := item.set(&dynMemHead, &e2apMsg.msgG.ActionSetups[i]); err != nil {
1103 errorNro := C.packRICSubscriptionRequest(&e2apMsg.plen, (*C.uchar)(e2apMsg.p), (*C.char)(unsafe.Pointer(&e2apMsg.lb[0])), e2apMsg.msgC)
1104 if err := e2apMsg.checkerr(errorNro); err != nil {
1107 return nil, e2apMsg.packeddata()
1110 func (e2apMsg *e2apMsgPackerSubscriptionRequest) UnPack(msg *e2ap.PackedData) (error, *e2ap.E2APSubscriptionRequest) {
1113 defer e2apMsg.fini()
1115 if err := e2apMsg.e2apMessagePacker.unpacktopdu(msg); err != nil {
1116 return err, e2apMsg.msgG
1119 var dynMemHead C.mem_track_hdr_t
1120 C.mem_track_init(&dynMemHead)
1121 defer C.mem_track_free(&dynMemHead)
1123 errorNro := C.getRICSubscriptionRequestData(&dynMemHead, e2apMsg.e2apMessagePacker.pdu, e2apMsg.msgC)
1124 if err := e2apMsg.checkerr(errorNro); err != nil {
1125 return err, e2apMsg.msgG
1128 e2apMsg.msgG.FunctionId = (e2ap.FunctionId)(e2apMsg.msgC.ranFunctionID)
1129 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).get(&e2apMsg.msgG.RequestId); err != nil {
1130 return err, e2apMsg.msgG
1132 if err := (&e2apEntryEventTrigger{entry: &e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition}).get(&e2apMsg.msgG.EventTriggerDefinition); err != nil {
1133 return err, e2apMsg.msgG
1135 conlen := (int)(e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength)
1136 e2apMsg.msgG.ActionSetups = make([]e2ap.ActionToBeSetupItem, conlen)
1137 for i := 0; i < conlen; i++ {
1138 item := &e2apEntryActionToBeSetupItem{entry: &e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[i]}
1139 if err := item.get(&e2apMsg.msgG.ActionSetups[i]); err != nil {
1140 return err, e2apMsg.msgG
1143 return nil, e2apMsg.msgG
1147 func (e2apMsg *e2apMsgPackerSubscriptionRequest) String() string {
1149 fmt.Fprintln(&b, "ricSubscriptionRequest.")
1150 fmt.Fprintln(&b, " ricRequestID.")
1151 fmt.Fprintln(&b, " ricRequestorID =", e2apMsg.msgC.ricRequestID.ricRequestorID)
1152 fmt.Fprintln(&b, " ricInstanceID =", e2apMsg.msgC.ricRequestID.ricInstanceID)
1153 fmt.Fprintln(&b, " ranFunctionID =", e2apMsg.msgC.ranFunctionID)
1154 fmt.Fprintln(&b, " ricSubscriptionDetails.")
1155 fmt.Fprintln(&b, " ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.")
1156 fmt.Fprintln(&b, " contentLength =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength)
1157 fmt.Fprintln(&b, " interfaceID.globalENBIDPresent =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBIDPresent)
1158 if e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBIDPresent {
1159 fmt.Fprintln(&b, " interfaceID.globalENBID.pLMNIdentity.contentLength =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.contentLength)
1160 fmt.Fprintln(&b, " interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[0] =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[0])
1161 fmt.Fprintln(&b, " interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[1] =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[1])
1162 fmt.Fprintln(&b, " interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[2] =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[2])
1163 fmt.Fprintln(&b, " interfaceID.globalENBID.nodeID.bits =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.bits)
1164 fmt.Fprintln(&b, " interfaceID.globalENBID.nodeID.nodeID =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID)
1166 fmt.Fprintln(&b, " interfaceID.globalGNBIDPresent =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBIDPresent)
1167 if e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBIDPresent {
1168 fmt.Fprintln(&b, " interfaceID.globalGNBID.pLMNIdentity.contentLength =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.contentLength)
1169 fmt.Fprintln(&b, " interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[0] =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[0])
1170 fmt.Fprintln(&b, " interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[1] =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[1])
1171 fmt.Fprintln(&b, " interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[2] =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[2])
1172 fmt.Fprintln(&b, " interfaceID.globalGNBID.nodeID.bits =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.nodeID.bits)
1173 fmt.Fprintln(&b, " interfaceID.globalGNBID.nodeID.nodeID =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.nodeID.nodeID)
1175 fmt.Fprintln(&b, " interfaceDirection = ", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceDirection)
1176 fmt.Fprintln(&b, " interfaceMessageType.procedureCode =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceMessageType.procedureCode)
1177 fmt.Fprintln(&b, " interfaceMessageType.typeOfMessage =", e2apMsg.msgC.ricSubscriptionDetails.ricEventTriggerDefinition.e2SMgNBX2eventTriggerDefinition.interfaceMessageType.typeOfMessage)
1178 fmt.Fprintln(&b, " ricActionToBeSetupItemIEs.")
1179 fmt.Fprintln(&b, " contentLength =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength)
1182 for (C.uchar)(index) < e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength {
1183 fmt.Fprintln(&b, " ricActionToBeSetupItem[index].ricActionID =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID)
1184 fmt.Fprintln(&b, " ricActionToBeSetupItem[index].ricActionType =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType)
1186 fmt.Fprintln(&b, " ricActionToBeSetupItem[index].ricActionDefinitionPresent =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent)
1187 if e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent {
1188 fmt.Fprintln(&b, " ricActionToBeSetupItem[index].ricActionDefinitionChoice.actionDefinitionX2Format1Present =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.actionDefinitionX2Format1Present)
1189 fmt.Fprintln(&b, " ricActionToBeSetupItem[index].ricActionDefinitionChoice.actionDefinitionX2Format2Present =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.actionDefinitionX2Format2Present)
1190 fmt.Fprintln(&b, " ricActionToBeSetupItem[index].ricActionDefinitionChoice.actionDefinitionNRTFormat1Present =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.actionDefinitionNRTFormat1Present)
1191 // Dynamically allocated C-structs are already freed. Can't print those.
1194 fmt.Fprintln(&b, " ricActionToBeSetupItem[index].ricSubsequentActionPresent =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent)
1195 if e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent {
1196 fmt.Fprintln(&b, " ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType)
1197 fmt.Fprintln(&b, " ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait =", e2apMsg.msgC.ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait)
1204 //-----------------------------------------------------------------------------
1206 //-----------------------------------------------------------------------------
1207 type e2apMsgPackerSubscriptionResponse struct {
1209 msgC *C.RICSubscriptionResponse_t
1210 msgG *e2ap.E2APSubscriptionResponse
1213 func (e2apMsg *e2apMsgPackerSubscriptionResponse) init() {
1214 e2apMsg.e2apMessagePacker.init(C.E2MessageInfo_t{C.cE2SuccessfulOutcome, C.cRICSubscriptionResponse})
1215 e2apMsg.msgC = &C.RICSubscriptionResponse_t{}
1216 e2apMsg.msgG = &e2ap.E2APSubscriptionResponse{}
1217 C.initSubsResponse(e2apMsg.msgC)
1220 func (e2apMsg *e2apMsgPackerSubscriptionResponse) Pack(data *e2ap.E2APSubscriptionResponse) (error, *e2ap.PackedData) {
1222 defer e2apMsg.fini()
1225 e2apMsg.msgC.ranFunctionID = (C.uint16_t)(e2apMsg.msgG.FunctionId)
1226 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).set(&e2apMsg.msgG.RequestId); err != nil {
1229 if err := (&e2apEntryAdmittedList{entry: &e2apMsg.msgC.ricActionAdmittedList}).set(&e2apMsg.msgG.ActionAdmittedList); err != nil {
1232 e2apMsg.msgC.ricActionNotAdmittedListPresent = false
1233 if len(e2apMsg.msgG.ActionNotAdmittedList.Items) > 0 {
1234 e2apMsg.msgC.ricActionNotAdmittedListPresent = true
1235 if err := (&e2apEntryNotAdmittedList{entry: &e2apMsg.msgC.ricActionNotAdmittedList}).set(&e2apMsg.msgG.ActionNotAdmittedList); err != nil {
1240 errorNro := C.packRICSubscriptionResponse(&e2apMsg.plen, (*C.uchar)(e2apMsg.p), (*C.char)(unsafe.Pointer(&e2apMsg.lb[0])), e2apMsg.msgC)
1241 if err := e2apMsg.checkerr(errorNro); err != nil {
1244 return nil, e2apMsg.packeddata()
1247 func (e2apMsg *e2apMsgPackerSubscriptionResponse) UnPack(msg *e2ap.PackedData) (error, *e2ap.E2APSubscriptionResponse) {
1250 defer e2apMsg.fini()
1252 if err := e2apMsg.e2apMessagePacker.unpacktopdu(msg); err != nil {
1253 return err, e2apMsg.msgG
1255 errorNro := C.getRICSubscriptionResponseData(e2apMsg.e2apMessagePacker.pdu, e2apMsg.msgC)
1256 if err := e2apMsg.checkerr(errorNro); err != nil {
1257 return err, e2apMsg.msgG
1260 e2apMsg.msgG.FunctionId = (e2ap.FunctionId)(e2apMsg.msgC.ranFunctionID)
1261 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).get(&e2apMsg.msgG.RequestId); err != nil {
1262 return err, e2apMsg.msgG
1264 if err := (&e2apEntryAdmittedList{entry: &e2apMsg.msgC.ricActionAdmittedList}).get(&e2apMsg.msgG.ActionAdmittedList); err != nil {
1265 return err, e2apMsg.msgG
1267 if e2apMsg.msgC.ricActionNotAdmittedListPresent == true {
1268 if err := (&e2apEntryNotAdmittedList{entry: &e2apMsg.msgC.ricActionNotAdmittedList}).get(&e2apMsg.msgG.ActionNotAdmittedList); err != nil {
1269 return err, e2apMsg.msgG
1272 return nil, e2apMsg.msgG
1275 func (e2apMsg *e2apMsgPackerSubscriptionResponse) String() string {
1277 fmt.Fprintln(&b, "ricSubscriptionResponse.")
1278 fmt.Fprintln(&b, " ricRequestID.")
1279 fmt.Fprintln(&b, " ricRequestorID =", e2apMsg.msgC.ricRequestID.ricRequestorID)
1280 fmt.Fprintln(&b, " ricInstanceID =", e2apMsg.msgC.ricRequestID.ricInstanceID)
1281 fmt.Fprintln(&b, " ranFunctionID =", e2apMsg.msgC.ranFunctionID)
1282 fmt.Fprintln(&b, " ricActionAdmittedList.")
1283 fmt.Fprintln(&b, " contentLength =", e2apMsg.msgC.ricActionAdmittedList.contentLength)
1286 for (C.uchar)(index) < e2apMsg.msgC.ricActionAdmittedList.contentLength {
1287 fmt.Fprintln(&b, " ricActionAdmittedList.ricActionID[index] =", e2apMsg.msgC.ricActionAdmittedList.ricActionID[index])
1290 if e2apMsg.msgC.ricActionNotAdmittedListPresent {
1291 fmt.Fprintln(&b, " ricActionNotAdmittedListPresent =", e2apMsg.msgC.ricActionNotAdmittedListPresent)
1292 fmt.Fprintln(&b, " ricActionNotAdmittedList.")
1293 fmt.Fprintln(&b, " contentLength =", e2apMsg.msgC.ricActionNotAdmittedList.contentLength)
1295 for (C.uchar)(index) < e2apMsg.msgC.ricActionNotAdmittedList.contentLength {
1296 fmt.Fprintln(&b, " RICActionNotAdmittedItem[index].ricActionID =", e2apMsg.msgC.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID)
1297 fmt.Fprintln(&b, " RICActionNotAdmittedItem[index].cause.content =", e2apMsg.msgC.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content)
1298 fmt.Fprintln(&b, " RICActionNotAdmittedItem[index].cause.causeVal =", e2apMsg.msgC.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal)
1305 //-----------------------------------------------------------------------------
1307 //-----------------------------------------------------------------------------
1308 type e2apMsgPackerSubscriptionFailure struct {
1310 msgC *C.RICSubscriptionFailure_t
1311 msgG *e2ap.E2APSubscriptionFailure
1314 func (e2apMsg *e2apMsgPackerSubscriptionFailure) init() {
1315 e2apMsg.e2apMessagePacker.init(C.E2MessageInfo_t{C.cE2UnsuccessfulOutcome, C.cRICSubscriptionFailure})
1316 e2apMsg.msgC = &C.RICSubscriptionFailure_t{}
1317 e2apMsg.msgG = &e2ap.E2APSubscriptionFailure{}
1318 C.initSubsFailure(e2apMsg.msgC)
1321 func (e2apMsg *e2apMsgPackerSubscriptionFailure) Pack(data *e2ap.E2APSubscriptionFailure) (error, *e2ap.PackedData) {
1323 defer e2apMsg.fini()
1326 e2apMsg.msgC.ranFunctionID = (C.uint16_t)(e2apMsg.msgG.FunctionId)
1327 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).set(&e2apMsg.msgG.RequestId); err != nil {
1330 if err := (&e2apEntryNotAdmittedList{entry: &e2apMsg.msgC.ricActionNotAdmittedList}).set(&e2apMsg.msgG.ActionNotAdmittedList); err != nil {
1333 e2apMsg.msgC.criticalityDiagnosticsPresent = false
1334 if e2apMsg.msgG.CriticalityDiagnostics.Present {
1335 e2apMsg.msgC.criticalityDiagnosticsPresent = true
1336 if err := (&e2apEntryCriticalityDiagnostic{entry: &e2apMsg.msgC.criticalityDiagnostics}).set(&e2apMsg.msgG.CriticalityDiagnostics); err != nil {
1341 errorNro := C.packRICSubscriptionFailure(&e2apMsg.plen, (*C.uchar)(e2apMsg.p), (*C.char)(unsafe.Pointer(&e2apMsg.lb[0])), e2apMsg.msgC)
1342 if err := e2apMsg.checkerr(errorNro); err != nil {
1345 return nil, e2apMsg.packeddata()
1348 func (e2apMsg *e2apMsgPackerSubscriptionFailure) UnPack(msg *e2ap.PackedData) (error, *e2ap.E2APSubscriptionFailure) {
1350 defer e2apMsg.fini()
1352 if err := e2apMsg.e2apMessagePacker.unpacktopdu(msg); err != nil {
1353 return err, e2apMsg.msgG
1355 errorNro := C.getRICSubscriptionFailureData(e2apMsg.e2apMessagePacker.pdu, e2apMsg.msgC)
1356 if err := e2apMsg.checkerr(errorNro); err != nil {
1357 return err, e2apMsg.msgG
1360 e2apMsg.msgG.FunctionId = (e2ap.FunctionId)(e2apMsg.msgC.ranFunctionID)
1361 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).get(&e2apMsg.msgG.RequestId); err != nil {
1362 return err, e2apMsg.msgG
1364 if err := (&e2apEntryNotAdmittedList{entry: &e2apMsg.msgC.ricActionNotAdmittedList}).get(&e2apMsg.msgG.ActionNotAdmittedList); err != nil {
1365 return err, e2apMsg.msgG
1367 if e2apMsg.msgC.criticalityDiagnosticsPresent == true {
1368 e2apMsg.msgG.CriticalityDiagnostics.Present = true
1369 if err := (&e2apEntryCriticalityDiagnostic{entry: &e2apMsg.msgC.criticalityDiagnostics}).get(&e2apMsg.msgG.CriticalityDiagnostics); err != nil {
1370 return err, e2apMsg.msgG
1373 return nil, e2apMsg.msgG
1376 func (e2apMsg *e2apMsgPackerSubscriptionFailure) String() string {
1378 fmt.Fprintln(&b, "ricSubscriptionFailure.")
1379 fmt.Fprintln(&b, " ricRequestID.")
1380 fmt.Fprintln(&b, " ricRequestorID =", e2apMsg.msgC.ricRequestID.ricRequestorID)
1381 fmt.Fprintln(&b, " ricInstanceID =", e2apMsg.msgC.ricRequestID.ricInstanceID)
1382 fmt.Fprintln(&b, " ranFunctionID =", e2apMsg.msgC.ranFunctionID)
1383 fmt.Fprintln(&b, " ricActionNotAdmittedList.")
1384 fmt.Fprintln(&b, " contentLength =", e2apMsg.msgC.ricActionNotAdmittedList.contentLength)
1387 for (C.uchar)(index) < e2apMsg.msgC.ricActionNotAdmittedList.contentLength {
1388 fmt.Fprintln(&b, " RICActionNotAdmittedItem[index].ricActionID =", e2apMsg.msgC.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID)
1389 fmt.Fprintln(&b, " RICActionNotAdmittedItem[index].cause.content =", e2apMsg.msgC.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content)
1390 fmt.Fprintln(&b, " RICActionNotAdmittedItem[index].cause.causeVal =", e2apMsg.msgC.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal)
1394 if e2apMsg.msgC.criticalityDiagnosticsPresent {
1395 fmt.Fprintln(&b, " criticalityDiagnosticsPresent =", e2apMsg.msgC.criticalityDiagnosticsPresent)
1396 fmt.Fprintln(&b, " criticalityDiagnostics.")
1397 fmt.Fprintln(&b, " procedureCodePresent =", e2apMsg.msgC.criticalityDiagnostics.procedureCodePresent)
1398 fmt.Fprintln(&b, " procedureCode =", e2apMsg.msgC.criticalityDiagnostics.procedureCode)
1399 fmt.Fprintln(&b, " triggeringMessagePresent =", e2apMsg.msgC.criticalityDiagnostics.triggeringMessagePresent)
1400 fmt.Fprintln(&b, " triggeringMessage =", e2apMsg.msgC.criticalityDiagnostics.triggeringMessage)
1401 fmt.Fprintln(&b, " procedureCriticalityPresent=", e2apMsg.msgC.criticalityDiagnostics.procedureCriticalityPresent)
1402 fmt.Fprintln(&b, " procedureCriticality =", e2apMsg.msgC.criticalityDiagnostics.procedureCriticality)
1403 fmt.Fprintln(&b, " iEsCriticalityDiagnosticsPresent =", e2apMsg.msgC.criticalityDiagnostics.iEsCriticalityDiagnosticsPresent)
1404 fmt.Fprintln(&b, " criticalityDiagnosticsIELength =", e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIELength)
1407 for (C.ushort)(index2) < e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIELength {
1408 fmt.Fprintln(&b, " criticalityDiagnosticsIEListItem[index2].iECriticality =", e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].iECriticality)
1409 fmt.Fprintln(&b, " criticalityDiagnosticsIEListItem[index2].iE_ID =", e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].iE_ID)
1410 fmt.Fprintln(&b, " criticalityDiagnosticsIEListItem[index2].typeOfError =", e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].typeOfError)
1418 //-----------------------------------------------------------------------------
1420 //-----------------------------------------------------------------------------
1421 type e2apMsgPackerSubscriptionDeleteRequest struct {
1423 msgC *C.RICSubscriptionDeleteRequest_t
1424 msgG *e2ap.E2APSubscriptionDeleteRequest
1427 func (e2apMsg *e2apMsgPackerSubscriptionDeleteRequest) init() {
1428 e2apMsg.e2apMessagePacker.init(C.E2MessageInfo_t{C.cE2InitiatingMessage, C.cRICSubscriptionDeleteRequest})
1429 e2apMsg.msgC = &C.RICSubscriptionDeleteRequest_t{}
1430 e2apMsg.msgG = &e2ap.E2APSubscriptionDeleteRequest{}
1431 C.initSubsDeleteRequest(e2apMsg.msgC)
1434 func (e2apMsg *e2apMsgPackerSubscriptionDeleteRequest) Pack(data *e2ap.E2APSubscriptionDeleteRequest) (error, *e2ap.PackedData) {
1436 defer e2apMsg.fini()
1439 e2apMsg.msgC.ranFunctionID = (C.uint16_t)(e2apMsg.msgG.FunctionId)
1440 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).set(&e2apMsg.msgG.RequestId); err != nil {
1444 errorNro := C.packRICSubscriptionDeleteRequest(&e2apMsg.plen, (*C.uchar)(e2apMsg.p), (*C.char)(unsafe.Pointer(&e2apMsg.lb[0])), e2apMsg.msgC)
1445 if err := e2apMsg.checkerr(errorNro); err != nil {
1448 return nil, e2apMsg.packeddata()
1451 func (e2apMsg *e2apMsgPackerSubscriptionDeleteRequest) UnPack(msg *e2ap.PackedData) (error, *e2ap.E2APSubscriptionDeleteRequest) {
1453 defer e2apMsg.fini()
1455 if err := e2apMsg.e2apMessagePacker.unpacktopdu(msg); err != nil {
1456 return err, e2apMsg.msgG
1458 errorNro := C.getRICSubscriptionDeleteRequestData(e2apMsg.e2apMessagePacker.pdu, e2apMsg.msgC)
1459 if err := e2apMsg.checkerr(errorNro); err != nil {
1460 return err, e2apMsg.msgG
1463 e2apMsg.msgG.FunctionId = (e2ap.FunctionId)(e2apMsg.msgC.ranFunctionID)
1464 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).get(&e2apMsg.msgG.RequestId); err != nil {
1465 return err, e2apMsg.msgG
1467 return nil, e2apMsg.msgG
1471 func (e2apMsg *e2apMsgPackerSubscriptionDeleteRequest) String() string {
1473 fmt.Fprintln(&b, "ricSubscriptionDeleteRequest.")
1474 fmt.Fprintln(&b, " ricRequestID.")
1475 fmt.Fprintln(&b, " ricRequestorID =", e2apMsg.msgC.ricRequestID.ricRequestorID)
1476 fmt.Fprintln(&b, " ricInstanceID =", e2apMsg.msgC.ricRequestID.ricInstanceID)
1477 fmt.Fprintln(&b, " ranFunctionID =", e2apMsg.msgC.ranFunctionID)
1481 //-----------------------------------------------------------------------------
1483 //-----------------------------------------------------------------------------
1484 type e2apMsgPackerSubscriptionDeleteResponse struct {
1486 msgC *C.RICSubscriptionDeleteResponse_t
1487 msgG *e2ap.E2APSubscriptionDeleteResponse
1490 func (e2apMsg *e2apMsgPackerSubscriptionDeleteResponse) init() {
1491 e2apMsg.e2apMessagePacker.init(C.E2MessageInfo_t{C.cE2SuccessfulOutcome, C.cRICsubscriptionDeleteResponse})
1492 e2apMsg.msgC = &C.RICSubscriptionDeleteResponse_t{}
1493 e2apMsg.msgG = &e2ap.E2APSubscriptionDeleteResponse{}
1494 C.initSubsDeleteResponse(e2apMsg.msgC)
1497 func (e2apMsg *e2apMsgPackerSubscriptionDeleteResponse) Pack(data *e2ap.E2APSubscriptionDeleteResponse) (error, *e2ap.PackedData) {
1499 defer e2apMsg.fini()
1502 e2apMsg.msgC.ranFunctionID = (C.uint16_t)(e2apMsg.msgG.FunctionId)
1503 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).set(&e2apMsg.msgG.RequestId); err != nil {
1507 errorNro := C.packRICSubscriptionDeleteResponse(&e2apMsg.plen, (*C.uchar)(e2apMsg.p), (*C.char)(unsafe.Pointer(&e2apMsg.lb[0])), e2apMsg.msgC)
1508 if err := e2apMsg.checkerr(errorNro); err != nil {
1511 return nil, e2apMsg.packeddata()
1514 func (e2apMsg *e2apMsgPackerSubscriptionDeleteResponse) UnPack(msg *e2ap.PackedData) (error, *e2ap.E2APSubscriptionDeleteResponse) {
1516 defer e2apMsg.fini()
1518 if err := e2apMsg.e2apMessagePacker.unpacktopdu(msg); err != nil {
1519 return err, e2apMsg.msgG
1521 errorNro := C.getRICSubscriptionDeleteResponseData(e2apMsg.e2apMessagePacker.pdu, e2apMsg.msgC)
1522 if err := e2apMsg.checkerr(errorNro); err != nil {
1523 return err, e2apMsg.msgG
1526 e2apMsg.msgG.FunctionId = (e2ap.FunctionId)(e2apMsg.msgC.ranFunctionID)
1527 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).get(&e2apMsg.msgG.RequestId); err != nil {
1528 return err, e2apMsg.msgG
1530 return nil, e2apMsg.msgG
1533 func (e2apMsg *e2apMsgPackerSubscriptionDeleteResponse) String() string {
1535 fmt.Fprintln(&b, "ricSubscriptionDeleteResponse.")
1536 fmt.Fprintln(&b, " ricRequestID.")
1537 fmt.Fprintln(&b, " ricRequestorID =", e2apMsg.msgC.ricRequestID.ricRequestorID)
1538 fmt.Fprintln(&b, " ricInstanceID =", e2apMsg.msgC.ricRequestID.ricInstanceID)
1539 fmt.Fprintln(&b, " ranFunctionID =", e2apMsg.msgC.ranFunctionID)
1543 //-----------------------------------------------------------------------------
1545 //-----------------------------------------------------------------------------
1546 type e2apMsgPackerSubscriptionDeleteFailure struct {
1548 msgC *C.RICSubscriptionDeleteFailure_t
1549 msgG *e2ap.E2APSubscriptionDeleteFailure
1552 func (e2apMsg *e2apMsgPackerSubscriptionDeleteFailure) init() {
1553 e2apMsg.e2apMessagePacker.init(C.E2MessageInfo_t{C.cE2UnsuccessfulOutcome, C.cRICsubscriptionDeleteFailure})
1554 e2apMsg.msgC = &C.RICSubscriptionDeleteFailure_t{}
1555 e2apMsg.msgG = &e2ap.E2APSubscriptionDeleteFailure{}
1556 C.initSubsDeleteFailure(e2apMsg.msgC)
1559 func (e2apMsg *e2apMsgPackerSubscriptionDeleteFailure) Pack(data *e2ap.E2APSubscriptionDeleteFailure) (error, *e2ap.PackedData) {
1561 defer e2apMsg.fini()
1564 e2apMsg.msgC.ranFunctionID = (C.uint16_t)(e2apMsg.msgG.FunctionId)
1565 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).set(&e2apMsg.msgG.RequestId); err != nil {
1568 e2apMsg.msgC.cause.content = (C.uchar)(e2apMsg.msgG.Cause.Content)
1569 e2apMsg.msgC.cause.causeVal = (C.uchar)(e2apMsg.msgG.Cause.Value)
1570 e2apMsg.msgC.criticalityDiagnosticsPresent = false
1571 if e2apMsg.msgG.CriticalityDiagnostics.Present {
1572 e2apMsg.msgC.criticalityDiagnosticsPresent = true
1573 if err := (&e2apEntryCriticalityDiagnostic{entry: &e2apMsg.msgC.criticalityDiagnostics}).set(&e2apMsg.msgG.CriticalityDiagnostics); err != nil {
1578 errorNro := C.packRICSubscriptionDeleteFailure(&e2apMsg.plen, (*C.uchar)(e2apMsg.p), (*C.char)(unsafe.Pointer(&e2apMsg.lb[0])), e2apMsg.msgC)
1579 if err := e2apMsg.checkerr(errorNro); err != nil {
1582 return nil, e2apMsg.packeddata()
1585 func (e2apMsg *e2apMsgPackerSubscriptionDeleteFailure) UnPack(msg *e2ap.PackedData) (error, *e2ap.E2APSubscriptionDeleteFailure) {
1587 defer e2apMsg.fini()
1589 if err := e2apMsg.e2apMessagePacker.unpacktopdu(msg); err != nil {
1590 return err, e2apMsg.msgG
1592 errorNro := C.getRICSubscriptionDeleteFailureData(e2apMsg.e2apMessagePacker.pdu, e2apMsg.msgC)
1593 if err := e2apMsg.checkerr(errorNro); err != nil {
1594 return err, e2apMsg.msgG
1597 e2apMsg.msgG.FunctionId = (e2ap.FunctionId)(e2apMsg.msgC.ranFunctionID)
1598 if err := (&e2apEntryRequestID{entry: &e2apMsg.msgC.ricRequestID}).get(&e2apMsg.msgG.RequestId); err != nil {
1599 return err, e2apMsg.msgG
1601 e2apMsg.msgG.Cause.Content = (uint8)(e2apMsg.msgC.cause.content)
1602 e2apMsg.msgG.Cause.Value = (uint8)(e2apMsg.msgC.cause.causeVal)
1603 if e2apMsg.msgC.criticalityDiagnosticsPresent == true {
1604 e2apMsg.msgG.CriticalityDiagnostics.Present = true
1605 if err := (&e2apEntryCriticalityDiagnostic{entry: &e2apMsg.msgC.criticalityDiagnostics}).get(&e2apMsg.msgG.CriticalityDiagnostics); err != nil {
1606 return err, e2apMsg.msgG
1609 return nil, e2apMsg.msgG
1612 func (e2apMsg *e2apMsgPackerSubscriptionDeleteFailure) String() string {
1614 fmt.Fprintln(&b, "ricSubscriptionDeleteFailure.")
1615 fmt.Fprintln(&b, " ricRequestID.")
1616 fmt.Fprintln(&b, " ricRequestorID =", e2apMsg.msgC.ricRequestID.ricRequestorID)
1617 fmt.Fprintln(&b, " ricInstanceID =", e2apMsg.msgC.ricRequestID.ricInstanceID)
1618 fmt.Fprintln(&b, " ranFunctionID =", e2apMsg.msgC.ranFunctionID)
1620 if e2apMsg.msgC.criticalityDiagnosticsPresent {
1621 fmt.Fprintln(&b, " criticalityDiagnosticsPresent =", e2apMsg.msgC.criticalityDiagnosticsPresent)
1622 fmt.Fprintln(&b, " criticalityDiagnostics.")
1623 fmt.Fprintln(&b, " procedureCodePresent =", e2apMsg.msgC.criticalityDiagnostics.procedureCodePresent)
1624 fmt.Fprintln(&b, " procedureCode =", e2apMsg.msgC.criticalityDiagnostics.procedureCode)
1625 fmt.Fprintln(&b, " triggeringMessagePresent =", e2apMsg.msgC.criticalityDiagnostics.triggeringMessagePresent)
1626 fmt.Fprintln(&b, " triggeringMessage =", e2apMsg.msgC.criticalityDiagnostics.triggeringMessage)
1627 fmt.Fprintln(&b, " procedureCriticalityPresent=", e2apMsg.msgC.criticalityDiagnostics.procedureCriticalityPresent)
1628 fmt.Fprintln(&b, " procedureCriticality =", e2apMsg.msgC.criticalityDiagnostics.procedureCriticality)
1629 fmt.Fprintln(&b, " iEsCriticalityDiagnosticsPresent =", e2apMsg.msgC.criticalityDiagnostics.iEsCriticalityDiagnosticsPresent)
1630 fmt.Fprintln(&b, " criticalityDiagnosticsIELength =", e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIELength)
1633 for (C.ushort)(index2) < e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIELength {
1634 fmt.Fprintln(&b, " criticalityDiagnosticsIEListItem[index2].iECriticality =", e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].iECriticality)
1635 fmt.Fprintln(&b, " criticalityDiagnosticsIEListItem[index2].iE_ID =", e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].iE_ID)
1636 fmt.Fprintln(&b, " criticalityDiagnosticsIEListItem[index2].typeOfError =", e2apMsg.msgC.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].typeOfError)
1644 //-----------------------------------------------------------------------------
1645 // Public E2AP packer creators
1646 //-----------------------------------------------------------------------------
1648 type cppasn1E2APPacker struct{}
1650 func (*cppasn1E2APPacker) NewPackerSubscriptionRequest() e2ap.E2APMsgPackerSubscriptionRequestIf {
1651 return &e2apMsgPackerSubscriptionRequest{}
1654 func (*cppasn1E2APPacker) NewPackerSubscriptionResponse() e2ap.E2APMsgPackerSubscriptionResponseIf {
1655 return &e2apMsgPackerSubscriptionResponse{}
1658 func (*cppasn1E2APPacker) NewPackerSubscriptionFailure() e2ap.E2APMsgPackerSubscriptionFailureIf {
1659 return &e2apMsgPackerSubscriptionFailure{}
1662 func (*cppasn1E2APPacker) NewPackerSubscriptionDeleteRequest() e2ap.E2APMsgPackerSubscriptionDeleteRequestIf {
1663 return &e2apMsgPackerSubscriptionDeleteRequest{}
1666 func (*cppasn1E2APPacker) NewPackerSubscriptionDeleteResponse() e2ap.E2APMsgPackerSubscriptionDeleteResponseIf {
1667 return &e2apMsgPackerSubscriptionDeleteResponse{}
1670 func (*cppasn1E2APPacker) NewPackerSubscriptionDeleteFailure() e2ap.E2APMsgPackerSubscriptionDeleteFailureIf {
1671 return &e2apMsgPackerSubscriptionDeleteFailure{}
1674 func NewAsn1E2Packer() e2ap.E2APPackerIf {
1675 return &cppasn1E2APPacker{}