+func (m *E2SetupRequestMessage) ExtractE2NodeConfigList() []*entities.E2NodeComponentConfig {
+ e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
+ numOfIes := len(e2SetupRequestIes)
+ var e2NodeConfigListContainer E2NodeConfigList
+ var isPopulated bool
+
+ for ieCount := 0; ieCount < numOfIes; ieCount++ {
+
+ if e2SetupRequestIes[ieCount].ID == E2nodeConfigAdditionID {
+ e2NodeConfigListContainer = e2SetupRequestIes[ieCount].Value.E2NodeConfigList
+ isPopulated = true
+ break
+ }
+ }
+
+ if !isPopulated {
+ return nil
+ }
+
+ e2nodeComponentConfigs := make([]*entities.E2NodeComponentConfig, len(e2NodeConfigListContainer.ProtocolIESingleContainer))
+ for i := 0; i < len(e2nodeComponentConfigs); i++ {
+ e2NodeConfigItem := e2NodeConfigListContainer.ProtocolIESingleContainer[i].Value.E2nodeConfigAdditionItem
+
+ if e2NodeConfigItem.E2nodeComponentType.NG != nil {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_ng,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeNG{
+ E2NodeComponentInterfaceTypeNG: &entities.E2NodeComponentInterfaceNG{
+ AmfName: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeNG.AMFName,
+ },
+ },
+ }
+ } else if e2NodeConfigItem.E2nodeComponentType.E1 != nil {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_e1,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeE1{
+ E2NodeComponentInterfaceTypeE1: &entities.E2NodeComponentInterfaceE1{
+ GNBCuCpId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeE1.GNBCUCPID,
+ },
+ },
+ }
+ } else if e2NodeConfigItem.E2nodeComponentType.F1 != nil {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_f1,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeF1{
+ E2NodeComponentInterfaceTypeF1: &entities.E2NodeComponentInterfaceF1{
+ GNBDuId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeF1.GNBDUID,
+ },
+ },
+ }
+ } else if e2NodeConfigItem.E2nodeComponentType.W1 != nil {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_w1,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeW1{
+ E2NodeComponentInterfaceTypeW1: &entities.E2NodeComponentInterfaceW1{
+ NgenbDuId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeW1.NGENBDUID,
+ },
+ },
+ }
+ } else if e2NodeConfigItem.E2nodeComponentType.S1 != nil {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_s1,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeS1{
+ E2NodeComponentInterfaceTypeS1: &entities.E2NodeComponentInterfaceS1{
+ MmeName: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeS1.MMENAME,
+ },
+ },
+ }
+ } else if e2NodeConfigItem.E2nodeComponentType.XN != nil {
+ if gnbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalgNBID; gnbid != nil {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
+ E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
+ GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalGnbId{
+ GlobalGnbId: &entities.GlobalGNBID{
+ PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalgNBID.PLMNID,
+ GnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalgNBID.GnbID.GnbID,
+ GnbType: 1,
+ },
+ },
+ },
+ },
+ }
+
+ } else if ngenb := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID; ngenb != nil {
+ if ngenbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdMacro; ngenbid != "" && len(ngenbid) == 20 {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
+ E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
+ GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalNgenbId{
+ GlobalNgenbId: &entities.GlobalNGENBID{
+ PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.PLMNID,
+ EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdMacro,
+ EnbType: 1,
+ },
+ },
+ },
+ },
+ }
+ } else if ngenbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdShortMacro; ngenbid != "" && len(ngenbid) == 18 {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
+ E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
+ GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalNgenbId{
+ GlobalNgenbId: &entities.GlobalNGENBID{
+ PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.PLMNID,
+ EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdShortMacro,
+ EnbType: 3,
+ },
+ },
+ },
+ },
+ }
+ } else if ngenbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdLongMacro; ngenbid != "" && len(ngenbid) == 21 {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{
+ E2NodeComponentInterfaceTypeXn: &entities.E2NodeComponentInterfaceXn{
+ GlobalNgRanNodeId: &entities.E2NodeComponentInterfaceXn_GlobalNgenbId{
+ GlobalNgenbId: &entities.GlobalNGENBID{
+ PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.PLMNID,
+ EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeXN.GlobalNGRANNodeID.GlobalngeNBID.EnbID.EnbIdLongMacro,
+ EnbType: 4,
+ },
+ },
+ },
+ },
+ }
+ }
+ } else {
+ //not valid
+ }
+ } else if e2NodeConfigItem.E2nodeComponentType.X2 != nil {
+ if gnbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalenGNBID; gnbid != nil {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
+ E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
+ GlobalEngnbId: &entities.GlobalENGNBID{
+ PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalenGNBID.PLMNIdentity,
+ GnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalenGNBID.GNBID.GNBID,
+ GnbType: 1,
+ },
+ },
+ },
+ }
+ } else if enb := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID; enb != nil {
+ if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.MacroEnbId; enbid != "" && len(enbid) == 20 {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
+ E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
+ GlobalEnbId: &entities.GlobalENBID{
+ PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
+ EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.MacroEnbId,
+ EnbType: 1,
+ },
+ },
+ },
+ }
+ } else if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.HomeEnbId; enbid != "" && len(enbid) == 28 {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
+ E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
+ GlobalEnbId: &entities.GlobalENBID{
+ PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
+ EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.HomeEnbId,
+ EnbType: 2,
+ },
+ },
+ },
+ }
+ } else if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.ShortMacroEnbId; enbid != "" && len(enbid) == 18 {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
+ E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
+ GlobalEnbId: &entities.GlobalENBID{
+ PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
+ EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.ShortMacroEnbId,
+ EnbType: 3,
+ },
+ },
+ },
+ }
+ } else if enbid := e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.LongMacroEnbId; enbid != "" && len(enbid) == 21 {
+ e2nodeComponentConfigs[i] = &entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
+ E2NodeComponentRequestPart: e2NodeConfigItem.E2nodeConfiguration.E2NodeRequestPart,
+ E2NodeComponentResponsePart: e2NodeConfigItem.E2nodeConfiguration.E2NodeResponsePart,
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{
+ E2NodeComponentInterfaceTypeX2: &entities.E2NodeComponentInterfaceX2{
+ GlobalEnbId: &entities.GlobalENBID{
+ PlmnIdentity: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.PLMNIdentity,
+ EnbId: e2NodeConfigItem.E2nodeComponentID.E2NodeIFTypeX2.GlobalENBID.ENBID.LongMacroEnbId,
+ EnbType: 4,
+ },
+ },
+ },
+ }
+ }
+ } else {
+ //not valid
+ }
+ } //end of x2
+ }
+ return e2nodeComponentConfigs
+}
+