2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
17 // This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 // platform project (RICP).
26 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
31 type E2SetupRequestMessage struct {
32 XMLName xml.Name `xml:"E2SetupRequestMessage"`
33 Text string `xml:",chardata"`
35 Text string `xml:",chardata"`
36 InitiatingMessage struct {
37 Text string `xml:",chardata"`
38 ProcedureCode string `xml:"procedureCode"`
40 Text string `xml:",chardata"`
41 Reject string `xml:"reject"`
44 Text string `xml:",chardata"`
45 E2setupRequest struct {
46 Text string `xml:",chardata"`
48 Text string `xml:",chardata"`
49 E2setupRequestIEs []struct {
50 Text string `xml:",chardata"`
53 Text string `xml:",chardata"`
54 Reject string `xml:"reject"`
57 Text string `xml:",chardata"`
58 GlobalE2nodeID struct {
59 Text string `xml:",chardata"`
61 Text string `xml:",chardata"`
63 Text string `xml:",chardata"`
64 PlmnID string `xml:"plmn-id"`
66 Text string `xml:",chardata"`
67 GnbID string `xml:"gnb-ID"`
69 } `xml:"global-gNB-ID"`
72 Text string `xml:",chardata"`
74 Text string `xml:",chardata"`
75 PlmnID string `xml:"plmn-id"`
77 Text string `xml:",chardata"`
78 GnbID string `xml:"gnb-ID"`
80 } `xml:"global-gNB-ID"`
83 Text string `xml:",chardata"`
84 GlobalNgENBID struct {
85 Text string `xml:",chardata"`
86 PlmnID string `xml:"plmn-id"`
88 Text string `xml:",chardata"`
89 GnbID string `xml:"gnb-ID"`
91 } `xml:"global-ng-eNB-ID"`
94 Text string `xml:",chardata"`
96 Text string `xml:",chardata"`
97 PlmnID string `xml:"plmn-id"`
99 Text string `xml:",chardata"`
100 GnbID string `xml:"gnb-ID"`
102 } `xml:"global-eNB-ID"`
104 } `xml:"GlobalE2node-ID"`
105 RANfunctionsList RANfunctionsList `xml:"RANfunctions-List"`
107 } `xml:"E2setupRequestIEs"`
108 } `xml:"protocolIEs"`
109 } `xml:"E2setupRequest"`
111 } `xml:"initiatingMessage"`
115 type RANfunctionsList struct {
116 Text string `xml:",chardata"`
117 ProtocolIESingleContainer []struct {
118 Text string `xml:",chardata"`
121 Text string `xml:",chardata"`
122 Reject string `xml:"reject"`
123 } `xml:"criticality"`
125 Text string `xml:",chardata"`
126 RANfunctionItem struct {
127 Text string `xml:",chardata"`
128 RanFunctionID string `xml:"ranFunctionID"`
129 RanFunctionDefinition string `xml:"ranFunctionDefinition"`
130 RanFunctionRevision string `xml:"ranFunctionRevision"`
131 } `xml:"RANfunction-Item"`
133 } `xml:"ProtocolIE-SingleContainer"`
136 func (m *E2SetupRequestMessage) GetExtractRanFunctionsList()([]*entities.RanFunction, error){
137 list :=m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList.ProtocolIESingleContainer
138 funcs := make([]*entities.RanFunction, len(list))
139 for i:=0; i < len(funcs); i++{
140 funcs[i] = &entities.RanFunction{}
141 id, err := strconv.ParseUint(list[i].Value.RANfunctionItem.RanFunctionID, 10, 32)
143 return nil, errors.New(fmt.Sprintf("#e2_setup_request_message.GetExtractRanFunctionsList - Failed parse uint RanFunctionID from %s", list[i].Value.RANfunctionItem.RanFunctionID))
145 funcs[i].RanFunctionId = uint32(id)
146 rev, err := strconv.ParseUint(list[i].Value.RANfunctionItem.RanFunctionRevision, 10, 32)
148 return nil, errors.New(fmt.Sprintf("#e2_setup_request_message.GetExtractRanFunctionsList - Failed parse uint RanFunctionRevision from %s", list[i].Value.RANfunctionItem.RanFunctionRevision))
150 funcs[i].RanFunctionDefinition = m.trimSpaces(list[i].Value.RANfunctionItem.RanFunctionDefinition)
151 funcs[i].RanFunctionRevision = uint32(rev)
156 func (m *E2SetupRequestMessage) GetNodeType() entities.Node_Type{
157 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.GNB.GlobalGNBID.PlmnID; id!= ""{
158 return entities.Node_GNB
160 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.EnGNB.GlobalGNBID.PlmnID; id!= ""{
161 return entities.Node_GNB
163 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.ENB.GlobalENBID.PlmnID; id!= ""{
164 return entities.Node_ENB
166 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.NgENB.GlobalNgENBID.PlmnID; id!= ""{
167 return entities.Node_GNB
169 return entities.Node_UNKNOWN
172 func (m *E2SetupRequestMessage) GetPlmnId() string{
173 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.GNB.GlobalGNBID.PlmnID; id!= ""{
174 return m.trimSpaces(id)
176 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.EnGNB.GlobalGNBID.PlmnID; id!= ""{
177 return m.trimSpaces(id)
179 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.ENB.GlobalENBID.PlmnID; id!= ""{
180 return m.trimSpaces(id)
182 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.NgENB.GlobalNgENBID.PlmnID; id!= ""{
183 return m.trimSpaces(id)
188 func (m *E2SetupRequestMessage) GetNbId() string{
189 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.GNB.GlobalGNBID.GnbID.GnbID; id!= ""{
190 return m.trimSpaces(id)
192 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.EnGNB.GlobalGNBID.GnbID.GnbID; id!= ""{
193 return m.trimSpaces(id)
195 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.ENB.GlobalENBID.GnbID.GnbID; id!= ""{
196 return m.trimSpaces(id)
198 if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.NgENB.GlobalNgENBID.GnbID.GnbID; id!= ""{
199 return m.trimSpaces(id)
204 func (m *E2SetupRequestMessage) trimSpaces(str string) string {
205 return strings.NewReplacer(" ", "", "\n", "").Replace(str)