2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 // Copyright (c) 2022 Samsung Electronics Co., Ltd. All Rights Reserved.
5 // Copyright 2023 Capgemini
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 // This source code is part of the near-RT RIC (RAN Intelligent Controller)
20 // platform project (RICP).
28 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
32 Text string `xml:",chardata"`
34 Text string `xml:",chardata"`
35 PlmnID string `xml:"plmn-id"`
37 Text string `xml:",chardata"`
38 GnbID string `xml:"gnb-ID"`
40 } `xml:"global-gNB-ID"`
41 GNBCUUPID string `xml:"gNB-CU-UP-ID"`
42 GNBDUID string `xml:"gNB-DU-ID"`
46 Text string `xml:",chardata"`
48 Text string `xml:",chardata"`
49 PlmnID string `xml:"pLMN-Identity"`
51 Text string `xml:",chardata"`
52 GnbID string `xml:"gNB-ID"`
54 } `xml:"global-gNB-ID"`
58 Text string `xml:",chardata"`
59 EnbIdMacro string `xml:"enb-ID-macro"`
60 EnbIdShortMacro string `xml:"enb-ID-shortmacro"`
61 EnbIdLongMacro string `xml:"enb-ID-longmacro"`
65 Text string `xml:",chardata"`
66 GlobalNgENBID struct {
67 Text string `xml:",chardata"`
68 PlmnID string `xml:"plmn-id"`
69 EnbID NgEnbId `xml:"enb-id"`
70 } `xml:"global-ng-eNB-ID"`
74 Text string `xml:",chardata"`
75 MacroEnbId string `xml:"macro-eNB-ID"`
76 HomeEnbId string `xml:"home-eNB-ID"`
77 ShortMacroEnbId string `xml:"short-Macro-eNB-ID"`
78 LongMacroEnbId string `xml:"long-Macro-eNB-ID"`
82 Text string `xml:",chardata"`
84 Text string `xml:",chardata"`
85 PlmnID string `xml:"pLMN-Identity"`
86 EnbID EnbId `xml:"eNB-ID"`
87 } `xml:"global-eNB-ID"`
90 type GlobalE2NodeId struct {
91 Text string `xml:",chardata"`
93 EnGNB EnGnb `xml:"en-gNB"`
94 NgENB NgEnb `xml:"ng-eNB"`
98 type E2SetupRequest struct {
99 Text string `xml:",chardata"`
101 Text string `xml:",chardata"`
102 E2setupRequestIEs []struct {
103 Text string `xml:",chardata"`
106 Text string `xml:",chardata"`
107 Reject string `xml:"reject"`
108 } `xml:"criticality"`
110 Text string `xml:",chardata"`
111 TransactionID string `xml:"TransactionID"`
112 GlobalE2nodeID GlobalE2NodeId `xml:"GlobalE2node-ID"`
113 RANfunctionsList RANfunctionsList `xml:"RANfunctions-List"`
114 E2NodeConfigList E2NodeConfigList `xml:"E2nodeComponentConfigAddition-List"`
116 } `xml:"E2setupRequestIEs"`
117 } `xml:"protocolIEs"`
120 type E2SetupRequestMessage struct {
121 XMLName xml.Name `xml:"E2SetupRequestMessage"`
122 Text string `xml:",chardata"`
124 Text string `xml:",chardata"`
125 InitiatingMessage struct {
126 Text string `xml:",chardata"`
127 ProcedureCode string `xml:"procedureCode"`
129 Text string `xml:",chardata"`
130 Reject string `xml:"reject"`
131 } `xml:"criticality"`
133 Text string `xml:",chardata"`
134 E2setupRequest E2SetupRequest `xml:"E2setupRequest"`
136 } `xml:"initiatingMessage"`
140 type RanFunctionItem struct {
141 Text string `xml:",chardata"`
142 RanFunctionID uint32 `xml:"ranFunctionID"`
143 RanFunctionDefinition string `xml:"ranFunctionDefinition"`
144 RanFunctionRevision uint32 `xml:"ranFunctionRevision"`
145 RanFunctionOID string `xml:"ranFunctionOID"`
148 type RANfunctionsList struct {
149 Text string `xml:",chardata"`
150 ProtocolIESingleContainer []struct {
151 Text string `xml:",chardata"`
154 Text string `xml:",chardata"`
155 Reject string `xml:"reject"`
156 } `xml:"criticality"`
158 Text string `xml:",chardata"`
159 RANfunctionItem RanFunctionItem `xml:"RANfunction-Item"`
161 } `xml:"ProtocolIE-SingleContainer"`
164 type E2NodeConfigList struct {
165 Text string `xml:",chardata"`
166 ProtocolIESingleContainer []struct {
167 Text string `xml:",chardata"`
170 Text string `xml:",chardata"`
171 Reject string `xml:"reject"`
172 } `xml:"criticality"`
174 Text string `xml:",chardata"`
175 E2nodeConfigAdditionItem E2NodeConfigAdditionItem `xml:"E2nodeComponentConfigAddition-Item"`
177 } `xml:"ProtocolIE-SingleContainer"`
180 type E2NodeComponentType struct {
181 Text string `xml:",chardata"`
182 NG *struct{} `xml:"ng"`
183 XN *struct{} `xml:"xn"`
184 E1 *struct{} `xml:"e1"`
185 F1 *struct{} `xml:"f1"`
186 W1 *struct{} `xml:"w1"`
187 S1 *struct{} `xml:"s1"`
188 X2 *struct{} `xml:"x2"`
191 type E2NodeConfigAdditionItem struct {
192 Text string `xml:",chardata"`
193 E2nodeComponentType E2NodeComponentType `xml:"e2nodeComponentInterfaceType"`
194 E2nodeComponentID E2NodeComponentId `xml:"e2nodeComponentID"`
195 E2nodeConfiguration E2NodeConfigValue `xml:"e2nodeComponentConfiguration"`
198 type E2NodeConfigValue struct {
199 Text string `xml:",chardata"`
200 E2NodeRequestPart []byte `xml:"e2nodeComponentRequestPart"`
201 E2NodeResponsePart []byte `xml:"e2nodeComponentResponsePart"`
204 type E2NodeComponentId struct {
205 Text string `xml:",chardata"`
206 E2NodeIFTypeNG E2NodeIFTypeNG
207 E2NodeIFTypeXN E2NodeIFTypeXN
208 E2NodeIFTypeE1 E2NodeIFTypeE1
209 E2NodeIFTypeF1 E2NodeIFTypeF1
210 E2NodeIFTypeW1 E2NodeIFTypeW1
211 E2NodeIFTypeS1 E2NodeIFTypeS1
212 E2NodeIFTypeX2 E2NodeIFTypeX2
215 type E2NodeIFTypeNG struct {
216 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeNG"`
217 Text string `xml:",chardata"`
218 AMFName string `xml:"amf-name"`
221 type E2NodeIFTypeXN struct {
222 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeXn"`
223 Text string `xml:",chardata"`
224 GlobalNGRANNodeID struct {
225 Text string `xml:",chardata"`
226 GlobalgNBID *GNB `xml:"gNB,omitempty"`
227 GlobalngeNBID *NgeNBID `xml:"ng-eNB,omitempty"`
228 } `xml:"global-NG-RAN-Node-ID"`
232 Text string `xml:",chardata"`
233 PLMNID string `xml:"plmn-id"`
234 GnbID GnbID `xml:"gnb-id"`
237 Text string `xml:",chardata"`
238 GnbID string `xml:"gnb-ID"`
241 type NgeNBID struct {
242 Text string `xml:",chardata"`
243 PLMNID string `xml:"plmn-id"`
244 EnbID *EnbID_Xn `xml:"enb-id"`
247 type EnbID_Xn struct {
248 Text string `xml:",chardata"`
249 EnbIdMacro string `xml:"enb-ID-macro,omitempty"`
250 EnbIdShortMacro string `xml:"enb-ID-shortmacro,omitempty"`
251 EnbIdLongMacro string `xml:"enb-ID-longmacro,omitempty"`
254 type E2NodeIFTypeE1 struct {
255 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeE1"`
256 Text string `xml:",chardata"`
257 GNBCUCPID int64 `xml:"gNB-CU-CP-ID"`
260 type E2NodeIFTypeF1 struct {
261 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeF1"`
262 Text string `xml:",chardata"`
263 GNBDUID int64 `xml:"gNB-DU-ID"`
266 type E2NodeIFTypeW1 struct {
267 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeW1"`
268 Text string `xml:",chardata"`
269 NGENBDUID int64 `xml:"ng-eNB-DU-ID"`
272 type E2NodeIFTypeS1 struct {
273 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeS1"`
274 Text string `xml:",chardata"`
275 MMENAME string `xml:"mme-name"`
277 type E2NodeIFTypeX2 struct {
278 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeX2"`
279 Text string `xml:",chardata"`
280 GlobalENBID *GlobalENBID `xml:"global-eNB-ID,omitempty"`
281 GlobalenGNBID *GlobalenGNBID `xml:"global-en-gNB-ID,omitempty"`
283 type GlobalENBID struct {
284 Text string `xml:",chardata"`
285 PLMNIdentity string `xml:"pLMN-Identity"`
286 ENBID *ENBID_X2 `xml:"eNB-ID"`
288 type ENBID_X2 struct {
289 Text string `xml:",chardata"`
290 MacroEnbId string `xml:"macro-eNB-ID,omitempty"`
291 HomeEnbId string `xml:"home-eNB-ID,omitempty"`
292 ShortMacroEnbId string `xml:"short-Macro-eNB-ID,omitempty"`
293 LongMacroEnbId string `xml:"long-Macro-eNB-ID,omitempty"`
295 type GlobalenGNBID struct {
296 Text string `xml:",chardata"`
297 PLMNIdentity string `xml:"pLMN-Identity"`
298 GNBID GNBID `xml:"gNB-ID"`
302 Text string `xml:",chardata"`
303 GNBID string `xml:"gNB-ID"`
306 func (m *E2SetupRequestMessage) ExtractRanFunctionsList() []*entities.RanFunction {
307 // TODO: verify e2SetupRequestIEs structure with Adi
308 e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
310 var ranFuntionsList RANfunctionsList
313 for _, v := range e2SetupRequestIes {
314 if v.ID == RanFunctionsAddedID {
315 ranFuntionsList = v.Value.RANfunctionsList
325 ranFunctionsListContainer := ranFuntionsList.ProtocolIESingleContainer
326 funcs := make([]*entities.RanFunction, len(ranFunctionsListContainer))
327 for i := 0; i < len(funcs); i++ {
328 ranFunctionItem := ranFunctionsListContainer[i].Value.RANfunctionItem
330 funcs[i] = &entities.RanFunction{
331 RanFunctionId: ranFunctionItem.RanFunctionID,
332 RanFunctionDefinition: ranFunctionItem.RanFunctionDefinition,
333 RanFunctionRevision: ranFunctionItem.RanFunctionRevision,
334 RanFunctionOid: ranFunctionItem.RanFunctionOID,
340 func (m *E2SetupRequestMessage) ExtractE2NodeConfigList() []*entities.E2NodeComponentConfig {
341 e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
342 numOfIes := len(e2SetupRequestIes)
343 var e2NodeConfigListContainer E2NodeConfigList
346 for ieCount := 0; ieCount < numOfIes; ieCount++ {
348 if e2SetupRequestIes[ieCount].ID == E2nodeConfigAdditionID {
349 e2NodeConfigListContainer = e2SetupRequestIes[ieCount].Value.E2NodeConfigList
359 e2nodeComponentConfigs := make([]*entities.E2NodeComponentConfig, len(e2NodeConfigListContainer.ProtocolIESingleContainer))
360 for i := 0; i < len(e2nodeComponentConfigs); i++ {
361 e2NodeConfigItem := e2NodeConfigListContainer.ProtocolIESingleContainer[i].Value.E2nodeConfigAdditionItem
363 if e2NodeConfigItem.E2nodeComponentType.NG != nil {
364 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
365 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_ng,
366 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
367 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
368 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeNG{
369 E2NodeComponentInterfaceTypeNG: &entities.E2NodeComponentInterfaceNG{
370 AmfName: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeNG.AMFName,
374 } else if e2NodeConfigItem.E2nodeComponentType.E1 != nil {
375 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
376 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_e1,
377 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
378 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
379 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeE1{
380 E2NodeComponentInterfaceTypeE1: &entities.E2NodeComponentInterfaceE1{
381 GNBCuCpId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeE1.GNBCUCPID,
385 } else if e2NodeConfigItem.E2nodeComponentType.F1 != nil {
386 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
387 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_f1,
388 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
389 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
390 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeF1{
391 E2NodeComponentInterfaceTypeF1: &entities.E2NodeComponentInterfaceF1{
392 GNBDuId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeF1.GNBDUID,
396 } else if e2NodeConfigItem.E2nodeComponentType.W1 != nil {
397 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
398 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_w1,
399 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
400 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
401 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeW1{
402 E2NodeComponentInterfaceTypeW1: &entities.E2NodeComponentInterfaceW1{
403 NgenbDuId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeW1.NGENBDUID,
407 } else if e2NodeConfigItem.E2nodeComponentType.S1 != nil {
408 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
409 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_s1,
410 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
411 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
412 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeS1{
413 E2NodeComponentInterfaceTypeS1: &entities.E2NodeComponentInterfaceS1{
414 MmeName: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeS1.MMENAME,
418 } else if e2NodeConfigItem.E2nodeComponentType.XN != nil {
419 if gnbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalgNBID; gnbid != nil {
420 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
421 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
422 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
423 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
424 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
425 E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
426 GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalGnbId{
427 GlobalGnbId: &entities.GlobalGNBID{
428 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalgNBID.PLMNID,
429 GnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalgNBID.GnbID.GnbID,
437 } else if ngenb := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID; ngenb != nil {
438 if ngenbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdMacro; ngenbid != "" && len(ngenbid) == 20 {
439 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
440 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
441 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
442 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
443 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
444 E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
445 GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalNgenbId{
446 GlobalNgenbId: &entities.GlobalNGENBID{
447 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.PLMNID,
448 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdMacro,
455 } else if ngenbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdShortMacro; ngenbid != "" && len(ngenbid) == 18 {
456 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
457 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
458 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
459 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
460 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
461 E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
462 GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalNgenbId{
463 GlobalNgenbId: &entities.GlobalNGENBID{
464 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.PLMNID,
465 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdShortMacro,
472 } else if ngenbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdLongMacro; ngenbid != "" && len(ngenbid) == 21 {
473 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
474 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
475 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
476 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
477 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
478 E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
479 GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalNgenbId{
480 GlobalNgenbId: &entities.GlobalNGENBID{
481 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.PLMNID,
482 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdLongMacro,
493 } else if e2NodeConfigItem.E2nodeComponentType.X2 != nil {
494 if gnbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalenGNBID; gnbid != nil {
495 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
496 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
497 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
498 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
499 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
500 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
501 GlobalEngnbId: &entities.GlobalENGNBID{
502 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalenGNBID.PLMNIdentity,
503 GnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalenGNBID.GNBID.GNBID,
509 } else if enb := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID; enb != nil {
510 if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.MacroEnbId; enbid != "" && len(enbid) == 20 {
511 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
512 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
513 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
514 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
515 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
516 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
517 GlobalEnbId: &entities.GlobalENBID{
518 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
519 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.MacroEnbId,
525 } else if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.HomeEnbId; enbid != "" && len(enbid) == 28 {
526 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
527 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
528 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
529 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
530 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
531 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
532 GlobalEnbId: &entities.GlobalENBID{
533 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
534 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.HomeEnbId,
540 } else if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.ShortMacroEnbId; enbid != "" && len(enbid) == 18 {
541 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
542 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
543 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
544 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
545 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
546 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
547 GlobalEnbId: &entities.GlobalENBID{
548 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
549 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.ShortMacroEnbId,
555 } else if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.LongMacroEnbId; enbid != "" && len(enbid) == 21 {
556 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
557 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
558 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
559 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
560 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
561 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
562 GlobalEnbId: &entities.GlobalENBID{
563 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
564 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.LongMacroEnbId,
576 return e2nodeComponentConfigs
579 func (m *E2SetupRequestMessage) getGlobalE2NodeId() GlobalE2NodeId {
581 // TODO: Handle error case if GlobalE2NodeId not available
582 e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
583 numOfIes := len(e2SetupRequestIes)
586 for ieCount := 0; ieCount < numOfIes; ieCount++ {
587 if e2SetupRequestIes[ieCount].ID == GlobalE2nodeID {
593 return m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[index].Value.GlobalE2nodeID
596 func (m *E2SetupRequestMessage) GetPlmnId() string {
597 globalE2NodeId := m.getGlobalE2NodeId()
598 if id := globalE2NodeId.GNB.GlobalGNBID.PlmnID; id != "" {
599 return m.trimSpaces(id)
601 if id := globalE2NodeId.EnGNB.GlobalGNBID.PlmnID; id != "" {
602 return m.trimSpaces(id)
604 if id := globalE2NodeId.ENB.GlobalENBID.PlmnID; id != "" {
605 return m.trimSpaces(id)
607 if id := globalE2NodeId.NgENB.GlobalNgENBID.PlmnID; id != "" {
608 return m.trimSpaces(id)
613 func (m *E2SetupRequestMessage) GetCuupId() string {
614 globalE2NodeId := m.getGlobalE2NodeId()
615 if id := globalE2NodeId.GNB.GNBCUUPID; id != "" {
616 return m.trimSpaces(id)
622 func (m *E2SetupRequestMessage) GetDuId() string {
623 globalE2NodeId := m.getGlobalE2NodeId()
624 if id := globalE2NodeId.GNB.GNBDUID; id != "" {
625 return m.trimSpaces(id)
630 func (m *E2SetupRequestMessage) getInnerEnbId(enbId EnbId) string {
632 if id := enbId.HomeEnbId; id != "" {
636 if id := enbId.LongMacroEnbId; id != "" {
640 if id := enbId.MacroEnbId; id != "" {
644 if id := enbId.ShortMacroEnbId; id != "" {
651 func (m *E2SetupRequestMessage) getInnerNgEnbId(enbId NgEnbId) string {
652 if id := enbId.EnbIdLongMacro; id != "" {
656 if id := enbId.EnbIdMacro; id != "" {
660 if id := enbId.EnbIdShortMacro; id != "" {
667 func (m *E2SetupRequestMessage) GetNbId() string {
668 globalE2NodeId := m.getGlobalE2NodeId()
670 if id := globalE2NodeId.GNB.GlobalGNBID.GnbID.GnbID; id != "" {
671 return m.trimSpaces(id)
674 if id := globalE2NodeId.EnGNB.GlobalGNBID.GnbID.GnbID; id != "" {
675 return m.trimSpaces(id)
678 if id := m.getInnerEnbId(globalE2NodeId.ENB.GlobalENBID.EnbID); id != "" {
679 return m.trimSpaces(id)
682 if id := m.getInnerNgEnbId(globalE2NodeId.NgENB.GlobalNgENBID.EnbID); id != "" {
683 return m.trimSpaces(id)
689 func (m *E2SetupRequestMessage) trimSpaces(str string) string {
690 return strings.NewReplacer(" ", "", "\n", "").Replace(str)