| /***************************************************************************** |
| * 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 */ |