X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fmodels%2Fe2_setup_response_message.go;fp=E2Manager%2Fmodels%2Fe2_setup_response_message.go;h=62c733dfc122a12de66ba47161d6220e86e7fdc7;hb=b3805a9d29e2c7f6f14e3fedfa1ba504f734eea9;hp=0000000000000000000000000000000000000000;hpb=f1035e286c9cdb58fd786daf4d6c5cc9bea45a37;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/models/e2_setup_response_message.go b/E2Manager/models/e2_setup_response_message.go new file mode 100644 index 0000000..62c733d --- /dev/null +++ b/E2Manager/models/e2_setup_response_message.go @@ -0,0 +1,233 @@ +// +// Copyright 2019 AT&T Intellectual Property +// Copyright 2019 Nokia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This source code is part of the near-RT RIC (RAN Intelligent Controller) +// platform project (RICP). + +package models +import ( + "encoding/xml" +) + + +type TimeToWait = int + +var TimeToWaitEnum = struct{ + V60s TimeToWait + V20s TimeToWait + V10s TimeToWait + V5s TimeToWait + V2s TimeToWait + V1s TimeToWait +}{60, 20, 10, 5, 2, 1} + +var timeToWaitMap = map[TimeToWait]interface{}{ + TimeToWaitEnum.V60s : struct { + XMLName xml.Name `xml:"TimeToWait"` + Text string `xml:",chardata"` + V60s string `xml:"v60s"` + }{}, + TimeToWaitEnum.V20s : struct { + XMLName xml.Name `xml:"TimeToWait"` + Text string `xml:",chardata"` + V20s string `xml:"v20s"` + }{}, + TimeToWaitEnum.V10s : struct { + XMLName xml.Name `xml:"TimeToWait"` + Text string `xml:",chardata"` + V10s string `xml:"v10s"` + }{}, + TimeToWaitEnum.V5s : struct { + XMLName xml.Name `xml:"TimeToWait"` + Text string `xml:",chardata"` + V5s string `xml:"v5s"` + }{}, + TimeToWaitEnum.V2s : struct { + XMLName xml.Name `xml:"TimeToWait"` + Text string `xml:",chardata"` + V2s string `xml:"v2s"` + }{}, + TimeToWaitEnum.V1s : struct { + XMLName xml.Name `xml:"TimeToWait"` + Text string `xml:",chardata"` + V1s string `xml:"v1s"` + }{}, +} + +func NewE2SetupSuccessResponseMessage(plmnId string, ricId string, request *E2SetupRequestMessage) E2SetupResponseMessage{ + outcome := SuccessfulOutcome{} + outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs = make([]E2setupResponseIEs, 2) + outcome.ProcedureCode = "1" + outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[0].ID = "4" + outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[0].Value = GlobalRICID{GlobalRICID: struct { + Text string `xml:",chardata"` + PLMNIdentity string `xml:"pLMN-Identity"` + RicID string `xml:"ric-ID"` + }{PLMNIdentity:plmnId, RicID:ricId}} + outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].ID = "9" + outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].Value = RANfunctionsIDList{RANfunctionsIDList: struct { + Text string `xml:",chardata"` + ProtocolIESingleContainer []ProtocolIESingleContainer `xml:"ProtocolIE-SingleContainer"` + }{ProtocolIESingleContainer:extractRanFunctionsIDList(request)}} + return E2SetupResponseMessage{E2APPDU:E2APPDU{Outcome:outcome}} +} + +func NewE2SetupFailureResponseMessage(timeToWait TimeToWait) E2SetupResponseMessage{ + outcome := UnsuccessfulOutcome{} + outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs = make([]E2setupFailureIEs, 2) + outcome.ProcedureCode = "1" + outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[0].ID = "1" + outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[0].Value.Value = Cause{} + outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[1].ID = "31" + outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[1].Value.Value = timeToWaitMap[timeToWait] + return E2SetupResponseMessage{E2APPDU:E2APPDU{Outcome:outcome}} +} + +type E2SetupResponseMessage struct { + XMLName xml.Name `xml:"E2SetupSuccessResponseMessage"` + Text string `xml:",chardata"` + E2APPDU E2APPDU +} + +type E2APPDU struct { + XMLName xml.Name `xml:"E2AP-PDU"` + Text string `xml:",chardata"` + Outcome interface{} +} + +type SuccessfulOutcome struct { + XMLName xml.Name `xml:"successfulOutcome"` + Text string `xml:",chardata"` + ProcedureCode string `xml:"procedureCode"` + Criticality struct { + Text string `xml:",chardata"` + Reject string `xml:"reject"` + } `xml:"criticality"` + Value struct { + Text string `xml:",chardata"` + E2setupResponse struct { + Text string `xml:",chardata"` + ProtocolIEs struct { + Text string `xml:",chardata"` + E2setupResponseIEs []E2setupResponseIEs`xml:"E2setupResponseIEs"` + } `xml:"protocolIEs"` + } `xml:"E2setupResponse"` + } `xml:"value"` +} + +type E2setupResponseIEs struct { + Text string `xml:",chardata"` + ID string `xml:"id"` + Criticality struct { + Text string `xml:",chardata"` + Reject string `xml:"reject"` + } `xml:"criticality"` + Value interface{}`xml:"value"` +} + +type GlobalRICID struct { + Text string `xml:",chardata"` + GlobalRICID struct { + Text string `xml:",chardata"` + PLMNIdentity string `xml:"pLMN-Identity"` + RicID string `xml:"ric-ID"` + } `xml:"GlobalRIC-ID"` +} + +type RANfunctionsIDList struct { + Text string `xml:",chardata"` + RANfunctionsIDList struct { + Text string `xml:",chardata"` + ProtocolIESingleContainer []ProtocolIESingleContainer `xml:"ProtocolIE-SingleContainer"` + } `xml:"RANfunctionsID-List"` +} + +type ProtocolIESingleContainer struct { + Text string `xml:",chardata"` + ID string `xml:"id"` + Criticality struct { + Text string `xml:",chardata"` + Ignore string `xml:"ignore"` + } `xml:"criticality"` + Value struct { + Text string `xml:",chardata"` + RANfunctionIDItem struct { + Text string `xml:",chardata"` + RanFunctionID string `xml:"ranFunctionID"` + RanFunctionRevision string `xml:"ranFunctionRevision"` + } `xml:"RANfunctionID-Item"` + } `xml:"value"` +} + + +type UnsuccessfulOutcome struct { + XMLName xml.Name `xml:"unsuccessfulOutcome"` + Text string `xml:",chardata"` + ProcedureCode string `xml:"procedureCode"` + Criticality struct { + Text string `xml:",chardata"` + Reject string `xml:"reject"` + } `xml:"criticality"` + Value struct { + Text string `xml:",chardata"` + E2setupFailure struct { + Text string `xml:",chardata"` + ProtocolIEs struct { + Text string `xml:",chardata"` + E2setupFailureIEs []E2setupFailureIEs`xml:"E2setupFailureIEs"` + } `xml:"protocolIEs"` + } `xml:"E2setupFailure"` + } `xml:"value"` +} + +type E2setupFailureIEs struct { + Text string `xml:",chardata"` + ID string `xml:"id"` + Criticality struct { + Text string `xml:",chardata"` + Ignore string `xml:"ignore"` + } `xml:"criticality"` + Value struct { + Text string `xml:",chardata"` + Value interface{} + } `xml:"value"` +} + +type Cause struct { + XMLName xml.Name `xml:"Cause"` + Text string `xml:",chardata"` + Transport struct { + Text string `xml:",chardata"` + TransportResourceUnavailable string `xml:"transport-resource-unavailable"` + } `xml:"transport"` +} + +func extractRanFunctionsIDList(request *E2SetupRequestMessage) []ProtocolIESingleContainer{ + list := &request.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList + ids := make([]ProtocolIESingleContainer,len(list.ProtocolIESingleContainer)) + for i := 0; i< len(ids); i++{ + ids[i] = convertToRANfunctionID(list, i) + } + return ids +} + +func convertToRANfunctionID(list *RANfunctionsList, i int) ProtocolIESingleContainer{ + id := ProtocolIESingleContainer{} + id.ID = "6" + id.Value.RANfunctionIDItem.RanFunctionID = list.ProtocolIESingleContainer[i].Value.RANfunctionItem.RanFunctionID + id.Value.RANfunctionIDItem.RanFunctionRevision = list.ProtocolIESingleContainer[i].Value.RANfunctionItem.RanFunctionRevision + return id +} \ No newline at end of file