X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fmodels%2Fe2_setup_request_message.go;fp=E2Manager%2Fmodels%2Fe2_setup_request_message.go;h=e61d4983eb1c1ba24f0cd84b66c1307058a7779f;hb=a07b8597afc9d063a7f37a376a5bcf29ba29b557;hp=32d05ca2ad50b5d381712b2ea3cf9a6bd9a879eb;hpb=663195b03ce7fca8f82e399be26459771bc89f77;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/models/e2_setup_request_message.go b/E2Manager/models/e2_setup_request_message.go index 32d05ca..e61d498 100644 --- a/E2Manager/models/e2_setup_request_message.go +++ b/E2Manager/models/e2_setup_request_message.go @@ -21,10 +21,8 @@ package models import ( "encoding/xml" - "errors" - "fmt" "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" - "strconv" + "github.com/golang/protobuf/ptypes/wrappers" "strings" ) @@ -134,10 +132,119 @@ type E2SetupRequestMessage struct { } type RanFunctionItem struct { - Text string `xml:",chardata"` - RanFunctionID string `xml:"ranFunctionID"` - RanFunctionDefinition string `xml:"ranFunctionDefinition"` - RanFunctionRevision string `xml:"ranFunctionRevision"` + 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"` } type RANfunctionsList struct { @@ -156,54 +263,219 @@ type RANfunctionsList struct { } `xml:"ProtocolIE-SingleContainer"` } -func (m *E2SetupRequestMessage) ExtractRanFunctionsList() ([]*entities.RanFunction, error) { +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 +} + +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), + }, + } +} - setupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs +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 len(setupRequestIes) < 2 { - return nil, nil + if defRanFunctionName.RanFunctionInstance != nil { + ranFunctionName.OptionalRanFunctionInstance = &entities.RanFunctionName_RanFunctionInstance{ + RanFunctionInstance: *defRanFunctionName.RanFunctionInstance, + } } - list := setupRequestIes[1].Value.RANfunctionsList.ProtocolIESingleContainer - funcs := make([]*entities.RanFunction, len(list)) - for i := 0; i < len(funcs); i++ { - funcs[i] = &entities.RanFunction{} - id, err := strconv.ParseUint(list[i].Value.RANfunctionItem.RanFunctionID, 10, 32) - if err != nil { - return nil, errors.New(fmt.Sprintf("#e2_setup_request_message.ExtractRanFunctionsList - Failed parse uint RanFunctionID from %s", list[i].Value.RANfunctionItem.RanFunctionID)) + return ranFunctionName +} + +func buildRicEventTriggerStylesProto(def *RanFunctionDefinition) []*entities.RicEventTriggerStyle { + defRicEventTriggerStyleList := def.E2smGnbNrtRanFunctionDefinition.RicEventTriggerStyleList.RicEventTriggerStyleList + ricEventTriggerStyles := make([]*entities.RicEventTriggerStyle, len(defRicEventTriggerStyleList)) + + 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}, } - funcs[i].RanFunctionId = uint32(id) - rev, err := strconv.ParseUint(list[i].Value.RANfunctionItem.RanFunctionRevision, 10, 32) - if err != nil { - return nil, errors.New(fmt.Sprintf("#e2_setup_request_message.ExtractRanFunctionsList - Failed parse uint RanFunctionRevision from %s", list[i].Value.RANfunctionItem.RanFunctionRevision)) + } + + return ricEventTriggerStyles +} + +func buildRicReportStylesProto(def *RanFunctionDefinition) []*entities.RicReportStyle { + defRicReportStyleList := def.E2smGnbNrtRanFunctionDefinition.RicReportStyleList.RicReportStyleList + ricReportStyles := make([]*entities.RicReportStyle, len(defRicReportStyleList)) + + 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}, } - funcs[i].RanFunctionDefinition = m.trimSpaces(list[i].Value.RANfunctionItem.RanFunctionDefinition) - funcs[i].RanFunctionRevision = uint32(rev) } - return funcs, nil + + return ricReportStyles +} + +func buildRicReportRanParameterDefsProto(ricReportStyleList RicReportStyleList) []*entities.RanParameterDef { + ricReportRanParameterDefList := ricReportStyleList.RicReportRanParameterDefList.RanParameterDefItem + ranParameterDefs := make([]*entities.RanParameterDef, len(ricReportRanParameterDefList)) + + 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), + } + } + + return ranParameterDefs +} + +func getRanParameterTypeEnumValue(ranParameterType RanParameterType) entities.RanParameterType { + if ranParameterType.Boolean != nil { + return entities.RanParameterType_BOOLEAN + } + + if ranParameterType.BitString != nil { + return entities.RanParameterType_BIT_STRING + } + + if ranParameterType.Enumerated != nil { + return entities.RanParameterType_ENUMERATED + } + + if ranParameterType.Integer != nil { + return entities.RanParameterType_INTEGER + } + + if ranParameterType.OctetString != nil { + return entities.RanParameterType_OCTET_STRING + } + + if ranParameterType.PrintableString != nil { + return entities.RanParameterType_PRINTABLE_STRING + } + + return entities.RanParameterType_UNKNOWN_RAN_PARAMETER_TYPE +} + +func buildRicInsertStylesProto(def *RanFunctionDefinition) []*entities.RicInsertStyle { + defRicInsertStyleList := def.E2smGnbNrtRanFunctionDefinition.RicInsertStyleList.RicInsertStyleList + ricInsertStyles := make([]*entities.RicInsertStyle, len(defRicInsertStyleList)) + + 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}, + } + } + + return ricInsertStyles +} + +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 buildRicControlStylesProto(def *RanFunctionDefinition) []*entities.RicControlStyle { + defRicControlStyleList := def.E2smGnbNrtRanFunctionDefinition.RicControlStyleList.RicControlStyleList + ricControlStyles := make([]*entities.RicControlStyle, len(defRicControlStyleList)) + + 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}, + } + } + + 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), + } + } + + return ranParameterDefs +} + +func buildRicPolicyStylesProto(def *RanFunctionDefinition) []*entities.RicPolicyStyle { + defRicPolicyStyleList := def.E2smGnbNrtRanFunctionDefinition.RicPolicyStyleList.RicPolicyStyleList + ricPolicyStyles := make([]*entities.RicPolicyStyle, len(defRicPolicyStyleList)) + + 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), + } + } + + return ricPolicyStyles } func (m *E2SetupRequestMessage) getGlobalE2NodeId() GlobalE2NodeId { return m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID } -//func (m *E2SetupRequestMessage) GetNodeType() entities.Node_Type { -// globalE2NodeId := m.getGlobalE2NodeId() -// if id := globalE2NodeId.GNB.GlobalGNBID.PlmnID; id != "" { -// return entities.Node_GNB -// } -// if id := globalE2NodeId.EnGNB.GlobalGNBID.PlmnID; id != "" { -// return entities.Node_GNB -// } -// if id := globalE2NodeId.ENB.GlobalENBID.PlmnID; id != "" { -// return entities.Node_ENB -// } -// if id := globalE2NodeId.NgENB.GlobalNgENBID.PlmnID; id != "" { -// return entities.Node_ENB -// } -// return entities.Node_UNKNOWN -//} - func (m *E2SetupRequestMessage) GetPlmnId() string { globalE2NodeId := m.getGlobalE2NodeId() if id := globalE2NodeId.GNB.GlobalGNBID.PlmnID; id != "" {