[RIC-384] Final changes 26/3926/1
authoridanshal <idan.shalom@intl.att.com>
Sun, 31 May 2020 07:55:45 +0000 (10:55 +0300)
committeridanshal <idan.shalom@intl.att.com>
Sun, 31 May 2020 07:55:49 +0000 (10:55 +0300)
Change-Id: I82f5aa2c64230d8ddf064efb8b369e08279034ed
Signed-off-by: idanshal <idan.shalom@intl.att.com>
Automation/Tests/Resource/resource.robot
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go
E2Manager/models/e2_setup_request_message.go
E2Manager/tests/resources/setupRequest_gnb.xml

index 29e15f8..dcfe8d5 100644 (file)
@@ -28,7 +28,7 @@ Documentation    Resource file
 ${docker_number}    5
 ${docker_number-1}    4
 ${url}   http://localhost:3800
-${ranName}  gnb:208-092-303030
+${ranName}  gnb_208_092_303030
 ${getNodeb}  /v1/nodeb/${ranName}
 ${update_gnb_url}   /v1/nodeb/${ranName}/update
 ${update_gnb_body}  {"servedNrCells":[{"servedNrCellInformation":{"cellId":"abcd","choiceNrMode":{"fdd":{}},"nrMode":1,"nrPci":1,"servedPlmns":["whatever"]},"nrNeighbourInfos":[{"nrCgi":"one","choiceNrMode":{"fdd":{}},"nrMode":1,"nrPci":1}]}]}
index 3e58c31..e50829d 100644 (file)
@@ -133,14 +133,12 @@ func (h E2SetupRequestNotificationHandler) handleNewRan(ranName string, e2tIpAdd
 }
 
 func (h E2SetupRequestNotificationHandler) setGnbFunctions(nodebInfo *entities.NodebInfo, setupRequest *models.E2SetupRequestMessage) error {
-       ranFunctions, err := setupRequest.ExtractRanFunctionsList()
+       ranFunctions := setupRequest.ExtractRanFunctionsList()
 
-       if err != nil {
-               h.logger.Errorf("#E2SetupRequestNotificationHandler.setGnbFunctions - RAN name: %s - failed to update nodebInfo entity. Error: %s", nodebInfo.GetRanName(), err)
-               return err
+       if ranFunctions != nil {
+               nodebInfo.GetGnb().RanFunctions = ranFunctions
        }
 
-       nodebInfo.GetGnb().RanFunctions = ranFunctions
        return nil
 }
 
@@ -231,22 +229,20 @@ func (h E2SetupRequestNotificationHandler) parseSetupRequest(payload []byte) (*m
        h.logger.Infof("#E2SetupRequestNotificationHandler.parseSetupRequest - payload: %s", payload[pipInd+1:])
 
        setupRequest := &models.E2SetupRequestMessage{}
-       err := xml.Unmarshal(payload[pipInd+1:], &setupRequest.E2APPDU)
+       err := xml.Unmarshal(normalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU)
        if err != nil {
                return nil, "", errors.New(fmt.Sprintf("#E2SetupRequestNotificationHandler.parseSetupRequest - Error unmarshalling E2 Setup Request payload: %x", payload))
        }
 
-       ranFunctionsList := setupRequest.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList.ProtocolIESingleContainer
-
-       for i := 0; i < len(ranFunctionsList); i++ {
-               def := models.E2smGnbNrtRanFunctionDefinition{}
-               err = xml.Unmarshal([]byte(ranFunctionsList[i].Value.RANfunctionItem.RanFunctionDefinition.Text), &def)
-               ranFunctionsList[i].Value.RANfunctionItem.RanFunctionDefinition.E2smGnbNrtRanFunctionDefinition = def
-       }
-
        return setupRequest, e2tIpAddress, nil
 }
 
+func normalizeXml(payload []byte) []byte {
+       xmlStr := string(payload)
+       normalized := strings.NewReplacer("&lt;", "<", "&gt;", ">").Replace(xmlStr)
+       return []byte(normalized)
+}
+
 func (h E2SetupRequestNotificationHandler) buildNodebInfo(ranName string, e2tAddress string, request *models.E2SetupRequestMessage) (*entities.NodebInfo, error) {
 
        var err error
index 22d8d45..9d45c16 100644 (file)
@@ -65,8 +65,8 @@ func TestParseGnbSetupRequest_Success(t *testing.T) {
        handler, _, _, _, _, _ := initMocks(t)
        prefBytes := []byte(prefix)
        request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
-       assert.Equal(t, "131014", request.GetPlmnId())
-       assert.Equal(t, "10011001101010101011", request.GetNbId())
+       assert.Equal(t, "02F829", request.GetPlmnId())
+       assert.Equal(t, "001100000011000000110000", request.GetNbId())
        assert.Nil(t, err)
 }
 
@@ -126,16 +126,18 @@ func TestE2SetupRequestNotificationHandler_HandleNewGnbSuccess(t *testing.T) {
        e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
        var gnb *entities.NodebInfo
        readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
-       writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
+       notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)}
+       setupRequest, e2tIpAddress, _ := handler.parseSetupRequest(notificationRequest.Payload)
+       nodebInfo, _ := handler.buildNodebInfo(nodebRanName, e2tIpAddress, setupRequest)
+       writerMock.On("SaveNodeb", mock.Anything, nodebInfo).Return(nil)
        routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
        writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
        e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
        var errEmpty error
        rmrMessage := &rmrCgo.MBuf{}
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
-       prefBytes := []byte(prefix)
-       notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
        handler.Handle(notificationRequest)
+       writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
        assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
 }
 
@@ -194,14 +196,17 @@ func TestE2SetupRequestNotificationHandler_HandleExistingGnbSuccess(t *testing.T
        }
        readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil)
        routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
-       writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
+
+       notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)}
+       setupRequest, _, _ := handler.parseSetupRequest(notificationRequest.Payload)
+       _ = handler.setGnbFunctions(gnb, setupRequest)
+
+       writerMock.On("UpdateNodebInfo", gnb).Return(nil)
        e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
        var errEmpty error
-       rmrMessage := &rmrCgo.MBuf{}
-       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
-       prefBytes := []byte(prefix)
-       notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty)
        handler.Handle(notificationRequest)
+       writerMock.AssertCalled(t, "UpdateNodebInfo", gnb)
        assertExistingNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
 }
 
index 0515298..e61d498 100644 (file)
@@ -263,21 +263,29 @@ type RANfunctionsList struct {
        } `xml:"ProtocolIE-SingleContainer"`
 }
 
-func (m *E2SetupRequestMessage) ExtractRanFunctionsList() ([]*entities.RanFunction, error) {
-       list := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList.ProtocolIESingleContainer
-       funcs := make([]*entities.RanFunction, len(list))
+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++ {
-               funcs[i] = &entities.RanFunction{}
-               funcs[i].RanFunctionId = &wrappers.UInt32Value{Value: list[i].Value.RANfunctionItem.RanFunctionID}
-               def, _ := m.buildRanFunctionDefinitionProto(&list[i].Value.RANfunctionItem.RanFunctionDefinition)
-               funcs[i].RanFunctionDefinition = def
-               funcs[i].RanFunctionRevision = &wrappers.UInt32Value{Value: list[i].Value.RANfunctionItem.RanFunctionRevision}
+               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, nil
+       return funcs
 }
 
-func (m *E2SetupRequestMessage) buildRanFunctionDefinitionProto(def *RanFunctionDefinition) (*entities.RanFunctionDefinition, error) {
-       defProto := &entities.RanFunctionDefinition{
+func (m *E2SetupRequestMessage) buildRanFunctionDefinitionProto(def *RanFunctionDefinition) *entities.RanFunctionDefinition {
+       return &entities.RanFunctionDefinition{
                E2SmGnbNrtRanFunctionDefinition: &entities.E2SmGnbNrtRanFunctionDefinition{
                        RanFunctionName:       buildRanFunctionNameProto(def),
                        RicEventTriggerStyles: buildRicEventTriggerStylesProto(def),
@@ -287,8 +295,6 @@ func (m *E2SetupRequestMessage) buildRanFunctionDefinitionProto(def *RanFunction
                        RicPolicyStyles:       buildRicPolicyStylesProto(def),
                },
        }
-
-       return defProto, nil
 }
 
 func buildRanFunctionNameProto(def *RanFunctionDefinition) *entities.RanFunctionName {
@@ -313,10 +319,11 @@ func buildRicEventTriggerStylesProto(def *RanFunctionDefinition) []*entities.Ric
        ricEventTriggerStyles := make([]*entities.RicEventTriggerStyle, len(defRicEventTriggerStyleList))
 
        for i, v := range defRicEventTriggerStyleList {
-               ricEventTriggerStyles[i] = &entities.RicEventTriggerStyle{}
-               ricEventTriggerStyles[i].RicEventTriggerStyleType = &wrappers.UInt32Value{Value: v.RicEventTriggerStyleType}
-               ricEventTriggerStyles[i].RicEventTriggerStyleName = &wrappers.StringValue{Value: v.RicEventTriggerStyleName}
-               ricEventTriggerStyles[i].RicEventTriggerFormatType = &wrappers.UInt32Value{Value: v.RicEventTriggerFormatType}
+               ricEventTriggerStyles[i] = &entities.RicEventTriggerStyle{
+                       RicEventTriggerStyleType:  &wrappers.UInt32Value{Value: v.RicEventTriggerStyleType},
+                       RicEventTriggerStyleName:  &wrappers.StringValue{Value: v.RicEventTriggerStyleName},
+                       RicEventTriggerFormatType: &wrappers.UInt32Value{Value: v.RicEventTriggerFormatType},
+               }
        }
 
        return ricEventTriggerStyles
@@ -327,13 +334,14 @@ func buildRicReportStylesProto(def *RanFunctionDefinition) []*entities.RicReport
        ricReportStyles := make([]*entities.RicReportStyle, len(defRicReportStyleList))
 
        for i, v := range defRicReportStyleList {
-               ricReportStyles[i] = &entities.RicReportStyle{}
-               ricReportStyles[i].RicReportStyleType = &wrappers.UInt32Value{Value: v.RicReportStyleType}
-               ricReportStyles[i].RicReportStyleName = &wrappers.StringValue{Value: v.RicReportStyleName}
-               ricReportStyles[i].RicReportActionFormatType = &wrappers.UInt32Value{Value: v.RicReportActionFormatType}
-               ricReportStyles[i].RicReportRanParameterDefs = buildRicReportRanParameterDefsProto(v)
-               ricReportStyles[i].RicIndicationHeaderFormatType = &wrappers.UInt32Value{Value: v.RicIndicationHeaderFormatType}
-               ricReportStyles[i].RicIndicationMessageFormatType = &wrappers.UInt32Value{Value: v.RicIndicationMessageFormatType}
+               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},
+               }
        }
 
        return ricReportStyles
@@ -344,10 +352,11 @@ func buildRicReportRanParameterDefsProto(ricReportStyleList RicReportStyleList)
        ranParameterDefs := make([]*entities.RanParameterDef, len(ricReportRanParameterDefList))
 
        for i, v := range ricReportRanParameterDefList {
-               ranParameterDefs[i] = &entities.RanParameterDef{}
-               ranParameterDefs[i].RanParameterId = &wrappers.UInt32Value{Value: v.RanParameterID}
-               ranParameterDefs[i].RanParameterName = &wrappers.StringValue{Value: v.RanParameterName}
-               ranParameterDefs[i].RanParameterType = getRanParameterTypeEnumValue(v.RanParameterType)
+               ranParameterDefs[i] = &entities.RanParameterDef{
+                       RanParameterId:   &wrappers.UInt32Value{Value: v.RanParameterID},
+                       RanParameterName: &wrappers.StringValue{Value: v.RanParameterName},
+                       RanParameterType: getRanParameterTypeEnumValue(v.RanParameterType),
+               }
        }
 
        return ranParameterDefs
@@ -386,14 +395,15 @@ func buildRicInsertStylesProto(def *RanFunctionDefinition) []*entities.RicInsert
        ricInsertStyles := make([]*entities.RicInsertStyle, len(defRicInsertStyleList))
 
        for i, v := range defRicInsertStyleList {
-               ricInsertStyles[i] = &entities.RicInsertStyle{}
-               ricInsertStyles[i].RicInsertStyleType = &wrappers.UInt32Value{Value: v.RicInsertStyleType}
-               ricInsertStyles[i].RicInsertStyleName = &wrappers.StringValue{Value: v.RicInsertStyleName}
-               ricInsertStyles[i].RicInsertActionFormatType = &wrappers.UInt32Value{Value: v.RicInsertActionFormatType}
-               ricInsertStyles[i].RicInsertRanParameterDefs = buildRicInsertRanParameterDefsProto(v)
-               ricInsertStyles[i].RicIndicationHeaderFormatType = &wrappers.UInt32Value{Value: v.RicIndicationHeaderFormatType}
-               ricInsertStyles[i].RicIndicationMessageFormatType = &wrappers.UInt32Value{Value: v.RicIndicationMessageFormatType}
-               ricInsertStyles[i].RicCallProcessIdFormatType = &wrappers.UInt32Value{Value: v.RicCallProcessIdFormatType}
+               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
@@ -404,10 +414,11 @@ func buildRicInsertRanParameterDefsProto(ricInsertStyleList RicInsertStyleList)
        ranParameterDefs := make([]*entities.RanParameterDef, len(ricInsertRanParameterDefList))
 
        for i, v := range ricInsertRanParameterDefList {
-               ranParameterDefs[i] = &entities.RanParameterDef{}
-               ranParameterDefs[i].RanParameterId = &wrappers.UInt32Value{Value: v.RanParameterID}
-               ranParameterDefs[i].RanParameterName = &wrappers.StringValue{Value: v.RanParameterName}
-               ranParameterDefs[i].RanParameterType = getRanParameterTypeEnumValue(v.RanParameterType)
+               ranParameterDefs[i] = &entities.RanParameterDef{
+                       RanParameterId:   &wrappers.UInt32Value{Value: v.RanParameterID},
+                       RanParameterName: &wrappers.StringValue{Value: v.RanParameterName},
+                       RanParameterType: getRanParameterTypeEnumValue(v.RanParameterType),
+               }
        }
 
        return ranParameterDefs
@@ -418,12 +429,13 @@ func buildRicControlStylesProto(def *RanFunctionDefinition) []*entities.RicContr
        ricControlStyles := make([]*entities.RicControlStyle, len(defRicControlStyleList))
 
        for i, v := range defRicControlStyleList {
-               ricControlStyles[i] = &entities.RicControlStyle{}
-               ricControlStyles[i].RicControlStyleType = &wrappers.UInt32Value{Value: v.RicControlStyleType}
-               ricControlStyles[i].RicControlStyleName = &wrappers.StringValue{Value: v.RicControlStyleName}
-               ricControlStyles[i].RicControlHeaderFormatType = &wrappers.UInt32Value{Value: v.RicControlHeaderFormatType}
-               ricControlStyles[i].RicControlMessageFormatType = &wrappers.UInt32Value{Value: v.RicControlMessageFormatType}
-               ricControlStyles[i].RicCallProcessIdFormatType = &wrappers.UInt32Value{Value: v.RicCallProcessIdFormatType}
+               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
@@ -434,10 +446,11 @@ func buildRicPolicyRanParameterDefsProto(ricPolicyStyleList RicPolicyStyleList)
        ranParameterDefs := make([]*entities.RanParameterDef, len(ricPolicyRanParameterDefList))
 
        for i, v := range ricPolicyRanParameterDefList {
-               ranParameterDefs[i] = &entities.RanParameterDef{}
-               ranParameterDefs[i].RanParameterId = &wrappers.UInt32Value{Value: v.RanParameterID}
-               ranParameterDefs[i].RanParameterName = &wrappers.StringValue{Value: v.RanParameterName}
-               ranParameterDefs[i].RanParameterType = getRanParameterTypeEnumValue(v.RanParameterType)
+               ranParameterDefs[i] = &entities.RanParameterDef{
+                       RanParameterId:   &wrappers.UInt32Value{Value: v.RanParameterID},
+                       RanParameterName: &wrappers.StringValue{Value: v.RanParameterName},
+                       RanParameterType: getRanParameterTypeEnumValue(v.RanParameterType),
+               }
        }
 
        return ranParameterDefs
@@ -448,11 +461,12 @@ func buildRicPolicyStylesProto(def *RanFunctionDefinition) []*entities.RicPolicy
        ricPolicyStyles := make([]*entities.RicPolicyStyle, len(defRicPolicyStyleList))
 
        for i, v := range defRicPolicyStyleList {
-               ricPolicyStyles[i] = &entities.RicPolicyStyle{}
-               ricPolicyStyles[i].RicPolicyStyleType = &wrappers.UInt32Value{Value: v.RicPolicyStyleType}
-               ricPolicyStyles[i].RicPolicyStyleName = &wrappers.StringValue{Value: v.RicPolicyStyleName}
-               ricPolicyStyles[i].RicPolicyActionFormatType = &wrappers.UInt32Value{Value: v.RicPolicyActionFormatType}
-               ricPolicyStyles[i].RicPolicyRanParameterDefs = buildRicPolicyRanParameterDefsProto(v)
+               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
index b947ae2..faf4fc2 100644 (file)
@@ -1,68 +1 @@
-<E2AP-PDU>\r
-    <initiatingMessage>\r
-        <procedureCode>1</procedureCode>\r
-        <criticality>\r
-            <reject/>\r
-        </criticality>\r
-        <value>\r
-            <E2setupRequest>\r
-                <protocolIEs>\r
-                    <E2setupRequestIEs>\r
-                        <id>3</id>\r
-                        <criticality>\r
-                            <reject/>\r
-                        </criticality>\r
-                        <value>\r
-                            <GlobalE2node-ID>\r
-                                <gNB>\r
-                                    <global-gNB-ID>\r
-                                        <plmn-id>13 10 14</plmn-id>\r
-                                        <gnb-id>\r
-                                            <gnb-ID>10011001101010101011</gnb-ID>\r
-                                        </gnb-id>\r
-                                    </global-gNB-ID>\r
-                                </gNB>\r
-                            </GlobalE2node-ID>\r
-                        </value>\r
-                    </E2setupRequestIEs>\r
-                    <E2setupRequestIEs>\r
-                        <id>10</id>\r
-                        <criticality>\r
-                            <reject/>\r
-                        </criticality>\r
-                        <value>\r
-                            <RANfunctions-List>\r
-                                <ProtocolIE-SingleContainer>\r
-                                    <id>8</id>\r
-                                    <criticality>\r
-                                        <reject/>\r
-                                    </criticality>\r
-                                    <value>\r
-                                        <RANfunction-Item>\r
-                                            <ranFunctionID>1</ranFunctionID>\r
-                                            <ranFunctionDefinition>334455</ranFunctionDefinition>\r
-                                            <ranFunctionRevision>0</ranFunctionRevision>\r
-                                        </RANfunction-Item>\r
-                                    </value>\r
-                                </ProtocolIE-SingleContainer>\r
-                                <ProtocolIE-SingleContainer>\r
-                                    <id>8</id>\r
-                                    <criticality>\r
-                                        <reject/>\r
-                                    </criticality>\r
-                                    <value>\r
-                                        <RANfunction-Item>\r
-                                            <ranFunctionID>7</ranFunctionID>\r
-                                            <ranFunctionDefinition>334455</ranFunctionDefinition>\r
-                                            <ranFunctionRevision>0</ranFunctionRevision>\r
-                                        </RANfunction-Item>\r
-                                    </value>\r
-                                </ProtocolIE-SingleContainer>\r
-                            </RANfunctions-List>\r
-                        </value>\r
-                    </E2setupRequestIEs>\r
-                </protocolIEs>\r
-            </E2setupRequest>\r
-        </value>\r
-    </initiatingMessage>\r
-</E2AP-PDU>
\ No newline at end of file
+<E2AP-PDU><initiatingMessage><procedureCode>1</procedureCode><criticality><reject /></criticality><value><E2setupRequest><protocolIEs><E2setupRequestIEs><id>3</id><criticality><reject /></criticality><value><GlobalE2node-ID><gNB><global-gNB-ID><plmn-id>02 F8 29</plmn-id><gnb-id><gnb-ID>                                                001100000011000000110000                                            </gnb-ID></gnb-id></global-gNB-ID></gNB></GlobalE2node-ID></value></E2setupRequestIEs><E2setupRequestIEs><id>10</id><criticality><reject /></criticality><value><RANfunctions-List><ProtocolIE-SingleContainer><id>8</id><criticality><ignore /></criticality><value><RANfunction-Item><ranFunctionID>1</ranFunctionID><ranFunctionDefinition><E2SM-gNB-NRT-RANfunction-Definition>    <ranFunction-Name>        <ranFunction-ShortName>gNB-X2</ranFunction-ShortName>        <ranFunction-E2SM-OID>1.3.6.1.4.1.28458.99.0.21.3.3.1.2</ranFunction-E2SM-OID>        <ranFunction-Description>gNB X2 Network Interface</ranFunction-Description>        <ranFunction-Instance>0</ranFunction-Instance>    </ranFunction-Name>    <ric-EventTriggerStyle-List>        <RIC-EventTriggerStyle-List>            <ric-EventTriggerStyle-Type>1</ric-EventTriggerStyle-Type>            <ric-EventTriggerStyle-Name>Message Type only</ric-EventTriggerStyle-Name>            <ric-EventTriggerFormat-Type>1</ric-EventTriggerFormat-Type>        </RIC-EventTriggerStyle-List>    </ric-EventTriggerStyle-List>    <ric-ReportStyle-List>        <RIC-ReportStyle-List>            <ric-ReportStyle-Type>1</ric-ReportStyle-Type>            <ric-ReportStyle-Name>Complete message</ric-ReportStyle-Name>            <ric-ReportActionFormat-Type>1</ric-ReportActionFormat-Type>            <ric-ReportRanParameterDef-List>                <RANparameterDef-Item>                    <ranParameter-ID>1</ranParameter-ID>                    <ranParameter-Name>AddTimestamp</ranParameter-Name>                    <ranParameter-Type><boolean/></ranParameter-Type>                </RANparameterDef-Item>            </ric-ReportRanParameterDef-List>            <ric-IndicationHeaderFormat-Type>1</ric-IndicationHeaderFormat-Type>            <ric-IndicationMessageFormat-Type>1</ric-IndicationMessageFormat-Type>        </RIC-ReportStyle-List>    </ric-ReportStyle-List>    <ric-InsertStyle-List>        <RIC-InsertStyle-List>            <ric-InsertStyle-Type>1</ric-InsertStyle-Type>            <ric-InsertStyle-Name>Complete message</ric-InsertStyle-Name>            <ric-InsertActionFormat-Type>1</ric-InsertActionFormat-Type>            <ric-InsertRanParameterDef-List>                <RANparameterDef-Item>                    <ranParameter-ID>1</ranParameter-ID>                    <ranParameter-Name>AddTimestamp</ranParameter-Name>                    <ranParameter-Type><boolean/></ranParameter-Type>                </RANparameterDef-Item>            </ric-InsertRanParameterDef-List>            <ric-IndicationHeaderFormat-Type>1</ric-IndicationHeaderFormat-Type>            <ric-IndicationMessageFormat-Type>1</ric-IndicationMessageFormat-Type>            <ric-CallProcessIDFormat-Type>1</ric-CallProcessIDFormat-Type>        </RIC-InsertStyle-List>    </ric-InsertStyle-List>    <ric-ControlStyle-List>        <RIC-ControlStyle-List>            <ric-ControlStyle-Type>1</ric-ControlStyle-Type>            <ric-ControlStyle-Name>Complete message</ric-ControlStyle-Name>            <ric-ControlHeaderFormat-Type>1</ric-ControlHeaderFormat-Type>            <ric-ControlMessageFormat-Type>1</ric-ControlMessageFormat-Type>            <ric-CallProcessIDFormat-Type>1</ric-CallProcessIDFormat-Type>        </RIC-ControlStyle-List>    </ric-ControlStyle-List></E2SM-gNB-NRT-RANfunction-Definition></ranFunctionDefinition><ranFunctionRevision>1</ranFunctionRevision></RANfunction-Item></value></ProtocolIE-SingleContainer><ProtocolIE-SingleContainer><id>8</id><criticality><ignore /></criticality><value><RANfunction-Item><ranFunctionID>2</ranFunctionID><ranFunctionDefinition><E2SM-gNB-NRT-RANfunction-Definition>    <ranFunction-Name>        <ranFunction-ShortName>gNB-NRT</ranFunction-ShortName>        <ranFunction-E2SM-OID>1.3.6.1.4.1.28458.99.0.21.3.3.3.3</ranFunction-E2SM-OID>        <ranFunction-Description>gNB Neighbour Relation Table</ranFunction-Description>    </ranFunction-Name>    <ric-EventTriggerStyle-List>        <RIC-EventTriggerStyle-List>            <ric-EventTriggerStyle-Type>1</ric-EventTriggerStyle-Type>            <ric-EventTriggerStyle-Name>Notification</ric-EventTriggerStyle-Name>            <ric-EventTriggerFormat-Type>1</ric-EventTriggerFormat-Type>        </RIC-EventTriggerStyle-List>    </ric-EventTriggerStyle-List>    <ric-ReportStyle-List>        <RIC-ReportStyle-List>            <ric-ReportStyle-Type>1</ric-ReportStyle-Type>            <ric-ReportStyle-Name>Complete table</ric-ReportStyle-Name>            <ric-ReportActionFormat-Type>1</ric-ReportActionFormat-Type>            <ric-ReportRanParameterDef-List>                <RANparameterDef-Item>                    <ranParameter-ID>1</ranParameter-ID>                    <ranParameter-Name>AddTimestamp</ranParameter-Name>                    <ranParameter-Type><boolean/></ranParameter-Type>                </RANparameterDef-Item>            </ric-ReportRanParameterDef-List>            <ric-IndicationHeaderFormat-Type>1</ric-IndicationHeaderFormat-Type>            <ric-IndicationMessageFormat-Type>1</ric-IndicationMessageFormat-Type>        </RIC-ReportStyle-List>    </ric-ReportStyle-List>    <ric-ControlStyle-List>        <RIC-ControlStyle-List>            <ric-ControlStyle-Type>1</ric-ControlStyle-Type>            <ric-ControlStyle-Name>NRT modification</ric-ControlStyle-Name>            <ric-ControlHeaderFormat-Type>1</ric-ControlHeaderFormat-Type>            <ric-ControlMessageFormat-Type>1</ric-ControlMessageFormat-Type>            <ric-CallProcessIDFormat-Type>0</ric-CallProcessIDFormat-Type>        </RIC-ControlStyle-List>    </ric-ControlStyle-List></E2SM-gNB-NRT-RANfunction-Definition></ranFunctionDefinition><ranFunctionRevision>1</ranFunctionRevision></RANfunction-Item></value></ProtocolIE-SingleContainer><ProtocolIE-SingleContainer><id>8</id><criticality><ignore /></criticality><value><RANfunction-Item><ranFunctionID>3</ranFunctionID><ranFunctionDefinition><E2SM-gNB-NRT-RANfunction-Definition>    <ranFunction-Name>        <ranFunction-ShortName>gNB-X2</ranFunction-ShortName>        <ranFunction-E2SM-OID>1.3.6.1.4.1.28458.99.0.21.3.3.1.2</ranFunction-E2SM-OID>        <ranFunction-Description>gNB X2 Network Interface</ranFunction-Description>        <ranFunction-Instance>1</ranFunction-Instance>    </ranFunction-Name>    <ric-EventTriggerStyle-List>        <RIC-EventTriggerStyle-List>            <ric-EventTriggerStyle-Type>1</ric-EventTriggerStyle-Type>            <ric-EventTriggerStyle-Name>Message Type only</ric-EventTriggerStyle-Name>            <ric-EventTriggerFormat-Type>1</ric-EventTriggerFormat-Type>        </RIC-EventTriggerStyle-List>    </ric-EventTriggerStyle-List>    <ric-PolicyStyle-List>        <RIC-PolicyStyle-List>            <ric-PolicyStyle-Type>1</ric-PolicyStyle-Type>            <ric-PolicyStyle-Name>Message Admission</ric-PolicyStyle-Name>            <ric-PolicyActionFormat-Type>2</ric-PolicyActionFormat-Type>            <ric-PolicyRanParameterDef-List>                <RANparameterDef-Item>                    <ranParameter-ID>1</ranParameter-ID>                    <ranParameter-Name>QCI1</ranParameter-Name>                    <ranParameter-Type><integer/></ranParameter-Type>                </RANparameterDef-Item>                <RANparameterDef-Item>                    <ranParameter-ID>2</ranParameter-ID>                    <ranParameter-Name>ARP1</ranParameter-Name>                    <ranParameter-Type><integer/></ranParameter-Type>                </RANparameterDef-Item>                <RANparameterDef-Item>                    <ranParameter-ID>3</ranParameter-ID>                    <ranParameter-Name>SPID</ranParameter-Name>                    <ranParameter-Type><integer/></ranParameter-Type>                </RANparameterDef-Item>                <RANparameterDef-Item>                    <ranParameter-ID>4</ranParameter-ID>                    <ranParameter-Name>U-TEID1</ranParameter-Name>                    <ranParameter-Type><octet-string/></ranParameter-Type>                </RANparameterDef-Item>                <RANparameterDef-Item>                    <ranParameter-ID>10</ranParameter-ID>                    <ranParameter-Name>Load_offset</ranParameter-Name>                    <ranParameter-Type><integer/></ranParameter-Type>                </RANparameterDef-Item>            </ric-PolicyRanParameterDef-List>        </RIC-PolicyStyle-List>    </ric-PolicyStyle-List></E2SM-gNB-NRT-RANfunction-Definition></ranFunctionDefinition><ranFunctionRevision>1</ranFunctionRevision></RANfunction-Item></value></ProtocolIE-SingleContainer></RANfunctions-List></value></E2setupRequestIEs></protocolIEs></E2setupRequest></value></initiatingMessage></E2AP-PDU>
\ No newline at end of file