2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 // Copyright (c) 2022 Samsung Electronics Co., Ltd. All Rights Reserved.
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.
18 // This source code is part of the near-RT RIC (RAN Intelligent Controller)
19 // platform project (RICP).
27 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
31 Text string `xml:",chardata"`
33 Text string `xml:",chardata"`
34 PlmnID string `xml:"plmn-id"`
36 Text string `xml:",chardata"`
37 GnbID string `xml:"gnb-ID"`
39 } `xml:"global-gNB-ID"`
43 Text string `xml:",chardata"`
45 Text string `xml:",chardata"`
46 PlmnID string `xml:"pLMN-Identity"`
48 Text string `xml:",chardata"`
49 GnbID string `xml:"gNB-ID"`
51 } `xml:"global-gNB-ID"`
55 Text string `xml:",chardata"`
56 EnbIdMacro string `xml:"enb-ID-macro"`
57 EnbIdShortMacro string `xml:"enb-ID-shortmacro"`
58 EnbIdLongMacro string `xml:"enb-ID-longmacro"`
62 Text string `xml:",chardata"`
63 GlobalNgENBID struct {
64 Text string `xml:",chardata"`
65 PlmnID string `xml:"plmn-id"`
66 EnbID NgEnbId `xml:"enb-id"`
67 } `xml:"global-ng-eNB-ID"`
71 Text string `xml:",chardata"`
72 MacroEnbId string `xml:"macro-eNB-ID"`
73 HomeEnbId string `xml:"home-eNB-ID"`
74 ShortMacroEnbId string `xml:"short-Macro-eNB-ID"`
75 LongMacroEnbId string `xml:"long-Macro-eNB-ID"`
79 Text string `xml:",chardata"`
81 Text string `xml:",chardata"`
82 PlmnID string `xml:"pLMN-Identity"`
83 EnbID EnbId `xml:"eNB-ID"`
84 } `xml:"global-eNB-ID"`
87 type GlobalE2NodeId struct {
88 Text string `xml:",chardata"`
90 EnGNB EnGnb `xml:"en-gNB"`
91 NgENB NgEnb `xml:"ng-eNB"`
95 type E2SetupRequest struct {
96 Text string `xml:",chardata"`
98 Text string `xml:",chardata"`
99 E2setupRequestIEs []struct {
100 Text string `xml:",chardata"`
103 Text string `xml:",chardata"`
104 Reject string `xml:"reject"`
105 } `xml:"criticality"`
107 Text string `xml:",chardata"`
108 TransactionID string `xml:"TransactionID"`
109 GlobalE2nodeID GlobalE2NodeId `xml:"GlobalE2node-ID"`
110 RANfunctionsList RANfunctionsList `xml:"RANfunctions-List"`
111 E2NodeConfigList E2NodeConfigList `xml:"E2nodeComponentConfigAddition-List"`
113 } `xml:"E2setupRequestIEs"`
114 } `xml:"protocolIEs"`
117 type E2SetupRequestMessage struct {
118 XMLName xml.Name `xml:"E2SetupRequestMessage"`
119 Text string `xml:",chardata"`
121 Text string `xml:",chardata"`
122 InitiatingMessage struct {
123 Text string `xml:",chardata"`
124 ProcedureCode string `xml:"procedureCode"`
126 Text string `xml:",chardata"`
127 Reject string `xml:"reject"`
128 } `xml:"criticality"`
130 Text string `xml:",chardata"`
131 E2setupRequest E2SetupRequest `xml:"E2setupRequest"`
133 } `xml:"initiatingMessage"`
137 type RanFunctionItem struct {
138 Text string `xml:",chardata"`
139 RanFunctionID uint32 `xml:"ranFunctionID"`
140 RanFunctionDefinition string `xml:"ranFunctionDefinition"`
141 RanFunctionRevision uint32 `xml:"ranFunctionRevision"`
142 RanFunctionOID string `xml:"ranFunctionOID"`
145 type RANfunctionsList struct {
146 Text string `xml:",chardata"`
147 ProtocolIESingleContainer []struct {
148 Text string `xml:",chardata"`
151 Text string `xml:",chardata"`
152 Reject string `xml:"reject"`
153 } `xml:"criticality"`
155 Text string `xml:",chardata"`
156 RANfunctionItem RanFunctionItem `xml:"RANfunction-Item"`
158 } `xml:"ProtocolIE-SingleContainer"`
161 type E2NodeConfigList struct {
162 Text string `xml:",chardata"`
163 ProtocolIESingleContainer []struct {
164 Text string `xml:",chardata"`
167 Text string `xml:",chardata"`
168 Reject string `xml:"reject"`
169 } `xml:"criticality"`
171 Text string `xml:",chardata"`
172 E2nodeConfigAdditionItem E2NodeConfigAdditionItem `xml:"E2nodeComponentConfigAddition-Item"`
174 } `xml:"ProtocolIE-SingleContainer"`
177 type E2NodeComponentType struct {
178 Text string `xml:",chardata"`
179 NG *struct{} `xml:"ng"`
180 XN *struct{} `xml:"xn"`
181 E1 *struct{} `xml:"e1"`
182 F1 *struct{} `xml:"f1"`
183 W1 *struct{} `xml:"w1"`
184 S1 *struct{} `xml:"s1"`
185 X2 *struct{} `xml:"x2"`
188 type E2NodeConfigAdditionItem struct {
189 Text string `xml:",chardata"`
190 E2nodeComponentType E2NodeComponentType `xml:"e2nodeComponentInterfaceType"`
191 E2nodeComponentID E2NodeComponentId `xml:"e2nodeComponentID"`
192 E2nodeConfiguration E2NodeConfigValue `xml:"e2nodeComponentConfiguration"`
195 type E2NodeConfigValue struct {
196 Text string `xml:",chardata"`
197 E2NodeRequestPart []byte `xml:"e2nodeComponentRequestPart"`
198 E2NodeResponsePart []byte `xml:"e2nodeComponentResponsePart"`
201 type E2NodeComponentId struct {
202 Text string `xml:",chardata"`
203 E2NodeIFTypeNG E2NodeIFTypeNG
204 E2NodeIFTypeXN E2NodeIFTypeXN
205 E2NodeIFTypeE1 E2NodeIFTypeE1
206 E2NodeIFTypeF1 E2NodeIFTypeF1
207 E2NodeIFTypeW1 E2NodeIFTypeW1
208 E2NodeIFTypeS1 E2NodeIFTypeS1
209 E2NodeIFTypeX2 E2NodeIFTypeX2
212 type E2NodeIFTypeNG struct {
213 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeNG"`
214 Text string `xml:",chardata"`
215 AMFName string `xml:"amf-name"`
218 type E2NodeIFTypeXN struct {
219 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeXn"`
220 Text string `xml:",chardata"`
221 GlobalNGRANNodeID struct {
222 Text string `xml:",chardata"`
223 GlobalgNBID *GNB `xml:"gNB,omitempty"`
224 GlobalngeNBID *NgeNBID `xml:"ng-eNB,omitempty"`
225 } `xml:"global-NG-RAN-Node-ID"`
229 Text string `xml:",chardata"`
230 PLMNID string `xml:"plmn-id"`
231 GnbID GnbID `xml:"gnb-id"`
234 Text string `xml:",chardata"`
235 GnbID string `xml:"gnb-ID"`
238 type NgeNBID struct {
239 Text string `xml:",chardata"`
240 PLMNID string `xml:"plmn-id"`
241 EnbID *EnbID_Xn `xml:"enb-id"`
244 type EnbID_Xn struct {
245 Text string `xml:",chardata"`
246 EnbIdMacro string `xml:"enb-ID-macro,omitempty"`
247 EnbIdShortMacro string `xml:"enb-ID-shortmacro,omitempty"`
248 EnbIdLongMacro string `xml:"enb-ID-longmacro,omitempty"`
251 type E2NodeIFTypeE1 struct {
252 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeE1"`
253 Text string `xml:",chardata"`
254 GNBCUCPID int64 `xml:"gNB-CU-CP-ID"`
257 type E2NodeIFTypeF1 struct {
258 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeF1"`
259 Text string `xml:",chardata"`
260 GNBDUID int64 `xml:"gNB-DU-ID"`
263 type E2NodeIFTypeW1 struct {
264 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeW1"`
265 Text string `xml:",chardata"`
266 NGENBDUID int64 `xml:"ng-eNB-DU-ID"`
269 type E2NodeIFTypeS1 struct {
270 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeS1"`
271 Text string `xml:",chardata"`
272 MMENAME string `xml:"mme-name"`
274 type E2NodeIFTypeX2 struct {
275 XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeX2"`
276 Text string `xml:",chardata"`
277 GlobalENBID *GlobalENBID `xml:"global-eNB-ID,omitempty"`
278 GlobalenGNBID *GlobalenGNBID `xml:"global-en-gNB-ID,omitempty"`
280 type GlobalENBID struct {
281 Text string `xml:",chardata"`
282 PLMNIdentity string `xml:"pLMN-Identity"`
283 ENBID *ENBID_X2 `xml:"eNB-ID"`
285 type ENBID_X2 struct {
286 Text string `xml:",chardata"`
287 MacroEnbId string `xml:"macro-eNB-ID,omitempty"`
288 HomeEnbId string `xml:"home-eNB-ID,omitempty"`
289 ShortMacroEnbId string `xml:"short-Macro-eNB-ID,omitempty"`
290 LongMacroEnbId string `xml:"long-Macro-eNB-ID,omitempty"`
292 type GlobalenGNBID struct {
293 Text string `xml:",chardata"`
294 PLMNIdentity string `xml:"pLMN-Identity"`
295 GNBID GNBID `xml:"gNB-ID"`
299 Text string `xml:",chardata"`
300 GNBID string `xml:"gNB-ID"`
303 func (m *E2SetupRequestMessage) ExtractRanFunctionsList() []*entities.RanFunction {
304 // TODO: verify e2SetupRequestIEs structure with Adi
305 e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
307 var ranFuntionsList RANfunctionsList
310 for _, v := range e2SetupRequestIes {
311 if v.ID == RanFunctionsAddedID {
312 ranFuntionsList = v.Value.RANfunctionsList
322 ranFunctionsListContainer := ranFuntionsList.ProtocolIESingleContainer
323 funcs := make([]*entities.RanFunction, len(ranFunctionsListContainer))
324 for i := 0; i < len(funcs); i++ {
325 ranFunctionItem := ranFunctionsListContainer[i].Value.RANfunctionItem
327 funcs[i] = &entities.RanFunction{
328 RanFunctionId: ranFunctionItem.RanFunctionID,
329 RanFunctionDefinition: ranFunctionItem.RanFunctionDefinition,
330 RanFunctionRevision: ranFunctionItem.RanFunctionRevision,
331 RanFunctionOid: ranFunctionItem.RanFunctionOID,
337 func (m *E2SetupRequestMessage) ExtractE2NodeConfigList() []*entities.E2NodeComponentConfig {
338 e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
339 numOfIes := len(e2SetupRequestIes)
340 var e2NodeConfigListContainer E2NodeConfigList
343 for ieCount := 0; ieCount < numOfIes; ieCount++ {
345 if e2SetupRequestIes[ieCount].ID == E2nodeConfigAdditionID {
346 e2NodeConfigListContainer = e2SetupRequestIes[ieCount].Value.E2NodeConfigList
356 e2nodeComponentConfigs := make([]*entities.E2NodeComponentConfig, len(e2NodeConfigListContainer.ProtocolIESingleContainer))
357 for i := 0; i < len(e2nodeComponentConfigs); i++ {
358 e2NodeConfigItem := e2NodeConfigListContainer.ProtocolIESingleContainer[i].Value.E2nodeConfigAdditionItem
360 if e2NodeConfigItem.E2nodeComponentType.NG != nil {
361 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
362 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_ng,
363 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
364 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
365 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeNG{
366 E2NodeComponentInterfaceTypeNG: &entities.E2NodeComponentInterfaceNG{
367 AmfName: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeNG.AMFName,
371 } else if e2NodeConfigItem.E2nodeComponentType.E1 != nil {
372 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
373 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_e1,
374 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
375 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
376 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeE1{
377 E2NodeComponentInterfaceTypeE1: &entities.E2NodeComponentInterfaceE1{
378 GNBCuCpId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeE1.GNBCUCPID,
382 } else if e2NodeConfigItem.E2nodeComponentType.F1 != nil {
383 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
384 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_f1,
385 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
386 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
387 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeF1{
388 E2NodeComponentInterfaceTypeF1: &entities.E2NodeComponentInterfaceF1{
389 GNBDuId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeF1.GNBDUID,
393 } else if e2NodeConfigItem.E2nodeComponentType.W1 != nil {
394 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
395 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_w1,
396 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
397 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
398 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeW1{
399 E2NodeComponentInterfaceTypeW1: &entities.E2NodeComponentInterfaceW1{
400 NgenbDuId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeW1.NGENBDUID,
404 } else if e2NodeConfigItem.E2nodeComponentType.S1 != nil {
405 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
406 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_s1,
407 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
408 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
409 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeS1{
410 E2NodeComponentInterfaceTypeS1: &entities.E2NodeComponentInterfaceS1{
411 MmeName: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeS1.MMENAME,
415 } else if e2NodeConfigItem.E2nodeComponentType.XN != nil {
416 if gnbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalgNBID; gnbid != nil {
417 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
418 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
419 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
420 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
421 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
422 E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
423 GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalGnbId{
424 GlobalGnbId: &entities.GlobalGNBID{
425 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalgNBID.PLMNID,
426 GnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalgNBID.GnbID.GnbID,
434 } else if ngenb := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID; ngenb != nil {
435 if ngenbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdMacro; ngenbid != "" && len(ngenbid) == 20 {
436 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
437 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
438 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
439 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
440 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
441 E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
442 GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalNgenbId{
443 GlobalNgenbId: &entities.GlobalNGENBID{
444 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.PLMNID,
445 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdMacro,
452 } else if ngenbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdShortMacro; ngenbid != "" && len(ngenbid) == 18 {
453 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
454 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
455 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
456 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
457 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
458 E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
459 GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalNgenbId{
460 GlobalNgenbId: &entities.GlobalNGENBID{
461 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.PLMNID,
462 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdShortMacro,
469 } else if ngenbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdLongMacro; ngenbid != "" && len(ngenbid) == 21 {
470 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
471 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
472 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
473 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
474 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
475 E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
476 GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalNgenbId{
477 GlobalNgenbId: &entities.GlobalNGENBID{
478 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.PLMNID,
479 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdLongMacro,
490 } else if e2NodeConfigItem.E2nodeComponentType.X2 != nil {
491 if gnbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalenGNBID; gnbid != nil {
492 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
493 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
494 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
495 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
496 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
497 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
498 GlobalEngnbId: &entities.GlobalENGNBID{
499 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalenGNBID.PLMNIdentity,
500 GnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalenGNBID.GNBID.GNBID,
506 } else if enb := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID; enb != nil {
507 if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.MacroEnbId; enbid != "" && len(enbid) == 20 {
508 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
509 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
510 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
511 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
512 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
513 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
514 GlobalEnbId: &entities.GlobalENBID{
515 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
516 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.MacroEnbId,
522 } else if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.HomeEnbId; enbid != "" && len(enbid) == 28 {
523 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
524 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
525 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
526 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
527 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
528 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
529 GlobalEnbId: &entities.GlobalENBID{
530 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
531 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.HomeEnbId,
537 } else if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.ShortMacroEnbId; enbid != "" && len(enbid) == 18 {
538 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
539 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
540 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
541 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
542 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
543 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
544 GlobalEnbId: &entities.GlobalENBID{
545 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
546 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.ShortMacroEnbId,
552 } else if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.LongMacroEnbId; enbid != "" && len(enbid) == 21 {
553 e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
554 E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
555 E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
556 E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
557 E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
558 E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
559 GlobalEnbId: &entities.GlobalENBID{
560 PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
561 EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.LongMacroEnbId,
573 return e2nodeComponentConfigs
576 func (m *E2SetupRequestMessage) getGlobalE2NodeId() GlobalE2NodeId {
578 // TODO: Handle error case if GlobalE2NodeId not available
579 e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
580 numOfIes := len(e2SetupRequestIes)
583 for ieCount := 0; ieCount < numOfIes; ieCount++ {
584 if e2SetupRequestIes[ieCount].ID == GlobalE2nodeID {
590 return m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[index].Value.GlobalE2nodeID
593 func (m *E2SetupRequestMessage) GetPlmnId() string {
594 globalE2NodeId := m.getGlobalE2NodeId()
595 if id := globalE2NodeId.GNB.GlobalGNBID.PlmnID; id != "" {
596 return m.trimSpaces(id)
598 if id := globalE2NodeId.EnGNB.GlobalGNBID.PlmnID; id != "" {
599 return m.trimSpaces(id)
601 if id := globalE2NodeId.ENB.GlobalENBID.PlmnID; id != "" {
602 return m.trimSpaces(id)
604 if id := globalE2NodeId.NgENB.GlobalNgENBID.PlmnID; id != "" {
605 return m.trimSpaces(id)
610 func (m *E2SetupRequestMessage) getInnerEnbId(enbId EnbId) string {
612 if id := enbId.HomeEnbId; id != "" {
616 if id := enbId.LongMacroEnbId; id != "" {
620 if id := enbId.MacroEnbId; id != "" {
624 if id := enbId.ShortMacroEnbId; id != "" {
631 func (m *E2SetupRequestMessage) getInnerNgEnbId(enbId NgEnbId) string {
632 if id := enbId.EnbIdLongMacro; id != "" {
636 if id := enbId.EnbIdMacro; id != "" {
640 if id := enbId.EnbIdShortMacro; id != "" {
647 func (m *E2SetupRequestMessage) GetNbId() string {
648 globalE2NodeId := m.getGlobalE2NodeId()
650 if id := globalE2NodeId.GNB.GlobalGNBID.GnbID.GnbID; id != "" {
651 return m.trimSpaces(id)
654 if id := globalE2NodeId.EnGNB.GlobalGNBID.GnbID.GnbID; id != "" {
655 return m.trimSpaces(id)
658 if id := m.getInnerEnbId(globalE2NodeId.ENB.GlobalENBID.EnbID); id != "" {
659 return m.trimSpaces(id)
662 if id := m.getInnerNgEnbId(globalE2NodeId.NgENB.GlobalNgENBID.EnbID); id != "" {
663 return m.trimSpaces(id)
669 func (m *E2SetupRequestMessage) trimSpaces(str string) string {
670 return strings.NewReplacer(" ", "", "\n", "").Replace(str)