Ric-193 - On Success, return Setup Response
[ric-plt/e2mgr.git] / E2Manager / models / e2_setup_request_message.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
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
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
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.
16
17 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 //  platform project (RICP).
19
20 package models
21
22 import (
23         "encoding/xml"
24         "errors"
25         "fmt"
26         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
27         "strconv"
28 )
29
30 type E2SetupRequestMessage struct {
31         XMLName xml.Name `xml:"E2SetupRequestMessage"`
32         Text    string   `xml:",chardata"`
33         E2APPDU struct {
34                 Text              string `xml:",chardata"`
35                 InitiatingMessage struct {
36                         Text          string `xml:",chardata"`
37                         ProcedureCode string `xml:"procedureCode"`
38                         Criticality   struct {
39                                 Text   string `xml:",chardata"`
40                                 Reject string `xml:"reject"`
41                         } `xml:"criticality"`
42                         Value struct {
43                                 Text           string `xml:",chardata"`
44                                 E2setupRequest struct {
45                                         Text        string `xml:",chardata"`
46                                         ProtocolIEs struct {
47                                                 Text              string `xml:",chardata"`
48                                                 E2setupRequestIEs []struct {
49                                                         Text        string `xml:",chardata"`
50                                                         ID          string `xml:"id"`
51                                                         Criticality struct {
52                                                                 Text   string `xml:",chardata"`
53                                                                 Reject string `xml:"reject"`
54                                                         } `xml:"criticality"`
55                                                         Value struct {
56                                                                 Text           string `xml:",chardata"`
57                                                                 GlobalE2nodeID struct {
58                                                                         Text string `xml:",chardata"`
59                                                                         GNB  struct {
60                                                                                 Text        string `xml:",chardata"`
61                                                                                 GlobalGNBID struct {
62                                                                                         Text   string `xml:",chardata"`
63                                                                                         PlmnID string `xml:"plmn-id"`
64                                                                                         GnbID  struct {
65                                                                                                 Text  string `xml:",chardata"`
66                                                                                                 GnbID string `xml:"gnb-ID"`
67                                                                                         } `xml:"gnb-id"`
68                                                                                 } `xml:"global-gNB-ID"`
69                                                                         } `xml:"gNB"`
70                                                                         EnGNB struct {
71                                                                                 Text        string `xml:",chardata"`
72                                                                                 GlobalGNBID struct {
73                                                                                         Text   string `xml:",chardata"`
74                                                                                         PlmnID string `xml:"plmn-id"`
75                                                                                         GnbID  struct {
76                                                                                                 Text  string `xml:",chardata"`
77                                                                                                 GnbID string `xml:"gnb-ID"`
78                                                                                         } `xml:"gnb-id"`
79                                                                                 } `xml:"global-gNB-ID"`
80                                                                         } `xml:"en-gNB"`
81                                                                         NgENB struct {
82                                                                                 Text          string `xml:",chardata"`
83                                                                                 GlobalNgENBID struct {
84                                                                                         Text   string `xml:",chardata"`
85                                                                                         PlmnID string `xml:"plmn-id"`
86                                                                                         GnbID  struct {
87                                                                                                 Text  string `xml:",chardata"`
88                                                                                                 GnbID string `xml:"gnb-ID"`
89                                                                                         } `xml:"gnb-id"`
90                                                                                 } `xml:"global-ng-eNB-ID"`
91                                                                         } `xml:"ng-eNB"`
92                                                                         ENB struct {
93                                                                                 Text        string `xml:",chardata"`
94                                                                                 GlobalENBID struct {
95                                                                                         Text   string `xml:",chardata"`
96                                                                                         PlmnID string `xml:"plmn-id"`
97                                                                                         GnbID  struct {
98                                                                                                 Text  string `xml:",chardata"`
99                                                                                                 GnbID string `xml:"gnb-ID"`
100                                                                                         } `xml:"gnb-id"`
101                                                                                 } `xml:"global-eNB-ID"`
102                                                                         } `xml:"eNB"`
103                                                                 } `xml:"GlobalE2node-ID"`
104                                                                 RANfunctionsList RANfunctionsList `xml:"RANfunctions-List"`
105                                                         } `xml:"value"`
106                                                 } `xml:"E2setupRequestIEs"`
107                                         } `xml:"protocolIEs"`
108                                 } `xml:"E2setupRequest"`
109                         } `xml:"value"`
110                 } `xml:"initiatingMessage"`
111         } `xml:"E2AP-PDU"`
112 }
113
114 type RANfunctionsList struct {
115     Text                      string `xml:",chardata"`
116     ProtocolIESingleContainer []struct {
117                 Text        string `xml:",chardata"`
118                 ID          string `xml:"id"`
119                 Criticality struct {
120                         Text   string `xml:",chardata"`
121                         Reject string `xml:"reject"`
122                 } `xml:"criticality"`
123                 Value struct {
124                         Text            string `xml:",chardata"`
125                         RANfunctionItem struct {
126                                 Text                  string `xml:",chardata"`
127                                 RanFunctionID         string `xml:"ranFunctionID"`
128                                 RanFunctionDefinition string `xml:"ranFunctionDefinition"`
129                                 RanFunctionRevision   string `xml:"ranFunctionRevision"`
130                         } `xml:"RANfunction-Item"`
131                 } `xml:"value"`
132     } `xml:"ProtocolIE-SingleContainer"`
133 }
134
135 func (m *E2SetupRequestMessage) GetExtractRanFunctionsList()([]*entities.RanFunction, error){
136         list :=m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList.ProtocolIESingleContainer
137         funcs := make([]*entities.RanFunction, len(list))
138         for i:=0; i < len(funcs); i++{
139                 funcs[i] = &entities.RanFunction{}
140                 id, err := strconv.ParseUint(list[i].Value.RANfunctionItem.RanFunctionID, 10, 32)
141                 if err != nil {
142                         return nil, errors.New(fmt.Sprintf("#e2_setup_request_message.GetExtractRanFunctionsList - Failed parse uint RanFunctionID from %s", list[i].Value.RANfunctionItem.RanFunctionID))
143                 }
144                 funcs[i].RanFunctionId = uint32(id)
145                 rev, err := strconv.ParseUint(list[i].Value.RANfunctionItem.RanFunctionRevision, 10, 32)
146                 if err != nil {
147                         return nil, errors.New(fmt.Sprintf("#e2_setup_request_message.GetExtractRanFunctionsList - Failed parse uint RanFunctionRevision from %s", list[i].Value.RANfunctionItem.RanFunctionRevision))
148                 }
149                 funcs[i].RanFunctionDefinition = list[i].Value.RANfunctionItem.RanFunctionDefinition
150                 funcs[i].RanFunctionRevision = uint32(rev)
151         }
152         return funcs, nil
153 }
154
155 func (m *E2SetupRequestMessage) GetNodeType() entities.Node_Type{
156         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.GNB.GlobalGNBID.PlmnID; id!= ""{
157                 return entities.Node_GNB
158         }
159         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.EnGNB.GlobalGNBID.PlmnID; id!= ""{
160                 return entities.Node_GNB
161         }
162         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.ENB.GlobalENBID.PlmnID; id!= ""{
163                 return entities.Node_ENB
164         }
165         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.NgENB.GlobalNgENBID.PlmnID; id!= ""{
166                 return entities.Node_GNB
167         }
168         return entities.Node_UNKNOWN
169 }
170
171 func (m *E2SetupRequestMessage) GetPlmnId() string{
172         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.GNB.GlobalGNBID.PlmnID; id!= ""{
173                 return id
174         }
175         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.EnGNB.GlobalGNBID.PlmnID; id!= ""{
176                 return id
177         }
178         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.ENB.GlobalENBID.PlmnID; id!= ""{
179                 return id
180         }
181         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.NgENB.GlobalNgENBID.PlmnID; id!= ""{
182                 return id
183         }
184         return ""
185 }
186
187 func (m *E2SetupRequestMessage) GetNbId() string{
188         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.GNB.GlobalGNBID.GnbID.GnbID; id!= ""{
189                 return id
190         }
191         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.EnGNB.GlobalGNBID.GnbID.GnbID; id!= ""{
192                 return id
193         }
194         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.ENB.GlobalENBID.GnbID.GnbID; id!= ""{
195                 return id
196         }
197         if id := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID.NgENB.GlobalNgENBID.GnbID.GnbID; id!= ""{
198                 return id
199         }
200         return ""
201 }