Merge newe2 into master
[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
123         InstanceId uint32
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         NBX2EventTriggerDefinitionPresent bool
187         X2EventTriggerDefinition
188         NBNRTEventTriggerDefinitionPresent bool
189         NBNRTEventTriggerDefinition
190 }
191
192 //-----------------------------------------------------------------------------
193 //
194 //-----------------------------------------------------------------------------
195 type X2EventTriggerDefinition struct {
196         InterfaceId
197         InterfaceDirection uint32
198         ProcedureCode      uint32
199         TypeOfMessage      uint64
200 }
201
202 //-----------------------------------------------------------------------------
203 //
204 //-----------------------------------------------------------------------------
205 type NBNRTEventTriggerDefinition struct {
206         TriggerNature uint8
207 }
208
209 const ( // enum NRTTriggerNature
210         NRTTriggerNature_now = iota
211         NRTTriggerNature_onchange
212 )
213
214 /*
215 //-----------------------------------------------------------------------------
216 //
217 //-----------------------------------------------------------------------------
218 type CallProcessId struct {
219   CallProcessIDVal uint32
220 }
221 */
222
223 type ActionDefinitionChoice struct {
224         ActionDefinitionX2Format1Present  bool
225         ActionDefinitionX2Format1         E2SMgNBX2actionDefinition
226         ActionDefinitionX2Format2Present  bool
227         ActionDefinitionX2Format2         ActionDefinitionFormat2
228         ActionDefinitionNRTFormat1Present bool
229         ActionDefinitionNRTFormat1        E2SMgNBNRTActionDefinitionFormat1
230 }
231
232 //-----------------------------------------------------------------------------
233 //
234 //-----------------------------------------------------------------------------
235 type E2SMgNBNRTActionDefinitionFormat1 struct {
236         RanParameterList []RANParameterItem // 1..255
237 }
238
239 //-----------------------------------------------------------------------------
240 //
241 //-----------------------------------------------------------------------------
242 type E2SMgNBX2actionDefinition struct {
243         StyleID              uint64
244         ActionParameterItems []ActionParameterItem // 1..255
245 }
246
247 //-----------------------------------------------------------------------------
248 //
249 //-----------------------------------------------------------------------------
250 type ActionParameterItem struct {
251         ParameterID          uint32 // 1..255
252         ActionParameterValue ActionParameterValue
253 }
254
255 //-----------------------------------------------------------------------------
256 //
257 //-----------------------------------------------------------------------------
258 type ActionParameterValue struct {
259         ValueIntPresent  bool
260         ValueInt         int64
261         ValueEnumPresent bool
262         ValueEnum        int64
263         ValueBoolPresent bool
264         ValueBool        bool
265         ValueBitSPresent bool
266         ValueBitS        BitString
267         ValueOctSPresent bool
268         ValueOctS        OctetString
269         ValuePrtSPresent bool
270         ValuePrtS        OctetString
271 }
272
273 //-----------------------------------------------------------------------------
274 //
275 //-----------------------------------------------------------------------------
276 type ActionDefinitionFormat2 struct {
277         RanUEgroupItems []RANueGroupItem // 1..15
278 }
279
280 //-----------------------------------------------------------------------------
281 //
282 //-----------------------------------------------------------------------------
283 type RANueGroupItem struct {
284         RanUEgroupID         int64
285         RanUEgroupDefinition RANueGroupDefinition
286         RanPolicy            RANimperativePolicy
287 }
288
289 //-----------------------------------------------------------------------------
290 //
291 //-----------------------------------------------------------------------------
292 type RANueGroupDefinition struct {
293         RanUEGroupDefItems []RANueGroupDefItem // 1..255
294 }
295
296 //-----------------------------------------------------------------------------
297 //
298 //-----------------------------------------------------------------------------
299 type RANimperativePolicy struct {
300         RanParameterItems []RANParameterItem // 1..255
301 }
302
303 //-----------------------------------------------------------------------------
304 //
305 //-----------------------------------------------------------------------------
306 type RANueGroupDefItem struct {
307         RanParameterID    uint32 // 1..255
308         RanParameterTest  uint8
309         RanParameterValue RANParameterValue
310 }
311
312 //-----------------------------------------------------------------------------
313 //
314 //-----------------------------------------------------------------------------
315 type RANParameterItem struct {
316         RanParameterID    uint8 // 1..255
317         RanParameterValue RANParameterValue
318 }
319
320 //-----------------------------------------------------------------------------
321 //
322 //-----------------------------------------------------------------------------
323 const ( // enum RANParameterTest
324         RANParameterTest_equal = iota
325         RANParameterTest_greaterthan
326         RANParameterTest_lessthan
327         RANParameterTest_contains
328         RANParameterTest_present
329 )
330
331 //-----------------------------------------------------------------------------
332 //
333 //-----------------------------------------------------------------------------
334 type RANParameterValue struct {
335         ValueIntPresent  bool
336         ValueInt         int64
337         ValueEnumPresent bool
338         ValueEnum        int64
339         ValueBoolPresent bool
340         ValueBool        bool
341         ValueBitSPresent bool
342         ValueBitS        BitString
343         ValueOctSPresent bool
344         ValueOctS        OctetString
345         ValuePrtSPresent bool
346         ValuePrtS        OctetString
347 }
348
349 //-----------------------------------------------------------------------------
350 //
351 //-----------------------------------------------------------------------------
352 type BitString struct {
353         UnusedBits uint8
354         Length     uint64
355         Data       []uint8
356 }
357
358 //-----------------------------------------------------------------------------
359 //
360 //-----------------------------------------------------------------------------
361 type OctetString struct {
362         Length uint64
363         Data   []uint8
364 }
365
366 //-----------------------------------------------------------------------------
367 //
368 //-----------------------------------------------------------------------------
369 const (
370         E2AP_SubSeqActionTypeContinue uint64 = 0
371         E2AP_SubSeqActionTypeWait     uint64 = 1
372 )
373
374 const (
375         E2AP_TimeToWaitZero   uint64 = 0
376         E2AP_TimeToWaitW1ms   uint64 = 1
377         E2AP_TimeToWaitW2ms   uint64 = 2
378         E2AP_TimeToWaitW5ms   uint64 = 3
379         E2AP_TimeToWaitW10ms  uint64 = 4
380         E2AP_TimeToWaitW20ms  uint64 = 4
381         E2AP_TimeToWaitW30ms  uint64 = 5
382         E2AP_TimeToWaitW40ms  uint64 = 6
383         E2AP_TimeToWaitW50ms  uint64 = 7
384         E2AP_TimeToWaitW100ms uint64 = 8
385         E2AP_TimeToWaitW200ms uint64 = 9
386         E2AP_TimeToWaitW500ms uint64 = 10
387         E2AP_TimeToWaitW1s    uint64 = 11
388         E2AP_TimeToWaitW2s    uint64 = 12
389         E2AP_TimeToWaitW5s    uint64 = 13
390         E2AP_TimeToWaitW10s   uint64 = 14
391         E2AP_TimeToWaitW20s   uint64 = 15
392         E2AP_TimeToWaitW60    uint64 = 16
393 )
394
395 type SubsequentAction struct {
396         Present    bool
397         Type       uint64
398         TimetoWait uint64
399 }
400
401 //-----------------------------------------------------------------------------
402 //
403 //-----------------------------------------------------------------------------
404
405 const (
406         E2AP_ActionTypeReport  uint64 = 0
407         E2AP_ActionTypeInsert  uint64 = 1
408         E2AP_ActionTypePolicy  uint64 = 2
409         E2AP_ActionTypeInvalid uint64 = 99 // For RIC internal usage only
410 )
411
412 type ActionToBeSetupItem struct {
413         ActionId                   uint64
414         ActionType                 uint64
415         RicActionDefinitionPresent bool
416         ActionDefinitionChoice
417         SubsequentAction
418 }
419
420 //-----------------------------------------------------------------------------
421 //
422 //-----------------------------------------------------------------------------
423
424 const (
425         E2AP_CauseContent_RadioNetwork uint8 = 1
426         E2AP_CauseContent_Transport    uint8 = 2
427         E2AP_CauseContent_Protocol     uint8 = 3
428         E2AP_CauseContent_Misc         uint8 = 4
429         E2AP_CauseContent_Ric          uint8 = 5
430 )
431
432 //const (
433 //      E2AP_CauseValue_RadioNetwork_ uint8 = 0
434 //)
435 //const (
436 //      E2AP_CauseValue_Transport_ uint8 = 0
437 //)
438 //const (
439 //      E2AP_CauseValue_Protocol_ uint8 = 0
440 //)
441 //const (
442 //      E2AP_CauseValue_Misc_ uint8 = 0
443 //)
444
445 const (
446         E2AP_CauseValue_Ric_function_id_Invalid                            uint8 = 0
447         E2AP_CauseValue_Ric_action_not_supported                           uint8 = 1
448         E2AP_CauseValue_Ric_excessive_actions                              uint8 = 2
449         E2AP_CauseValue_Ric_duplicate_action                               uint8 = 3
450         E2AP_CauseValue_Ric_duplicate_event                                uint8 = 4
451         E2AP_CauseValue_Ric_function_resource_limit                        uint8 = 5
452         E2AP_CauseValue_Ric_request_id_unknown                             uint8 = 6
453         E2AP_CauseValue_Ric_inconsistent_action_subsequent_action_sequence uint8 = 7
454         E2AP_CauseValue_Ric_control_message_invalid                        uint8 = 8
455         E2AP_CauseValue_Ric_call_process_id_invalid                        uint8 = 9
456         E2AP_CauseValue_Ric_function_not_required                          uint8 = 10
457         E2AP_CauseValue_Ric_excessive_functions                            uint8 = 11
458         E2AP_CauseValue_Ric_ric_resource_limi                              uint8 = 12
459 )
460
461 type Cause struct {
462         Content uint8
463         Value   uint8
464 }
465
466 //-----------------------------------------------------------------------------
467 //
468 //-----------------------------------------------------------------------------
469 type ActionAdmittedItem struct {
470         ActionId uint64
471 }
472
473 //-----------------------------------------------------------------------------
474 //
475 //-----------------------------------------------------------------------------
476 type ActionAdmittedList struct {
477         Items []ActionAdmittedItem //16
478 }
479
480 //-----------------------------------------------------------------------------
481 //
482 //-----------------------------------------------------------------------------
483 type ActionNotAdmittedItem struct {
484         ActionId uint64
485         Cause    Cause
486 }
487
488 //-----------------------------------------------------------------------------
489 //
490 //-----------------------------------------------------------------------------
491 type ActionNotAdmittedList struct {
492         Items []ActionNotAdmittedItem //16
493 }
494
495 //-----------------------------------------------------------------------------
496 //
497 //-----------------------------------------------------------------------------
498 const (
499         E2AP_CriticalityReject uint8 = 0
500         E2AP_CriticalityIgnore uint8 = 1
501         E2AP_CriticalityNotify uint8 = 2
502 )
503
504 type CriticalityDiagnosticsIEListItem struct {
505         IeCriticality uint8 //Crit
506         IeID          uint32
507         TypeOfError   uint8
508 }
509
510 //-----------------------------------------------------------------------------
511 //
512 //-----------------------------------------------------------------------------
513 type CriticalityDiagnosticsIEList struct {
514         Items []CriticalityDiagnosticsIEListItem //256
515 }
516
517 //-----------------------------------------------------------------------------
518 //
519 //-----------------------------------------------------------------------------
520 type CriticalityDiagnostics struct {
521         Present         bool
522         ProcCodePresent bool
523         ProcCode        uint64
524         TrigMsgPresent  bool
525         TrigMsg         uint64
526         ProcCritPresent bool
527         ProcCrit        uint8 //Crit
528         CriticalityDiagnosticsIEList
529 }