blob: f4544b43ffade88f0c459fe0191e01a19f4727d3 [file] [log] [blame]
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*******************************************************************************
*==============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
*
* removed!
* removed!
* removed!
*
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*==============================================================================
*******************************************************************************/
#ifndef _IMSM_IMCB_STRUCT_H
#define _IMSM_IMCB_STRUCT_H
#include "ps_public_enum.h"
#include "sim_public_enum.h"
#include "ims_common_def.h"
//#include "imcb_imc_struct.h"
#define IMC_IPV4V6_ADDR_LEN 0x14
#define IMC_MAX_APN_LEN 100
#define IMC_MAX_CONCATENATED_NUM 11
#define IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE (IMC_MAX_IF_NAME_LENGTH)
#define IMC_MAXIMUM_CONTEXTS_ACTIVATED_FOR_ONE_TIME_SINGLE_APN_ACTIVATION 2
#define IMC_MAX_SSID_LEN 32 // SSID length is in at maximum 32 octets
/* Common define constant */
#define IMC_MAX_PACKET_FILTER_NUM MAX_NUM_OF_SUPPORTED_PF_PER_PDUS
#define IMC_MAX_PACKET_FILTER_PRECED_NUM 256
#define IMC_MAX_REMOTE_ADDR_AND_MASK_LEN 32
#define IMC_MAX_TFT_LEN 255
#define IMC_PACKET_FILTER_ID_LEN 1
/* Packet filter component length (octet) define */
#define IMC_IPV4_REMOTE_ADDR_AND_MASK_LEN 8
#define IMC_IPV6_REMOTE_ADDR_AND_MASK_LEN 32
#define IMC_PROTOCOL_ID_NEXT_HEADER_LEN 1
#define IMC_SINGLE_LOCAL_PORT_LEN 2
#define IMC_LOCAL_PORT_RANGE_LEN 4
#define IMC_SINGLE_REMOTE_PORT_LEN 2
#define IMC_REMOTE_PORT_RANGE_LEN 4
#define IMC_SECURITY_PARAMETER_ID_LEN 4
#define IMC_TYPE_OF_SERVICE_TRAFFIC_CLASS_AND_MASK_LEN 2
#define IMC_FLOW_LABEL_LEN 3
/* Parameter list define */
#define IMC_MAX_AUTHTOKEN_FLOWID_NUM 4 // temp max num (TS 24.008 10.5.162 does not restrict its max number...)
#define IMC_MAX_PARAMETER_LIST_NUM 16
#define IMC_MAX_PARAMETER_LIST_SIZE 255
#define IMC_MAX_AUTHORIZATION_TOKEN_LEN 16 // temp max length (it could be very long...)
#define IMC_MAX_FLOW_IDENTIFIER_NUM 4 // temp max num (TS 24.008 10.5.162 does not restrict its max number...)
#define IMC_FLOW_IDENTIFIER_LEN 4
/* Temp define constant */
#define IMC_MAX_PF_COMP_TYPE_NUM 15
#define IMC_MAX_PACKET_FILTER_CONTENT_LEN 47
/* define constants for BITMAP */
#define IMC_BMP_NONE 0x00000000
#define IMC_BMP_V4_ADDR 0x00000001
#define IMC_BMP_V6_ADDR 0x00000002
#define IMC_BMP_PROTOCOL 0x00000004
#define IMC_BMP_LOCAL_PORT_SINGLE 0x00000008
#define IMC_BMP_LOCAL_PORT_RANGE 0x00000010
#define IMC_BMP_REMOTE_PORT_SINGLE 0x00000020
#define IMC_BMP_REMOTE_PORT_RANGE 0x00000040
#define IMC_BMP_SPI 0x00000080
#define IMC_BMP_TOS 0x00000100
#define IMC_BMP_FLOW_LABEL 0x00000200
#define IMC_BMP_EMPTY_TCP_ACK 0x80000000
#define IMC_BMP_IP_FRAGMENT 0x40000000
/* WFC */
#define IMC_QCI_UNSPEC (0xFF)
/* define ip_type for irat_without_ip_change */
#define IMC_IRAT_IP_TYPE_NONE 0x00
#define IMC_IRAT_IP_TYPE_V4_NOT_CHANGE 0x01
#define IMC_IRAT_IP_TYPE_V6_NOT_CHANGE 0x02
#define IMC_IRAT_IP_TYPE_V4V6_NOT_CHANGE 0x03
/* PDN retry */
#define IMC_PDN_RETRY_SUGGESTION_TIMER_INFINITE 0xFFFFFFFF
/**********************************************************************/
typedef enum{
IMC_INTERNAL_PS_CAUSE_NONE = 0,
//// Add new cause HERE!
//IMC_INTERNAL_PS_CAUSE_xxx_START = ,
IMC_INTERNAL_PS_CAUSE_END,
} imc_internal_ps_cause_enum;
typedef enum{
IMC_EXTEND_PS_CAUSE_NONE = 0,
//// Add new cause HERE!
//IMC_EXTEND_PS_CAUSE_xxx_START = ,
IMC_EXTEND_PS_CAUSE_END,
} imc_extend_ps_cause_enum;
typedef enum{
IMC_PDP_ADDR_NONE_ADDR_TYPE = 0X0,
IMC_PDP_ADDR_IPV4_ADDR_TYPE = 0X21,
IMC_PDP_ADDR_IPV6_ADDR_TYPE = 0X57,
IMC_PDP_ADDR_IPV4V6_ADDR_TYPE = 0X8D,
IMC_PDP_ADDR_NULL_PDP_ADDR_TYPE = 0X03 /* This is added incase if no pdpaddrtype is * specified */
} imc_pdp_addr_type_enum;
typedef enum{
IMC_CONCATENATED_MSG_TYPE_NONE = 0,
IMC_CONCATENATED_MSG_TYPE_ACTIVATION = 1,
IMC_CONCATENATED_MSG_TYPE_MODIFICATION = 2,
/* WFC */
IMC_CONCATENATED_MSG_TYPE_DELETION = 3,
IMC_CONCATENATED_MSG_TYPE_END
} imc_concatenated_msg_type_enum;
/* enum declaration */
typedef enum{
IMC_PF_DIRECTION_PRE_REL7_TFT = 0x00,
IMC_PF_DIRECTION_UL_ONLY = 0x01,
IMC_PF_DIRECTION_DL_ONLY = 0x02,
IMC_PF_DIRECTION_BIDIRECTION = 0x03,
} imc_pf_direction_enum;
typedef enum{
IMC_TFT_OPCODE_SPARE = 0, // (0x00) Spare
IMC_TFT_OPCODE_CREATE_NEW_TFT = 1, // (0x01) Create new TFT
IMC_TFT_OPCODE_DELETE_TFT = 2, // (0x02) Delete existing TFT
IMC_TFT_OPCODE_ADD_PF = 3, // (0x03) Add packet filters to existing TFT
IMC_TFT_OPCODE_REPLACE_PF = 4, // (0x04) Replace packet filters in existing TFT
IMC_TFT_OPCODE_DELETE_PF = 5, // (0x05) Delete packet filters from existing TFT
IMC_TFT_OPCODE_NOTFT_OP = 6, // (0x06) No TFT operation
IMC_TFT_OPCODE_RESERVED // (0x07) Reserved
} imc_tft_operation_enum;
typedef enum {
IMC_PROGRESS_NOTIFY_CALL_WAITING = 0, // Not to IMSA
IMC_PROGRESS_NOTIFY_CALL_BARRING = 1, // Not to IMSA
IMC_PROGRESS_NOTIFY_CALL_FORWARDING = 2, // Not to IMSA
IMC_PROGRESS_NOTIFY_MWI = 258, // To IMSA
IMC_PROGRESS_NOTIFY_CONFERENCE = 257, // To IMSA
IMC_PROGRESS_NOTIFY_DIALOG = 256 // dummy
} imc_ss_progress_notify_service_enum;
/* IMS Packet Filter ID macros */
#define IMC_QRI_NW_PFI_TO_PFID(_qri_, _nw_pfi_) (imcf_uint16)(((_qri_&0xFF)<<8) | (_nw_pfi_&0xFF))
#define IMC_NW_PFI_TO_PFID(_pfi_) (imcf_uint16)(_pfi_&0xFFFF)
#define IMC_PFID_GET_NW_PFI(_pfid_) (imcf_uint8)((_pfid_>>8)&0xFF)
#define IMC_PFID_GET_QRI(_pfid_) (imcf_uint8)(_pfid_&0xFF)
/***********************************************************************************/
typedef struct {
imcf_uint8 qci;
imcf_uint8 gbr_present;
imcf_uint8 mbr_present;
imcf_uint8 pad[1];
imcf_uint64 dl_gbr;
imcf_uint64 ul_gbr;
imcf_uint64 dl_mbr;
imcf_uint64 ul_mbr;
} imc_qos_struct;
/* IPv4 remote address and subnet mask struct (WORD(4-byte) array, used by UPCM only) */
typedef struct {
imcf_uint32 addr;
imcf_uint32 mask;
} imc_remote_v4addr_struct;
/* IPv6 remote address and subnet mask struct (WORD(4-byte) array, used by UPCM only) */
typedef struct {
imcf_uint32 addr[4];
imcf_uint32 mask[4];
} imc_remote_v6addr_struct;
/* Packet filter struct for SM/ESM, TCM, L4C, & UPCM */
typedef struct {
imcf_uint16 id; // Packet filter index
imcf_uint8 precedence; // Packet filter evaluation precedence index, more less more high (0~255)
imc_pf_direction_enum direction; // Direction of the packet filter
imcf_uint16 nw_id; // network assigned packet Filter ID; QRI+PFI, set with IMC_QRI_NW_PFI_TO_PFID
imcf_uint32 bitmap; // Used to indicate which of the following field exist
imcf_uint8 remote_addr_and_mask[IMC_MAX_REMOTE_ADDR_AND_MASK_LEN];
/* ----------------- Remote address and subnet mask (byte array) ----------------*
* *
* IPv4: addr = 0 ~ 3 *
* mask = 4 ~ 7 *
* <NOTE1: Length of IPv4 addr + mask = IMC_IPV4_REMOTE_ADDR_AND_MASK_LEN(8)> *
* *
* IPv6: addr = 0 ~ 15 *
* mask = 16 ~ 31 *
* <NOTE2: Length of IPv6 addr + mask = IMC_IPV6_REMOTE_ADDR_AND_MASK_LEN(32)> *
* *
* *
* <NOTE3: IMC_MAX_REMOTE_ADDR_AND_MASK_LEN is set as *
* IMC_IPV6_REMOTE_ADDR_AND_MASK_LEN> *
* *
* ------------------------------------------------------------------------------*
*/
imcf_uint8 protocol_nxt_hdr; // Protocol number (IPv4) / Next header (IPv6)
imcf_uint8 pad2[3];
imcf_uint16 local_port_low; // Single local port / Local port range (low)
imcf_uint16 local_port_high; // (N/A) equal to low / Local port range (high)
imcf_uint16 remote_port_low; // Single remote port / Remote port range (low)
imcf_uint16 remote_port_high; // (N/A) equal to low / Remote port range (high)
imcf_uint32 spi; // IPsec security parameter index
imcf_uint8 tos; // Type of service (IPv4) / Traffic class (IPv6)
imcf_uint8 tos_msk; // Type of service mask (IPv4) / Traffic class mask (IPv6)
imcf_uint8 pad3[2];
imcf_uint32 flow_label; // Flow label (IPv6)
} imc_pkt_filter_struct;
typedef struct {
imcf_uint8 auth_token_len; // length of authorization token
imcf_uint8 pad[3];
imcf_uint8 auth_token[IMC_MAX_AUTHORIZATION_TOKEN_LEN]; // authorization token
imcf_uint8 flow_id_num; // number of flow identifiers
imcf_uint8 pad2[3];
imcf_uint8 flow_id_list[IMC_MAX_FLOW_IDENTIFIER_NUM][IMC_FLOW_IDENTIFIER_LEN];
/* flow identifier list
* (NOTE: an authtoken can follow one or more flow identifiers,
* and each flow identifier is IMC_FLOW_IDENTIFIER_LEN (4 byte) long)
*/
} imc_tft_authtoken_flowid_struct;
typedef struct {
imcf_uint16 linked_pf_id_num; // Number of linked packet filter IDs carried in linked_pf_id_list
imcf_uint8 pad[2];
imcf_uint16* linked_pf_id_list; // Dynamicaly allocated Packet filter ID list, receiver must free
/* Linked packet filter ID list
* (NOTE1: Used to indicate to NW the change for which service applies to)
* (NOTE2: Will appear when, 1. GBR changes, 2. TFT operation = 'Add packet filters to existing TFT')
*/
imcf_uint8 authtoken_flowid_num; // Number of authtoken_flowid group in authtoken_flowid_list[]
imcf_uint8 pad2[3];
imc_tft_authtoken_flowid_struct authtoken_flowid_list[IMC_MAX_AUTHTOKEN_FLOWID_NUM]; // Authorization and flow identifier group list
} imc_tft_parameter_list_struct;
/* TFT struct for SM/ESM, TCM, L4C */
typedef struct {
/* only used for MO initial */
imc_tft_operation_enum tft_opcode; // TFT operation code
imcf_uint8 ebit_flag; // Indicate whether parameter list exists
/* should be fill fully and locate to indexing by (pf->id -1)*/
/* to indicate which one is delete */
imcf_uint16 pf_count; // Number of packet filters in pf_list
imc_pkt_filter_struct* pf_list; // Dynamicaly allocated Packet filter list, receiver must free
imc_tft_parameter_list_struct parameter_list; // Parameter list
} imc_tft_info_struct;
/***************************/
/* Primary Bearer Activation */
/***************************/
typedef struct {
imcf_uint8 context_id;
imcf_uint8 primary_context_id;
imcf_bid_t bid; /* EBI or PSI|QFI */
imcf_uint8 qos_mod; //boolean
imc_access_rat_type_enum rat_type;
imc_qos_struct nw_assigned_qos;
imc_concatenated_msg_type_enum msg_type;
imcf_uint8 tft_mod; //boolean
imcf_uint8 signaling_flag;
imcf_uint8 pcscf_mod;
imcf_uint8 psdataoff_pdngw_support;
imc_tft_info_struct nw_assigned_tft;
imc_pcscf_list_struct pcscf_list;
imcf_uint32 mtu;
} imc_single_concatenated_msg_struct;
typedef enum {
IMC_PDN_ACT_PORGRESSING_NOTIFY_TYPE_NONE = 0,
IMC_PDN_ACT_PORGRESSING_NOTIFY_TYPE_V4V6_FALLBACK = 1,
IMC_PDN_ACT_PORGRESSING_NOTIFY_TYPE_END,
} imc_pdn_act_progressing_notify_type_enum;
typedef struct {
LOCAL_PARA_HDR
imc_emergency_ind_enum emergency_ind;
imcf_uint8 progressing_notify_type; //imc_pdn_act_progressing_notify_type_enum
imcf_uint8 pad[2];
} imsm_imcb_pdn_act_progressing_notify_req_struct,
imsa_imcb_pdn_act_progressing_notify_req_struct;
typedef struct {
imc_pdp_addr_type_enum pdp_addr_type;
/**
* Length of PDP Address Contents:
* - If the pdp_addr_type == IPV4, this field contains IPV4 address
* - If the pdp_addr_type == IPV6, this field contains IPV6 address,
* - 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]
* .
*/
imcf_uint8 pad2[3];
imc_single_concatenated_msg_struct main_context;
/** for 4G ESM concatenated message scenario. */
imcf_uint8 num_of_concatenated_contexts;
imcf_uint8 pad3[3];
/** for 4G ESM concatenated message scenario. */
imc_single_concatenated_msg_struct concatenated_context[IMC_MAX_CONCATENATED_NUM];
} imc_pdn_context_struct;
typedef struct {
LOCAL_PARA_HDR
imcf_uint8 transaction_id;
/**
IMS module need to know how many context activated for an APN.
* - 2 : IPv4 in array first place, IPv6 in array second place. or IPv6 in array first place, IPv4 in array second place
* - 1 : IPv4 in array first place. or IPv6 in array first place. or IPv4v6 in array first place
* - 0 : Abnormal, you can assert it.
* .
**/
imcf_uint8 count; // 1 or 2
imcf_uint8 pad[2];
/* M-only */
imcf_uint8 ssid[IMC_MAX_SSID_LEN]; /* in string format */
imc_pdn_context_struct contexts[IMC_MAXIMUM_CONTEXTS_ACTIVATED_FOR_ONE_TIME_SINGLE_APN_ACTIVATION];
} imsm_imcb_pdn_act_ack_rsp_struct,
imsa_imcb_pdn_act_ack_rsp_struct;
typedef struct {
LOCAL_PARA_HDR
imcf_uint8 transaction_id;
imc_ps_cause_enum ps_cause;
imcf_uint8 is_suggestion_timer_present;
imcf_uint8 pad;
imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
/* suggestion timer from IWLAN
0 reserved for backward compatible
0xFFFF used for retry until next power cycle
others retry follows the suggestion timer (sec)
*/
imcf_uint32 suggestion_timer;
} imsm_imcb_pdn_act_rej_rsp_struct,
imsa_imcb_pdn_act_rej_rsp_struct;
/***************************/
/* Secondary Bearer Activation */
/***************************/
typedef struct {
LOCAL_PARA_HDR
imcf_uint8 transaction_id;
imc_ps_cause_enum ps_cause;
imcf_uint8 pad[2];
imc_single_concatenated_msg_struct main_context;
imcf_uint8 num_of_concatenated_contexts;
imcf_uint8 pad2[3];
imc_single_concatenated_msg_struct concatenated_context[IMC_MAX_CONCATENATED_NUM];
imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
} imsm_imcb_dedicated_bearer_act_ack_rsp_struct,
imsa_imcb_dedicated_bearer_act_ack_rsp_struct;
typedef struct {
LOCAL_PARA_HDR
imcf_uint8 transaction_id;
imc_ps_cause_enum ps_cause;
imcf_uint8 num_of_concatenated_contexts;
imcf_uint8 pad[1];
imc_single_concatenated_msg_struct concatenated_context[IMC_MAX_CONCATENATED_NUM];
imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
} imsm_imcb_dedicated_bearer_act_rej_rsp_struct,
imsa_imcb_dedicated_bearer_act_rej_rsp_struct;
typedef struct {
LOCAL_PARA_HDR
imc_ps_cause_enum ps_cause;
imcf_uint8 pad[3];
imc_single_concatenated_msg_struct main_context;
imcf_uint8 num_of_concatenated_contexts;
imcf_uint8 pad2[3];
imc_single_concatenated_msg_struct concatenated_context[IMC_MAX_CONCATENATED_NUM];
imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
} imsm_imcb_dedicated_bearer_act_notify_req_struct,
imsa_imcb_dedicated_bearer_act_notify_req_struct;
/***************************/
/* DEACT message structure */
/***************************/
typedef struct {
LOCAL_PARA_HDR
/** 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. */
imcf_uint8 transaction_id;
imc_ps_cause_enum ps_cause;
imcf_uint8 pad[2];
imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
} imsm_imcb_deact_rej_rsp_struct,
imsa_imcb_deact_rej_rsp_struct;
typedef struct {
LOCAL_PARA_HDR
imcf_uint8 transaction_id;
imcf_uint8 context_id;
imcf_uint8 context_id_is_valid;
imcf_uint8 pad;
} imsm_imcb_deact_ack_rsp_struct,
imsa_imcb_deact_ack_rsp_struct;
typedef struct {
LOCAL_PARA_HDR
imcf_uint8 context_id;
imc_ps_cause_enum ps_cause;
/** When secondary context is deactivated. The IMS modules need to know if the secondary context's primary context is also deactivated. */
/* discuss with Wubai */
//imcf_uint8 if_primary_context_also_deactivated;
imcf_uint8 pad[2];
imcf_uint32 extend_ps_cause; //imc_extend_ps_cause_enum
imcf_uint32 internal_ps_cause; //imc_internalps_cause_enum
} imsm_imcb_deact_notify_req_struct,
imsa_imcb_deact_notify_req_struct;
/***************************/
/* Modify message structure */
/***************************/
typedef imsm_imcb_dedicated_bearer_act_ack_rsp_struct imsm_imcb_modify_ack_rsp_struct;
typedef imsm_imcb_modify_ack_rsp_struct imsa_imcb_modify_ack_rsp_struct;
typedef imsm_imcb_dedicated_bearer_act_rej_rsp_struct imsm_imcb_modify_rej_rsp_struct;
typedef imsm_imcb_modify_rej_rsp_struct imsa_imcb_modify_rej_rsp_struct;
typedef imsm_imcb_dedicated_bearer_act_notify_req_struct imsm_imcb_modify_notify_req_struct;
typedef imsm_imcb_modify_notify_req_struct imsa_imcb_modify_notify_req_struct;
#if 1 /* WFC */
typedef struct {
LOCAL_PARA_HDR
imc_single_concatenated_msg_struct changed_context[IMC_MAX_CONCATENATED_NUM];
/* M-only */
imcf_uint8 trg_ssid[IMC_MAX_SSID_LEN]; /* in string format */
imcb_pdn_req_type_enum req_type;
imcb_ip_change_type_enum ip_change_type;
} imsm_imcb_pdn_bearer_update_notify_req_struct,
imsa_imcb_pdn_bearer_update_notify_req_struct;
typedef struct {
LOCAL_PARA_HDR
imc_access_rat_type_enum source_rat_type;
imc_access_rat_type_enum target_rat_type;
imc_emergency_ind_enum emergency_indication;
} imsm_imcb_handover_start_notify_req_struct,
imsa_imcb_handover_start_notify_req_struct;
typedef struct {
LOCAL_PARA_HDR
imc_access_rat_type_enum source_rat_type;
imc_access_rat_type_enum target_rat_type;
imcf_uint8 is_success;
imc_emergency_ind_enum emergency_indication;
imcf_uint8 pad[3];
} imsm_imcb_handover_stop_notify_req_struct,
imsa_imcb_handover_stop_notify_req_struct;
typedef struct {
LOCAL_PARA_HDR
imc_access_rat_type_enum source_rat_type;
imc_access_rat_type_enum target_rat_type;
imc_emergency_ind_enum emergency_indication;
} imsm_imcb_handover_ip_ready_notify_req_struct,
imsa_imcb_handover_ip_ready_notify_req_struct;
#endif
/***************************/
/* DHCP message structure */
/***************************/
typedef struct {
LOCAL_PARA_HDR
imcf_uint8 context_id;
imcf_uint8 pad[3];
imcf_int32 network_id; /* drop on 93MD */
/** The IMS modules need to know if IPv6 address acquisition success or fail. */
/* discuss with Wubai */
//imc_result_enum result;
/** Document need TODO. */
imcf_uint8 global_ipv4_address[IMC_IPV4_ADDR_LEN];
/** Document need TODO. */
char nw_if_name[IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE]; /* CCMNIx */
/* PDN device name is necessary when nw_if_name is empty */
char pdn_dev_name[IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE]; /* CCMNIx */
imcb_pdn_req_type_enum req_type;
} imsm_imcb_update_ipv4_global_addr_notify_req_struct,
imsa_imcb_update_ipv4_global_addr_notify_req_struct;
typedef struct {
LOCAL_PARA_HDR
imcf_uint8 context_id;
imcf_uint8 pad[3];
imcf_int32 network_id; /* drop on 93MD */
/** The IMS modules need to know if IPv6 address acquisition success or fail. */
/* discuss with Wubai */
//imc_result_enum result;
/** When Android finish **SLAAC(Receive Router Adv)**, it will inform IMS modules about the IPv6 **global address**. */
imcf_uint8 global_ipv6_address[IMC_IPV6_ADDR_LEN];
/** When Android finish **SLAAC(Receive Router Adv)**, it will inform IMS modules about the IPv6 address' **network interface**. */
char nw_if_name[IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE]; /* CCMNIx */
/* PDN device name is necessary when nw_if_name is empty */
char pdn_dev_name[IMC_MAXIMUM_NW_IF_NAME_STRING_SIZE]; /* CCMNIx */
imcb_pdn_req_type_enum req_type;
} imsm_imcb_update_ipv6_global_addr_notify_req_struct,
imsa_imcb_update_ipv6_global_addr_notify_req_struct;
typedef struct {
LOCAL_PARA_HDR
imcf_uint8 context_id;
imc_access_rat_type_enum source_rat_type;
imc_access_rat_type_enum target_rat_type;
/*
0 NONE
1 V4_NOT_CHANGE
2 V6_NOT_CHANGE
3 V4V6_NOT_CHANGE
*/
imcf_uint8 ip_type;
} imsm_imcb_irat_without_ip_change_req_struct,
imsa_imcb_irat_without_ip_change_req_struct;
typedef struct {
LOCAL_PARA_HDR
imcf_uint16 index;
imcf_uint16 value;
} imsm_imcb_pco_update_req_struct,
imsa_imcb_pco_update_req_struct;
typedef struct {
LOCAL_PARA_HDR
imc_emergency_ind_enum emergency_indication;
imcf_uint8 cause; //reserved
imcf_uint8 pad[2];
} imsm_imcb_reset_suggestion_timer_req_struct,
imsa_imcb_reset_suggestion_timer_req_struct;
// ***************
// ** IMSM part **
// ***************
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
typedef struct
{
LOCAL_PARA_HDR
imcf_uint32 trans_id;
imcf_bool is_emergency;
imcf_uint32 pcscf_reselect_flag;
imcf_uint32 access_rat_type;
}imcb_imsm_pdn_act_req_struct,
imsa_imcb_pdn_act_ind_struct;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
typedef enum
{
IMSM_DEACT_CAUSE_DONT_CARE = 0,
IMSM_DEACT_CAUSE_DEACT_NORMAL = 1,
IMSM_DEACT_CAUSE_DEACT_RA_INITIAL_ERROR = 2,
IMSM_DEACT_CAUSE_DEACT_NO_PCSCF = 3,
IMSM_DEACT_CAUSE_DEACT_RA_REFRESH_ERROR = 4,
IMSM_DEACT_CAUSE_DEACT_RA_ERROR = 5,
IMSM_DEACT_CAUSE_USER_FORCE_TO_LOCAL_RELEASE = 6,
IMSM_DEACT_CAUSE_AOSP_SHUTDOWN = 7,
IMSM_DEACT_CAUSE_AOSP_HANDOVER = 8,
IMSM_DEACT_CAUSE_APN_CHANGED = 9,
IMSM_DEACT_CAUSE_MAX
} imsm_deact_cause_enum;
typedef struct
{
LOCAL_PARA_HDR
imcf_bool is_abort;
imcf_bool context_id_is_valid;
imcf_uint8 abort_activate_transaction_id;
imcf_uint32 trans_id;
imcf_uint32 context_id;
imsm_deact_cause_enum cause;
}imcb_imsm_pdn_deact_req_struct,
imsa_imcb_deact_ind_struct;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
typedef struct
{
LOCAL_PARA_HDR
imcf_uint8 transaction_id;
imcf_uint8 context_id;
imcf_uint8 qos_mod; //boolean
imcf_uint8 pad[1];
imc_qos_struct ue_defined_qos;
imcf_uint8 tft_mod; //boolean
imcf_uint8 pad2[3];
imc_tft_info_struct ue_defined_tft;
}imcb_imsm_bearer_mod_req_struct,
imsa_imcb_modify_ind_struct;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
typedef struct
{
LOCAL_PARA_HDR
imcf_uint8 transaction_id;
imcf_uint8 primary_context_id;
imcf_uint8 signaling_flag; /* boolean */
imcf_uint8 pcscf_reselect_flag; /* boolean */
imc_qos_struct ue_defined_qos;
imc_tft_info_struct ue_defined_tft;
}imcb_imsm_bearer_act_req_struct,
imsa_imcb_dedicated_bearer_act_ind_struct;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
typedef enum {
IMSM_UE_PRRA_FAIL_TYPE_NONE = 0,
IMSM_UE_PRRA_FAIL_TYPE_PDN_DEACT_PROCEDURE_INCORRECT = 1,
IMSM_UE_PRRA_FAIL_TYPE_BEARER_FSM_STATE_INCORRECT = 2,
IMSM_UE_PRRA_FAIL_TYPE_TRANSACTION_FSM_STATE_INCORRECT = 3,
IMSM_UE_PRRA_FAIL_TYPE_PDN_DEACT_TIMEOUT = 4,
IMSM_UE_PRRA_FAIL_TYPE_PDN_ACT_TIMEOUT = 5, //can save critical logs only, no need to ASSERT
IMSM_UE_PRRA_FAIL_TYPE_END,
} imsm_ue_para_fail_type_enum;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
typedef struct
{
LOCAL_PARA_HDR
imcf_uint32 checking_fail_type; //imc_input_msg_para_checking_fail_type_enum
imcf_uint32 message_id;
imcf_uint32 transaction_id;
imcf_uint8 context_id;
/*
0 IMCB_BR_FSM_STATE_INACTIVE
1 IMCB_BR_FSM_STATE_ACTIVE
*/
imcf_uint8 expected_bearer_fsm_state; //imcb_bearer_fsm_state_enum
/*
0 IMCB_TRANSACTION_STATE_INIT
1 IMCB_TRANSACTION_STATE_ALLOC
*/
imcf_uint8 expected_transaction_fsm_state; //imcb_transaction_state_enum
imcf_uint8 pad;
}imcb_imsm_para_fail_req_struct,
imsa_imcb_input_msg_para_checking_fail_ind_struct;
#endif /* _IMSM_IMCB_STRUCT_H */