X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fmodels%2Fe2_setup_request_message.go;h=420d5fd8acf6dae165be563f69e718dfeab299a1;hb=d2f1a29d3f1cc779045148a82729f644e6110776;hp=e61d4983eb1c1ba24f0cd84b66c1307058a7779f;hpb=a07b8597afc9d063a7f37a376a5bcf29ba29b557;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/models/e2_setup_request_message.go b/E2Manager/models/e2_setup_request_message.go index e61d498..420d5fd 100644 --- a/E2Manager/models/e2_setup_request_message.go +++ b/E2Manager/models/e2_setup_request_message.go @@ -1,6 +1,7 @@ // // Copyright 2019 AT&T Intellectual Property // Copyright 2019 Nokia +// Copyright (c) 2022 Samsung Electronics Co., Ltd. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,9 +22,9 @@ package models import ( "encoding/xml" - "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" - "github.com/golang/protobuf/ptypes/wrappers" "strings" + + "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" ) type Gnb struct { @@ -104,8 +105,10 @@ type E2SetupRequest struct { } `xml:"criticality"` Value struct { Text string `xml:",chardata"` + TransactionID string `xml:"TransactionID"` GlobalE2nodeID GlobalE2NodeId `xml:"GlobalE2node-ID"` RANfunctionsList RANfunctionsList `xml:"RANfunctions-List"` + E2NodeConfigList E2NodeConfigList `xml:"E2nodeComponentConfigAddition-List"` } `xml:"value"` } `xml:"E2setupRequestIEs"` } `xml:"protocolIEs"` @@ -132,119 +135,11 @@ type E2SetupRequestMessage struct { } type RanFunctionItem struct { - Text string `xml:",chardata"` - RanFunctionID uint32 `xml:"ranFunctionID"` - RanFunctionDefinition RanFunctionDefinition `xml:"ranFunctionDefinition"` - RanFunctionRevision uint32 `xml:"ranFunctionRevision"` -} - -type RanFunctionDefinition struct { - Text string `xml:",chardata"` - E2smGnbNrtRanFunctionDefinition E2smGnbNrtRanFunctionDefinition `xml:"E2SM-gNB-NRT-RANfunction-Definition"` -} - -type RanFunctionName struct { - Text string `xml:",chardata"` - RanFunctionShortName string `xml:"ranFunction-ShortName"` - RanFunctionE2smOid string `xml:"ranFunction-E2SM-OID"` - RanFunctionDescription string `xml:"ranFunction-Description"` - RanFunctionInstance *uint32 `xml:"ranFunction-Instance"` -} - -type RicEventTriggerStyleList struct { - Text string `xml:",chardata"` - RicEventTriggerStyleType uint32 `xml:"ric-EventTriggerStyle-Type"` - RicEventTriggerStyleName string `xml:"ric-EventTriggerStyle-Name"` - RicEventTriggerFormatType uint32 `xml:"ric-EventTriggerFormat-Type"` -} - -type RanParameterDefItem struct { - Text string `xml:",chardata"` - RanParameterID uint32 `xml:"ranParameter-ID"` - RanParameterName string `xml:"ranParameter-Name"` - RanParameterType RanParameterType `xml:"ranParameter-Type"` -} - -type RanParameterType struct { - Text string `xml:",chardata"` - Boolean *struct{} `xml:"boolean,omitempty"` - Integer *struct{} `xml:"integer,omitempty"` - Enumerated *struct{} `xml:"enumerated,omitempty"` - BitString *struct{} `xml:"bit-string,omitempty"` - OctetString *struct{} `xml:"octet-string,omitempty"` - PrintableString *struct{} `xml:"printable-string,omitempty"` -} - -type RicReportStyleList struct { - Text string `xml:",chardata"` - RicReportStyleType uint32 `xml:"ric-ReportStyle-Type"` - RicReportStyleName string `xml:"ric-ReportStyle-Name"` - RicReportActionFormatType uint32 `xml:"ric-ReportActionFormat-Type"` - RicReportRanParameterDefList struct { - Text string `xml:",chardata"` - RanParameterDefItem []RanParameterDefItem `xml:"RANparameterDef-Item"` - } `xml:"ric-ReportRanParameterDef-List"` - RicIndicationHeaderFormatType uint32 `xml:"ric-IndicationHeaderFormat-Type"` - RicIndicationMessageFormatType uint32 `xml:"ric-IndicationMessageFormat-Type"` -} - -type RicInsertStyleList struct { - Text string `xml:",chardata"` - RicInsertStyleType uint32 `xml:"ric-InsertStyle-Type"` - RicInsertStyleName string `xml:"ric-InsertStyle-Name"` - RicInsertActionFormatType uint32 `xml:"ric-InsertActionFormat-Type"` - RicInsertRanParameterDefList struct { - Text string `xml:",chardata"` - RanParameterDefItem []RanParameterDefItem `xml:"RANparameterDef-Item"` - } `xml:"ric-InsertRanParameterDef-List"` - RicIndicationHeaderFormatType uint32 `xml:"ric-IndicationHeaderFormat-Type"` - RicIndicationMessageFormatType uint32 `xml:"ric-IndicationMessageFormat-Type"` - RicCallProcessIdFormatType uint32 `xml:"ric-CallProcessIDFormat-Type"` -} - -type RicControlStyleList struct { - Text string `xml:",chardata"` - RicControlStyleType uint32 `xml:"ric-ControlStyle-Type"` - RicControlStyleName string `xml:"ric-ControlStyle-Name"` - RicControlHeaderFormatType uint32 `xml:"ric-ControlHeaderFormat-Type"` - RicControlMessageFormatType uint32 `xml:"ric-ControlMessageFormat-Type"` - RicCallProcessIdFormatType uint32 `xml:"ric-CallProcessIDFormat-Type"` -} - -type RicPolicyStyleList struct { - Text string `xml:",chardata"` - RicPolicyStyleType uint32 `xml:"ric-PolicyStyle-Type"` - RicPolicyStyleName string `xml:"ric-PolicyStyle-Name"` - RicPolicyActionFormatType uint32 `xml:"ric-PolicyActionFormat-Type"` - RicPolicyRanParameterDefList struct { - Text string `xml:",chardata"` - RanParameterDefItem []RanParameterDefItem `xml:"RANparameterDef-Item"` - } `xml:"ric-PolicyRanParameterDef-List"` -} - -type E2smGnbNrtRanFunctionDefinition struct { - Text string `xml:",chardata"` - RanFunctionName RanFunctionName `xml:"ranFunction-Name"` - RicEventTriggerStyleList struct { - Text string `xml:",chardata"` - RicEventTriggerStyleList []RicEventTriggerStyleList `xml:"RIC-EventTriggerStyle-List"` - } `xml:"ric-EventTriggerStyle-List"` - RicReportStyleList struct { - Text string `xml:",chardata"` - RicReportStyleList []RicReportStyleList `xml:"RIC-ReportStyle-List"` - } `xml:"ric-ReportStyle-List"` - RicInsertStyleList struct { - Text string `xml:",chardata"` - RicInsertStyleList []RicInsertStyleList `xml:"RIC-InsertStyle-List"` - } `xml:"ric-InsertStyle-List"` - RicControlStyleList struct { - Text string `xml:",chardata"` - RicControlStyleList []RicControlStyleList `xml:"RIC-ControlStyle-List"` - } `xml:"ric-ControlStyle-List"` - RicPolicyStyleList struct { - Text string `xml:",chardata"` - RicPolicyStyleList []RicPolicyStyleList `xml:"RIC-PolicyStyle-List"` - } `xml:"ric-PolicyStyle-List"` + Text string `xml:",chardata"` + RanFunctionID uint32 `xml:"ranFunctionID"` + RanFunctionDefinition string `xml:"ranFunctionDefinition"` + RanFunctionRevision uint32 `xml:"ranFunctionRevision"` + RanFunctionOID string `xml:"ranFunctionOID"` } type RANfunctionsList struct { @@ -263,217 +158,436 @@ type RANfunctionsList struct { } `xml:"ProtocolIE-SingleContainer"` } -func (m *E2SetupRequestMessage) ExtractRanFunctionsList() []*entities.RanFunction { - // TODO: verify e2SetupRequestIEs structure with Adi - e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs - if len(e2SetupRequestIes) < 2 { - return nil - } - - ranFunctionsListContainer := e2SetupRequestIes[1].Value.RANfunctionsList.ProtocolIESingleContainer - funcs := make([]*entities.RanFunction, len(ranFunctionsListContainer)) - for i := 0; i < len(funcs); i++ { - ranFunctionItem := ranFunctionsListContainer[i].Value.RANfunctionItem - - funcs[i] = &entities.RanFunction{ - RanFunctionId: &wrappers.UInt32Value{Value: ranFunctionItem.RanFunctionID}, - RanFunctionDefinition: m.buildRanFunctionDefinitionProto(&ranFunctionItem.RanFunctionDefinition), - RanFunctionRevision: &wrappers.UInt32Value{Value: ranFunctionItem.RanFunctionRevision}, - } - } - return funcs +type E2NodeConfigList struct { + Text string `xml:",chardata"` + ProtocolIESingleContainer []struct { + Text string `xml:",chardata"` + ID string `xml:"id"` + Criticality struct { + Text string `xml:",chardata"` + Reject string `xml:"reject"` + } `xml:"criticality"` + Value struct { + Text string `xml:",chardata"` + E2nodeConfigAdditionItem E2NodeConfigAdditionItem `xml:"E2nodeComponentConfigAddition-Item"` + } `xml:"value"` + } `xml:"ProtocolIE-SingleContainer"` } -func (m *E2SetupRequestMessage) buildRanFunctionDefinitionProto(def *RanFunctionDefinition) *entities.RanFunctionDefinition { - return &entities.RanFunctionDefinition{ - E2SmGnbNrtRanFunctionDefinition: &entities.E2SmGnbNrtRanFunctionDefinition{ - RanFunctionName: buildRanFunctionNameProto(def), - RicEventTriggerStyles: buildRicEventTriggerStylesProto(def), - RicReportStyles: buildRicReportStylesProto(def), - RicInsertStyles: buildRicInsertStylesProto(def), - RicControlStyles: buildRicControlStylesProto(def), - RicPolicyStyles: buildRicPolicyStylesProto(def), - }, - } +type E2NodeComponentType struct { + Text string `xml:",chardata"` + NG *struct{} `xml:"ng"` + XN *struct{} `xml:"xn"` + E1 *struct{} `xml:"e1"` + F1 *struct{} `xml:"f1"` + W1 *struct{} `xml:"w1"` + S1 *struct{} `xml:"s1"` + X2 *struct{} `xml:"x2"` } -func buildRanFunctionNameProto(def *RanFunctionDefinition) *entities.RanFunctionName { - defRanFunctionName := def.E2smGnbNrtRanFunctionDefinition.RanFunctionName - ranFunctionName := &entities.RanFunctionName{ - RanFunctionShortName: &wrappers.StringValue{Value: defRanFunctionName.RanFunctionShortName}, - RanFunctionE2SmOid: &wrappers.StringValue{Value: defRanFunctionName.RanFunctionE2smOid}, - RanFunctionDescription: &wrappers.StringValue{Value: defRanFunctionName.RanFunctionDescription}, - } - - if defRanFunctionName.RanFunctionInstance != nil { - ranFunctionName.OptionalRanFunctionInstance = &entities.RanFunctionName_RanFunctionInstance{ - RanFunctionInstance: *defRanFunctionName.RanFunctionInstance, - } - } +type E2NodeConfigAdditionItem struct { + Text string `xml:",chardata"` + E2nodeComponentType E2NodeComponentType `xml:"e2nodeComponentInterfaceType"` + E2nodeComponentID E2NodeComponentId `xml:"e2nodeComponentID"` + E2nodeConfiguration E2NodeConfigValue `xml:"e2nodeComponentConfiguration"` +} - return ranFunctionName +type E2NodeConfigValue struct { + Text string `xml:",chardata"` + E2NodeRequestPart []byte `xml:"e2nodeComponentRequestPart"` + E2NodeResponsePart []byte `xml:"e2nodeComponentResponsePart"` } -func buildRicEventTriggerStylesProto(def *RanFunctionDefinition) []*entities.RicEventTriggerStyle { - defRicEventTriggerStyleList := def.E2smGnbNrtRanFunctionDefinition.RicEventTriggerStyleList.RicEventTriggerStyleList - ricEventTriggerStyles := make([]*entities.RicEventTriggerStyle, len(defRicEventTriggerStyleList)) +type E2NodeComponentId struct { + Text string `xml:",chardata"` + E2NodeIFTypeNG E2NodeIFTypeNG + E2NodeIFTypeXN E2NodeIFTypeXN + E2NodeIFTypeE1 E2NodeIFTypeE1 + E2NodeIFTypeF1 E2NodeIFTypeF1 + E2NodeIFTypeW1 E2NodeIFTypeW1 + E2NodeIFTypeS1 E2NodeIFTypeS1 + E2NodeIFTypeX2 E2NodeIFTypeX2 +} - for i, v := range defRicEventTriggerStyleList { - ricEventTriggerStyles[i] = &entities.RicEventTriggerStyle{ - RicEventTriggerStyleType: &wrappers.UInt32Value{Value: v.RicEventTriggerStyleType}, - RicEventTriggerStyleName: &wrappers.StringValue{Value: v.RicEventTriggerStyleName}, - RicEventTriggerFormatType: &wrappers.UInt32Value{Value: v.RicEventTriggerFormatType}, - } - } +type E2NodeIFTypeNG struct { + XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeNG"` + Text string `xml:",chardata"` + AMFName string `xml:"amf-name"` +} - return ricEventTriggerStyles +type E2NodeIFTypeXN struct { + XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeXn"` + Text string `xml:",chardata"` + GlobalNGRANNodeID struct { + Text string `xml:",chardata"` + GlobalgNBID *GNB `xml:"gNB,omitempty"` + GlobalngeNBID *NgeNBID `xml:"ng-eNB,omitempty"` + } `xml:"global-NG-RAN-Node-ID"` } -func buildRicReportStylesProto(def *RanFunctionDefinition) []*entities.RicReportStyle { - defRicReportStyleList := def.E2smGnbNrtRanFunctionDefinition.RicReportStyleList.RicReportStyleList - ricReportStyles := make([]*entities.RicReportStyle, len(defRicReportStyleList)) +type GNB struct { + Text string `xml:",chardata"` + PLMNID string `xml:"plmn-id"` + GnbID GnbID `xml:"gnb-id"` +} +type GnbID struct { + Text string `xml:",chardata"` + GnbID string `xml:"gnb-ID"` +} - for i, v := range defRicReportStyleList { - ricReportStyles[i] = &entities.RicReportStyle{ - RicReportStyleType: &wrappers.UInt32Value{Value: v.RicReportStyleType}, - RicReportStyleName: &wrappers.StringValue{Value: v.RicReportStyleName}, - RicReportActionFormatType: &wrappers.UInt32Value{Value: v.RicReportActionFormatType}, - RicReportRanParameterDefs: buildRicReportRanParameterDefsProto(v), - RicIndicationHeaderFormatType: &wrappers.UInt32Value{Value: v.RicIndicationHeaderFormatType}, - RicIndicationMessageFormatType: &wrappers.UInt32Value{Value: v.RicIndicationMessageFormatType}, - } - } +type NgeNBID struct { + Text string `xml:",chardata"` + PLMNID string `xml:"plmn-id"` + EnbID *EnbID_Xn `xml:"enb-id"` +} - return ricReportStyles +type EnbID_Xn struct { + Text string `xml:",chardata"` + EnbIdMacro string `xml:"enb-ID-macro,omitempty"` + EnbIdShortMacro string `xml:"enb-ID-shortmacro,omitempty"` + EnbIdLongMacro string `xml:"enb-ID-longmacro,omitempty"` } -func buildRicReportRanParameterDefsProto(ricReportStyleList RicReportStyleList) []*entities.RanParameterDef { - ricReportRanParameterDefList := ricReportStyleList.RicReportRanParameterDefList.RanParameterDefItem - ranParameterDefs := make([]*entities.RanParameterDef, len(ricReportRanParameterDefList)) +type E2NodeIFTypeE1 struct { + XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeE1"` + Text string `xml:",chardata"` + GNBCUCPID int64 `xml:"gNB-CU-CP-ID"` +} - for i, v := range ricReportRanParameterDefList { - ranParameterDefs[i] = &entities.RanParameterDef{ - RanParameterId: &wrappers.UInt32Value{Value: v.RanParameterID}, - RanParameterName: &wrappers.StringValue{Value: v.RanParameterName}, - RanParameterType: getRanParameterTypeEnumValue(v.RanParameterType), - } - } +type E2NodeIFTypeF1 struct { + XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeF1"` + Text string `xml:",chardata"` + GNBDUID int64 `xml:"gNB-DU-ID"` +} - return ranParameterDefs +type E2NodeIFTypeW1 struct { + XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeW1"` + Text string `xml:",chardata"` + NGENBDUID int64 `xml:"ng-eNB-DU-ID"` } -func getRanParameterTypeEnumValue(ranParameterType RanParameterType) entities.RanParameterType { - if ranParameterType.Boolean != nil { - return entities.RanParameterType_BOOLEAN - } +type E2NodeIFTypeS1 struct { + XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeS1"` + Text string `xml:",chardata"` + MMENAME string `xml:"mme-name"` +} +type E2NodeIFTypeX2 struct { + XMLName xml.Name `xml:"e2nodeComponentInterfaceTypeX2"` + Text string `xml:",chardata"` + GlobalENBID *GlobalENBID `xml:"global-eNB-ID,omitempty"` + GlobalenGNBID *GlobalenGNBID `xml:"global-en-gNB-ID,omitempty"` +} +type GlobalENBID struct { + Text string `xml:",chardata"` + PLMNIdentity string `xml:"pLMN-Identity"` + ENBID *ENBID_X2 `xml:"eNB-ID"` +} +type ENBID_X2 struct { + Text string `xml:",chardata"` + MacroEnbId string `xml:"macro-eNB-ID,omitempty"` + HomeEnbId string `xml:"home-eNB-ID,omitempty"` + ShortMacroEnbId string `xml:"short-Macro-eNB-ID,omitempty"` + LongMacroEnbId string `xml:"long-Macro-eNB-ID,omitempty"` +} +type GlobalenGNBID struct { + Text string `xml:",chardata"` + PLMNIdentity string `xml:"pLMN-Identity"` + GNBID GNBID `xml:"gNB-ID"` +} - if ranParameterType.BitString != nil { - return entities.RanParameterType_BIT_STRING - } +type GNBID struct { + Text string `xml:",chardata"` + GNBID string `xml:"gNB-ID"` +} - if ranParameterType.Enumerated != nil { - return entities.RanParameterType_ENUMERATED - } +func (m *E2SetupRequestMessage) ExtractRanFunctionsList() []*entities.RanFunction { + // TODO: verify e2SetupRequestIEs structure with Adi + e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs - if ranParameterType.Integer != nil { - return entities.RanParameterType_INTEGER - } + var ranFuntionsList RANfunctionsList + var isPopulated bool - if ranParameterType.OctetString != nil { - return entities.RanParameterType_OCTET_STRING + for _, v := range e2SetupRequestIes { + if v.ID == RanFunctionsAddedID { + ranFuntionsList = v.Value.RANfunctionsList + isPopulated = true + break + } } - if ranParameterType.PrintableString != nil { - return entities.RanParameterType_PRINTABLE_STRING + if !isPopulated { + return nil } - return entities.RanParameterType_UNKNOWN_RAN_PARAMETER_TYPE -} - -func buildRicInsertStylesProto(def *RanFunctionDefinition) []*entities.RicInsertStyle { - defRicInsertStyleList := def.E2smGnbNrtRanFunctionDefinition.RicInsertStyleList.RicInsertStyleList - ricInsertStyles := make([]*entities.RicInsertStyle, len(defRicInsertStyleList)) + ranFunctionsListContainer := ranFuntionsList.ProtocolIESingleContainer + funcs := make([]*entities.RanFunction, len(ranFunctionsListContainer)) + for i := 0; i < len(funcs); i++ { + ranFunctionItem := ranFunctionsListContainer[i].Value.RANfunctionItem - for i, v := range defRicInsertStyleList { - ricInsertStyles[i] = &entities.RicInsertStyle{ - RicInsertStyleType: &wrappers.UInt32Value{Value: v.RicInsertStyleType}, - RicInsertStyleName: &wrappers.StringValue{Value: v.RicInsertStyleName}, - RicInsertActionFormatType: &wrappers.UInt32Value{Value: v.RicInsertActionFormatType}, - RicInsertRanParameterDefs: buildRicInsertRanParameterDefsProto(v), - RicIndicationHeaderFormatType: &wrappers.UInt32Value{Value: v.RicIndicationHeaderFormatType}, - RicIndicationMessageFormatType: &wrappers.UInt32Value{Value: v.RicIndicationMessageFormatType}, - RicCallProcessIdFormatType: &wrappers.UInt32Value{Value: v.RicCallProcessIdFormatType}, + funcs[i] = &entities.RanFunction{ + RanFunctionId: ranFunctionItem.RanFunctionID, + RanFunctionDefinition: ranFunctionItem.RanFunctionDefinition, + RanFunctionRevision: ranFunctionItem.RanFunctionRevision, + RanFunctionOid: ranFunctionItem.RanFunctionOID, } } - - return ricInsertStyles + return funcs } -func buildRicInsertRanParameterDefsProto(ricInsertStyleList RicInsertStyleList) []*entities.RanParameterDef { - ricInsertRanParameterDefList := ricInsertStyleList.RicInsertRanParameterDefList.RanParameterDefItem - ranParameterDefs := make([]*entities.RanParameterDef, len(ricInsertRanParameterDefList)) - - for i, v := range ricInsertRanParameterDefList { - ranParameterDefs[i] = &entities.RanParameterDef{ - RanParameterId: &wrappers.UInt32Value{Value: v.RanParameterID}, - RanParameterName: &wrappers.StringValue{Value: v.RanParameterName}, - RanParameterType: getRanParameterTypeEnumValue(v.RanParameterType), - } - } - - return ranParameterDefs -} +func (m *E2SetupRequestMessage) ExtractE2NodeConfigList() []*entities.E2NodeComponentConfig { + e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs + numOfIes := len(e2SetupRequestIes) + var e2NodeConfigListContainer E2NodeConfigList + var isPopulated bool -func buildRicControlStylesProto(def *RanFunctionDefinition) []*entities.RicControlStyle { - defRicControlStyleList := def.E2smGnbNrtRanFunctionDefinition.RicControlStyleList.RicControlStyleList - ricControlStyles := make([]*entities.RicControlStyle, len(defRicControlStyleList)) + for ieCount := 0; ieCount < numOfIes; ieCount++ { - for i, v := range defRicControlStyleList { - ricControlStyles[i] = &entities.RicControlStyle{ - RicControlStyleType: &wrappers.UInt32Value{Value: v.RicControlStyleType}, - RicControlStyleName: &wrappers.StringValue{Value: v.RicControlStyleName}, - RicControlHeaderFormatType: &wrappers.UInt32Value{Value: v.RicControlHeaderFormatType}, - RicControlMessageFormatType: &wrappers.UInt32Value{Value: v.RicControlMessageFormatType}, - RicCallProcessIdFormatType: &wrappers.UInt32Value{Value: v.RicCallProcessIdFormatType}, + if e2SetupRequestIes[ieCount].ID == E2nodeConfigAdditionID { + e2NodeConfigListContainer = e2SetupRequestIes[ieCount].Value.E2NodeConfigList + isPopulated = true + break } } - return ricControlStyles -} - -func buildRicPolicyRanParameterDefsProto(ricPolicyStyleList RicPolicyStyleList) []*entities.RanParameterDef { - ricPolicyRanParameterDefList := ricPolicyStyleList.RicPolicyRanParameterDefList.RanParameterDefItem - ranParameterDefs := make([]*entities.RanParameterDef, len(ricPolicyRanParameterDefList)) - - for i, v := range ricPolicyRanParameterDefList { - ranParameterDefs[i] = &entities.RanParameterDef{ - RanParameterId: &wrappers.UInt32Value{Value: v.RanParameterID}, - RanParameterName: &wrappers.StringValue{Value: v.RanParameterName}, - RanParameterType: getRanParameterTypeEnumValue(v.RanParameterType), - } + if !isPopulated { + return nil } - return ranParameterDefs + 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 } -func buildRicPolicyStylesProto(def *RanFunctionDefinition) []*entities.RicPolicyStyle { - defRicPolicyStyleList := def.E2smGnbNrtRanFunctionDefinition.RicPolicyStyleList.RicPolicyStyleList - ricPolicyStyles := make([]*entities.RicPolicyStyle, len(defRicPolicyStyleList)) +func (m *E2SetupRequestMessage) getGlobalE2NodeId() GlobalE2NodeId { + + // TODO: Handle error case if GlobalE2NodeId not available + e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs + numOfIes := len(e2SetupRequestIes) + index := 1 - for i, v := range defRicPolicyStyleList { - ricPolicyStyles[i] = &entities.RicPolicyStyle{ - RicPolicyStyleType: &wrappers.UInt32Value{Value: v.RicPolicyStyleType}, - RicPolicyStyleName: &wrappers.StringValue{Value: v.RicPolicyStyleName}, - RicPolicyActionFormatType: &wrappers.UInt32Value{Value: v.RicPolicyActionFormatType}, - RicPolicyRanParameterDefs: buildRicPolicyRanParameterDefsProto(v), + for ieCount := 0; ieCount < numOfIes; ieCount++ { + if e2SetupRequestIes[ieCount].ID == GlobalE2nodeID { + index = ieCount + break } } - return ricPolicyStyles -} - -func (m *E2SetupRequestMessage) getGlobalE2NodeId() GlobalE2NodeId { - return m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID + return m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[index].Value.GlobalE2nodeID } func (m *E2SetupRequestMessage) GetPlmnId() string {