RIC-867: Submgr adaptations to E2APv2.0
[ric-plt/submgr.git] / e2ap / pkg / e2ap / msg_e2ap.go
1 /*
2 ==================================================================================
3   Copyright (c) 2019 AT&T Intellectual Property.
4   Copyright (c) 2019 Nokia
5
6    Licensed under the Apache License, Version 2.0 (the "License");
7    you may not use this file except in compliance with the License.
8    You may obtain a copy of the License at
9
10        http://www.apache.org/licenses/LICENSE-2.0
11
12    Unless required by applicable law or agreed to in writing, software
13    distributed under the License is distributed on an "AS IS" BASIS,
14    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    See the License for the specific language governing permissions and
16    limitations under the License.
17 ==================================================================================
18 */
19
20 package e2ap
21
22 import (
23         "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/conv"
24         "strconv"
25 )
26
27 //-----------------------------------------------------------------------------
28 //
29 //-----------------------------------------------------------------------------
30 const (
31         E2AP_InitiatingMessage   uint64 = 1
32         E2AP_SuccessfulOutcome   uint64 = 2
33         E2AP_UnsuccessfulOutcome uint64 = 3
34 )
35
36 //-----------------------------------------------------------------------------
37 //
38 //-----------------------------------------------------------------------------
39 // E2AP messages
40 // Initiating message
41 const (
42         E2AP_RICSubscriptionRequest       uint64 = 1
43         E2AP_RICSubscriptionDeleteRequest uint64 = 2
44
45         // E2AP_RICServiceUpdate uint64 = 3
46         // E2AP_RICControlRequest uint64 = 4
47         //
48         // //E2AP_X2SetupRequest uint64 = 5;
49         // E2AP_ENDCX2SetupRequest uint64 = 6
50         // E2AP_ResourceStatusRequest uint64 = 7
51         // E2AP_ENBConfigurationUpdate uint64 = 8
52         // E2AP_ENDCConfigurationUpdate uint64 = 9
53         // E2AP_ResetRequest uint64 = 10
54         // E2AP_RICIndication uint64 = 11
55
56         // E2AP_RICServiceQuery uint64 = 12
57         // E2AP_LoadInformation uint64 = 13
58         // E2AP_GNBStatusIndication uint64 = 14
59         // E2AP_ResourceStatusUpdate uint64 = 15
60         // E2AP_ErrorIndication uint64 = 16
61         //
62 )
63
64 // E2AP messages
65 // Successful outcome
66 const (
67         E2AP_RICSubscriptionResponse       uint64 = 1
68         E2AP_RICSubscriptionDeleteResponse uint64 = 2
69
70         // E2AP_RICserviceUpdateAcknowledge uint64 = 3
71         // E2AP_RICcontrolAcknowledge uint64 = 4
72         //
73         // //E2AP_X2SetupResponse uint64 = 5;
74         // E2AP_ENDCX2SetupResponse uint64 = 6
75         // E2AP_ResourceStatusResponse uint64 = 7
76         // E2AP_ENBConfigurationUpdateAcknowledge uint64 = 8
77         // E2AP_ENDCConfigurationUpdateAcknowledge uint64 = 9
78         // E2AP_ResetResponse uint64 = 10
79         //
80 )
81
82 // E2AP messages
83 // Unsuccessful outcome
84 const (
85         E2AP_RICSubscriptionFailure       uint64 = 1
86         E2AP_RICSubscriptionDeleteFailure uint64 = 2
87
88         // E2AP_RICserviceUpdateFailure uint64 = 3
89         // E2AP_RICcontrolFailure uint64 = 4
90         //
91         // //E2AP_X2SetupFailure uint64 = 5;
92         // E2AP_ENDCX2SetupFailure uint64 = 6
93         // E2AP_ResourceStatusFailure uint64 = 7
94         // E2AP_ENBConfigurationUpdateFailure uint64 = 8
95         // E2AP_ENDCConfigurationUpdateFailure uint64 = 9
96         //
97 )
98
99 //-----------------------------------------------------------------------------
100 //
101 //-----------------------------------------------------------------------------
102 type PackedData struct {
103         Buf []byte
104 }
105
106 //-----------------------------------------------------------------------------
107 //
108 //-----------------------------------------------------------------------------
109 type MessageInfo struct {
110         MsgType uint64
111         MsgId   uint64
112 }
113
114 func (msgInfo *MessageInfo) String() string {
115         return "msginfo(" + strconv.FormatUint((uint64)(msgInfo.MsgType), 10) + string(":") + strconv.FormatUint((uint64)(msgInfo.MsgId), 10) + ")"
116 }
117
118 //-----------------------------------------------------------------------------
119 //
120 //-----------------------------------------------------------------------------
121 type RequestId struct {
122         Id         uint32 //RequestorId
123         InstanceId uint32 //Same as SubId in many place in the code. Name changed in E2 spec SubId -> InstanceId
124 }
125
126 func (rid *RequestId) String() string {
127         return strconv.FormatUint((uint64)(rid.Id), 10) + string(":") + strconv.FormatUint((uint64)(rid.InstanceId), 10)
128 }
129
130 //-----------------------------------------------------------------------------
131 //
132 //-----------------------------------------------------------------------------
133 type FunctionId uint16
134
135 //-----------------------------------------------------------------------------
136 //
137 //-----------------------------------------------------------------------------
138
139 const (
140         E2AP_ENBIDMacroPBits20    uint8 = 20
141         E2AP_ENBIDHomeBits28      uint8 = 28
142         E2AP_ENBIDShortMacroits18 uint8 = 18
143         E2AP_ENBIDlongMacroBits21 uint8 = 21
144 )
145
146 type NodeId struct {
147         Bits uint8
148         Id   uint32
149 }
150
151 func (nid *NodeId) String() string {
152         return strconv.FormatUint((uint64)(nid.Id), 10)
153 }
154
155 //-----------------------------------------------------------------------------
156 //
157 //-----------------------------------------------------------------------------
158 type GlobalNodeId struct {
159         Present      bool
160         PlmnIdentity conv.PlmnIdentityTbcd
161         NodeId       NodeId
162 }
163
164 func (gnid *GlobalNodeId) String() string {
165         return gnid.PlmnIdentity.String() + string(":") + gnid.NodeId.String()
166 }
167
168 //-----------------------------------------------------------------------------
169 //
170 //-----------------------------------------------------------------------------
171 type InterfaceId struct {
172         GlobalEnbId GlobalNodeId
173         GlobalGnbId GlobalNodeId
174 }
175
176 //-----------------------------------------------------------------------------
177 //
178 //-----------------------------------------------------------------------------
179
180 const (
181         E2AP_InterfaceDirectionIncoming uint32 = 0
182         E2AP_InterfaceDirectionOutgoing uint32 = 1
183 )
184
185 type EventTriggerDefinition struct {
186         Data OctetString
187 }
188
189 /*
190 //-----------------------------------------------------------------------------
191 //
192 //-----------------------------------------------------------------------------
193 type CallProcessId struct {
194   CallProcessIDVal uint32
195 }
196 */
197
198 type ActionDefinitionChoice struct {
199         Data OctetString
200 }
201
202 //-----------------------------------------------------------------------------
203 //
204 //-----------------------------------------------------------------------------
205 type BitString struct {
206         UnusedBits uint8
207         Length     uint64
208         Data       []uint8
209 }
210
211 //-----------------------------------------------------------------------------
212 //
213 //-----------------------------------------------------------------------------
214 type OctetString struct {
215         Length uint64
216         Data   []uint8
217 }
218
219 //-----------------------------------------------------------------------------
220 //
221 //-----------------------------------------------------------------------------
222 const (
223         E2AP_SubSeqActionTypeContinue uint64 = 0
224         E2AP_SubSeqActionTypeWait     uint64 = 1
225 )
226
227 var E2AP_SubSeqActionTypeStrMap = map[string]uint64{
228         "continue": E2AP_SubSeqActionTypeContinue,
229         "wait":     E2AP_SubSeqActionTypeWait,
230 }
231
232 const (
233         E2AP_TimeToWaitZero   uint64 = 0
234         E2AP_TimeToWaitW1ms   uint64 = 1
235         E2AP_TimeToWaitW2ms   uint64 = 2
236         E2AP_TimeToWaitW5ms   uint64 = 3
237         E2AP_TimeToWaitW10ms  uint64 = 4
238         E2AP_TimeToWaitW20ms  uint64 = 5
239         E2AP_TimeToWaitW30ms  uint64 = 6
240         E2AP_TimeToWaitW40ms  uint64 = 7
241         E2AP_TimeToWaitW50ms  uint64 = 8
242         E2AP_TimeToWaitW100ms uint64 = 9
243         E2AP_TimeToWaitW200ms uint64 = 10
244         E2AP_TimeToWaitW500ms uint64 = 11
245         E2AP_TimeToWaitW1s    uint64 = 12
246         E2AP_TimeToWaitW2s    uint64 = 13
247         E2AP_TimeToWaitW5s    uint64 = 14
248         E2AP_TimeToWaitW10s   uint64 = 15
249         E2AP_TimeToWaitW20s   uint64 = 16
250         E2AP_TimeToWaitW60    uint64 = 17
251 )
252
253 var E2AP_TimeToWaitStrMap = map[string]uint64{
254         "zero":   E2AP_TimeToWaitZero,
255         "w1ms":   E2AP_TimeToWaitW1ms,
256         "w2ms":   E2AP_TimeToWaitW2ms,
257         "w5ms":   E2AP_TimeToWaitW5ms,
258         "w10ms":  E2AP_TimeToWaitW10ms,
259         "w20ms":  E2AP_TimeToWaitW20ms,
260         "w30ms":  E2AP_TimeToWaitW30ms,
261         "w40ms":  E2AP_TimeToWaitW40ms,
262         "w50ms":  E2AP_TimeToWaitW50ms,
263         "w100ms": E2AP_TimeToWaitW100ms,
264         "w200ms": E2AP_TimeToWaitW200ms,
265         "w500ms": E2AP_TimeToWaitW500ms,
266         "w1s":    E2AP_TimeToWaitW1s,
267         "w2s":    E2AP_TimeToWaitW2s,
268         "w5s":    E2AP_TimeToWaitW5s,
269         "w10s":   E2AP_TimeToWaitW10s,
270         "w20s":   E2AP_TimeToWaitW20s,
271         "w60s":   E2AP_TimeToWaitW60,
272 }
273
274 type SubsequentAction struct {
275         Present    bool
276         Type       uint64
277         TimetoWait uint64
278 }
279
280 //-----------------------------------------------------------------------------
281 //
282 //-----------------------------------------------------------------------------
283
284 const (
285         E2AP_ActionTypeReport  uint64 = 0
286         E2AP_ActionTypeInsert  uint64 = 1
287         E2AP_ActionTypePolicy  uint64 = 2
288         E2AP_ActionTypeInvalid uint64 = 99 // For RIC internal usage only
289 )
290
291 var E2AP_ActionTypeStrMap = map[string]uint64{
292         "report": E2AP_ActionTypeReport,
293         "insert": E2AP_ActionTypeInsert,
294         "policy": E2AP_ActionTypePolicy,
295 }
296
297 type ActionToBeSetupItem struct {
298         ActionId                   uint64
299         ActionType                 uint64
300         RicActionDefinitionPresent bool
301         ActionDefinitionChoice
302         SubsequentAction
303 }
304
305 //-----------------------------------------------------------------------------
306 //
307 //-----------------------------------------------------------------------------
308
309 // Cause CHOICE, E2AP-v02.00
310 const (
311         E2AP_CauseContent_RICrequest uint8 = 1
312         E2AP_CauseContent_RICservice uint8 = 2
313         E2AP_CauseContent_E2node     uint8 = 3
314         E2AP_CauseContent_Transport  uint8 = 4
315         E2AP_CauseContent_Protocol   uint8 = 5
316         E2AP_CauseContent_Misc       uint8 = 6
317 )
318
319 // CauseRICrequest ENUMERATED, E2AP-v02.00
320 const (
321         E2AP_CauseValue_RICrequest_function_id_Invalid                            uint8 = 0
322         E2AP_CauseValue_RICrequest_action_not_supported                           uint8 = 1
323         E2AP_CauseValue_RICrequest_excessive_actions                              uint8 = 2
324         E2AP_CauseValue_RICrequest_duplicate_action                               uint8 = 3
325         E2AP_CauseValue_RICrequest_duplicate_event_trigger                        uint8 = 4
326         E2AP_CauseValue_RICrequest_function_resource_limit                        uint8 = 5
327         E2AP_CauseValue_RICrequest_request_id_unknown                             uint8 = 6
328         E2AP_CauseValue_RICrequest_inconsistent_action_subsequent_action_sequence uint8 = 7
329         E2AP_CauseValue_RICrequest_control_message_invalid                        uint8 = 8
330         E2AP_CauseValue_RICrequest_ric_call_process_id_invalid                    uint8 = 9
331         E2AP_CauseValue_RICrequest_control_timer_expired                          uint8 = 10
332         E2AP_CauseValue_RICrequest_control_failed_to_execute                      uint8 = 11
333         E2AP_CauseValue_RICrequest_system_not_ready                               uint8 = 12
334         E2AP_CauseValue_RICrequest_unspecified                                    uint8 = 13
335 )
336
337 type Cause struct {
338         Content uint8
339         Value   uint8
340 }
341
342 //-----------------------------------------------------------------------------
343 //
344 //-----------------------------------------------------------------------------
345 type ActionAdmittedItem struct {
346         ActionId uint64
347 }
348
349 //-----------------------------------------------------------------------------
350 //
351 //-----------------------------------------------------------------------------
352 type ActionAdmittedList struct {
353         Items []ActionAdmittedItem //16
354 }
355
356 //-----------------------------------------------------------------------------
357 //
358 //-----------------------------------------------------------------------------
359 type ActionNotAdmittedItem struct {
360         ActionId uint64
361         Cause    Cause
362 }
363
364 //-----------------------------------------------------------------------------
365 //
366 //-----------------------------------------------------------------------------
367 type ActionNotAdmittedList struct {
368         Items []ActionNotAdmittedItem //16
369 }
370
371 //-----------------------------------------------------------------------------
372 //
373 //-----------------------------------------------------------------------------
374 const (
375         E2AP_CriticalityReject uint8 = 0
376         E2AP_CriticalityIgnore uint8 = 1
377         E2AP_CriticalityNotify uint8 = 2
378 )
379
380 type CriticalityDiagnosticsIEListItem struct {
381         IeCriticality uint8 //Crit
382         IeID          uint32
383         TypeOfError   uint8
384 }
385
386 //-----------------------------------------------------------------------------
387 //
388 //-----------------------------------------------------------------------------
389 type CriticalityDiagnosticsIEList struct {
390         Items []CriticalityDiagnosticsIEListItem //256
391 }
392
393 //-----------------------------------------------------------------------------
394 //
395 //-----------------------------------------------------------------------------
396 type CriticalityDiagnostics struct {
397         Present         bool
398         ProcCodePresent bool
399         ProcCode        uint64
400         TrigMsgPresent  bool
401         TrigMsg         uint64
402         ProcCritPresent bool
403         ProcCrit        uint8 //Crit
404         CriticalityDiagnosticsIEList
405 }