as_message.h 22.1 KB
Newer Older
nikaeinn's avatar
nikaeinn committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*******************************************************************************
    OpenAirInterface
    Copyright(c) 1999 - 2014 Eurecom

    OpenAirInterface is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.


    OpenAirInterface is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with OpenAirInterface.The full GNU General Public License is
   included in this distribution in the file called "COPYING". If not,
   see <http://www.gnu.org/licenses/>.

  Contact Information
  OpenAirInterface Admin: openair_admin@eurecom.fr
  OpenAirInterface Tech : openair_tech@eurecom.fr
  OpenAirInterface Dev  : openair4g-devel@eurecom.fr

  Address      : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.

*******************************************************************************/

Cedric Roux's avatar
   
Cedric Roux committed
30
31
/*****************************************************************************

Cedric Roux's avatar
Cedric Roux committed
32
Source      as_message.h
Cedric Roux's avatar
   
Cedric Roux committed
33

Cedric Roux's avatar
Cedric Roux committed
34
Version     0.1
Cedric Roux's avatar
   
Cedric Roux committed
35

Cedric Roux's avatar
Cedric Roux committed
36
Date        2012/10/18
Cedric Roux's avatar
   
Cedric Roux committed
37

Cedric Roux's avatar
Cedric Roux committed
38
Product     NAS stack
Cedric Roux's avatar
   
Cedric Roux committed
39

Cedric Roux's avatar
Cedric Roux committed
40
Subsystem   Application Programming Interface
Cedric Roux's avatar
   
Cedric Roux committed
41

Cedric Roux's avatar
Cedric Roux committed
42
Author      Frederic Maurel
Cedric Roux's avatar
   
Cedric Roux committed
43

Cedric Roux's avatar
Cedric Roux committed
44
45
46
Description Defines the messages supported by the Access Stratum sublayer
        protocol (usually RRC and S1AP for E-UTRAN) and functions used
        to encode and decode
Cedric Roux's avatar
   
Cedric Roux committed
47
48
49
50
51
52
53
54
55
56
57
58
59
60

*****************************************************************************/
#ifndef __AS_MESSAGE_H__
#define __AS_MESSAGE_H__

#include "commonDef.h"
#include "networkDef.h"

/****************************************************************************/
/*********************  G L O B A L    C O N S T A N T S  *******************/
/****************************************************************************/

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
61
 *              Access Stratum message types
Cedric Roux's avatar
   
Cedric Roux committed
62
63
 * --------------------------------------------------------------------------
 */
Cedric Roux's avatar
Cedric Roux committed
64
65
66
67
#define AS_REQUEST  0x0100
#define AS_RESPONSE 0x0200
#define AS_INDICATION   0x0400
#define AS_CONFIRM  0x0800
Cedric Roux's avatar
   
Cedric Roux committed
68
69
70

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
71
 *          Access Stratum message identifiers
Cedric Roux's avatar
   
Cedric Roux committed
72
73
74
75
 * --------------------------------------------------------------------------
 */

/* Broadcast information */
Cedric Roux's avatar
Cedric Roux committed
76
77
#define AS_BROADCAST_INFO       0x01
#define AS_BROADCAST_INFO_IND       (AS_BROADCAST_INFO | AS_INDICATION)
Cedric Roux's avatar
   
Cedric Roux committed
78
79

/* Cell information relevant for cell selection processing */
Cedric Roux's avatar
Cedric Roux committed
80
81
82
83
#define AS_CELL_INFO            0x02
#define AS_CELL_INFO_REQ        (AS_CELL_INFO | AS_REQUEST)
#define AS_CELL_INFO_CNF        (AS_CELL_INFO | AS_CONFIRM)
#define AS_CELL_INFO_IND        (AS_CELL_INFO | AS_INDICATION)
Cedric Roux's avatar
   
Cedric Roux committed
84
85

/* Paging information */
Cedric Roux's avatar
Cedric Roux committed
86
87
88
#define AS_PAGING           0x03
#define AS_PAGING_REQ           (AS_PAGING | AS_REQUEST)
#define AS_PAGING_IND           (AS_PAGING | AS_INDICATION)
Cedric Roux's avatar
   
Cedric Roux committed
89
90

/* NAS signalling connection establishment */
Cedric Roux's avatar
Cedric Roux committed
91
92
93
94
95
#define AS_NAS_ESTABLISH        0x04
#define AS_NAS_ESTABLISH_REQ        (AS_NAS_ESTABLISH | AS_REQUEST)
#define AS_NAS_ESTABLISH_IND        (AS_NAS_ESTABLISH | AS_INDICATION)
#define AS_NAS_ESTABLISH_RSP        (AS_NAS_ESTABLISH | AS_RESPONSE)
#define AS_NAS_ESTABLISH_CNF        (AS_NAS_ESTABLISH | AS_CONFIRM)
Cedric Roux's avatar
   
Cedric Roux committed
96
97

/* NAS signalling connection release */
Cedric Roux's avatar
Cedric Roux committed
98
99
100
#define AS_NAS_RELEASE          0x05
#define AS_NAS_RELEASE_REQ      (AS_NAS_RELEASE | AS_REQUEST)
#define AS_NAS_RELEASE_IND      (AS_NAS_RELEASE | AS_INDICATION)
Cedric Roux's avatar
   
Cedric Roux committed
101
102

/* Uplink information transfer */
Cedric Roux's avatar
Cedric Roux committed
103
104
105
106
#define AS_UL_INFO_TRANSFER     0x06
#define AS_UL_INFO_TRANSFER_REQ     (AS_UL_INFO_TRANSFER | AS_REQUEST)
#define AS_UL_INFO_TRANSFER_CNF     (AS_UL_INFO_TRANSFER | AS_CONFIRM)
#define AS_UL_INFO_TRANSFER_IND     (AS_UL_INFO_TRANSFER | AS_INDICATION)
Cedric Roux's avatar
   
Cedric Roux committed
107
108

/* Downlink information transfer */
Cedric Roux's avatar
Cedric Roux committed
109
110
111
112
#define AS_DL_INFO_TRANSFER     0x07
#define AS_DL_INFO_TRANSFER_REQ     (AS_DL_INFO_TRANSFER | AS_REQUEST)
#define AS_DL_INFO_TRANSFER_CNF     (AS_DL_INFO_TRANSFER | AS_CONFIRM)
#define AS_DL_INFO_TRANSFER_IND     (AS_DL_INFO_TRANSFER | AS_INDICATION)
Cedric Roux's avatar
   
Cedric Roux committed
113
114

/* Radio Access Bearer establishment */
Cedric Roux's avatar
Cedric Roux committed
115
116
117
118
119
#define AS_RAB_ESTABLISH        0x08
#define AS_RAB_ESTABLISH_REQ        (AS_RAB_ESTABLISH | AS_REQUEST)
#define AS_RAB_ESTABLISH_IND        (AS_RAB_ESTABLISH | AS_INDICATION)
#define AS_RAB_ESTABLISH_RSP        (AS_RAB_ESTABLISH | AS_RESPONSE)
#define AS_RAB_ESTABLISH_CNF        (AS_RAB_ESTABLISH | AS_CONFIRM)
Cedric Roux's avatar
   
Cedric Roux committed
120
121

/* Radio Access Bearer release */
Cedric Roux's avatar
Cedric Roux committed
122
123
124
#define AS_RAB_RELEASE          0x09
#define AS_RAB_RELEASE_REQ      (AS_RAB_RELEASE | AS_REQUEST)
#define AS_RAB_RELEASE_IND      (AS_RAB_RELEASE | AS_INDICATION)
Cedric Roux's avatar
   
Cedric Roux committed
125

126
127
128
129
130
131
132
133
134
135
136
/* NAS Cause */
#define EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED (8)
#define EPS_SERVICES_NOT_ALLOWED                      (7)
#define PLMN_NOT_ALLOWED                              (11)
#define TRACKING_AREA_NOT_ALLOWED                     (12)
#define ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA     (13)
#define EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN         (14)
#define NO_SUITABLE_CELLS_IN_TRACKING_AREA            (15)
#define NETWORK_FAILURE                               (17)
#define ESM_FAILURE                                   (19)

Cedric Roux's avatar
Cedric Roux committed
137
138
139
140
141
142
143
144
145
146
147
148
typedef enum nas_cause_s {
    NAS_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED = EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED,
    NAS_CAUSE_EPS_SERVICES_NOT_ALLOWED                  = EPS_SERVICES_NOT_ALLOWED,
    NAS_CAUSE_PLMN_NOT_ALLOWED                          = PLMN_NOT_ALLOWED,
    NAS_CAUSE_TRACKING_AREA_NOT_ALLOWED                 = TRACKING_AREA_NOT_ALLOWED,
    NAS_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA = ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA,
    NAS_CAUSE_EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN     = EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN,
    NAS_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA        = NO_SUITABLE_CELLS_IN_TRACKING_AREA,
    NAS_CAUSE_NETWORK_FAILURE                           = NETWORK_FAILURE,
    NAS_CAUSE_ESM_FAILURE                               = ESM_FAILURE
} nas_cause_t;

Cedric Roux's avatar
   
Cedric Roux committed
149
150
/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
151
 *          Access Stratum message global parameters
Cedric Roux's avatar
   
Cedric Roux committed
152
153
154
155
 * --------------------------------------------------------------------------
 */

/* Error code */
Cedric Roux's avatar
Cedric Roux committed
156
157
158
159
160
161
typedef enum nas_error_code_s {
    AS_SUCCESS = 1, /* Success code, transaction is going on    */
    AS_TERMINATED_NAS,  /* Transaction terminated by NAS        */
    AS_TERMINATED_AS,   /* Transaction terminated by AS         */
    AS_FAILURE      /* Failure code                 */
} nas_error_code_t;
Cedric Roux's avatar
   
Cedric Roux committed
162
163

/* Core network domain */
Cedric Roux's avatar
Cedric Roux committed
164
165
166
167
typedef enum core_network_s {
    AS_PS = 1,      /* Packet-Switched  */
    AS_CS       /* Circuit-Switched */
} core_network_t;
Cedric Roux's avatar
   
Cedric Roux committed
168
169

/* SAE Temporary Mobile Subscriber Identity */
Cedric Roux's avatar
Cedric Roux committed
170
171
172
typedef struct as_stmsi_s {
    UInt8_t MMEcode;    /* MME code that allocated the GUTI     */
    UInt32_t m_tmsi;    /* M-Temporary Mobile Subscriber Identity   */
Cedric Roux's avatar
   
Cedric Roux committed
173
174
175
} as_stmsi_t;

/* Dedicated NAS information */
Cedric Roux's avatar
Cedric Roux committed
176
177
178
typedef struct as_nas_info_s {
    UInt32_t length;    /* Length of the NAS information data       */
    Byte_t *data;   /* Dedicated NAS information data container */
Cedric Roux's avatar
   
Cedric Roux committed
179
180
181
182
183
184
185
186
187
188
189
} as_nas_info_t;

/* Radio Access Bearer identity */
typedef UInt8_t as_rab_id_t;

/****************************************************************************/
/************************  G L O B A L    T Y P E S  ************************/
/****************************************************************************/

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
190
 *              Broadcast information
Cedric Roux's avatar
   
Cedric Roux committed
191
192
193
194
195
196
197
198
 * --------------------------------------------------------------------------
 */

/*
 * AS->NAS - Broadcast information indication
 * AS may asynchronously report to NAS available PLMNs within specific
 * location area
 */
Cedric Roux's avatar
Cedric Roux committed
199
200
typedef struct broadcast_info_ind_s {
#define PLMN_LIST_MAX_SIZE  6
Cedric Roux's avatar
   
Cedric Roux committed
201
    PLMN_LIST_T(PLMN_LIST_MAX_SIZE) plmnIDs; /* List of PLMN identifiers */
Cedric Roux's avatar
Cedric Roux committed
202
203
    ci_t cellID;    /* Identity of the cell serving the listed PLMNs */
    tac_t tac;      /* Code of the tracking area the cell belongs to */
Cedric Roux's avatar
   
Cedric Roux committed
204
205
206
207
} broadcast_info_ind_t;

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
208
 *     Cell information relevant for cell selection processing
Cedric Roux's avatar
   
Cedric Roux committed
209
210
211
212
 * --------------------------------------------------------------------------
 */

/* Radio access technologies supported by the network */
Cedric Roux's avatar
Cedric Roux committed
213
214
215
216
217
218
219
220
#define AS_GSM              (1 << NET_ACCESS_GSM)
#define AS_COMPACT          (1 << NET_ACCESS_COMPACT)
#define AS_UTRAN            (1 << NET_ACCESS_UTRAN)
#define AS_EGPRS            (1 << NET_ACCESS_EGPRS)
#define AS_HSDPA            (1 << NET_ACCESS_HSDPA)
#define AS_HSUPA            (1 << NET_ACCESS_HSUPA)
#define AS_HSDUPA           (1 << NET_ACCESS_HSDUPA)
#define AS_EUTRAN           (1 << NET_ACCESS_EUTRAN)
Cedric Roux's avatar
   
Cedric Roux committed
221
222
223
224
225
226

/*
 * NAS->AS - Cell Information request
 * NAS request AS to search for a suitable cell belonging to the selected
 * PLMN to camp on.
 */
Cedric Roux's avatar
Cedric Roux committed
227
228
229
typedef struct cell_info_req_s {
    plmn_t plmnID;  /* Selected PLMN identity           */
    Byte_t rat;     /* Bitmap - set of radio access technologies    */
Cedric Roux's avatar
   
Cedric Roux committed
230
231
232
233
234
235
236
} cell_info_req_t;

/*
 * AS->NAS - Cell Information confirm
 * AS search for a suitable cell and respond to NAS. If found, the cell
 * is selected to camp on.
 */
Cedric Roux's avatar
Cedric Roux committed
237
typedef struct cell_info_cnf_s {
238
    UInt8_t errCode;    /* Error code                     */
Cedric Roux's avatar
Cedric Roux committed
239
240
241
242
243
    ci_t cellID;    /* Identity of the cell serving the selected PLMN */
    tac_t tac;      /* Code of the tracking area the cell belongs to  */
    AcT_t rat;      /* Radio access technology supported by the cell  */
    UInt8_t rsrq;   /* Reference signal received quality         */
    UInt8_t rsrp;   /* Reference signal received power       */
Cedric Roux's avatar
   
Cedric Roux committed
244
245
246
247
248
249
} cell_info_cnf_t;

/*
 * AS->NAS - Cell Information indication
 * AS may change cell selection if a more suitable cell is found.
 */
Cedric Roux's avatar
Cedric Roux committed
250
251
252
typedef struct cell_info_ind_s {
    ci_t cellID;    /* Identity of the new serving cell      */
    tac_t tac;      /* Code of the tracking area the cell belongs to */
Cedric Roux's avatar
   
Cedric Roux committed
253
254
255
256
} cell_info_ind_t;

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
257
 *              Paging information
Cedric Roux's avatar
   
Cedric Roux committed
258
259
260
261
 * --------------------------------------------------------------------------
 */

/* Paging cause */
Cedric Roux's avatar
Cedric Roux committed
262
263
264
265
266
267
typedef enum paging_cause_s {
    AS_CONNECTION_ESTABLISH,    /* Establish NAS signalling connection  */
    AS_EPS_ATTACH,      /* Perform local detach and initiate EPS
                 * attach procedure         */
    AS_CS_FALLBACK      /* Inititate CS fallback procedure  */
} paging_cause_t;
Cedric Roux's avatar
   
Cedric Roux committed
268
269
270
271
272
273

/*
 * NAS->AS - Paging Information request
 * NAS requests the AS that NAS signalling messages or user data is pending
 * to be sent.
 */
Cedric Roux's avatar
Cedric Roux committed
274
275
276
typedef struct paging_req_s {
    as_stmsi_t s_tmsi;  /* UE identity                  */
    UInt8_t CN_domain;  /* Core network domain              */
Cedric Roux's avatar
   
Cedric Roux committed
277
278
279
280
281
282
} paging_req_t;

/*
 * AS->NAS - Paging Information indication
 * AS reports to the NAS that appropriate procedure has to be initiated.
 */
Cedric Roux's avatar
Cedric Roux committed
283
typedef struct paging_ind_s {
284
    paging_cause_t cause;  /* Paging cause                 */
Cedric Roux's avatar
   
Cedric Roux committed
285
286
287
288
} paging_ind_t;

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
289
 *          NAS signalling connection establishment
Cedric Roux's avatar
   
Cedric Roux committed
290
291
292
293
 * --------------------------------------------------------------------------
 */

/* Cause of RRC connection establishment */
294
typedef enum as_cause_s {
Cedric Roux's avatar
Cedric Roux committed
295
    AS_CAUSE_UNKNOWN    = 0,
296
297
298
299
300
301
302
    AS_CAUSE_EMERGENCY  = NET_ESTABLISH_CAUSE_EMERGENCY,
    AS_CAUSE_HIGH_PRIO  = NET_ESTABLISH_CAUSE_HIGH_PRIO,
    AS_CAUSE_MT_ACCESS  = NET_ESTABLISH_CAUSE_MT_ACCESS,
    AS_CAUSE_MO_SIGNAL  = NET_ESTABLISH_CAUSE_MO_SIGNAL,
    AS_CAUSE_MO_DATA    = NET_ESTABLISH_CAUSE_MO_DATA,
    AS_CAUSE_V1020      = NET_ESTABLISH_CAUSE_V1020
} as_cause_t;
Cedric Roux's avatar
   
Cedric Roux committed
303
304

/* Type of the call associated to the RRC connection establishment */
305
306
307
308
309
310
311
typedef enum as_call_type_s {
    AS_TYPE_ORIGINATING_SIGNAL  = NET_ESTABLISH_TYPE_ORIGINATING_SIGNAL,
    AS_TYPE_EMERGENCY_CALLS     = NET_ESTABLISH_TYPE_EMERGENCY_CALLS,
    AS_TYPE_ORIGINATING_CALLS   = NET_ESTABLISH_TYPE_ORIGINATING_CALLS,
    AS_TYPE_TERMINATING_CALLS   = NET_ESTABLISH_TYPE_TERMINATING_CALLS,
    AS_TYPE_MO_CS_FALLBACK      = NET_ESTABLISH_TYPE_MO_CS_FALLBACK
} as_call_type_t;
Cedric Roux's avatar
   
Cedric Roux committed
312
313
314
315
316
317

/*
 * NAS->AS - NAS signalling connection establishment request
 * NAS requests the AS to perform the RRC connection establishment procedure
 * to transfer initial NAS message to the network while UE is in IDLE mode.
 */
Cedric Roux's avatar
Cedric Roux committed
318
typedef struct nas_establish_req_s {
319
320
321
322
323
    as_cause_t      cause;          /* RRC connection establishment cause   */
    as_call_type_t  type;           /* RRC associated call type             */
    as_stmsi_t      s_tmsi;         /* UE identity                          */
    plmn_t          plmnID;         /* Selected PLMN identity               */
    as_nas_info_t   initialNasMsg;  /* Initial NAS message to transfer      */
Cedric Roux's avatar
   
Cedric Roux committed
324
325
326
327
328
329
} nas_establish_req_t;

/*
 * AS->NAS - NAS signalling connection establishment indication
 * AS transfers the initial NAS message to the NAS.
 */
Cedric Roux's avatar
Cedric Roux committed
330
typedef struct nas_establish_ind_s {
Cedric Roux's avatar
Cedric Roux committed
331
332
333
334
335
    UInt32_t      UEid;          /* UE lower layer identifier               */
    tac_t         tac;           /* Code of the tracking area the initiating
                                  * UE belongs to                           */
    as_cause_t    asCause;       /* Establishment cause                     */
    as_nas_info_t initialNasMsg; /* Initial NAS message to transfer         */
Cedric Roux's avatar
   
Cedric Roux committed
336
337
338
339
340
341
342
} nas_establish_ind_t;

/*
 * NAS->AS - NAS signalling connection establishment response
 * NAS responds to the AS that initial answer message has to be provided to
 * the UE.
 */
Cedric Roux's avatar
Cedric Roux committed
343
typedef struct nas_establish_rsp_s {
344
345
346
347
    UInt32_t         UEid;         /* UE lower layer identifier   */
    as_stmsi_t       s_tmsi;       /* UE identity                 */
    nas_error_code_t errCode;      /* Transaction status          */
    as_nas_info_t    nasMsg;       /* NAS message to transfer     */
gauthier's avatar
   
gauthier committed
348
    UInt32_t         nas_ul_count; /* UL NAS COUNT                */
Cedric Roux's avatar
   
Cedric Roux committed
349
350
351
352
353
354
} nas_establish_rsp_t;

/*
 * AS->NAS - NAS signalling connection establishment confirm
 * AS transfers the initial answer message to the NAS.
 */
Cedric Roux's avatar
Cedric Roux committed
355
typedef struct nas_establish_cnf_s {
356
    UInt32_t         UEid;            /* UE lower layer identifier   */
357
358
    nas_error_code_t errCode;         /* Transaction status          */
    as_nas_info_t    nasMsg;          /* NAS message to transfer     */
gauthier's avatar
   
gauthier committed
359
    UInt32_t         ul_nas_count;
Cedric Roux's avatar
   
Cedric Roux committed
360
361
362
363
} nas_establish_cnf_t;

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
364
 *          NAS signalling connection release
Cedric Roux's avatar
   
Cedric Roux committed
365
366
367
368
 * --------------------------------------------------------------------------
 */

/* Release cause */
Cedric Roux's avatar
Cedric Roux committed
369
typedef enum release_cause_s {
370
371
    AS_AUTHENTICATION_FAILURE = 1,  /* Authentication procedure failed   */
    AS_DETACH                       /* Detach requested                  */
Cedric Roux's avatar
Cedric Roux committed
372
} release_cause_t;
Cedric Roux's avatar
   
Cedric Roux committed
373
374
375
376
377

/*
 * NAS->AS - NAS signalling connection release request
 * NAS requests the termination of the connection with the UE.
 */
Cedric Roux's avatar
Cedric Roux committed
378
typedef struct nas_release_req_s {
379
380
381
    UInt32_t UEid;          /* UE lower layer identifier    */
    as_stmsi_t s_tmsi;      /* UE identity                  */
    release_cause_t cause;  /* Release cause                */
Cedric Roux's avatar
   
Cedric Roux committed
382
383
384
385
386
387
} nas_release_req_t;

/*
 * AS->NAS - NAS signalling connection release indication
 * AS reports that connection has been terminated by the network.
 */
Cedric Roux's avatar
Cedric Roux committed
388
typedef struct nas_release_ind_s {
389
    release_cause_t cause;      /* Release cause            */
Cedric Roux's avatar
   
Cedric Roux committed
390
391
392
393
} nas_release_ind_t;

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
394
 *              NAS information transfer
Cedric Roux's avatar
   
Cedric Roux committed
395
396
397
398
399
400
401
402
 * --------------------------------------------------------------------------
 */

/*
 * NAS->AS - Uplink data transfer request
 * NAS requests the AS to transfer uplink information to the NAS that
 * operates at the network side.
 */
Cedric Roux's avatar
Cedric Roux committed
403
404
405
406
typedef struct ul_info_transfer_req_s {
    UInt32_t UEid;      /* UE lower layer identifier        */
    as_stmsi_t s_tmsi;      /* UE identity              */
    as_nas_info_t nasMsg;   /* Uplink NAS message           */
Cedric Roux's avatar
   
Cedric Roux committed
407
408
409
410
411
412
413
} ul_info_transfer_req_t;

/*
 * AS->NAS - Uplink data transfer confirm
 * AS immediately notifies the NAS whether uplink information has been
 * successfully sent to the network or not.
 */
Cedric Roux's avatar
Cedric Roux committed
414
415
typedef struct ul_info_transfer_cnf_s {
    UInt32_t         UEid;      /* UE lower layer identifier        */
416
    nas_error_code_t errCode;   /* Transaction status               */
Cedric Roux's avatar
   
Cedric Roux committed
417
418
419
420
421
422
423
} ul_info_transfer_cnf_t;

/*
 * AS->NAS - Uplink data transfer indication
 * AS delivers the uplink information message to the NAS that operates
 * at the network side.
 */
Cedric Roux's avatar
Cedric Roux committed
424
typedef struct ul_info_transfer_ind_s {
425
    UInt32_t UEid;          /* UE lower layer identifier        */
Cedric Roux's avatar
Cedric Roux committed
426
    as_nas_info_t nasMsg;   /* Uplink NAS message           */
Cedric Roux's avatar
   
Cedric Roux committed
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
} ul_info_transfer_ind_t;

/*
 * NAS->AS - Downlink data transfer request
 * NAS requests the AS to transfer downlink information to the NAS that
 * operates at the UE side.
 */
typedef ul_info_transfer_req_t dl_info_transfer_req_t;

/*
 * AS->NAS - Downlink data transfer confirm
 * AS immediately notifies the NAS whether downlink information has been
 * successfully sent to the network or not.
 */
typedef ul_info_transfer_cnf_t dl_info_transfer_cnf_t;

/*
 * AS->NAS - Downlink data transfer indication
 * AS delivers the downlink information message to the NAS that operates
 * at the UE side.
 */
typedef ul_info_transfer_ind_t dl_info_transfer_ind_t;

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
452
 *          Radio Access Bearer establishment
Cedric Roux's avatar
   
Cedric Roux committed
453
454
455
456
457
458
459
460
461
462
463
 * --------------------------------------------------------------------------
 */

/* TODO: Quality of Service parameters */
typedef struct {} as_qos_t;

/*
 * NAS->AS - Radio access bearer establishment request
 * NAS requests the AS to allocate transmission resources to radio access
 * bearer initialized at the network side.
 */
Cedric Roux's avatar
Cedric Roux committed
464
typedef struct rab_establish_req_s {
465
    as_stmsi_t s_tmsi;      /* UE identity                      */
Cedric Roux's avatar
Cedric Roux committed
466
    as_rab_id_t rabID;      /* Radio access bearer identity     */
467
    as_qos_t QoS;           /* Requested Quality of Service     */
Cedric Roux's avatar
   
Cedric Roux committed
468
469
470
471
472
473
} rab_establish_req_t;

/*
 * AS->NAS - Radio access bearer establishment indication
 * AS notifies the NAS that specific radio access bearer has to be setup.
 */
Cedric Roux's avatar
Cedric Roux committed
474
475
typedef struct rab_establish_ind_s {
    as_rab_id_t rabID;      /* Radio access bearer identity     */
Cedric Roux's avatar
   
Cedric Roux committed
476
477
478
479
480
481
482
} rab_establish_ind_t;

/*
 * NAS->AS - Radio access bearer establishment response
 * NAS responds to AS whether the specified radio access bearer has been
 * successfully setup or not.
 */
Cedric Roux's avatar
Cedric Roux committed
483
typedef struct rab_establish_rsp_s {
484
485
486
    as_stmsi_t       s_tmsi;        /* UE identity                      */
    as_rab_id_t      rabID;         /* Radio access bearer identity     */
    nas_error_code_t errCode;       /* Transaction status               */
Cedric Roux's avatar
   
Cedric Roux committed
487
488
489
490
491
492
493
} rab_establish_rsp_t;

/*
 * AS->NAS - Radio access bearer establishment confirm
 * AS notifies NAS whether the specified radio access bearer has been
 * successfully setup at the UE side or not.
 */
Cedric Roux's avatar
Cedric Roux committed
494
typedef struct rab_establish_cnf_s {
495
496
    as_rab_id_t rabID;          /* Radio access bearer identity     */
    nas_error_code_t errCode;   /* Transaction status               */
Cedric Roux's avatar
   
Cedric Roux committed
497
498
499
500
} rab_establish_cnf_t;

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
501
 *              Radio Access Bearer release
Cedric Roux's avatar
   
Cedric Roux committed
502
503
504
505
506
507
508
509
 * --------------------------------------------------------------------------
 */

/*
 * NAS->AS - Radio access bearer release request
 * NAS requests the AS to release transmission resources previously allocated
 * to specific radio access bearer at the network side.
 */
Cedric Roux's avatar
Cedric Roux committed
510
typedef struct rab_release_req_s {
511
    as_stmsi_t s_tmsi;      /* UE identity                      */
Cedric Roux's avatar
Cedric Roux committed
512
    as_rab_id_t rabID;      /* Radio access bearer identity     */
Cedric Roux's avatar
   
Cedric Roux committed
513
514
515
516
517
518
} rab_release_req_t;

/*
 * AS->NAS - Radio access bearer release indication
 * AS notifies NAS that specific radio access bearer has been released.
 */
Cedric Roux's avatar
Cedric Roux committed
519
520
typedef struct rab_release_ind_s {
    as_rab_id_t rabID;      /* Radio access bearer identity     */
Cedric Roux's avatar
   
Cedric Roux committed
521
522
523
524
} rab_release_ind_t;

/*
 * --------------------------------------------------------------------------
Cedric Roux's avatar
Cedric Roux committed
525
 *  Structure of the AS messages handled by the network sublayer
Cedric Roux's avatar
   
Cedric Roux committed
526
527
 * --------------------------------------------------------------------------
 */
Cedric Roux's avatar
Cedric Roux committed
528
typedef struct as_message_s {
Cedric Roux's avatar
   
Cedric Roux committed
529
530
    UInt16_t msgID;
    union {
Cedric Roux's avatar
Cedric Roux committed
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
        broadcast_info_ind_t broadcast_info_ind;
        cell_info_req_t cell_info_req;
        cell_info_cnf_t cell_info_cnf;
        cell_info_ind_t cell_info_ind;
        paging_req_t paging_req;
        paging_ind_t paging_ind;
        nas_establish_req_t nas_establish_req;
        nas_establish_ind_t nas_establish_ind;
        nas_establish_rsp_t nas_establish_rsp;
        nas_establish_cnf_t nas_establish_cnf;
        nas_release_req_t nas_release_req;
        nas_release_ind_t nas_release_ind;
        ul_info_transfer_req_t ul_info_transfer_req;
        ul_info_transfer_cnf_t ul_info_transfer_cnf;
        ul_info_transfer_ind_t ul_info_transfer_ind;
        dl_info_transfer_req_t dl_info_transfer_req;
        dl_info_transfer_cnf_t dl_info_transfer_cnf;
        dl_info_transfer_ind_t dl_info_transfer_ind;
        rab_establish_req_t rab_establish_req;
        rab_establish_ind_t rab_establish_ind;
        rab_establish_rsp_t rab_establish_rsp;
        rab_establish_cnf_t rab_establish_cnf;
        rab_release_req_t rab_release_req;
        rab_release_ind_t rab_release_ind;
Cedric Roux's avatar
   
Cedric Roux committed
555
556
557
558
559
560
561
562
563
564
565
    } __attribute__((__packed__)) msg;
} as_message_t;

/****************************************************************************/
/********************  G L O B A L    V A R I A B L E S  ********************/
/****************************************************************************/

/****************************************************************************/
/******************  E X P O R T E D    F U N C T I O N S  ******************/
/****************************************************************************/

Cedric Roux's avatar
Cedric Roux committed
566
int as_message_decode(const char *buffer, as_message_t *msg, int length);
Cedric Roux's avatar
   
Cedric Roux committed
567

Cedric Roux's avatar
Cedric Roux committed
568
int as_message_encode(char *buffer, as_message_t *msg, int length);
Cedric Roux's avatar
   
Cedric Roux committed
569
570

/* Implemented in the network_api.c body file */
Cedric Roux's avatar
Cedric Roux committed
571
int as_message_send(as_message_t *as_msg);
Cedric Roux's avatar
   
Cedric Roux committed
572
573

#endif /* __AS_MESSAGE_H__*/