blob: f4544b43ffade88f0c459fe0191e01a19f4727d3 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2005
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*******************************************************************************
37 *==============================================================================
38 * HISTORY
39 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
40 *------------------------------------------------------------------------------
41 * removed!
42 *
43 * removed!
44 * removed!
45 * removed!
46 * removed!
47 *
48 * removed!
49 * removed!
50 *
51 * removed!
52 * removed!
53 * removed!
54 * removed!
55 *
56 * removed!
57 * removed!
58 * removed!
59 *
60 * removed!
61 * removed!
62 * removed!
63 *
64 * removed!
65 * removed!
66 * removed!
67 * removed!
68 *
69 * removed!
70 * removed!
71 * removed!
72 * removed!
73 *
74 * removed!
75 * removed!
76 * removed!
77 * removed!
78 *
79 * removed!
80 * removed!
81 * removed!
82 * removed!
83 *
84 * removed!
85 * removed!
86 * removed!
87 * removed!
88 *
89 * removed!
90 * removed!
91 * removed!
92 *
93 * removed!
94 * removed!
95 * removed!
96 *
97 * removed!
98 * removed!
99 * removed!
100 * removed!
101 * removed!
102 *
103 * removed!
104 * removed!
105 * removed!
106 *
107 * removed!
108 * removed!
109 * removed!
110 *
111 * removed!
112 * removed!
113 *
114 * removed!
115 *
116 * removed!
117 * removed!
118 * removed!
119 *
120 *
121 *------------------------------------------------------------------------------
122 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
123 *==============================================================================
124 *******************************************************************************/
125#ifndef _IMSM_IMCB_STRUCT_H
126#define _IMSM_IMCB_STRUCT_H
127
128#include "ps_public_enum.h"
129#include "sim_public_enum.h"
130#include "ims_common_def.h"
131//#include "imcb_imc_struct.h"
132
133#define IMC_IPV4V6_ADDR_LEN 0x14
134#define IMC_MAX_APN_LEN 100
135#define IMC_MAX_CONCATENATED_NUM 11
136#define IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE (IMC_MAX_IF_NAME_LENGTH)
137#define IMC_MAXIMUM_CONTEXTS_ACTIVATED_FOR_ONE_TIME_SINGLE_APN_ACTIVATION 2
138#define IMC_MAX_SSID_LEN 32 // SSID length is in at maximum 32 octets
139
140/* Common define constant */
141
142#define IMC_MAX_PACKET_FILTER_NUM MAX_NUM_OF_SUPPORTED_PF_PER_PDUS
143#define IMC_MAX_PACKET_FILTER_PRECED_NUM 256
144#define IMC_MAX_REMOTE_ADDR_AND_MASK_LEN 32
145#define IMC_MAX_TFT_LEN 255
146#define IMC_PACKET_FILTER_ID_LEN 1
147
148/* Packet filter component length (octet) define */
149
150#define IMC_IPV4_REMOTE_ADDR_AND_MASK_LEN 8
151#define IMC_IPV6_REMOTE_ADDR_AND_MASK_LEN 32
152#define IMC_PROTOCOL_ID_NEXT_HEADER_LEN 1
153#define IMC_SINGLE_LOCAL_PORT_LEN 2
154#define IMC_LOCAL_PORT_RANGE_LEN 4
155#define IMC_SINGLE_REMOTE_PORT_LEN 2
156#define IMC_REMOTE_PORT_RANGE_LEN 4
157#define IMC_SECURITY_PARAMETER_ID_LEN 4
158#define IMC_TYPE_OF_SERVICE_TRAFFIC_CLASS_AND_MASK_LEN 2
159#define IMC_FLOW_LABEL_LEN 3
160
161
162/* Parameter list define */
163
164#define IMC_MAX_AUTHTOKEN_FLOWID_NUM 4 // temp max num (TS 24.008 10.5.162 does not restrict its max number...)
165#define IMC_MAX_PARAMETER_LIST_NUM 16
166#define IMC_MAX_PARAMETER_LIST_SIZE 255
167#define IMC_MAX_AUTHORIZATION_TOKEN_LEN 16 // temp max length (it could be very long...)
168#define IMC_MAX_FLOW_IDENTIFIER_NUM 4 // temp max num (TS 24.008 10.5.162 does not restrict its max number...)
169#define IMC_FLOW_IDENTIFIER_LEN 4
170
171
172/* Temp define constant */
173
174#define IMC_MAX_PF_COMP_TYPE_NUM 15
175#define IMC_MAX_PACKET_FILTER_CONTENT_LEN 47
176
177
178/* define constants for BITMAP */
179
180#define IMC_BMP_NONE 0x00000000
181#define IMC_BMP_V4_ADDR 0x00000001
182#define IMC_BMP_V6_ADDR 0x00000002
183#define IMC_BMP_PROTOCOL 0x00000004
184#define IMC_BMP_LOCAL_PORT_SINGLE 0x00000008
185#define IMC_BMP_LOCAL_PORT_RANGE 0x00000010
186#define IMC_BMP_REMOTE_PORT_SINGLE 0x00000020
187#define IMC_BMP_REMOTE_PORT_RANGE 0x00000040
188#define IMC_BMP_SPI 0x00000080
189#define IMC_BMP_TOS 0x00000100
190#define IMC_BMP_FLOW_LABEL 0x00000200
191#define IMC_BMP_EMPTY_TCP_ACK 0x80000000
192#define IMC_BMP_IP_FRAGMENT 0x40000000
193
194/* WFC */
195#define IMC_QCI_UNSPEC (0xFF)
196
197/* define ip_type for irat_without_ip_change */
198#define IMC_IRAT_IP_TYPE_NONE 0x00
199#define IMC_IRAT_IP_TYPE_V4_NOT_CHANGE 0x01
200#define IMC_IRAT_IP_TYPE_V6_NOT_CHANGE 0x02
201#define IMC_IRAT_IP_TYPE_V4V6_NOT_CHANGE 0x03
202
203/* PDN retry */
204#define IMC_PDN_RETRY_SUGGESTION_TIMER_INFINITE 0xFFFFFFFF
205
206/**********************************************************************/
207
208typedef enum{
209 IMC_INTERNAL_PS_CAUSE_NONE = 0,
210
211 //// Add new cause HERE!
212 //IMC_INTERNAL_PS_CAUSE_xxx_START = ,
213
214 IMC_INTERNAL_PS_CAUSE_END,
215} imc_internal_ps_cause_enum;
216
217typedef enum{
218 IMC_EXTEND_PS_CAUSE_NONE = 0,
219
220 //// Add new cause HERE!
221 //IMC_EXTEND_PS_CAUSE_xxx_START = ,
222
223 IMC_EXTEND_PS_CAUSE_END,
224} imc_extend_ps_cause_enum;
225
226
227
228typedef enum{
229 IMC_PDP_ADDR_NONE_ADDR_TYPE = 0X0,
230 IMC_PDP_ADDR_IPV4_ADDR_TYPE = 0X21,
231 IMC_PDP_ADDR_IPV6_ADDR_TYPE = 0X57,
232 IMC_PDP_ADDR_IPV4V6_ADDR_TYPE = 0X8D,
233 IMC_PDP_ADDR_NULL_PDP_ADDR_TYPE = 0X03 /* This is added incase if no pdpaddrtype is * specified */
234} imc_pdp_addr_type_enum;
235
236typedef enum{
237 IMC_CONCATENATED_MSG_TYPE_NONE = 0,
238 IMC_CONCATENATED_MSG_TYPE_ACTIVATION = 1,
239 IMC_CONCATENATED_MSG_TYPE_MODIFICATION = 2,
240 /* WFC */
241 IMC_CONCATENATED_MSG_TYPE_DELETION = 3,
242 IMC_CONCATENATED_MSG_TYPE_END
243} imc_concatenated_msg_type_enum;
244
245/* enum declaration */
246
247typedef enum{
248 IMC_PF_DIRECTION_PRE_REL7_TFT = 0x00,
249 IMC_PF_DIRECTION_UL_ONLY = 0x01,
250 IMC_PF_DIRECTION_DL_ONLY = 0x02,
251 IMC_PF_DIRECTION_BIDIRECTION = 0x03,
252} imc_pf_direction_enum;
253
254typedef enum{
255 IMC_TFT_OPCODE_SPARE = 0, // (0x00) Spare
256 IMC_TFT_OPCODE_CREATE_NEW_TFT = 1, // (0x01) Create new TFT
257 IMC_TFT_OPCODE_DELETE_TFT = 2, // (0x02) Delete existing TFT
258 IMC_TFT_OPCODE_ADD_PF = 3, // (0x03) Add packet filters to existing TFT
259 IMC_TFT_OPCODE_REPLACE_PF = 4, // (0x04) Replace packet filters in existing TFT
260 IMC_TFT_OPCODE_DELETE_PF = 5, // (0x05) Delete packet filters from existing TFT
261 IMC_TFT_OPCODE_NOTFT_OP = 6, // (0x06) No TFT operation
262 IMC_TFT_OPCODE_RESERVED // (0x07) Reserved
263} imc_tft_operation_enum;
264
265typedef enum {
266 IMC_PROGRESS_NOTIFY_CALL_WAITING = 0, // Not to IMSA
267 IMC_PROGRESS_NOTIFY_CALL_BARRING = 1, // Not to IMSA
268 IMC_PROGRESS_NOTIFY_CALL_FORWARDING = 2, // Not to IMSA
269 IMC_PROGRESS_NOTIFY_MWI = 258, // To IMSA
270 IMC_PROGRESS_NOTIFY_CONFERENCE = 257, // To IMSA
271 IMC_PROGRESS_NOTIFY_DIALOG = 256 // dummy
272} imc_ss_progress_notify_service_enum;
273
274
275/* IMS Packet Filter ID macros */
276#define IMC_QRI_NW_PFI_TO_PFID(_qri_, _nw_pfi_) (imcf_uint16)(((_qri_&0xFF)<<8) | (_nw_pfi_&0xFF))
277#define IMC_NW_PFI_TO_PFID(_pfi_) (imcf_uint16)(_pfi_&0xFFFF)
278#define IMC_PFID_GET_NW_PFI(_pfid_) (imcf_uint8)((_pfid_>>8)&0xFF)
279#define IMC_PFID_GET_QRI(_pfid_) (imcf_uint8)(_pfid_&0xFF)
280
281/***********************************************************************************/
282
283typedef struct {
284 imcf_uint8 qci;
285 imcf_uint8 gbr_present;
286 imcf_uint8 mbr_present;
287 imcf_uint8 pad[1];
288
289 imcf_uint64 dl_gbr;
290 imcf_uint64 ul_gbr;
291 imcf_uint64 dl_mbr;
292 imcf_uint64 ul_mbr;
293} imc_qos_struct;
294
295/* IPv4 remote address and subnet mask struct (WORD(4-byte) array, used by UPCM only) */
296typedef struct {
297 imcf_uint32 addr;
298 imcf_uint32 mask;
299} imc_remote_v4addr_struct;
300
301
302/* IPv6 remote address and subnet mask struct (WORD(4-byte) array, used by UPCM only) */
303typedef struct {
304 imcf_uint32 addr[4];
305 imcf_uint32 mask[4];
306} imc_remote_v6addr_struct;
307
308
309/* Packet filter struct for SM/ESM, TCM, L4C, & UPCM */
310typedef struct {
311 imcf_uint16 id; // Packet filter index
312 imcf_uint8 precedence; // Packet filter evaluation precedence index, more less more high (0~255)
313 imc_pf_direction_enum direction; // Direction of the packet filter
314 imcf_uint16 nw_id; // network assigned packet Filter ID; QRI+PFI, set with IMC_QRI_NW_PFI_TO_PFID
315
316 imcf_uint32 bitmap; // Used to indicate which of the following field exist
317
318 imcf_uint8 remote_addr_and_mask[IMC_MAX_REMOTE_ADDR_AND_MASK_LEN];
319 /* ----------------- Remote address and subnet mask (byte array) ----------------*
320 * *
321 * IPv4: addr = 0 ~ 3 *
322 * mask = 4 ~ 7 *
323 * <NOTE1: Length of IPv4 addr + mask = IMC_IPV4_REMOTE_ADDR_AND_MASK_LEN(8)> *
324 * *
325 * IPv6: addr = 0 ~ 15 *
326 * mask = 16 ~ 31 *
327 * <NOTE2: Length of IPv6 addr + mask = IMC_IPV6_REMOTE_ADDR_AND_MASK_LEN(32)> *
328 * *
329 * *
330 * <NOTE3: IMC_MAX_REMOTE_ADDR_AND_MASK_LEN is set as *
331 * IMC_IPV6_REMOTE_ADDR_AND_MASK_LEN> *
332 * *
333 * ------------------------------------------------------------------------------*
334 */
335
336 imcf_uint8 protocol_nxt_hdr; // Protocol number (IPv4) / Next header (IPv6)
337 imcf_uint8 pad2[3];
338
339 imcf_uint16 local_port_low; // Single local port / Local port range (low)
340 imcf_uint16 local_port_high; // (N/A) equal to low / Local port range (high)
341
342 imcf_uint16 remote_port_low; // Single remote port / Remote port range (low)
343 imcf_uint16 remote_port_high; // (N/A) equal to low / Remote port range (high)
344
345 imcf_uint32 spi; // IPsec security parameter index
346
347 imcf_uint8 tos; // Type of service (IPv4) / Traffic class (IPv6)
348 imcf_uint8 tos_msk; // Type of service mask (IPv4) / Traffic class mask (IPv6)
349 imcf_uint8 pad3[2];
350
351 imcf_uint32 flow_label; // Flow label (IPv6)
352} imc_pkt_filter_struct;
353
354
355typedef struct {
356 imcf_uint8 auth_token_len; // length of authorization token
357 imcf_uint8 pad[3];
358
359 imcf_uint8 auth_token[IMC_MAX_AUTHORIZATION_TOKEN_LEN]; // authorization token
360
361 imcf_uint8 flow_id_num; // number of flow identifiers
362 imcf_uint8 pad2[3];
363
364 imcf_uint8 flow_id_list[IMC_MAX_FLOW_IDENTIFIER_NUM][IMC_FLOW_IDENTIFIER_LEN];
365 /* flow identifier list
366 * (NOTE: an authtoken can follow one or more flow identifiers,
367 * and each flow identifier is IMC_FLOW_IDENTIFIER_LEN (4 byte) long)
368 */
369} imc_tft_authtoken_flowid_struct;
370
371
372typedef struct {
373 imcf_uint16 linked_pf_id_num; // Number of linked packet filter IDs carried in linked_pf_id_list
374 imcf_uint8 pad[2];
375
376 imcf_uint16* linked_pf_id_list; // Dynamicaly allocated Packet filter ID list, receiver must free
377 /* Linked packet filter ID list
378 * (NOTE1: Used to indicate to NW the change for which service applies to)
379 * (NOTE2: Will appear when, 1. GBR changes, 2. TFT operation = 'Add packet filters to existing TFT')
380 */
381
382 imcf_uint8 authtoken_flowid_num; // Number of authtoken_flowid group in authtoken_flowid_list[]
383 imcf_uint8 pad2[3];
384
385 imc_tft_authtoken_flowid_struct authtoken_flowid_list[IMC_MAX_AUTHTOKEN_FLOWID_NUM]; // Authorization and flow identifier group list
386} imc_tft_parameter_list_struct;
387
388/* TFT struct for SM/ESM, TCM, L4C */
389typedef struct {
390 /* only used for MO initial */
391 imc_tft_operation_enum tft_opcode; // TFT operation code
392 imcf_uint8 ebit_flag; // Indicate whether parameter list exists
393
394 /* should be fill fully and locate to indexing by (pf->id -1)*/
395 /* to indicate which one is delete */
396 imcf_uint16 pf_count; // Number of packet filters in pf_list
397 imc_pkt_filter_struct* pf_list; // Dynamicaly allocated Packet filter list, receiver must free
398 imc_tft_parameter_list_struct parameter_list; // Parameter list
399} imc_tft_info_struct;
400
401
402/***************************/
403/* Primary Bearer Activation */
404/***************************/
405typedef struct {
406 imcf_uint8 context_id;
407 imcf_uint8 primary_context_id;
408 imcf_bid_t bid; /* EBI or PSI|QFI */
409 imcf_uint8 qos_mod; //boolean
410
411 imc_access_rat_type_enum rat_type;
412
413 imc_qos_struct nw_assigned_qos;
414
415 imc_concatenated_msg_type_enum msg_type;
416 imcf_uint8 tft_mod; //boolean
417 imcf_uint8 signaling_flag;
418 imcf_uint8 pcscf_mod;
419
420 imcf_uint8 psdataoff_pdngw_support;
421
422 imc_tft_info_struct nw_assigned_tft;
423
424 imc_pcscf_list_struct pcscf_list;
425
426 imcf_uint32 mtu;
427} imc_single_concatenated_msg_struct;
428
429typedef enum {
430 IMC_PDN_ACT_PORGRESSING_NOTIFY_TYPE_NONE = 0,
431 IMC_PDN_ACT_PORGRESSING_NOTIFY_TYPE_V4V6_FALLBACK = 1,
432 IMC_PDN_ACT_PORGRESSING_NOTIFY_TYPE_END,
433} imc_pdn_act_progressing_notify_type_enum;
434
435typedef struct {
436 LOCAL_PARA_HDR
437 imc_emergency_ind_enum emergency_ind;
438 imcf_uint8 progressing_notify_type; //imc_pdn_act_progressing_notify_type_enum
439 imcf_uint8 pad[2];
440} imsm_imcb_pdn_act_progressing_notify_req_struct,
441imsa_imcb_pdn_act_progressing_notify_req_struct;
442
443typedef struct {
444
445 imc_pdp_addr_type_enum pdp_addr_type;
446 /**
447 * Length of PDP Address Contents:
448 * - If the pdp_addr_type == IPV4, this field contains IPV4 address
449 * - If the pdp_addr_type == IPV6, this field contains IPV6 address,
450 * - If the pdp_addr_type == IPV4v6, this field contains IPV4 address in pdp_addr[0]~pdp_addr[3], IPV6 address in pdp_addr[4]~pdp_addr[19]
451 * .
452 */
453 imcf_uint8 pad2[3];
454
455 imc_single_concatenated_msg_struct main_context;
456
457 /** for 4G ESM concatenated message scenario. */
458 imcf_uint8 num_of_concatenated_contexts;
459 imcf_uint8 pad3[3];
460 /** for 4G ESM concatenated message scenario. */
461 imc_single_concatenated_msg_struct concatenated_context[IMC_MAX_CONCATENATED_NUM];
462
463} imc_pdn_context_struct;
464
465typedef struct {
466 LOCAL_PARA_HDR
467 imcf_uint8 transaction_id;
468 /**
469 IMS module need to know how many context activated for an APN.
470 * - 2 : IPv4 in array first place, IPv6 in array second place. or IPv6 in array first place, IPv4 in array second place
471 * - 1 : IPv4 in array first place. or IPv6 in array first place. or IPv4v6 in array first place
472 * - 0 : Abnormal, you can assert it.
473 * .
474 **/
475 imcf_uint8 count; // 1 or 2
476 imcf_uint8 pad[2];
477
478 /* M-only */
479 imcf_uint8 ssid[IMC_MAX_SSID_LEN]; /* in string format */
480
481 imc_pdn_context_struct contexts[IMC_MAXIMUM_CONTEXTS_ACTIVATED_FOR_ONE_TIME_SINGLE_APN_ACTIVATION];
482} imsm_imcb_pdn_act_ack_rsp_struct,
483imsa_imcb_pdn_act_ack_rsp_struct;
484
485typedef struct {
486 LOCAL_PARA_HDR
487 imcf_uint8 transaction_id;
488 imc_ps_cause_enum ps_cause;
489 imcf_uint8 is_suggestion_timer_present;
490 imcf_uint8 pad;
491 imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
492 imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
493 /* suggestion timer from IWLAN
494 0 reserved for backward compatible
495 0xFFFF used for retry until next power cycle
496 others retry follows the suggestion timer (sec)
497 */
498 imcf_uint32 suggestion_timer;
499} imsm_imcb_pdn_act_rej_rsp_struct,
500imsa_imcb_pdn_act_rej_rsp_struct;
501
502/***************************/
503/* Secondary Bearer Activation */
504/***************************/
505
506typedef struct {
507 LOCAL_PARA_HDR
508 imcf_uint8 transaction_id;
509 imc_ps_cause_enum ps_cause;
510 imcf_uint8 pad[2];
511
512 imc_single_concatenated_msg_struct main_context;
513
514 imcf_uint8 num_of_concatenated_contexts;
515 imcf_uint8 pad2[3];
516
517 imc_single_concatenated_msg_struct concatenated_context[IMC_MAX_CONCATENATED_NUM];
518
519 imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
520 imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
521} imsm_imcb_dedicated_bearer_act_ack_rsp_struct,
522imsa_imcb_dedicated_bearer_act_ack_rsp_struct;
523
524typedef struct {
525 LOCAL_PARA_HDR
526 imcf_uint8 transaction_id;
527 imc_ps_cause_enum ps_cause;
528 imcf_uint8 num_of_concatenated_contexts;
529 imcf_uint8 pad[1];
530
531 imc_single_concatenated_msg_struct concatenated_context[IMC_MAX_CONCATENATED_NUM];
532
533 imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
534 imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
535} imsm_imcb_dedicated_bearer_act_rej_rsp_struct,
536imsa_imcb_dedicated_bearer_act_rej_rsp_struct;
537
538typedef struct {
539 LOCAL_PARA_HDR
540 imc_ps_cause_enum ps_cause;
541 imcf_uint8 pad[3];
542
543 imc_single_concatenated_msg_struct main_context;
544
545 imcf_uint8 num_of_concatenated_contexts;
546 imcf_uint8 pad2[3];
547
548 imc_single_concatenated_msg_struct concatenated_context[IMC_MAX_CONCATENATED_NUM];
549
550 imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
551 imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
552} imsm_imcb_dedicated_bearer_act_notify_req_struct,
553imsa_imcb_dedicated_bearer_act_notify_req_struct;
554
555/***************************/
556/* DEACT message structure */
557/***************************/
558typedef struct {
559 LOCAL_PARA_HDR
560 /** Because the IMS modules need to **link the relationship between ind and ack_rsp/rej_rsp**, it need to keep a transaction identifier between itself and x_module. */
561 imcf_uint8 transaction_id;
562 imc_ps_cause_enum ps_cause;
563 imcf_uint8 pad[2];
564
565 imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
566 imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
567} imsm_imcb_deact_rej_rsp_struct,
568imsa_imcb_deact_rej_rsp_struct;
569
570typedef struct {
571 LOCAL_PARA_HDR
572 imcf_uint8 transaction_id;
573 imcf_uint8 context_id;
574 imcf_uint8 context_id_is_valid;
575 imcf_uint8 pad;
576} imsm_imcb_deact_ack_rsp_struct,
577imsa_imcb_deact_ack_rsp_struct;
578
579typedef struct {
580 LOCAL_PARA_HDR
581 imcf_uint8 context_id;
582 imc_ps_cause_enum ps_cause;
583 /** When secondary context is deactivated. The IMS modules need to know if the secondary context's primary context is also deactivated. */
584 /* discuss with Wubai */
585 //imcf_uint8 if_primary_context_also_deactivated;
586 imcf_uint8 pad[2];
587
588 imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
589 imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
590} imsm_imcb_deact_notify_req_struct,
591imsa_imcb_deact_notify_req_struct;
592
593/***************************/
594/* Modify message structure */
595/***************************/
596
597typedef imsm_imcb_dedicated_bearer_act_ack_rsp_struct imsm_imcb_modify_ack_rsp_struct;
598typedef imsm_imcb_modify_ack_rsp_struct imsa_imcb_modify_ack_rsp_struct;
599typedef imsm_imcb_dedicated_bearer_act_rej_rsp_struct imsm_imcb_modify_rej_rsp_struct;
600typedef imsm_imcb_modify_rej_rsp_struct imsa_imcb_modify_rej_rsp_struct;
601typedef imsm_imcb_dedicated_bearer_act_notify_req_struct imsm_imcb_modify_notify_req_struct;
602typedef imsm_imcb_modify_notify_req_struct imsa_imcb_modify_notify_req_struct;
603
604#if 1 /* WFC */
605typedef struct {
606 LOCAL_PARA_HDR
607
608 imc_single_concatenated_msg_struct changed_context[IMC_MAX_CONCATENATED_NUM];
609
610 /* M-only */
611 imcf_uint8 trg_ssid[IMC_MAX_SSID_LEN]; /* in string format */
612
613 imcb_pdn_req_type_enum req_type;
614 imcb_ip_change_type_enum ip_change_type;
615} imsm_imcb_pdn_bearer_update_notify_req_struct,
616imsa_imcb_pdn_bearer_update_notify_req_struct;
617
618
619typedef struct {
620 LOCAL_PARA_HDR
621 imc_access_rat_type_enum source_rat_type;
622 imc_access_rat_type_enum target_rat_type;
623 imc_emergency_ind_enum emergency_indication;
624} imsm_imcb_handover_start_notify_req_struct,
625imsa_imcb_handover_start_notify_req_struct;
626
627typedef struct {
628 LOCAL_PARA_HDR
629 imc_access_rat_type_enum source_rat_type;
630 imc_access_rat_type_enum target_rat_type;
631 imcf_uint8 is_success;
632 imc_emergency_ind_enum emergency_indication;
633 imcf_uint8 pad[3];
634} imsm_imcb_handover_stop_notify_req_struct,
635imsa_imcb_handover_stop_notify_req_struct;
636
637typedef struct {
638 LOCAL_PARA_HDR
639 imc_access_rat_type_enum source_rat_type;
640 imc_access_rat_type_enum target_rat_type;
641 imc_emergency_ind_enum emergency_indication;
642
643} imsm_imcb_handover_ip_ready_notify_req_struct,
644imsa_imcb_handover_ip_ready_notify_req_struct;
645#endif
646
647/***************************/
648/* DHCP message structure */
649/***************************/
650typedef struct {
651 LOCAL_PARA_HDR
652 imcf_uint8 context_id;
653 imcf_uint8 pad[3];
654 imcf_int32 network_id; /* drop on 93MD */
655 /** The IMS modules need to know if IPv6 address acquisition success or fail. */
656 /* discuss with Wubai */
657 //imc_result_enum result;
658 /** Document need TODO. */
659 imcf_uint8 global_ipv4_address[IMC_IPV4_ADDR_LEN];
660 /** Document need TODO. */
661 char nw_if_name[IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE]; /* CCMNIx */
662 /* PDN device name is necessary when nw_if_name is empty */
663 char pdn_dev_name[IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE]; /* CCMNIx */
664 imcb_pdn_req_type_enum req_type;
665} imsm_imcb_update_ipv4_global_addr_notify_req_struct,
666imsa_imcb_update_ipv4_global_addr_notify_req_struct;
667
668typedef struct {
669 LOCAL_PARA_HDR
670 imcf_uint8 context_id;
671 imcf_uint8 pad[3];
672 imcf_int32 network_id; /* drop on 93MD */
673 /** The IMS modules need to know if IPv6 address acquisition success or fail. */
674 /* discuss with Wubai */
675 //imc_result_enum result;
676 /** When Android finish **SLAAC(Receive Router Adv)**, it will inform IMS modules about the IPv6 **global address**. */
677 imcf_uint8 global_ipv6_address[IMC_IPV6_ADDR_LEN];
678 /** When Android finish **SLAAC(Receive Router Adv)**, it will inform IMS modules about the IPv6 address' **network interface**. */
679 char nw_if_name[IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE]; /* CCMNIx */
680 /* PDN device name is necessary when nw_if_name is empty */
681 char pdn_dev_name[IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE]; /* CCMNIx */
682 imcb_pdn_req_type_enum req_type;
683} imsm_imcb_update_ipv6_global_addr_notify_req_struct,
684imsa_imcb_update_ipv6_global_addr_notify_req_struct;
685
686typedef struct {
687 LOCAL_PARA_HDR
688 imcf_uint8 context_id;
689 imc_access_rat_type_enum source_rat_type;
690 imc_access_rat_type_enum target_rat_type;
691 /*
692 0 NONE
693 1 V4_NOT_CHANGE
694 2 V6_NOT_CHANGE
695 3 V4V6_NOT_CHANGE
696 */
697 imcf_uint8 ip_type;
698} imsm_imcb_irat_without_ip_change_req_struct,
699imsa_imcb_irat_without_ip_change_req_struct;
700
701typedef struct {
702 LOCAL_PARA_HDR
703 imcf_uint16 index;
704 imcf_uint16 value;
705} imsm_imcb_pco_update_req_struct,
706imsa_imcb_pco_update_req_struct;
707
708typedef struct {
709 LOCAL_PARA_HDR
710 imc_emergency_ind_enum emergency_indication;
711 imcf_uint8 cause; //reserved
712 imcf_uint8 pad[2];
713} imsm_imcb_reset_suggestion_timer_req_struct,
714imsa_imcb_reset_suggestion_timer_req_struct;
715
716
717// ***************
718// ** IMSM part **
719// ***************
720
721#if 0
722/* under construction !*/
723/* under construction !*/
724/* under construction !*/
725/* under construction !*/
726/* under construction !*/
727/* under construction !*/
728/* under construction !*/
729/* under construction !*/
730/* under construction !*/
731/* under construction !*/
732/* under construction !*/
733#endif
734typedef struct
735{
736 LOCAL_PARA_HDR
737
738 imcf_uint32 trans_id;
739 imcf_bool is_emergency;
740 imcf_uint32 pcscf_reselect_flag;
741 imcf_uint32 access_rat_type;
742
743}imcb_imsm_pdn_act_req_struct,
744imsa_imcb_pdn_act_ind_struct;
745
746#if 0
747/* under construction !*/
748/* under construction !*/
749/* under construction !*/
750/* under construction !*/
751/* under construction !*/
752/* under construction !*/
753#endif
754
755typedef enum
756{
757 IMSM_DEACT_CAUSE_DONT_CARE = 0,
758 IMSM_DEACT_CAUSE_DEACT_NORMAL = 1,
759 IMSM_DEACT_CAUSE_DEACT_RA_INITIAL_ERROR = 2,
760 IMSM_DEACT_CAUSE_DEACT_NO_PCSCF = 3,
761 IMSM_DEACT_CAUSE_DEACT_RA_REFRESH_ERROR = 4,
762 IMSM_DEACT_CAUSE_DEACT_RA_ERROR = 5,
763 IMSM_DEACT_CAUSE_USER_FORCE_TO_LOCAL_RELEASE = 6,
764 IMSM_DEACT_CAUSE_AOSP_SHUTDOWN = 7,
765 IMSM_DEACT_CAUSE_AOSP_HANDOVER = 8,
766 IMSM_DEACT_CAUSE_APN_CHANGED = 9,
767 IMSM_DEACT_CAUSE_MAX
768} imsm_deact_cause_enum;
769
770
771typedef struct
772{
773 LOCAL_PARA_HDR
774
775 imcf_bool is_abort;
776 imcf_bool context_id_is_valid;
777 imcf_uint8 abort_activate_transaction_id;
778 imcf_uint32 trans_id;
779 imcf_uint32 context_id;
780 imsm_deact_cause_enum cause;
781
782}imcb_imsm_pdn_deact_req_struct,
783imsa_imcb_deact_ind_struct;
784
785#if 0
786/* under construction !*/
787/* under construction !*/
788/* under construction !*/
789/* under construction !*/
790/* under construction !*/
791/* under construction !*/
792/* under construction !*/
793/* under construction !*/
794/* under construction !*/
795/* under construction !*/
796/* under construction !*/
797/* under construction !*/
798/* under construction !*/
799#endif
800typedef struct
801{
802 LOCAL_PARA_HDR
803
804 imcf_uint8 transaction_id;
805 imcf_uint8 context_id;
806 imcf_uint8 qos_mod; //boolean
807 imcf_uint8 pad[1];
808
809 imc_qos_struct ue_defined_qos;
810
811 imcf_uint8 tft_mod; //boolean
812 imcf_uint8 pad2[3];
813
814 imc_tft_info_struct ue_defined_tft;
815
816}imcb_imsm_bearer_mod_req_struct,
817imsa_imcb_modify_ind_struct;
818
819#if 0
820/* under construction !*/
821/* under construction !*/
822/* under construction !*/
823/* under construction !*/
824/* under construction !*/
825/* under construction !*/
826/* under construction !*/
827/* under construction !*/
828/* under construction !*/
829#endif
830typedef struct
831{
832 LOCAL_PARA_HDR
833
834 imcf_uint8 transaction_id;
835 imcf_uint8 primary_context_id;
836 imcf_uint8 signaling_flag; /* boolean */
837 imcf_uint8 pcscf_reselect_flag; /* boolean */
838
839 imc_qos_struct ue_defined_qos;
840 imc_tft_info_struct ue_defined_tft;
841
842
843}imcb_imsm_bearer_act_req_struct,
844imsa_imcb_dedicated_bearer_act_ind_struct;
845
846#if 0
847/* under construction !*/
848/* under construction !*/
849/* under construction !*/
850/* under construction !*/
851/* under construction !*/
852/* under construction !*/
853/* under construction !*/
854/* under construction !*/
855/* under construction !*/
856#endif
857typedef enum {
858 IMSM_UE_PRRA_FAIL_TYPE_NONE = 0,
859 IMSM_UE_PRRA_FAIL_TYPE_PDN_DEACT_PROCEDURE_INCORRECT = 1,
860 IMSM_UE_PRRA_FAIL_TYPE_BEARER_FSM_STATE_INCORRECT = 2,
861 IMSM_UE_PRRA_FAIL_TYPE_TRANSACTION_FSM_STATE_INCORRECT = 3,
862 IMSM_UE_PRRA_FAIL_TYPE_PDN_DEACT_TIMEOUT = 4,
863 IMSM_UE_PRRA_FAIL_TYPE_PDN_ACT_TIMEOUT = 5, //can save critical logs only, no need to ASSERT
864 IMSM_UE_PRRA_FAIL_TYPE_END,
865} imsm_ue_para_fail_type_enum;
866
867#if 0
868/* under construction !*/
869/* under construction !*/
870/* under construction !*/
871/* under construction !*/
872/* under construction !*/
873/* under construction !*/
874/* under construction !*/
875/* under construction !*/
876/* under construction !*/
877/* under construction !*/
878/* under construction !*/
879/* under construction !*/
880/* under construction !*/
881/* under construction !*/
882/* under construction !*/
883/* under construction !*/
884/* under construction !*/
885#endif
886typedef struct
887{
888 LOCAL_PARA_HDR
889
890 imcf_uint32 checking_fail_type; //imc_input_msg_para_checking_fail_type_enum
891 imcf_uint32 message_id;
892 imcf_uint32 transaction_id;
893 imcf_uint8 context_id;
894 /*
895 0 IMCB_BR_FSM_STATE_INACTIVE
896 1 IMCB_BR_FSM_STATE_ACTIVE
897 */
898 imcf_uint8 expected_bearer_fsm_state; //imcb_bearer_fsm_state_enum
899 /*
900 0 IMCB_TRANSACTION_STATE_INIT
901 1 IMCB_TRANSACTION_STATE_ALLOC
902 */
903 imcf_uint8 expected_transaction_fsm_state; //imcb_transaction_state_enum
904 imcf_uint8 pad;
905}imcb_imsm_para_fail_req_struct,
906imsa_imcb_input_msg_para_checking_fail_ind_struct;
907
908#endif /* _IMSM_IMCB_STRUCT_H */