[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6

MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF  modem version: NA

Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/protocol/interface/ddm/atp_ursp_struct.h b/mcu/protocol/interface/ddm/atp_ursp_struct.h
new file mode 100644
index 0000000..1fc10c1
--- /dev/null
+++ b/mcu/protocol/interface/ddm/atp_ursp_struct.h
@@ -0,0 +1,170 @@
+#ifndef  _ATP_URSP_STRUCT_H
+#define  _ATP_URSP_STRUCT_H
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "mcd_l3_inc_struct.h"
+#include "atcmd_struct.h"
+#include "ursp_public_defs.h"
+#include "ursp_struct.h"
+
+/*******************************************************************************/
+/*                                  Caution!!                                  */
+/* LOCAL_PARA_HDR and src_id MUST be the 1st and 2nd parameters, respectively. */
+/*******************************************************************************/
+#define ATP_URSP_REQ_LOCAL_PARA_HDR \
+    LOCAL_PARA_HDR \
+    kal_uint32          src_id; \
+    kal_uint32          cmd_mode;
+
+#define ATP_URSP_CNF_LOCAL_PARA_HDR \
+    LOCAL_PARA_HDR \
+    kal_uint32          src_id; \
+    kal_bool            is_success; \
+    kal_uint16          err_cause;
+
+#define ATP_URSP_IND_LOCAL_PARA_HDR \
+    LOCAL_PARA_HDR \
+    kal_uint32          src_id;
+
+
+/*******************************************************************************
+ * URSP Internal                                                               *
+ *******************************************************************************/
+
+// => Internal data type for URSP
+typedef struct
+{
+    atcmd_SSC_mode_enum ssc_mode;    // by default ATCMD_SSC_MODE_MAX
+    at_s_nssai_struct s_nssai;    // by default is_sst_present, is_sd_present, is_mapped_configured_sst_present, is_mapped_configured_sd_present) = (KAL_FALSE, KAL_FALSE, KAL_FALSE, KAL_FALSE)
+    kal_char dnn[URSP_DNN_SIZE];    // by default a NULL string
+    pdp_addr_type_enum pdx_type;    // by default NULL_PDP_ADDR_TYPE in ps_public_enum_public.h
+    atcmd_Access_type_enum access_type;    // by default ATCMD_ACCESS_TYPE_MAX
+}ursp_at_ue_local_conf_struct;
+typedef ursp_at_ue_local_conf_struct ursp_at_est_req_param_struct;
+
+/******************************************************************************************************************************************************************************
+* AT+EGURSPRDP[=<cid>]                                                                                                                                                        *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGURSPRDP_REQ
+typedef struct
+{
+    ATP_URSP_REQ_LOCAL_PARA_HDR
+
+    kal_int32 cid;
+}atp_d2at_egursprdp_req_struct;
+
+// MSG_ID_ATP_D2AT_EGURSPRDP_IND
+typedef struct
+{
+    ATP_URSP_IND_LOCAL_PARA_HDR
+
+    kal_int32 cid;
+
+    int type;
+    union
+    {
+        ursp_est_req_param_struct est_req;
+        struct
+        {
+            ursp_traffic_desc_struct traffic_desc;
+            ursp_ue_local_conf_struct ue_local_conf;
+            kal_bool match_all_disallow;
+        }app_req;
+    }param;
+}atp_d2at_egursprdp_ind_struct;
+
+// MSG_ID_ATP_D2AT_EGURSPRDP_CNF
+typedef struct
+{
+    ATP_URSP_CNF_LOCAL_PARA_HDR
+
+    kal_int32 res;
+}atp_d2at_egursprdp_cnf_struct;
+
+
+/******************************************************************************************************************************************************************************
+* +EGURSPREEVALU: <cid>,<event>                                                                                                                                               *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGURSPREEVAL_URC_IND
+typedef struct
+{
+    ATP_URSP_IND_LOCAL_PARA_HDR
+
+    kal_int32 cid;
+    kal_uint32 event;
+}atp_d2at_egurspreeval_urc_ind_struct;
+
+
+/******************************************************************************************************************************************************************************
+* AT+EGUEPOLICY=0,"<plmn_id>"[,"<ue_policy_part_content>"]                                                                                                                    *
+* AT+EGUEPOLICY=1,"<plmn_id>"[,<rule_precedence>,"<traffic_desc>",<num_of_route_sel_desc>[,<route_sel_desc_precedence>,"<route_sel_desc>"][...]][...]     …]                  *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGUEPOLICY_REQ
+typedef struct
+{
+    ATP_URSP_REQ_LOCAL_PARA_HDR
+
+    plmn_id_struct plmn_id;
+    kal_uint8 num_of_rule;
+    ursp_rule_struct rule_list[URSP_UE_POLICY_MAX_RULE_LIST_SIZE];    // 'eight' refers to the maximum size of allowed NSSAI, i.e. at most eight different slices
+}atp_d2at_eguepolicy_req_struct;
+
+// MSG_ID_ATP_D2AT_EGUEPOLICY_CNF
+typedef struct
+{
+    ATP_URSP_CNF_LOCAL_PARA_HDR
+
+    kal_int32 res;
+}atp_d2at_eguepolicy_cnf_struct;
+
+
+/******************************************************************************************************************************************************************************
+* +EGUEPOLICYU:<plmn_id>                                                                                                                                                      *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGUEPOLICY_URC_IND
+typedef struct
+{
+    ATP_URSP_IND_LOCAL_PARA_HDR
+
+    plmn_id_struct plmn_id;
+}atp_d2at_eguepolicy_urc_ind_struct;
+
+
+/******************************************************************************************************************************************************************************
+* AT+EGUEPOLICYRDP=<msg_type>[,"<plmn_id>"]                                                                                                                                   *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGUEPOLICYRDP_REQ
+typedef struct
+{
+    ATP_URSP_REQ_LOCAL_PARA_HDR
+
+    kal_int8 msg_type;
+    plmn_id_struct plmn_id;
+}atp_d2at_eguepolicyrdp_req_struct;
+
+// MSG_ID_ATP_D2AT_EGUEPOLICYRDP_IND
+typedef struct
+{
+    ATP_URSP_IND_LOCAL_PARA_HDR
+
+    kal_int8 msg_type;
+    plmn_id_struct plmn_id;
+    kal_uint8 num_of_rule;
+    ursp_rule_struct rule_list[URSP_UE_POLICY_MAX_RULE_LIST_SIZE];    // 'eight' refers to the maximum size of allowed NSSAI, i.e. at most eight different slices
+}atp_d2at_eguepolicyrdp_ind_struct;
+
+// MSG_ID_ATP_D2AT_EGUEPOLICYRDP_CNF
+typedef struct
+{
+    ATP_URSP_CNF_LOCAL_PARA_HDR
+
+    kal_int32 res;
+}atp_d2at_eguepolicyrdp_cnf_struct;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_d2pm_struct.h b/mcu/protocol/interface/ddm/d2_d2pm_struct.h
new file mode 100644
index 0000000..e83a543
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_d2pm_struct.h
@@ -0,0 +1,350 @@
+#ifndef  __D2_D2PM_STRUCT_H__
+#define  __D2_D2PM_STRUCT_H__
+
+#include "kal_public_defs.h"
+#include "atcmd_enum.h"
+#include "netinfo_common_struct.h"
+#include "pdn_public_defs.h"
+#include "atp_d2at_struct.h"
+#include "d2pm_ddm_struct.h"
+#include "d2_public_defs.h"
+
+// Type definition
+typedef struct d2_d2pm_hdr d2_d2pm_hdr_t;
+typedef struct d2_d2pm_hdr* d2_d2pm_hdr_ptr_t;
+
+// Macros
+#define D2_D2PM_REQ_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2_D2PM_NF_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2_D2PM_IND_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2_D2PM_RSP_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+// Functions
+// N/A
+
+// Implementation
+struct d2_d2pm_hdr
+{
+    LOCAL_PARA_HDR
+    kal_uint16 src_id;
+};
+
+/******************************************************************************
+* D2 to D2PM REQ                                                              *
+*******************************************************************************/
+
+// MSG_ID_D2_D2PM_ACT_DATA_CALL_REQ
+typedef struct
+{
+    D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_uint32 apn_idx;
+    kal_uint32 apn_type;
+    kal_uint32 suff_cond;
+    d2_ipv4v6_fb_enum ipv4v6_fb_pref;
+    kal_int32 cid;
+    kal_int32 p_cid;
+    kal_int32 fb_cid;
+
+    /* custom part, only for APN index D2PM_APN_IDX_CUSTOM_UNS */
+    kal_bool has_custom;
+    pdp_addr_type_enum pdx_type;
+    kal_char usrname[USERID_STRING_LEN];
+    kal_char passwd[PASSWORD_STRING_LEN];
+    kal_int8 auth_type;
+    kal_uint32 bearer_bitmask;
+    struct
+    {
+        struct
+        {
+            pdp_addr_type_enum pdx_type;
+        }roam;
+
+        struct
+        {
+            kal_char dnn[APN_STRING_LEN];
+            pdp_addr_type_enum pdx_type;
+            atcmd_SSC_mode_enum ssc_mode;
+            at_s_nssai_struct s_nssai;
+            atcmd_Access_type_enum access_type;
+        }vg;
+
+        struct
+        {
+            pdp_addr_type_enum pdx_type;
+        }vg_roam;
+
+        /* operator part */
+        struct
+        {
+            kal_uint32 wapn;
+            kal_uint32 apncl;
+            kal_uint32 apned;
+            kal_uint32 max_conn;
+            kal_uint32 max_conn_t;
+            kal_uint32 wait_time;
+        }vzw;
+
+        struct
+        {
+            kal_uint32 inact_time;
+        }sprint;
+    }cond;
+}d2_d2pm_act_data_call_req_struct;
+
+
+// MSG_ID_D2_DEACT_DATA_CALL_REQ
+typedef struct
+{
+    D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    atcmd_deact_cause_enum reason;
+}d2_d2pm_deact_data_call_req_struct;
+
+
+// MSG_ID_D2_ABORT_DATA_CALL_REQ
+typedef struct
+{
+    D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_uint32 apn_idx;
+    kal_uint32 apn_type;
+    kal_int32 cid;
+    atcmd_deact_cause_enum reason;
+}d2_d2pm_abort_data_call_req_struct;
+
+
+/******************************************************************************
+* D2 to User CNF                                                              *
+*******************************************************************************/
+
+#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 !*/
+/* 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 !*/
+/* 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 !*/
+/* 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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+/******************************************************************************
+* D2 to User IND                                                              *
+*******************************************************************************/
+
+#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 !*/
+/* 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 !*/
+/* 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 !*/
+/* 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 !*/
+/* 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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+/******************************************************************************
+* User to D2 RSP                                                            *
+*******************************************************************************/
+
+#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 !*/
+/* 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
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_data_call_public_defs.h b/mcu/protocol/interface/ddm/d2_data_call_public_defs.h
new file mode 100644
index 0000000..f20b0bc
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_data_call_public_defs.h
@@ -0,0 +1,43 @@
+#ifndef __D2_DATA_CALL_PUBLIC_DEFS_H__
+#define __D2_DATA_CALL_PUBLIC_DEFS_H__
+
+#include "d2pm_public_defs.h"
+
+// Type definitions
+typedef enum
+{
+    // a single CID or the final CID 
+    D2_PDX_STATE_FAIL = -1, 
+    D2_PDX_STATE_DEACT, 
+    D2_PDX_STATE_ACT, 
+    D2_PDX_STATE_UNUSABLE, 
+    D2_PDX_STATE_MAX = 0x7FFFFFFF
+}d2_pdx_state_enum;
+
+typedef enum
+{
+    D2_SUFF_COND_NONE = 0x00000000, 
+    D2_SUFF_COND_IPV4 = 0x00000001, 
+    D2_SUFF_COND_IPV6 = 0x00000002, 
+    D2_SUFF_COND_IPVX = 0x00000004, 
+    D2_SUFF_COND_IF_UP = 0x00000010, 
+    D2_SUFF_COND_MAX = 0x7FFFFFFF
+}d2_suff_cond_enum;
+
+typedef enum
+{
+    D2_IPV4V6_FB_DISABLE_IPV4_FIRST, 
+    D2_IPV4V6_FB_DISABLE_IPV6_FIRST, 
+    D2_IPV4V6_FB_ENABLE_IPV4_FIRST, 
+    D2_IPV4V6_FB_ENABLE_IPV6_FIRST, 
+    D2_IPV4V6_FB_MAX = 0x7FFFFFFF
+}d2_ipv4v6_fb_enum;
+
+// Macros
+// => CID
+#define D2_INVAL_CID    (D2PM_INVAL_CID)
+#define D2_MIN_CID (D2PM_MIN_CID)
+#define D2_MAX_CID (D2PM_MAX_CID)
+#define D2_CID_BITMAP_SIZE (((D2_MAX_CID - D2_MIN_CID) >> 3) + 1)
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_data_call_struct.h b/mcu/protocol/interface/ddm/d2_data_call_struct.h
new file mode 100644
index 0000000..4040f2f
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_data_call_struct.h
@@ -0,0 +1,380 @@
+#ifndef  __D2_DATA_CALL_STRUCT_H__
+#define  __D2_DATA_CALL_STRUCT_H__
+
+#include <stdint.h>
+#include "kal_public_defs.h"
+#include "atcmd_enum.h"
+#include "netinfo_common_struct.h"
+#include "pdn_public_defs.h"
+#include "d2rm_public_defs.h"
+#include "atp_d2at_struct.h"
+#include "d2pm_ddm_struct.h"
+#include "d2_data_call_public_defs.h"
+
+// Type definition
+typedef struct d2_data_call_hdr d2_data_call_hdr_t;
+typedef struct d2_data_call_hdr* d2_data_call_hdr_ptr_t;
+typedef atcmd_request_type_enum d2_act_data_call_req_type_enum;
+typedef ip_info_struct d2_act_data_call_ip_info_struct;
+typedef net_info_struct d2_act_data_call_net_info_struct;
+typedef d2pm_ddm_ims_prv_data_t d2_act_data_call_ims_info_struct;
+typedef if_info_struct d2_act_data_call_if_info_struct;
+typedef retry_info_struct d2_act_data_call_retry_info_struct;
+
+// Macros
+#define D2_DATA_CALL_REQ_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2_DATA_CALL_CNF_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2_DATA_CALL_IND_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2_DATA_CALL_RSP_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+// Interface
+// N/A
+
+// Implementation
+struct d2_data_call_hdr
+{
+    LOCAL_PARA_HDR
+    kal_uint16 src_id;
+};
+
+/******************************************************************************
+* User to D2 REQ                                                              *
+*******************************************************************************/
+
+// MSG_ID_D2_ACT_DATA_CALL_REQ
+typedef struct
+{
+    kal_bool cid_present;
+    kal_int32 cid;
+    kal_bool cgdcont_req_present;
+    at_cgdcont_req_struct cgdcont_req;
+    kal_uint32 tm_flag;
+    kal_bool if_id_present;
+    kal_int32 if_id;
+}d2at_d2_act_data_call_req_param_struct;
+
+typedef struct
+{
+    kal_int32 cid;
+    kal_int32 p_cid;
+    kal_int32 fb_cid;
+}d2am_d2_act_data_call_req_param_struct;
+
+typedef struct
+{
+    kal_bool pcscf_restore;
+}imsm_d2_act_data_call_req_param_struct;
+
+typedef struct
+{
+    kal_bool is_defined;
+    kal_char pdp_type[PDP_TYPE_STRING_LEN];
+    kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+    kal_char username[APN_STRING_LEN];
+    kal_char passwd[APN_STRING_LEN];
+    kal_int8 auth_type;
+}bip_d2_act_data_call_req_param_struct;
+
+typedef struct
+{
+    D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_uint32 apn_idx;
+    kal_char apn_type[APN_TYPE_STRING_LEN];
+    kal_uint32 suff_cond;
+    kal_uint32 flag;
+    d2_ipv4v6_fb_enum ipv4v6_fb_pref;
+
+    /* custom part */
+    /* Since AP fully controls APN settings in Gen93, this part can create a new APN setting, but cannot overwrite an existing one. */
+    kal_bool has_custom;
+    kal_char pdp_type[PDP_TYPE_STRING_LEN];
+    kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+    kal_char username[APN_STRING_LEN];
+    kal_char passwd[APN_STRING_LEN];
+    kal_int8 auth_type;
+
+    /* private part */
+    union
+    {
+        d2at_d2_act_data_call_req_param_struct d2at;
+        d2am_d2_act_data_call_req_param_struct d2am;
+        imsm_d2_act_data_call_req_param_struct imsm;
+        bip_d2_act_data_call_req_param_struct bip;
+    }param;
+}d2_act_data_call_req_struct;
+
+// MSG_ID_D2_DEACT_DATA_CALL_REQ
+typedef struct
+{
+    kal_uint32              tm_flag;
+}d2at_d2_deact_data_call_req_param_struct;
+
+typedef d2am_ddm_deact_data_call_req_prv_struct d2am_d2_deact_data_call_req_param_struct;
+
+typedef struct
+{
+    D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    atcmd_deact_cause_enum reason;
+
+    /* private part */
+    union
+    {
+        d2at_d2_deact_data_call_req_param_struct d2at;
+        d2am_d2_deact_data_call_req_param_struct d2am;
+    }param;
+}d2_deact_data_call_req_struct;
+
+
+// MSG_ID_D2_ABORT_DATA_CALL_REQ
+typedef struct
+{
+    kal_uint8 unused;
+}imsm_d2_abort_data_call_req_param_struct;
+
+typedef struct
+{
+    D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_uint32 apn_idx;
+    kal_bool cid_present;
+    kal_int32 cid;
+    atcmd_deact_cause_enum reason;
+
+    /* private part */
+    union
+    {
+        imsm_d2_abort_data_call_req_param_struct imsm;
+    }param;
+}d2_abort_data_call_req_struct;
+
+
+/******************************************************************************
+* D2 to User CNF                                                              *
+*******************************************************************************/
+
+// MSG_ID_D2_ACT_DATA_CALL_CNF
+typedef struct
+{
+    d2_act_data_call_ims_info_struct ims_info;    // IMS information for p_cid
+    d2_act_data_call_ims_info_struct fb_ims_info;    // IMS information for fb_cid
+}imsm_d2_act_data_call_cnf_param_struct;
+
+typedef struct
+{
+    kal_int8 unused;
+}bip_d2_act_data_call_cnf_param_struct;
+
+typedef struct
+{
+    D2_DATA_CALL_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid, p_cid, fb_cid;    // cid == fb_cid for fallback default bearer; cid == p_cid for default bearer; cid != p_cid for dedicated bearer
+    kal_uint8 p_ded_cid[D2_CID_BITMAP_SIZE], fb_ded_cid[D2_CID_BITMAP_SIZE]; // a bitmap
+    d2_act_data_call_ip_info_struct ip_info;    // IP address for p_cid
+    d2_act_data_call_net_info_struct net_info;    // Internet information for p_cid
+    d2_act_data_call_if_info_struct if_info;    // interface information for p_cid, including the info. of STK TCP/IP, and RAN type in a union
+    d2_act_data_call_ip_info_struct fb_ip_info;    // IP address for fb_cid
+    d2_act_data_call_net_info_struct fb_net_info;    // Internet information for fb_cid
+    d2_act_data_call_if_info_struct fb_if_info;    // interface information for fb_cid, including the info. of STK TCP/IP, and RAN type in a union
+    d2_act_data_call_retry_info_struct retry_info;    // retry timer for APN
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        imsm_d2_act_data_call_cnf_param_struct imsm;
+        bip_d2_act_data_call_cnf_param_struct bip;
+    }param;
+}d2_act_data_call_cnf_struct;
+
+
+// MSG_ID_D2_DEACT_DATA_CALL_CNF
+typedef struct
+{
+    D2_DATA_CALL_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        int unused;
+    }param;
+}d2_deact_data_call_cnf_struct;
+
+
+// MSG_ID_D2_ABORT_DATA_CALL_CNF
+typedef struct
+{
+    D2_DATA_CALL_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    kal_bool cid_present;
+    kal_int32 cid;
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        int unused;
+    }param;
+}d2_abort_data_call_cnf_struct;
+
+
+/******************************************************************************
+* D2 to User IND                                                              *
+*******************************************************************************/
+
+// MSG_ID_D2_ACT_DATA_CALL_IND
+typedef struct
+{
+    d2_act_data_call_ims_info_struct ims_info;    // IMS information for p_cid
+}imsm_d2_act_data_call_ind_param_struct;
+
+typedef bip_d2_act_data_call_cnf_param_struct bip_d2_act_data_call_ind_param_struct;
+
+typedef struct
+{
+    D2_DATA_CALL_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid, p_cid, fb_cid;    // cid == fb_cid for fallback default bearer; cid == p_cid for default bearer; cid != p_cid for dedicated bearer
+    kal_uint8 p_ded_cid[D2_CID_BITMAP_SIZE], fb_ded_cid[D2_CID_BITMAP_SIZE]; // a bitmap
+    d2_act_data_call_ip_info_struct ip_info;    // for IP address
+    d2_act_data_call_net_info_struct net_info;    // for Internet information
+    d2_act_data_call_if_info_struct if_info;    // for interface information, including the info. of STK TCP/IP, and RAN type in a union
+    kal_uint32 res;
+
+    /* private part */
+    union
+    {
+        imsm_d2_act_data_call_ind_param_struct imsm;
+        bip_d2_act_data_call_ind_param_struct bip;
+    }param;
+}d2_act_data_call_ind_struct;
+
+
+// MSG_ID_D2_DEACT_DATA_CALL_IND
+typedef struct
+{
+    D2_DATA_CALL_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    kal_uint32 res;
+
+    /* private part */
+    union
+    {
+        int unused;
+    }param;
+}d2_deact_data_call_ind_struct;
+
+
+// MSG_ID_D2_ABORT_DATA_CALL_IND
+typedef struct
+{
+    D2_DATA_CALL_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_uint32 apn_idx;
+    kal_bool cid_present;
+    kal_int32 cid;
+    kal_uint32 res;
+
+    /* private part */
+    union
+    {
+        int unused;
+    }param;
+}d2_abort_data_call_ind_struct;
+
+
+// MSG_ID_D2_MOD_DATA_CALL_IND
+typedef struct
+{
+    d2_act_data_call_ims_info_struct ims_info;    // IMS information for cid
+}imsm_d2_mod_data_call_ind_param_struct;
+
+typedef struct
+{
+    D2_DATA_CALL_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid, p_cid;
+    d2_act_data_call_ip_info_struct ip_info;    // for IP address
+    d2_act_data_call_net_info_struct net_info;    // for Internet information
+    d2_act_data_call_if_info_struct if_info;    // for interface information, including the info. of STK TCP/IP, and RAN type in a union
+    kal_uint32 res;
+
+    /* private part */
+    union
+    {
+        imsm_d2_mod_data_call_ind_param_struct imsm;
+    }param;
+}d2_mod_data_call_ind_struct;
+
+
+/******************************************************************************
+* User to D2 RSP                                                            *
+*******************************************************************************/
+
+// MSG_ID_D2_ACT_DATA_CALL_RSP
+typedef struct
+{
+    D2_DATA_CALL_RSP_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    kal_uint32 res;
+
+    /* private part */
+    union
+    {
+        int unused;
+    }param;
+}d2_act_data_call_rsp_struct;
+
+
+// MSG_ID_D2_DEACT_DATA_CALL_RSP
+typedef struct
+{
+    D2_DATA_CALL_RSP_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    kal_uint32 res;
+
+    /* private part */
+    union
+    {
+        int unused;
+    }param;
+}d2_deact_data_call_rsp_struct;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_netif_api_param.def b/mcu/protocol/interface/ddm/d2_netif_api_param.def
new file mode 100644
index 0000000..b58c438
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_netif_api_param.def
@@ -0,0 +1,4 @@
+D2_NETIF_API_PARAM(network_ip_info_struct)
+D2_NETIF_API_PARAM(ipstk_ip_info_struct)
+D2_NETIF_API_PARAM(new_ip_info_struct)
+D2_NETIF_API_PARAM(net_info_struct)
diff --git a/mcu/protocol/interface/ddm/d2_netif_public_defs.h b/mcu/protocol/interface/ddm/d2_netif_public_defs.h
new file mode 100644
index 0000000..d690459
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_netif_public_defs.h
@@ -0,0 +1,19 @@
+#ifndef __D2_NETIF_PUBLIC_DEFS_H__
+#define __D2_NETIF_PUBLIC_DEFS_H__
+
+// Type definition
+// N/A
+
+// Macro
+// N/A
+
+// Macros
+// N/A
+
+// Interface
+// N/A
+
+// Implementation
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_netif_struct.h b/mcu/protocol/interface/ddm/d2_netif_struct.h
new file mode 100644
index 0000000..1474046
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_netif_struct.h
@@ -0,0 +1,190 @@
+/*****************************************************************************
+*  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) 2012
+*
+*  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).
+*
+*****************************************************************************/
+
+#ifndef  __D2_NETIF_STRUCT_H__
+#define  __D2_NETIF_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+//#include "pdn_public_defs.h"
+#include "netinfo_common_struct.h"
+#include "iwlan_public_defs.h"
+
+typedef enum {
+    D2_NETIF_IF_CAUSE_NO_ERROR      = 0,
+    D2_NETIF_IF_CAUSE_NET_IP_CHG    = 11,
+    D2_NETIF_IF_CAUSE_MD_IP_CHG     = 12,
+    D2_NETIF_IF_CAUSE_AP_IP_CHG     = 13,
+    D2_NETIF_IF_CAUSE_NET_INFO_CHG  = 14,
+    D2_NETIF_IF_CAUSE_RAN_CHG       = 15,
+    D2_NETIF_IF_CAUSE_CHG           = 20,
+    D2_NETIF_IF_CAUSE_NO_RA_I       = 21,
+    D2_NETIF_IF_CAUSE_NO_RA_R       = 22,
+    D2_NETIF_IF_CAUSE_AP_UP_SUCC    = 31,
+    D2_NETIF_IF_CAUSE_AP_UP_FAIL    = 32,
+    D2_NETIF_IF_CAUSE_AP_DOWN_SUCC  = 33,
+    D2_NETIF_IF_CAUSE_AP_DOWN_FAIL  = 34,
+    D2_NETIF_IF_CAUSE_MD_UP_SUCC    = 41,
+    D2_NETIF_IF_CAUSE_MD_UP_FAIL    = 41,
+//[TH 20191202] Workaround for STKBRG CNF Fail -> D2 do not have error handling for CNF_FAIL-> run out of interface_id 
+//D2_NETIF_IF_CAUSE_MD_UP_FAIL    = 42, 
+    D2_NETIF_IF_CAUSE_MD_DOWN_SUCC  = 43,
+    D2_NETIF_IF_CAUSE_MD_DOWN_FAIL  = 43,
+//[TH 20191202] Workaround for STKBRG CNF Fail -> D2 do not have error handling for CNF_FAIL-> run out of interface_id
+//D2_NETIF_IF_CAUSE_MD_DOWN_FAIL  = 44,
+    D2_NETIF_IF_CAUSE_sAP_UP_SUCC   = 51,
+    D2_NETIF_IF_CAUSE_sAP_UP_FAIL   = 52,
+    D2_NETIF_IF_CAUSE_sAP_DOWN_SUCC = 53,
+    D2_NETIF_IF_CAUSE_sAP_DOWN_FAIL = 54,
+} d2_netif_interface_cause_enum;
+
+typedef enum {
+    D2_NETIF_RA_ERROR                 = -1,
+    D2_NETIF_RA_DEFAULT               = 0,
+    D2_NETIF_RA_SUCCESS               = 1,
+    D2_NETIF_RA_INITIAL_FAIL          = 2,
+    D2_NETIF_RA_REFRESH_FAIL          = 3,
+    D2_NETIF_RA_OOXX                  = 0x7FFFFFFF
+} d2_netif_ra_state_enum;
+
+typedef enum {
+    D2_NETIF_IF_STATE_DOWN            = 0,
+    D2_NETIF_IF_STATE_UP              = 1,
+
+    D2_NETIF_IF_STATE_DOWNING         = 10,
+    D2_NETIF_IF_STATE_UPING           = 11,
+    D2_NETIF_IF_STATE_OOXX            = 0x7FFFFFFF
+} d2_netif_interface_state_enum;
+
+typedef struct {
+    network_ip_info_struct                  cellular;
+    network_ip_info_struct                  epdg;
+    ipstk_ip_info_struct                    md_ipstk;
+    ipstk_ip_info_struct                    ap_ipstk;
+    //ipstk_ip_info_struct                    sap_ipstk;
+} d2_netif_ip_info_t;
+
+/*
+typedef struct {
+    d2_netif_interface_state_enum           state;
+    kal_uint16                              is_use;
+} d2_netif_interface_status;
+*/
+
+typedef struct {
+    net_info_struct                         net_info;
+} d2_netif_net_info_t;
+
+typedef struct {
+    d2_netif_interface_state_enum           md_if;
+    d2_netif_interface_state_enum           ap_if;
+    d2_netif_interface_state_enum           sap_if;
+    d2_netif_ra_state_enum                  ra_state;
+    d2_netif_ip_info_t                      ip;
+    kal_bool                                net_present;
+    d2_netif_net_info_t                     net;
+    kal_bool                                ran_present;
+    iwlan_ran_e                             ran;
+    kal_bool                                is_no_ra;
+} d2_netif_interface_info_t;
+
+typedef struct {
+    kal_uint8                               is_used;
+    kal_uint8                               ps_id;
+    kal_uint16                              transaction_id;
+    // kal_uint32                           interface_id;
+    d2_netif_interface_info_t               info;
+} d2_netif_interface_dump_item_t;
+
+#define D2_NETIF_MAX_INTERFACE_ID           (20)
+#define D2_NETIF_MAX_DUMP_INTERFACE_ID      (D2_NETIF_MAX_INTERFACE_ID) //(8)
+
+// MSG_ID_D2_NETIF_CONTEXT_DUMP_IND
+typedef struct
+{
+    LOCAL_PARA_HDR 
+    
+    kal_int32                               interface_id;
+    kal_int32                               num;
+    kal_char                                str[32];
+    d2_netif_interface_dump_item_t          item[D2_NETIF_MAX_DUMP_INTERFACE_ID];
+}d2_netif_context_dump_ind_struct;
+
+typedef d2_netif_context_dump_ind_struct d2_netif_context_dump_end_ind_struct;
+typedef d2_netif_context_dump_ind_struct d2_netif_context_dump_start_ind_struct;
+
+
+#define D2_NETIF_API_PARAM_TYPE(name)       netif_api_param_type_##name
+#define D2_NETIF_API_PARAM_VAR(name)        netif_api_param_var_##name
+
+typedef enum {
+#define D2_NETIF_API_PARAM(name)            D2_NETIF_API_PARAM_TYPE(name),
+#include "d2_netif_api_param.def"
+#undef D2_NETIF_API_PARAM
+} d2_netif_api_param_type_e;
+
+// MSG_ID_D2_NETIF_API_DUMP_IND
+typedef struct
+{
+    LOCAL_PARA_HDR 
+
+    kal_bool                                is_sensitive;
+    kal_char                                func[32];
+    kal_uint32                              line;
+    kal_int32                               interface_id;
+    kal_int32                               value[6];
+    d2_netif_api_param_type_e               type;
+    union {
+        char buf[0];
+#define D2_NETIF_API_PARAM(name)            name D2_NETIF_API_PARAM_VAR(name);
+#include "d2_netif_api_param.def"
+#undef D2_NETIF_API_PARAM
+    } param;
+} d2_netif_api_dump_ind_struct;
+
+
+/**
+ * @brief Callback function type "d2_netif_interface_cb"
+ *
+ * When any interface event occurs, NETIF will notify the interface owner through this callback
+ *  * You can also through custom_d2_netif_event_notify_cb() know all interface event
+ * @param t_interface_id  the id of the interface in which the event occurred
+ * @param cause         the cause of the event. See @ref d2_netif_interface_cause_enum
+ * @param user_data     user data returned in callback 
+ */
+typedef void (*d2_netif_interface_cb)(kal_int32 t_interface_id, d2_netif_interface_cause_enum cause, void *user_data);
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_public_api.h b/mcu/protocol/interface/ddm/d2_public_api.h
new file mode 100644
index 0000000..ce0ca39
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_public_api.h
@@ -0,0 +1,33 @@
+#ifndef __D2_PUBLIC_API_H__
+#define __D2_PUBLIC_API_H__
+
+#include "kal_public_defs.h" 
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+
+// Compiler flag, NEED_TO_BE_NOTICED, set by the compiler
+// N/A
+
+// Type definition
+// N/A
+typedef enum {
+    BUILT_IN_APN_STATUS_SUCCESS,
+    BUILT_IN_APN_STATUS_ONGOING
+} d2_built_in_apn_status;
+
+// Macro
+#define  d2_get_owner_by_apn_idx(ps_id, apn_idx)    (d2apn_get_owner_by_apn_idx((ps_id), (apn_idx)))
+#define  d2_get_ipv6_mtu_by_apn(ps_id, apn_name)    (ddm_get_ipv6_mtu_by_apn((ps_id), (apn_name)))
+
+// Interface
+// N/A
+/***********************************************************
+ BUILT_IN_APN_STATUS_SUCCESS: Built-in APN process success *
+ BUILT_IN_APN_STATUS_ONGOING: Built-in APN process ongoing *
+************************************************************/
+extern d2_built_in_apn_status d2_get_built_in_apn_status(kal_uint8 ps_id);
+
+// Implementation
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_public_defs.h b/mcu/protocol/interface/ddm/d2_public_defs.h
new file mode 100644
index 0000000..2358226
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_public_defs.h
@@ -0,0 +1,38 @@
+#ifndef __D2_PUBLIC_DEFS_H__
+#define __D2_PUBLIC_DEFS_H__
+
+// Type denifitions
+typedef enum
+{
+    D2_RES_FAIL = -1, 
+    D2_RES_NONE, 
+    D2_RES_SUCC, 
+    D2_RES_RETRY, 
+    // => DATA CALL
+    D2_RES_FAIL_CONT, 
+    D2_RES_FAIL_ABORT, 
+    D2_RES_SUCC_ABORT, 
+    D2_RES_SUCC_CONT, 
+    D2_RES_MAX = 0x7FFFFFFF
+}d2_res_enum;
+
+typedef enum
+{
+    D2_EVENT_NONE = 0x00000000, 
+    D2_EVENT_PDX_PROFILE_CHG = 0x00000001, 
+    // => DATA CALL
+    D2_EVENT_PRE_ACT_DATA_CALL = 0x00000100, 
+    D2_EVENT_POST_ACT_DATA_CALL = 0x00000200, 
+    D2_EVENT_PRE_DEACT_DATA_CALL = 0x00000400, 
+    D2_EVENT_POST_DEACT_DATA_CALL = 0x00000800, 
+    D2_EVENT_ON_MOD_DATA_CALL = 0x00001000, 
+    // => NetIF
+    D2_EVENT_IPV6_RA_INIT_FAIL = 0x00010000, 
+    D2_EVENT_IPV6_RA_REFRESH_FAIL = 0x00020000, 
+    D2_EVENT_MAX = 0x7FFFFFFF
+}d2_event_enum;
+
+// Macros
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_struct.h b/mcu/protocol/interface/ddm/d2_struct.h
new file mode 100644
index 0000000..df5a169
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_struct.h
@@ -0,0 +1,56 @@
+#ifndef  __D2_STRUCT_H__
+#define  __D2_STRUCT_H__
+
+#include "kal_public_defs.h"
+
+// Type definition
+typedef struct d2_hdr d2_hdr_t;
+typedef struct d2_hdr* d2_hdr_ptr_t;
+
+// Macro
+#define D2_REQ_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2_CNF_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2_IND_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2_RSP_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+// Interface
+// N/A
+
+// Implementation
+struct d2_hdr
+{
+    LOCAL_PARA_HDR
+    kal_uint16 src_id;
+};
+
+/*******************************************************************************
+* User to D2 REQ                                                               *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* D2 to User CNF                                                               *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* D2 to User IND                                                               *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* User to D2 RSP                                                               *
+*******************************************************************************/
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2apn_public_api.h b/mcu/protocol/interface/ddm/d2apn_public_api.h
new file mode 100644
index 0000000..162e311
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2apn_public_api.h
@@ -0,0 +1,71 @@
+#ifndef __D2APN_PUBLIC_API_H__
+#define __D2APN_PUBLIC_API_H__
+
+#include "kal_public_defs.h"
+/*
+#include "ddm_utility.h"
+#include "custom_d2_config.h"
+#include "d2apn_public_defs.h"
+#include "d2apn_struct.h"
+*/
+
+// Compiler flag, NEED_TO_BE_NOTICED, set by the compiler
+// N/A
+
+// Type definition
+/*
+typedef enum
+{
+    D2APN_API_RES_FAIL = D2APN_RES_FAIL,
+    D2APN_API_RES_NONE = D2APN_RES_NONE, 
+    D2APN_API_RES_SUCC = D2APN_RES_SUCC,
+}d2apn_api_res_enum;
+*/
+
+// Macros
+// N/A
+
+// Interface
+/*
+extern kal_uint32 d2apn_get_min_apn_idx_by_owner (kal_uint8 ps_id, module_type owner);
+extern kal_uint32 d2apn_get_max_apn_idx_by_owner (kal_uint8 ps_id, module_type owner);
+*/
+extern module_type d2apn_get_owner_by_apn_idx (kal_uint8 ps_id, kal_uint32 apn_idx);
+/*extern d2apn_api_res_enum d2apn_init_set_apns_info_req (kal_uint8 ps_id, module_type owner, d2apn_set_apns_info_req_struct *req_ptr);
+extern d2apn_api_res_enum d2apn_init_set_apns_req (kal_uint8 ps_id, module_type owner, d2apn_set_apns_req_struct *req_ptr);
+*/
+
+/*******************************************************************************
+ * ILM-equivalent API                                                          *
+ *******************************************************************************/
+/*
+// => SET request
+extern d2apn_api_res_enum d2apn_set_apns_info (kal_uint8 ps_id, module_type owner, d2apn_set_apns_info_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+extern d2apn_api_res_enum d2apn_set_apns (kal_uint8 ps_id, module_type owner, d2apn_set_apns_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => RESET request
+extern d2apn_api_res_enum d2apn_reset_apns_info (kal_uint8 ps_id, module_type owner, d2apn_reset_apns_info_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+extern d2apn_api_res_enum d2apn_reset_apns (kal_uint8 ps_id, module_type owner, d2apn_reset_apns_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => COPY request
+extern d2apn_api_res_enum d2apn_copy_apns_tbl (kal_uint8 ps_id, module_type owner, d2apn_copy_apns_tbl_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => GET request
+#define d2apn_get_apns_info(ps_id, subscriber, req_ptr, rsp_cb, rsp_cb_arg)    ((req_ptr) == NULL ? D2APN_API_RES_FAIL : \
+                                                                               ((req_ptr)->type >= D2APN_GET_APNS_INFO_REQ_TYPE_CACHE ? d2apn_get_apns_info_owner((ps_id), (subscriber), (req_ptr), (rsp_cb), (rsp_cb_arg)) : \
+                                                                               d2apn_get_apns_info_subscriber((ps_id), (subscriber), (req_ptr), (rsp_cb), (rsp_cb_arg))))
+#define d2apn_get_apns(ps_id, subscriber, req_ptr, rsp_cb, rsp_cb_arg)    ((req_ptr) == NULL ? D2APN_API_RES_FAIL : \
+                                                                          ((req_ptr)->type >= D2APN_GET_APNS_REQ_TYPE_CACHE ? d2apn_get_apns_owner((ps_id), (subscriber), (req_ptr), (rsp_cb), (rsp_cb_arg)) : \
+                                                                          d2apn_get_apns_subscriber((ps_id), (subscriber), (req_ptr), (rsp_cb), (rsp_cb_arg))))
+*/
+
+// Implementation
+/*
+// => Subscriber
+extern d2apn_api_res_enum d2apn_get_apns_info_subscriber (kal_uint8 ps_id, module_type subscriber, d2apn_get_apns_info_req_struct *req_ptr, d2apn_custom_subscriber_msg_cb_t rsp_cb, void *rsp_cb_arg);
+extern d2apn_api_res_enum d2apn_get_apns_subscriber (kal_uint8 ps_id, module_type subscriber, d2apn_get_apns_req_struct *req_ptr, d2apn_custom_subscriber_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => Owner
+extern d2apn_api_res_enum d2apn_get_apns_info_owner (kal_uint8 ps_id, module_type owner, d2apn_get_apns_info_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+extern d2apn_api_res_enum d2apn_get_apns_owner (kal_uint8 ps_id, module_type owner, d2apn_get_apns_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => Internal data type for D2APN
+// N/A
+*/
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2apn_public_defs.h b/mcu/protocol/interface/ddm/d2apn_public_defs.h
new file mode 100644
index 0000000..8d2b8e0
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2apn_public_defs.h
@@ -0,0 +1,104 @@
+#ifndef __D2APN_PUBLIC_DEFS_H__
+#define __D2APN_PUBLIC_DEFS_H__
+
+// Type denifitions
+typedef enum
+{
+    D2APN_RES_FAIL = -1, 
+    D2APN_RES_NONE, 
+    D2APN_RES_SUCC, 
+    D2APN_RES_MAX = 0x7FFFFFFF
+}d2apn_res_enum;
+
+// => MSG_ID_D2APN_SET_APNS_INFO_REQ
+typedef enum
+{
+    D2APN_SET_APNS_INFO_REQ_TYPE_NONE = 0x00, 
+    D2APN_SET_APNS_INFO_REQ_TYPE_WR_THRU, 
+    D2APN_SET_APNS_INFO_REQ_TYPE_CACHE, 
+    D2APN_SET_APNS_INFO_REQ_TYPE_WR_BACK, 
+    D2APN_SET_APNS_INFO_REQ_TYPE_MAX = 0x7F
+}d2apn_set_apns_info_req_type_enum;
+
+// => MSG_ID_D2APN_SET_APNS_REQ
+typedef enum
+{
+    D2APN_SET_APNS_REQ_TYPE_NONE = 0x00, 
+    D2APN_SET_APNS_REQ_TYPE_WR_THRU, 
+    D2APN_SET_APNS_REQ_TYPE_CACHE, 
+    D2APN_SET_APNS_REQ_TYPE_WR_BACK, 
+    D2APN_SET_APNS_REQ_TYPE_MAX = 0x7F
+}d2apn_set_apns_req_type_enum;
+
+// => MSG_ID_D2APN_RESET_APNS_INFO_REQ
+typedef enum
+{
+    D2APN_RESET_APNS_INFO_REQ_TYPE_NONE = 0x00, 
+    D2APN_RESET_APNS_INFO_REQ_TYPE_WR_THRU, 
+    D2APN_RESET_APNS_INFO_REQ_TYPE_CACHE, 
+    D2APN_RESET_APNS_INFO_REQ_TYPE_WR_BACK, 
+    D2APN_RESET_APNS_INFO_REQ_TYPE_MAX = 0x7F
+}d2apn_reset_apns_info_req_type_enum;
+
+// => MSG_ID_D2APN_RESET_APNS_REQ
+typedef enum
+{
+    D2APN_RESET_APNS_REQ_TYPE_NONE = 0x00, 
+    D2APN_RESET_APNS_REQ_TYPE_WR_THRU, 
+    D2APN_RESET_APNS_REQ_TYPE_CACHE, 
+    D2APN_RESET_APNS_REQ_TYPE_WR_BACK, 
+    D2APN_RESET_APNS_REQ_TYPE_WR_THRU_ALL,  
+    D2APN_RESET_APNS_REQ_TYPE_CACHE_ALL, 
+    D2APN_RESET_APNS_REQ_TYPE_WR_BACK_ALL, 
+    D2APN_RESET_APNS_REQ_TYPE_MAX = 0x7F
+}d2apn_reset_apns_req_type_enum;
+
+// => MSG_ID_D2APN_GET_APNS_INFO_REQ
+typedef enum
+{
+    D2APN_GET_APNS_INFO_REQ_TYPE_NONE = 0x00, 
+    D2APN_GET_APNS_INFO_REQ_TYPE_CACHE, 
+    D2APN_GET_APNS_INFO_REQ_TYPE_MAX = 0x7F
+}d2apn_get_apns_info_req_type_enum;
+
+// => MSG_ID_D2APN_GET_APNS_REQ
+typedef enum
+{
+    D2APN_GET_APNS_REQ_TYPE_NONE = 0x00, 
+    D2APN_GET_APNS_REQ_TYPE_APN_IDX, 
+    D2APN_GET_APNS_REQ_TYPE_OWNER, 
+    D2APN_GET_APNS_REQ_TYPE_APN, 
+    D2APN_GET_APNS_REQ_TYPE_CACHE, 
+    D2APN_GET_APNS_REQ_TYPE_CACHE_APN_IDX = D2APN_GET_APNS_REQ_TYPE_CACHE, 
+    D2APN_GET_APNS_REQ_TYPE_CACHE_OWNER, 
+    D2APN_GET_APNS_REQ_TYPE_CACHE_APN, 
+    D2APN_GET_APNS_REQ_TYPE_MAX = 0x7F
+}d2apn_get_apns_req_type_enum;
+
+// => MSG_ID_D2APN_APNS_CHG_IND
+typedef enum
+{
+    D2APN_APNS_CHG_IND_TYPE_NONE = 0x00, 
+    D2APN_APNS_CHG_IND_TYPE_INFO,    // when D2APN_SET_APNS_INFO_REQ_TYPE_WR_THRU and D2APN_RESET_APNS_INFO_REQ_TYPE_WR_THRU
+    D2APN_APNS_CHG_IND_TYPE_APN_IDX,    // when D2APN_SET_APNS_REQ_TYPE_WR_THRU and D2APN_RESET_APNS_REQ_TYPE_WR_THRU
+    D2APN_APNS_CHG_IND_TYPE_OWNER,    // when xxx_WR_BACK_xxx and D2APN_RESET_APNS_REQ_TYPE_WR_THRU_ALL
+    D2APN_APNS_CHG_IND_TYPE_MAX = 0x7F
+}d2apn_apns_chg_ind_type_enum;
+
+// Macro
+// => Attribute
+// => => Message
+#define D2APN_ATTR_MSG_MASK    (0x0000000F)
+#define D2APN_ATTR_NO_MSG    (0x00000000)
+#define D2APN_ATTR_ILM_MSG    (0x00000001)
+#define D2APN_ATTR_CB_MSG    (0x00000002)
+// => => Relationship
+#define D2APN_ATTR_RELP_MASK    (0x000000F0)
+#define D2APN_ATTR_NO_RELP    (0x00000000)
+#define D2APN_ATTR_ALIAS_RELP    (0x00000010)
+
+// APIs
+// => Attribute
+#define D2APN_ATTR_IS_MSG(attr, msg_type)    (((attr) & D2APN_ATTR_MSG_MASK) == (msg_type) ? 0 == 0 : 0 != 0)
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2apn_struct.h b/mcu/protocol/interface/ddm/d2apn_struct.h
new file mode 100644
index 0000000..6a33b37
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2apn_struct.h
@@ -0,0 +1,324 @@
+#ifndef  __D2APN_STRUCT_H__
+#define  __D2APN_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "atcmd_enum.h"
+#include "atcmd_struct.h"
+#include "mcd_l3_inc_struct.h"
+#include "ddm_enum.h"
+#include "d2apn_public_defs.h"
+
+// Type definition
+typedef struct d2apn_hdr d2apn_hdr_t;
+typedef struct d2apn_hdr* d2apn_hdr_ptr_t;
+
+// Macros
+#define D2APN_REQ_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 seq_num;
+
+#define D2APN_CNF_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 seq_num;
+
+#define D2APN_IND_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 seq_num;
+
+#define D2APN_RSP_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 seq_num;
+
+// Interface
+// N/A
+
+// Implementation
+struct d2apn_hdr
+{
+    LOCAL_PARA_HDR
+    kal_uint16 seq_num;
+};
+
+/*******************************************************************************
+* User to D2APN REQ                                                            *
+*******************************************************************************/
+
+// MSG_ID_D2APN_SET_APNS_INFO_REQ
+typedef struct
+{
+    D2APN_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    d2apn_set_apns_info_req_type_enum type;
+    plmn_id_struct plmn_id;
+    kal_uint8 imsi[D2_IMSI_STR_LEN];
+    kal_bool mia;    // KAL_TRUE indicates no APN settings for the owner; otherwise, a default case that the owner may give APN settings
+}d2apn_set_apns_info_req_struct;
+
+// MSG_ID_D2APN_SET_APNS_REQ
+typedef struct
+{
+    D2APN_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    d2apn_set_apns_req_type_enum type;
+    kal_char apn[APN_STRING_LEN];
+    kal_uint32 apn_idx;
+    kal_uint32 apn_type;
+    pdp_addr_type_enum pdx_type;
+    kal_char usrname[USERID_STRING_LEN];
+    kal_char passwd[PASSWORD_STRING_LEN];
+    kal_int8 auth_type;
+    kal_uint32 bearer_bitmask;
+
+    /* conditional part */
+    struct
+    {
+        struct
+        {
+            pdp_addr_type_enum pdx_type;    // by default NULL_PDP_ADDR_TYPE
+        }roam;
+
+        struct
+        {
+            kal_char dnn[APN_STRING_LEN];    // by default a NULL string
+            pdp_addr_type_enum pdx_type;    // by default NULL_PDP_ADDR_TYPE
+            atcmd_SSC_mode_enum ssc_mode;    // by default ATCMD_SSC_MODE_MAX
+            at_s_nssai_struct s_nssai;    // by default is_sst_present, is_sd_present, is_mapped_configured_sst_present, is_mapped_configured_sd_present) = (KAL_FALSE, KAL_FALSE, KAL_FALSE, KAL_FALSE)
+            atcmd_Access_type_enum access_type;    // by default ATCMD_ACCESS_TYPE_MAX
+        }vg;
+
+        struct
+        {
+            pdp_addr_type_enum pdx_type;    // by default NULL_PDP_ADDR_TYPE
+        }vg_roam;
+
+        /* operator part */
+        struct
+        {
+            kal_uint32 wapn;    // by default 0 to disable VzW
+            kal_uint32 apncl;
+            kal_uint32 apned;
+            kal_uint32 max_conn;
+            kal_uint32 max_conn_t;
+            kal_uint32 wait_time;
+        }vzw;
+
+        struct
+        {
+            kal_uint32 inact_time;    // by default 0
+        }sprint;
+    }cond;
+}d2apn_set_apns_req_struct;
+
+// MSG_ID_D2APN_RESET_APNS_INFO_REQ
+typedef struct
+{
+    D2APN_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    d2apn_reset_apns_info_req_type_enum type;
+}d2apn_reset_apns_info_req_struct;
+
+// MSG_ID_D2APN_RESET_APNS_REQ
+typedef struct
+{
+    D2APN_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    d2apn_reset_apns_req_type_enum type;
+    kal_char apn[APN_STRING_LEN];
+    kal_uint32 apn_idx;
+}d2apn_reset_apns_req_struct;
+
+// MSG_ID_D2APN_COPY_APNS_TBL_REQ
+typedef struct
+{
+    D2APN_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    // N/A
+}d2apn_copy_apns_tbl_req_struct;
+
+// MSG_ID_D2APN_GET_APNS_INFO_REQ
+typedef struct
+{
+    D2APN_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    d2apn_get_apns_info_req_type_enum type;
+    module_type owner;
+}d2apn_get_apns_info_req_struct;
+
+// MSG_ID_D2APN_GET_APNS_REQ
+typedef struct
+{
+    D2APN_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    d2apn_get_apns_req_type_enum type;
+    union
+    {
+        // querying one by APN and APN index
+        struct
+        {
+            kal_char apn[APN_STRING_LEN];
+            kal_uint32 apn_idx;
+        }apn_idx;
+
+        // querying a group of APN setting by owner 
+        struct
+        {
+            module_type owner;
+        }owner;
+
+        // querying a group by APN
+        struct
+        {
+            kal_char apn[APN_STRING_LEN];
+        }apn;
+    }param;
+}d2apn_get_apns_req_struct;
+
+
+/*******************************************************************************
+* D2APN to User CNF                                                            *
+*******************************************************************************/
+
+// MSG_ID_D2APN_SET_APNS_INFO_CNF
+typedef struct
+{
+    D2APN_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    d2apn_res_enum res;
+}d2apn_set_apns_info_cnf_struct;
+
+// MSG_ID_D2APN_SET_APNS_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_set_apns_cnf_struct;
+
+// MSG_ID_D2APN_RESET_APNS_INFO_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_reset_apns_info_cnf_struct;
+
+// MSG_ID_D2APN_RESET_APNS_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_reset_apns_cnf_struct;
+
+// MSG_ID_D2APN_COPY_APNS_TBL_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_copy_apns_tbl_cnf_struct;
+
+// MSG_ID_D2APN_GET_APNS_INFO_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_get_apns_info_cnf_struct;
+
+// MSG_ID_D2APN_GET_APNS_CNF
+typedef d2apn_set_apns_cnf_struct d2apn_get_apns_cnf_struct;
+
+/*******************************************************************************
+* D2APN to User IND                                                            *
+*******************************************************************************/
+
+// MSG_ID_D2APN_GET_APNS_INFO_IND
+typedef struct
+{
+    D2APN_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    module_type owner;
+    plmn_id_struct plmn_id;
+    kal_uint8 imsi[D2_IMSI_STR_LEN];
+    kal_bool mia;    // KAL_TRUE indicates no APN settings for the owner; otherwise, a default case that the owner may give APN settings
+}d2apn_get_apns_info_ind_struct;
+
+// MSG_ID_D2APN_GET_APNS_IND
+typedef struct
+{
+    D2APN_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_uint32 apn_idx;
+    kal_uint32 apn_type;
+    pdp_addr_type_enum pdx_type;
+    kal_char usrname[USERID_STRING_LEN];
+    kal_char passwd[PASSWORD_STRING_LEN];
+    kal_int8 auth_type;
+    kal_uint32 bearer_bitmask;
+
+    /* conditional part */
+    struct
+    {
+        struct
+        {
+            pdp_addr_type_enum pdx_type;
+        }roam;
+
+        struct
+        {
+            kal_char dnn[APN_STRING_LEN];
+            pdp_addr_type_enum pdx_type;
+            atcmd_SSC_mode_enum ssc_mode;
+            at_s_nssai_struct s_nssai;
+            atcmd_Access_type_enum access_type;
+        }vg;
+
+        struct
+        {
+            pdp_addr_type_enum pdx_type;
+        }vg_roam;
+
+        /* operator part */
+        struct
+        {
+            kal_uint32 wapn;
+            kal_uint32 apncl;
+            kal_uint32 apned;
+            kal_uint32 max_conn;
+            kal_uint32 max_conn_t;
+            kal_uint32 wait_time;
+        }vzw;
+
+        struct
+        {
+            kal_uint32 inact_time;
+        }sprint;
+    }cond;
+}d2apn_get_apns_ind_struct;
+
+// MSG_ID_D2APN_APNS_CHG_IND
+typedef struct
+{
+    D2APN_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    d2apn_apns_chg_ind_type_enum type;
+    union
+    {
+        // APN-setting information based on a owner changed
+        struct
+        {
+            module_type owner;
+        }info;
+
+        // a single APN setting changed
+        struct
+        {
+            kal_char apn[APN_STRING_LEN];
+            kal_uint32 apn_idx;
+        }apn_idx;
+
+        // a group of APN settings based on a owner changed
+        struct
+        {
+            module_type owner;
+        }owner;
+    }param;    // NEED_TO_BE_NOTICED. should be 'info'
+}d2apn_apns_chg_ind_struct;
+
+
+/*******************************************************************************
+* User to D2APN RSP                                                             *
+*******************************************************************************/
+
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2apnb_struct.h b/mcu/protocol/interface/ddm/d2apnb_struct.h
new file mode 100644
index 0000000..387e78e
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2apnb_struct.h
@@ -0,0 +1,50 @@
+#ifndef  __D2APNB_STRUCT_H__
+#define  __D2APNB_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "d2_nvram_def.h"
+
+#define D2APNB_LOCAL_PARA_HDR     LOCAL_PARA_HDR
+
+typedef struct 
+{
+    D2APNB_LOCAL_PARA_HDR
+    nvram_d2_vzw_apn_cfg_struct apn_list;
+} d2apnb_ddm_vzw_apn_ntf_struct;
+
+typedef struct
+{
+    kal_bool      wapn_present;
+    kal_uint32    wapn;
+    kal_bool      apncl_present;
+    kal_uint32    apncl;
+    kal_bool      apnni_present;
+    kal_uint8     apnni[APNNI_STRING_LEN];
+    kal_bool      apntype_present;
+    kal_uint8     apntype[APNTYPE_STRING_LEN];
+    kal_bool      apnb_present;
+    kal_uint8     apnb[APNB_STRING_LEN];
+    kal_bool      apned_present;
+    kal_uint8     apned[APNED_STRING_LEN];
+    kal_bool      apntimer_present;
+    kal_uint32    apntimer;
+} d2apnb_vzwapne_struct;
+
+typedef struct
+{
+    kal_bool      wapn_present;
+    kal_uint32    wapn;
+    kal_bool      max_conn_present;
+    kal_uint32    max_conn;
+    kal_bool      max_conn_t_present;
+    kal_uint32    max_conn_t;
+    kal_bool      wait_time_present;
+    kal_uint32    wait_time;
+    kal_bool      throttle_time_present;
+    kal_uint32    throttle_time;
+} d2apnb_vzwapnetmr_struct;
+
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2cm_public_defs.h b/mcu/protocol/interface/ddm/d2cm_public_defs.h
new file mode 100644
index 0000000..12e949f
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2cm_public_defs.h
@@ -0,0 +1,231 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * d2cm_public_defs.h
+ *
+ * Project:
+ * --------
+ * 
+ *
+ * Description:
+ * ------------
+ *   
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __D2CM_PUBLIC_DEFS_H__
+#define __D2CM_PUBLIC_DEFS_H__
+
+#include "kal_public_defs.h"
+#include "atcmd_struct.h"
+#include "ddm_common_struct.h"
+#include "d2rm_public_defs.h"
+#include "d2pm_public_defs.h"
+#include "netinfo_common_struct.h"
+
+// Type denifitions
+typedef atcmd_request_type_enum d2cm_act_data_call_req_type_enum;
+typedef ip_info_struct d2cm_act_data_call_ip_info_struct;
+typedef net_info_struct d2cm_act_data_call_net_info_struct;
+typedef ran_info_struct d2cm_act_data_call_ran_info_struct;
+typedef if_info_struct d2cm_act_data_call_if_info_struct;
+typedef retry_info_struct d2cm_act_data_call_retry_info_struct;
+typedef ip_info_struct d2cm_ho_ip_info_struct;
+typedef net_info_struct d2cm_ho_net_info_struct;
+//typedef retry_info_struct d2cm_get_retry_tmr_retry_info_struct;
+typedef retry_info_struct d2cm_reset_retry_tmr_retry_info_struct;
+
+typedef enum
+{
+    // a single CID or the final CID 
+    D2CM_PDN_STATUS_FAIL = -1, 
+    D2CM_PDN_STATUS_DEACT, 
+    D2CM_PDN_STATUS_ACT, 
+    D2CM_PDN_STATUS_UNUSABLE, 
+    D2CM_PDN_STATUS_MAX = 0x7FFFFFFF
+}d2cm_pdn_state_enum;
+
+typedef enum
+{
+    // a single CID or the final CID 
+    D2CM_RES_NONE = D2PM_RES_NONE, 
+    D2CM_RES_FAIL = D2PM_RES_FAIL, 
+    D2CM_RES_SUCC = D2PM_RES_SUCC , 
+    // a subsequent CID
+    D2CM_RES_FAIL_ABORT = D2PM_RES_FAIL_ABORT, 
+    D2CM_RES_SUCC_ABORT = D2PM_RES_SUCC_ABORT, 
+    D2CM_RES_FAIL_CONT = D2PM_RES_FAIL_CONT, 
+    D2CM_RES_SUCC_CONT = D2PM_RES_SUCC_CONT, 
+    // otherwise
+    D2CM_RES_REJ = D2PM_RES_REJ, 
+    D2CM_RES_RETRY = D2PM_RES_RETRY, 
+    D2CM_RES_MAX = 0x7FFFFFFF
+}d2cm_res_enum;
+
+typedef enum
+{
+    D2CM_SUFF_COND_NONE = (0x00000000), 
+    D2CM_SUFF_COND_IPV4 = (0x00000001), 
+    D2CM_SUFF_COND_IPV6 = (0x00000002), 
+    D2CM_SUFF_COND_IPVX = (0x00000004), 
+    D2CM_SUFF_COND_IF_UP = (0x00000010), 
+    D2CM_SUFF_COND_MAX = (0x7FFFFFFF)
+}d2cm_suff_cond_enum;
+
+typedef enum
+{
+    D2CM_IPV4V6_FB_PREF_DISABLE_IPV4_FIRST = 0, 
+    D2CM_IPV4V6_FB_PREF_DISABLE_IPV6_FIRST, 
+    D2CM_IPV4V6_FB_PREF_ENABLE_IPV4_FIRST, 
+    D2CM_IPV4V6_FB_PREF_ENABLE_IPV6_FIRST, 
+    D2CM_IPV4V6_FB_PREF_MAX = (0x7FFFFFFF)
+}d2cm_ipv4v6_fb_pref_enum;
+
+typedef enum
+{
+    D2CM_EVENT_NONE = (0x00000000), 
+    D2CM_EVENT_PDN_PROFILE_CHG = (0x00000001), 
+    D2CM_EVENT_PRE_ACT_DATA_CALL = (0x00000002), 
+    D2CM_EVENT_POST_ACT_DATA_CALL = (0x00000004), 
+    D2CM_EVENT_PRE_DEACT_DATA_CALL = (0x00000008), 
+    D2CM_EVENT_POST_DEACT_DATA_CALL = (0x00000010), 
+    D2CM_EVENT_IPV6_RA_INIT_FAIL = (0x00000020), 
+    D2CM_EVENT_IPV6_RA_REFRESH_FAIL = (0x00000040), 
+    D2CM_EVENT_MAX = (0x7FFFFFFF)
+}d2cm_event_enum;
+
+typedef enum
+{
+    D2CM_EVENT_ACTION_NONE = (0x00000000), 
+    D2CM_EVENT_ACTION_REJ = (0x00000001), 
+    D2CM_EVENT_ACTION_MAX = (0x7FFFFFFF)
+}d2cm_event_action_enum;
+
+typedef struct
+{
+    module_type mod_id;
+    sap_type sap_id;
+    int attr;
+}d2cm_custom_usr_profile_struct;
+
+// Macros
+#define D2CM_INVAL_UID    (-1)
+#define D2CM_INVAL_CID    (D2PM_INVAL_CID)
+#define D2CM_MIN_CID    (D2PM_MIN_CID)
+#define D2CM_MAX_CID    (D2PM_MAX_CID)
+#define D2CM_CID_BITMAP_SIZE    (D2PM_CID_BITMAP_SIZE)
+#define D2CM_INVAL_APN_IDX    (D2PM_INVAL_APN_IDX)
+#define D2CM_ENGAGED_APN_IDX    (D2CM_INVAL_APN_IDX)
+#define D2CM_MAX_NUM_OF_USR    (16)
+// => Flags
+// => => ACT_DATA_CALL_REQ
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_NONE    (0x00000000)
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_REQ_ONLY    (0x00000001)
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_RSP_ONLY    (0x00000002)
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_DANGLING    (0x00000004)
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_REUSE    (0x00000008)    // only effective when the PDN is avticated
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_NO_URSP    (0x00000010)    // only effective when the PDN is avticated
+// => => GET_PDN_PROFILE_REQ
+#define D2CM_GET_PDN_PROFILE_REQ_FLAG_NONE    (0x00000000)
+#define D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_ALIAS    (0x00000001)
+#define D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_APN_IDX    (0x00000002)
+#define D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_ALL    (0xFFFFFFFF)    // NEED_TO_BE_NOTICED, maybe different from all flags set in the current definition
+// => => GET_PDN_PROFILE_IND
+#define D2CM_GET_PDN_PROFILE_IND_FLAG_NONE    (0x00000000)
+#define D2CM_GET_PDN_PROFILE_IND_FLAG_UNUSABLE    (0x00000001)
+// => Custom
+// => => User profile attributes
+// => => => Bitmap
+#define D2CM_ATTR_AUTH_MASK    (0x0000000F)
+#define D2CM_ATTR_NO_AUTH    (0x00000000)
+#define D2CM_ATTR_PDN_AUTH    (0x00000001)
+#define D2CM_ATTR_EVENT_AUTH    (0x00000002)
+#define D2CM_ATTR_ADMIN_AUTH    (D2CM_ATTR_AUTH_MASK)
+// => => => Distinct value
+#define D2CM_ATTR_MSG_MASK    (0x000000F0)
+#define D2CM_ATTR_NO_MSG    (0x00000000)
+#define D2CM_ATTR_AT_MSG    (0x00000010)
+#define D2CM_ATTR_ILM_MSG    (0x00000020)
+#define D2CM_ATTR_CB_MSG    (0x00000030)
+#define D2CM_ATTR_NETIF_MASK    (0x00000F00)
+#define D2CM_ATTR_NO_NETIF    (0x00000000)
+#define D2CM_ATTR_AP_NETIF    (0x00000100)
+#define D2CM_ATTR_MD_NETIF    (0x00000200)
+
+// => Utility
+#define D2CM_NORMAL_RES_SHIFT    (0)
+#define D2CM_NORMAL_RES_MASK    (0x000000FF)
+#define D2CM_NORMAL_RES_LEN    (8)
+#define D2CM_NW_CAUSE_SHIFT    (8)
+#define D2CM_NW_CAUSE_MASK    (0x00FFFF00)
+#define D2CM_NW_CAUSE_LEN    (16)
+// ---- WORKAROUND ----
+#define D2CM_ESM_CAUSE_SHIFT    (D2CM_NW_CAUSE_SHIFT)
+#define D2CM_ESM_CAUSE_MASK    (D2CM_NW_CAUSE_MASK)
+#define D2CM_ESM_CAUSE_LEN    (D2CM_NW_CAUSE_LEN)
+// ++++ WORKAROUND ++++
+
+// APIs, NEED_TO_BE_NOTICED, uint32-based, just a quick solution, To-Do later
+#define d2cm_sign_ext(x, shift, mask, len)    (((x) & (1 << ((len) - 1))) ? (x) | ~((mask) >> (shift)) : (x))
+#define d2cm_reset_normal_res(res)    ((res) &= ~D2CM_NORMAL_RES_MASK)
+#define d2cm_set_normal_res(res, x)    ((res) = ((res) & ~D2CM_NORMAL_RES_MASK) | (((x) << D2CM_NORMAL_RES_SHIFT) & D2CM_NORMAL_RES_MASK))
+#define d2cm_get_normal_res(res)    (d2cm_sign_ext(((res) & D2CM_NORMAL_RES_MASK) >> D2CM_NORMAL_RES_SHIFT, D2CM_NORMAL_RES_SHIFT, D2CM_NORMAL_RES_MASK, D2CM_NORMAL_RES_LEN))
+#define d2cm_reset_nw_cause(res)    ((res) &= ~D2CM_NW_CAUSE_MASK)
+#define d2cm_set_nw_cause(res, x)    ((res) = ((res) & ~D2CM_NW_CAUSE_MASK) | (((x) << D2CM_NW_CAUSE_SHIFT) & D2CM_NW_CAUSE_MASK))
+#define d2cm_get_nw_cause(res)    (((res) & D2CM_NW_CAUSE_MASK) >> D2CM_NW_CAUSE_SHIFT)
+// ---- WORKAROUND ----
+#define d2cm_reset_esm_cause(res)    (d2cm_reset_nw_cause((res)))
+#define d2cm_set_esm_cause(res, x)    (d2cm_set_nw_cause((res), (x)))
+#define d2cm_get_esm_cause(res)    (d2cm_get_nw_cause((res)))
+// ++++ WORKAROUND ++++
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2cm_struct.h b/mcu/protocol/interface/ddm/d2cm_struct.h
new file mode 100644
index 0000000..cfae5c2
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2cm_struct.h
@@ -0,0 +1,1049 @@
+/*****************************************************************************
+*  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) 2012
+*
+*  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).
+*
+*****************************************************************************/
+
+#ifndef  __D2CM_STRUCT_H__
+#define  __D2CM_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "pdn_public_defs.h"
+#include "custom_d2_config.h"
+#include "d2pm_ddm_struct.h"    // NEED_TO_BE_NOTICED, to review it
+#include "d2pm_d2rm_struct.h"    // NEED_TO_BE_NOTICED, to review it
+#include "ursp_public_defs.h"
+#include "d2rm_public_defs.h"
+#include "n3epc_public_defs.h"
+#include "iwlan_public_defs.h"
+
+// Type definition
+typedef struct d2cm_hdr d2cm_hdr_t;
+typedef struct d2cm_hdr* d2cm_hdr_ptr_t;
+typedef d2pm_ddm_ims_prv_data_t d2cm_act_data_call_ims_info_struct;
+
+// Macros
+#define D2CM_REQ_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint32 src_id;
+
+#define D2CM_CNF_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint32 src_id;
+
+#define D2CM_IND_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint32 src_id;
+
+#define D2CM_RSP_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint32 src_id;
+
+// Functions
+// N/A
+
+// Implementation
+struct d2cm_hdr
+{
+    LOCAL_PARA_HDR
+    kal_uint32 src_id;
+};
+
+/*******************************************************************************
+* Internal                                                                     *
+*******************************************************************************/
+
+typedef struct {
+    // Header path: //VMOLY/BRANCHES_NR15/NR15.R3.MP/mcu/interface/protocol/general/ps_public_enum.h
+    ps_cause_enum deact_cause, mod_cause;
+}ddm_deact_res_info_struct;
+
+typedef struct {
+    iwlan_ran_e ran;
+
+    union {
+        ddm_deact_res_info_struct ddm_res_info;
+//        n3x_deact_res_info_struct data4_res_info;
+    }res;
+}ran_deact_res_info;
+
+typedef union {
+    ran_deact_res_info ran_deact_res[RPL_PRIO_CNT + 1];
+}deact_res_info_struct;
+
+
+/*******************************************************************************
+* User to D2CM REQ                                                             *
+*******************************************************************************/
+
+// MSG_ID_D2CM_GET_PDN_PROFILE_REQ
+typedef struct
+{
+    D2CM_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    // => unique key of APN
+    kal_bool apn_present;
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    // => unique key of CID
+    kal_bool cid_present;
+    kal_int32 cid;
+    // => non-key values
+    kal_uint32 flag;
+
+    /* operater part */
+    kal_uint32 mcc_mnc;
+    union
+    {
+        struct
+        {
+            kal_uint32 apncl;
+        }vzw;
+    }op;
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_get_pdn_profile_req_struct;
+
+
+// MSG_ID_D2CM_ACT_DATA_CALL_REQ
+typedef struct
+{
+    kal_bool cid_present;
+    kal_int32 cid;
+    kal_bool cgdcont_req_present;
+    at_cgdcont_req_struct cgdcont_req;
+    kal_uint32 tm_flag;
+    kal_bool if_id_present;
+    kal_int32 if_id;
+    kal_bool egpco_req_present;
+    at_egpco_req_struct egpco_req;
+}d2at_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+    kal_int32 cid;
+    kal_int32 p_cid;
+    kal_int32 fb_cid;
+}d2am_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+    kal_bool pcscf_restore;
+}imsm_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+    kal_bool is_defined;
+    kal_char pdp_type[PDP_TYPE_STRING_LEN];
+    kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+    kal_char username[APN_STRING_LEN];
+    kal_char passwd[APN_STRING_LEN];
+    kal_int8 auth_type;
+    ran_filter_struct ran_filter;    // MUST give a value regardless of is_defined, by MTK14037
+    kal_bool qos_param_present;
+    kal_int32 qos_reliability;
+    kal_int32 qos_precedence_class;
+    kal_int32 qos_delay_class;
+    kal_int32 qos_peak_throughput_class;
+    kal_int32 qos_mean_throughput_class;
+}bip_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+    kal_int32 if_id;
+    kal_uint32 bearer_bitmask;
+    kal_bool egpco_req_present;
+    at_egpco_req_struct egpco_req;
+}l5updn_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+    D2CM_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    kal_char apn_type[APN_TYPE_STRING_LEN];
+    kal_uint32 suff_cond;
+    kal_uint32 flag;
+    d2cm_ipv4v6_fb_pref_enum ipv4v6_fb_pref;
+    ran_filter_struct ran_filter;
+
+    /* ursp part */
+    struct
+    {
+        kal_bool is_match_all;
+        kal_uint8 dnn_len;
+        kal_char dnn[URSP_TDC_LEN_DNN];    // APN in TS 23.003
+        kal_uint8 os_id[URSP_TDC_LEN_OS_ID];    // UUID in RFC 4122
+        kal_uint8 app_id_len;
+        kal_uint8 app_id[URSP_TDC_LEN_OS_APP_ID];
+        kal_uint8 ipv4_addr[URSP_TDC_LEN_IPV4_REMOTE_ADDR];
+        kal_uint8 ipv4_mask[URSP_TDC_LEN_IPV4_REMOTE_MASK];
+        kal_uint8 ipv6_addr[URSP_TDC_LEN_IPV6_REMOTE_ADDR];
+        kal_uint8 ipv6_prefix_len;
+        kal_uint8 prot_id_next_hdr;
+        kal_uint16 single_remote_port;
+        kal_uint16 min_remote_port;
+        kal_uint16 max_remote_port;
+        kal_uint8 dst_fqdn_len;
+        kal_uint8 dst_fqdn[URSP_TDC_LEN_DST_FQDN];
+    }traffic_desc;
+
+    struct
+    {
+        kal_uint8 ssc_mode;
+        kal_uint8 s_nssai_len;
+        kal_uint8 s_nssai[URSP_RSDC_LEN_S_NSSAI];
+        kal_uint8 dnn_len;
+        kal_uint8 dnn[URSP_TDC_LEN_DNN];    // APN in TS 23.003
+        kal_uint8 pdu_session_type;
+        kal_uint8 pref_access_type;
+    }ue_local_conf;
+    kal_uint32 ursp_eval_flag;
+
+    /* custom part */
+    /* Since AP fully controls APN settings in Gen93, this part can create a new APN setting, but cannot overwrite an existing one. */
+    kal_bool has_custom;
+    kal_char pdp_type[PDP_TYPE_STRING_LEN];
+    kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+    kal_char username[APN_STRING_LEN];
+    kal_char passwd[APN_STRING_LEN];
+    kal_int8 auth_type;
+
+    /* private part */
+    union
+    {
+        d2at_d2cm_act_data_call_req_prv_struct d2at;
+        d2am_d2cm_act_data_call_req_prv_struct d2am;
+        imsm_d2cm_act_data_call_req_prv_struct imsm;
+        bip_d2cm_act_data_call_req_prv_struct bip;
+        l5updn_d2cm_act_data_call_req_prv_struct l5updn;
+    }prv;
+}d2cm_act_data_call_req_struct;
+
+// MSG_ID_D2CM_DEACT_DATA_CALL_REQ
+typedef struct
+{
+    kal_uint32 tm_flag;
+}d2at_d2cm_deact_data_call_req_prv_struct;
+
+typedef d2am_ddm_deact_data_call_req_prv_struct d2am_d2cm_deact_data_call_req_prv_struct;
+
+typedef struct
+{
+    D2CM_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    atcmd_deact_cause_enum reason;
+
+    /* private part */
+    union
+    {
+        d2at_d2cm_deact_data_call_req_prv_struct d2at;
+        d2am_d2cm_deact_data_call_req_prv_struct d2am;
+    }prv;
+}d2cm_deact_data_call_req_struct;
+
+
+// MSG_ID_D2CM_ABORT_DATA_CALL_REQ
+typedef struct
+{
+    kal_uint8 unused;
+}imsm_d2cm_abort_data_call_req_prv_struct;
+
+typedef struct
+{
+    D2CM_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    kal_bool cid_present;
+    kal_int32 cid;
+    atcmd_deact_cause_enum reason;
+
+    /* private part */
+    union
+    {
+        imsm_d2cm_abort_data_call_req_prv_struct imsm;
+    }prv;
+}d2cm_abort_data_call_req_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 !*/
+/* 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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+// MSG_ID_D2CM_RESET_RETRY_TMR_REQ
+typedef struct
+{
+    D2CM_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    kal_uint32 reason;
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_reset_retry_tmr_req_struct;
+
+
+/*******************************************************************************
+* D2CM to User CNF                                                             *
+*******************************************************************************/
+
+// MSG_ID_D2CM_GET_PDN_PROFILE_CNF
+typedef struct
+{
+    D2CM_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_get_pdn_profile_cnf_struct;
+
+
+// MSG_ID_D2CM_ACT_DATA_CALL_CNF
+typedef struct
+{
+    d2cm_act_data_call_ims_info_struct ims_info;    // IMS information for p_cid
+    d2cm_act_data_call_ims_info_struct fb_ims_info;    // IMS information for fb_cid
+}imsm_d2cm_act_data_call_cnf_prv_struct;
+
+typedef struct
+{
+    D2CM_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid, p_cid, fb_cid;    // cid == fb_cid for fallback default bearer; cid == p_cid for default bearer; cid != p_cid for dedicated bearer
+    kal_uint8 p_ded_cid[D2CM_CID_BITMAP_SIZE], fb_ded_cid[D2CM_CID_BITMAP_SIZE]; // a bitmap
+    d2cm_act_data_call_ip_info_struct ip_info;    // IP address for p_cid
+    d2cm_act_data_call_net_info_struct net_info;    // Internet information for p_cid
+    d2cm_act_data_call_if_info_struct if_info;    // interface information for p_cid
+    d2cm_act_data_call_ran_info_struct ran_info;    // RAN info of non-3GPP for p_cid
+    d2cm_act_data_call_ip_info_struct fb_ip_info;    // IP address for fb_cid
+    d2cm_act_data_call_net_info_struct fb_net_info;    // Internet information for fb_cid
+    d2cm_act_data_call_if_info_struct fb_if_info;    // interface information for fb_cid
+    d2cm_act_data_call_ran_info_struct fb_ran_info;    // RAN info of non-3GPP for fb_cid
+    d2cm_act_data_call_retry_info_struct retry_info;    // retry timer for APN
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        imsm_d2cm_act_data_call_cnf_prv_struct imsm;
+    }prv;
+}d2cm_act_data_call_cnf_struct;
+/* IMSM_INTERMEDIATE_CNF share the same structure*/
+typedef d2cm_act_data_call_cnf_struct d2cm_netif_send_imsm_intermediate_cnf_struct;
+
+// MSG_ID_D2CM_DEACT_DATA_CALL_CNF
+typedef struct
+{
+    D2CM_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_deact_data_call_cnf_struct;
+
+
+// MSG_ID_D2CM_ABORT_DATA_CALL_CNF
+typedef struct
+{
+    D2CM_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    kal_bool cid_present;
+    kal_int32 cid;
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_abort_data_call_cnf_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 !*/
+/* 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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+// MSG_ID_D2CM_RESET_RETRY_TMR_CNF
+typedef struct
+{
+    D2CM_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_reset_retry_tmr_cnf_struct;
+
+
+/*******************************************************************************
+* D2CM to User IND                                                             *
+*******************************************************************************/
+
+// MSG_ID_D2CM_GET_PDN_PROFILE_IND
+// ---- TO_BE_REMOVED ----
+typedef struct
+{
+    ran_info_struct ran_info;
+}bip_d2cm_get_pdn_profile_ind_prv_struct;
+// ++++ TO_BE_REMOVED ++++
+
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* static part */
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    kal_char apn_type[APN_TYPE_LIST_STRING_LEN];
+    kal_char pdp_type[PDP_TYPE_STRING_LEN];
+    kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+    kal_char username[APN_STRING_LEN];
+    kal_char passwd[APN_STRING_LEN];
+    kal_int8 auth_type;
+    kal_uint32 bearer_bitmask;
+
+    /* dynamic part */
+    d2cm_pdn_state_enum state;
+    kal_uint32 flag;
+    kal_int32 p_cid, fb_cid;
+    kal_uint8 p_ded_cid[D2CM_CID_BITMAP_SIZE], fb_ded_cid[D2CM_CID_BITMAP_SIZE]; // a bitmap
+    kal_char real_apn[APN_STRING_LEN];
+    kal_int32 engaged_apn_idx;
+    kal_char engaged_apn_type[APN_TYPE_STRING_LEN];
+    kal_char engaged_pdp_type[PDP_TYPE_STRING_LEN];
+    kal_uint32 num_of_p_cid_usr;
+    module_type p_cid_usr_list[D2CM_MAX_NUM_OF_USR];
+    kal_uint32 num_of_fb_cid_usr;
+    module_type fb_cid_usr_list[D2CM_MAX_NUM_OF_USR];
+
+    /* operater part */
+    struct
+    {
+        struct
+        {
+            kal_uint32 wapn;
+            kal_uint32 apncl;
+            kal_uint32 apned;
+            kal_uint32 max_conn;
+            kal_uint32 max_conn_t;
+            kal_uint32 wait_time;
+        }vzw;
+
+        struct
+        {
+            kal_uint32 inact_time;
+        }sprint;
+    }op;
+
+    /* private part */
+    struct
+    {
+        bip_d2cm_get_pdn_profile_ind_prv_struct bip;    // ==== TO_BE_REMOVED ====
+    }prv;
+}d2cm_get_pdn_profile_ind_struct;
+
+
+// MSG_ID_D2CM_PDN_PROFILE_CHG_IND
+typedef d2cm_get_pdn_profile_ind_struct d2cm_pdn_profile_chg_ind_struct;
+
+
+// MSG_ID_D2CM_ACT_DATA_CALL_IND
+typedef struct
+{
+    cgev_event_enum cgev_event;
+    union
+    {
+        struct
+        {
+            kal_bool                    WLAN_Offload_present;
+            atcmd_WLAN_Offload_enum     WLAN_Offload;
+        }nw_pdn_act;
+
+        struct
+        {
+            kal_bool                    reason_present;
+            atcmd_reason_enum           reason;
+            kal_bool                    WLAN_Offload_present;
+            atcmd_WLAN_Offload_enum     WLAN_Offload;
+        }me_pdn_act;
+
+        struct
+        {
+            kal_bool                    event_type_present;
+            atcmd_event_type_enum       event_type;
+            kal_bool                    WLAN_Offload_present;
+            atcmd_WLAN_Offload_enum     WLAN_Offload;
+        }nw_act;
+
+        struct
+        {
+            kal_bool                    event_type_present;
+            atcmd_event_type_enum       event_type;
+            kal_bool                    WLAN_Offload_present;
+            atcmd_WLAN_Offload_enum     WLAN_Offload;
+        }me_act;
+    }cgev_info;
+}d2at_d2cm_act_data_call_ind_prv_struct;
+
+typedef struct
+{
+    d2cm_act_data_call_ims_info_struct ims_info;    // IMS information for p_cid
+}imsm_d2cm_act_data_call_ind_prv_struct;
+
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid, p_cid, fb_cid;    // cid == fb_cid for fallback default bearer; cid == p_cid for default bearer; cid != p_cid for dedicated bearer
+    kal_uint8 p_ded_cid[D2CM_CID_BITMAP_SIZE], fb_ded_cid[D2CM_CID_BITMAP_SIZE]; // a bitmap
+    d2cm_act_data_call_ip_info_struct ip_info;    // for IP address
+    d2cm_act_data_call_net_info_struct net_info;    // for Internet information
+    d2cm_act_data_call_if_info_struct if_info;    // for interface information
+    d2cm_act_data_call_ran_info_struct ran_info;    // RAN info of non-3GPP
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        d2at_d2cm_act_data_call_ind_prv_struct d2at;
+        imsm_d2cm_act_data_call_ind_prv_struct imsm;
+    }prv;
+}d2cm_act_data_call_ind_struct;
+
+
+// MSG_ID_D2CM_DEACT_DATA_CALL_IND
+typedef struct
+{
+    cgev_event_enum cgev_event;
+    union
+    {
+        struct
+        {
+            kal_bool                    WLAN_Offload_present;
+            atcmd_WLAN_Offload_enum     WLAN_Offload;
+        }nw_pdn_deact;
+
+        struct
+        {
+            int unused;
+        }me_pdn_deact;
+
+        struct
+        {
+            kal_bool                    event_type_present;
+            atcmd_event_type_enum       event_type;
+            kal_bool                    WLAN_Offload_present;
+            atcmd_WLAN_Offload_enum     WLAN_Offload;
+        }nw_deact;
+
+        struct
+        {
+            kal_bool                    event_type_present;
+            atcmd_event_type_enum       event_type;
+        }me_deact;
+
+        struct
+        {
+            kal_bool                    PDP_type_present;
+            kal_uint8                   PDP_type[PDP_TYPE_STRING_LEN];
+            kal_bool                    PDP_addr_present;
+            at_addr_struct              PDP_addr;
+        }nw_react;
+    }cgev_info;
+}d2at_d2cm_deact_data_call_ind_prv_struct;
+
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    kal_int32 res;
+
+    deact_res_info_struct res_info;
+
+    /* private part */
+    union
+    {
+        d2at_d2cm_deact_data_call_ind_prv_struct d2at;
+    }prv;
+}d2cm_deact_data_call_ind_struct;
+
+
+// MSG_ID_D2CM_ABORT_DATA_CALL_IND
+typedef d2at_d2cm_deact_data_call_ind_prv_struct d2at_d2cm_abort_data_call_ind_prv_struct;
+
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    kal_bool cid_present;
+    kal_int32 cid;
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        d2at_d2cm_abort_data_call_ind_prv_struct d2at;
+    }prv;
+}d2cm_abort_data_call_ind_struct;
+
+
+// MSG_ID_D2CM_MOD_DATA_CALL_IND
+typedef struct
+{
+    cgev_event_enum cgev_event;
+    union
+    {
+        struct
+        {
+            kal_bool                    change_reason_present;
+            kal_uint32                  change_reason;
+            kal_bool                    event_type_present;
+            atcmd_event_type_enum       event_type;
+            kal_bool                    WLAN_Offload_present;
+            atcmd_WLAN_Offload_enum     WLAN_Offload;
+        }nw_mod;
+
+        struct
+        {
+            kal_bool                    change_reason_present;
+            kal_uint32                  change_reason;
+            kal_bool                    event_type_present;
+            atcmd_event_type_enum       event_type;
+            kal_bool                    WLAN_Offload_present;
+            atcmd_WLAN_Offload_enum     WLAN_Offload;
+        }me_mod;
+    }cgev_info;
+}d2at_d2cm_mod_data_call_ind_prv_struct;
+
+typedef struct
+{
+    d2cm_act_data_call_ims_info_struct ims_info;    // IMS information for cid
+}imsm_d2cm_mod_data_call_ind_prv_struct;
+
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid, p_cid;
+    d2cm_act_data_call_ip_info_struct ip_info;    // for IP address
+    d2cm_act_data_call_net_info_struct net_info;    // for Internet information
+    d2cm_act_data_call_if_info_struct if_info;    // for interface information
+    d2cm_act_data_call_ran_info_struct ran_info;    // RAN info of non-3GPP
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        d2at_d2cm_mod_data_call_ind_prv_struct d2at;
+        imsm_d2cm_mod_data_call_ind_prv_struct imsm;
+    }prv;
+}d2cm_mod_data_call_ind_struct;
+
+
+// MSG_ID_D2CM_BYPASS_IND
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    // => unique key of APN
+    kal_bool apn_present;
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    // => unique key of CID
+    kal_bool cid_present;
+    kal_int32 cid;
+    d2cm_bypass_event_enum event;
+    local_para_struct *local_para_ptr;    /* local_para pointer */
+    peer_buff_struct *peer_buff_ptr;    /* peer_buff pointer */
+
+    /* private part */
+    // N/A
+}d2cm_bypass_ind_struct;
+
+
+// MSG_ID_D2CM_HO_IND
+typedef d2pm_d2rm_pdn_ho_notify_ind_struct d2cm_ho_ind_struct;
+typedef d2pm_d2rm_pdn_ho_notify_ind_struct d2cm_ho_data_call_ind_struct;
+
+// MSG_ID_D2CM_DATA_CALL_INFO_IND
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 ps_id;
+    kal_char prefix[APN_STRING_LEN];
+    kal_char info[APN_STRING_LEN >> 1];
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_data_call_info_ind_struct;
+
+// MSG_ID_D2CM_RESET_RETRY_TMR_IND
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_bool apn_present;
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    d2cm_reset_retry_tmr_retry_info_struct retry_info;
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_reset_retry_tmr_ind_struct;
+
+// MSG_ID_D2CM_VOLTE_CFG_CHANGE_IND
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_bool apn_present;
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    d2cm_reset_retry_tmr_retry_info_struct retry_info;
+
+}d2cm_volte_cfg_change_ind_struct;
+
+// MSG_ID_D2CM_EVENT_IND
+typedef struct
+{
+    D2CM_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    d2cm_event_enum event;
+    struct
+    {
+        // unique key of APN
+        kal_bool apn_present;
+        kal_char apn[APN_STRING_LEN];
+        kal_int32 apn_idx;
+        // unique key of CID
+        kal_bool cid_present;
+        kal_int32 cid;
+    }info;
+}d2cm_event_ind_struct;
+
+
+/*******************************************************************************
+* User to D2CM RSP                                                             *
+*******************************************************************************/
+
+// MSG_ID_D2CM_ACT_DATA_CALL_RSP
+typedef struct
+{
+    D2CM_RSP_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_act_data_call_rsp_struct;
+
+
+// MSG_ID_D2CM_DEACT_DATA_CALL_RSP
+typedef struct
+{
+    D2CM_RSP_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    kal_int32 res;
+
+    /* private part */
+    union
+    {
+        kal_uint8 unused;
+    }prv;
+}d2cm_deact_data_call_rsp_struct;
+
+
+// MSG_ID_D2CM_BYPASS_RSP
+typedef struct
+{
+    D2CM_RSP_LOCAL_PARA_HDR
+
+    /* common part */
+    // => unique key of APN
+    kal_bool apn_present;
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    // => unique key of CID
+    kal_bool cid_present;
+    kal_int32 cid;
+    d2cm_bypass_event_enum event;
+    local_para_struct *local_para_ptr;    /* local_para pointer */
+    peer_buff_struct *peer_buff_ptr;    /* peer_buff pointer */
+
+    /* private part */
+    // N/A
+}d2cm_bypass_rsp_struct;
+
+
+/*******************************************************************************
+* D2CM NetIF by Verit Chen: Debug Dump                                                       *
+*******************************************************************************/
+
+typedef enum {
+    D2CM_NETIF_RA_ERROR                 = -1,
+    D2CM_NETIF_RA_DEFAULT               = 0,
+    D2CM_NETIF_RA_SUCCESS               = 1,
+    D2CM_NETIF_RA_INITIAL_FAIL          = 2,
+    D2CM_NETIF_RA_REFRESH_FAIL          = 3,
+    D2CM_NETIF_RA_OOXX                  = 0x7FFFFFFF
+} d2cm_netif_ra_state_enum;
+
+typedef enum {
+    D2CM_NETIF_IF_STATE_DOWN            = 0,
+    D2CM_NETIF_IF_STATE_UP              = 1,
+
+    D2CM_NETIF_IF_STATE_DOWNING         = 10,
+    D2CM_NETIF_IF_STATE_UPING           = 11,
+    D2CM_NETIF_IF_STATE_OOXX            = 0x7FFFFFFF
+} d2cm_netif_interface_state_enum;
+
+typedef struct {
+    kal_uint32      is_set;
+    kal_uint8       addr[4];
+} d2cm_netif_interface_ipv4_info_t;
+
+typedef struct {
+    kal_uint32      is_set;
+    kal_uint8       addr[16];
+    kal_int32       prefix;
+} d2cm_netif_interface_ipv6_info_t;
+
+typedef struct {
+    d2cm_netif_interface_state_enum     state;
+    kal_uint16        is_use;
+    kal_uint8         is_set_v4_addr;
+    kal_uint8         is_set_v6_addr;
+} d2cm_netif_interface_status;
+
+typedef struct {
+    d2cm_netif_interface_status       md_if_status;
+    d2cm_netif_interface_status       ap_if_status;
+    
+    kal_int32                         ap_addr_type;
+    d2cm_netif_ra_state_enum          ra_state;
+
+    kal_bool                          mtu_present;
+    kal_uint32                        mtu;
+            
+    d2cm_netif_interface_ipv4_info_t  md_pco_v4;
+    d2cm_netif_interface_ipv6_info_t  md_pco_v6;
+    d2cm_netif_interface_ipv6_info_t  global_v6;
+} d2cm_netif_interface_info_t;
+
+typedef struct {
+    kal_uint8                       is_used;
+    kal_uint8                       ps_id;
+    kal_uint16                      transaction_id;
+    kal_uint32                      interface_id;
+    d2cm_netif_interface_info_t     info;
+} d2cm_netif_interface_dump_item_t;
+
+#define D2CM_NETIF_MAX_INTERFACE_ID        (20)
+#define D2CM_NETIF_MAX_DUMP_INTERFACE_ID   (D2CM_NETIF_MAX_INTERFACE_ID) //(8)
+
+// MSG_ID_D2CM_NETIF_CONTEXT_DUMP_IND
+typedef struct
+{
+    LOCAL_PARA_HDR 
+    
+    kal_int32                           interface_id;
+    kal_int32                           num;
+    kal_char                            str[32];
+    d2cm_netif_interface_dump_item_t    item[D2CM_NETIF_MAX_DUMP_INTERFACE_ID];
+}d2cm_netif_context_dump_ind_struct;
+
+typedef struct {
+    D2CM_IND_LOCAL_PARA_HDR
+
+    module_type mod_id; //send to which mod
+
+    kal_int32 cid;
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    ddm_apn_type_enum apn_type;
+
+    ip_info_struct ip_info; 
+    net_info_struct net_info;
+    if_info_struct if_info;
+    kal_int32 res;
+} l5updn_dup_act_data_call_ind_struct;
+
+typedef struct {
+    D2CM_IND_LOCAL_PARA_HDR
+
+    module_type mod_id; //send to which mod
+
+    kal_int32 cid;
+    kal_int32 res;
+} l5updn_dup_deact_data_call_ind_struct;
+#endif
diff --git a/mcu/protocol/interface/ddm/d2pm_public_defs.h b/mcu/protocol/interface/ddm/d2pm_public_defs.h
new file mode 100644
index 0000000..e2eb52b
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2pm_public_defs.h
@@ -0,0 +1,122 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * d2pm_public_defs.h
+ *
+ * Project:
+ * --------
+ * 
+ *
+ * Description:
+ * ------------
+ *   
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __D2PM_PUBLIC_DEFS_H__
+#define __D2PM_PUBLIC_DEFS_H__
+
+#include "atcmd_enum.h"
+#include "ps_public_enum.h"
+#include "ddm_enum.h"
+
+// Type definitions
+typedef enum
+{
+    // a single CID or the final CID 
+    D2PM_RES_NONE = -2, 
+    D2PM_RES_FAIL = -1, 
+    D2PM_RES_SUCC = 0, 
+    // a subsequent CID
+    D2PM_RES_FAIL_ABORT = 1, 
+    D2PM_RES_SUCC_ABORT = 2, 
+    D2PM_RES_FAIL_CONT = 3, 
+    D2PM_RES_SUCC_CONT = 4, 
+    // otherwise
+    D2PM_RES_REJ = 5, 
+    D2PM_RES_RETRY = 6, 
+    D2PM_RES_MAX = 0x7FFFFFFF
+}d2pm_res_enum;
+
+typedef enum
+{
+    D2PM_AUTH_TYPE_NONE = 0, 
+    D2PM_AUTH_TYPE_PAP = 1, 
+    D2PM_AUTH_TYPE_CHAP = 2, 
+    D2PM_AUTH_TYPE_PAP_CHAP = 3, 
+}d2pm_auth_type_enum;
+
+// Macro
+#define D2PM_UNSOLICITED    (DDM_UNSOLICITED + 5566)
+#define D2PM_INVAL_CID    (-1)
+#define D2PM_MIN_CID    ((D2PM_INVAL_CID) + 1)
+#define D2PM_MAX_CID    (PS_MAX_CID)
+#define D2PM_CID_BITMAP_SIZE (((D2PM_MAX_CID - D2PM_MIN_CID) >> 3) + 1)
+#define D2PM_INVAL_APN_IDX    (-1)
+#define D2PM_NW_ASSIGNED_APN_IDX    (0x0001FE00)
+
+// Functions
+// => Fundamental prototype
+#define vl_bitmap_set(bitmap_ptr, size, bit_num)    ((size) < ((bit_num) >> 3) + 1 ? NULL : \
+                                                     (*(((kal_uint8*)(bitmap_ptr)) + ((bit_num) >> 3)) |= (1 << ((bit_num) & 7)), (bitmap_ptr)))
+#define vl_bitmap_reset(bitmap_ptr, size, bit_num)    ((size) < ((bit_num) >> 3) + 1 ? NULL : \
+                                                       (*(((kal_uint8*)(bitmap_ptr)) + ((bit_num) >> 3)) &= ~(1 << ((bit_num) & 7)), (bitmap_ptr)))
+#define vl_bitmap_get(bitmap_ptr, size, bit_num)    ((size) < ((bit_num) >> 3) + 1 ? 0 != 0 : \
+                                                     ((*(((kal_uint8*)(bitmap_ptr)) + ((bit_num) >> 3)) & (1 << ((bit_num) & 7))) == 0 ? 0 != 0 : 0 == 0))
+#define cid_bitmap_set(bitmap_ptr, size, cid)    ((cid) < D2PM_MIN_CID || (cid) > D2PM_MAX_CID || (size) < (((cid) - D2PM_MIN_CID) >> 3) + 1 ? NULL : \
+                                                  (vl_bitmap_set((bitmap_ptr), (size), (cid) - D2PM_MIN_CID)))
+#define cid_bitmap_reset(bitmap_ptr, size, cid)    ((cid) < D2PM_MIN_CID || (cid) > D2PM_MAX_CID || (size) < (((cid) - D2PM_MIN_CID) >> 3) + 1 ? NULL : \
+                                                  (vl_bitmap_reset((bitmap_ptr), (size), (cid) - D2PM_MIN_CID)))
+#define cid_bitmap_get(bitmap_ptr, size, cid)    ((cid) < D2PM_MIN_CID || (cid) > D2PM_MAX_CID || (size) < (((cid) - D2PM_MIN_CID) >> 3) + 1 ? 0 != 0 : \
+                                                  (vl_bitmap_get((bitmap_ptr), (size), (cid) - D2PM_MIN_CID)))
+#endif
diff --git a/mcu/protocol/interface/ddm/d2pm_struct.h b/mcu/protocol/interface/ddm/d2pm_struct.h
new file mode 100644
index 0000000..09f193d
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2pm_struct.h
@@ -0,0 +1,85 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * d2pm_public_defs.h
+ *
+ * Project:
+ * --------
+ * 
+ *
+ * Description:
+ * ------------
+ *   
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __D2PM_STRUCT_H__
+#define __D2PM_STRUCT_H__
+
+#include "atcmd_enum.h"
+#include "ddm_enum.h"
+
+typedef struct
+{
+    kal_char apn[APN_STRING_LEN];
+    kal_int32 apn_idx;
+    kal_char apn_type[APN_TYPE_LIST_STRING_LEN];
+    kal_char pdp_type[PDP_TYPE_STRING_LEN];
+    kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+    kal_char username[APN_STRING_LEN];
+    kal_char passwd[APN_STRING_LEN];
+    kal_int8 auth_type;
+    kal_uint32 bearer_bitmask;
+}d2pm_custom_pdn_profile_struct;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2rm_public_defs.h b/mcu/protocol/interface/ddm/d2rm_public_defs.h
new file mode 100644
index 0000000..63fc599
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2rm_public_defs.h
@@ -0,0 +1,73 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+#ifndef __D2RM_PUBLIC_DEFS_H__
+#define __D2RM_PUBLIC_DEFS_H__
+
+#include "iwlan_public_defs.h"
+#include "atcmd_struct.h"
+
+typedef enum {
+    HO_STAT_START = 0,
+    HO_STAT_END,
+    HO_STAT_IP_READY,
+    HO_STAT_MAX = 0x7fffffff,
+} d2rm_ho_state_e;
+
+
+typedef struct {
+    iwlan_ran_e iwlan_ran;
+    atcmd_rat_enum atcmd_rat;
+} ran_info_struct;
+
+typedef enum
+{
+    D2_RAN_FILTER_UNSPEC = 0,
+    D2_RAN_FILTER_CELL   = 1,
+    D2_RAN_FILTER_WLAN   = (1 << 1),
+    D2_RAN_FILTER_DATA_1 = (1 << 2),
+    D2_RAN_FILTER_DATA_2 = (1 << 3),
+    D2_RAN_FILTER_DATA_3 = (1 << 4),
+    D2_RAN_FILTER_DATA_4 = (1 << 5),
+    D2_RAN_FILTER_ALL = 0x7FFFFFFF, // 0xFFFFFFFF may become int64
+} d2_ran_filter_enum;
+
+
+typedef struct {
+    atcmd_rat_enum  atcmd_rat;          // mcu/interface/protocol/l4_c2k/atcmd_enum.h
+    kal_uint32      iwlan_ran_filter;   // Bitmap of d2_ran_filter_enum
+} ran_filter_struct;
+
+#endif //__D2RM_PUBLIC_DEFS_H__
diff --git a/mcu/protocol/interface/ddm/d2um_public_defs.h b/mcu/protocol/interface/ddm/d2um_public_defs.h
new file mode 100644
index 0000000..5f90470
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2um_public_defs.h
@@ -0,0 +1,41 @@
+#ifndef __D2UM_PUBLIC_DEFS_H__
+#define __D2UM_PUBLIC_DEFS_H__
+
+// Compiler flag, NEED_TO_BE_NOTICED, set by the compiler
+// N/A
+
+// Type definition
+typedef enum
+{
+    D2UM_RES_FAIL = -1, 
+    D2UM_RES_NONE, 
+    D2UM_RES_SUCC, 
+    D2UM_RES_MAX = 0x7FFFFFFF
+}d2um_res_enum;
+
+// Macros
+// => Custom
+// => => => Bitmap
+#define D2UM_ATTR_AUTH_MASK    (0x0000000F)
+#define D2UM_ATTR_NO_AUTH    (0x00000000)
+#define D2UM_ATTR_PDN_AUTH    (0x00000001)
+#define D2UM_ATTR_EVENT_AUTH    (0x00000002)
+#define D2UM_ATTR_ADMIN_AUTH    (D2UM_ATTR_AUTH_MASK)
+// => => => Distinct value
+#define D2UM_ATTR_MSG_MASK    (0x000000F0)
+#define D2UM_ATTR_NO_MSG    (0x00000000)
+#define D2UM_ATTR_AT_MSG    (0x00000010)
+#define D2UM_ATTR_ILM_MSG    (0x00000020)
+#define D2UM_ATTR_CB_MSG    (0x00000030)
+#define D2UM_ATTR_NETIF_MASK    (0x00000F00)
+#define D2UM_ATTR_NO_NETIF    (0x00000000)
+#define D2UM_ATTR_AP_NETIF    (0x00000100)
+#define D2UM_ATTR_MD_NETIF    (0x00000200)
+
+// Interface
+// N/A
+
+//Implementation
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2um_struct.h b/mcu/protocol/interface/ddm/d2um_struct.h
new file mode 100644
index 0000000..ed127db
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2um_struct.h
@@ -0,0 +1,56 @@
+#ifndef  __D2UM_STRUCT_H__
+#define  __D2UM_STRUCT_H__
+
+#include "kal_public_defs.h"
+
+// Type definition
+typedef struct d2um_hdr d2um_hdr_t;
+typedef struct d2um_hdr* d2um_hdr_ptr_t;
+
+// Macro
+#define D2UM_REQ_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2UM_CNF_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2UM_IND_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+#define D2UM_RSP_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 src_id;
+
+// Interface
+// N/A
+
+// Implementation
+struct d2um_hdr
+{
+    LOCAL_PARA_HDR
+    kal_uint16 src_id;
+};
+
+/*******************************************************************************
+* User to D2 REQ                                                               *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* D2 to User CNF                                                               *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* D2 to User IND                                                               *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* User to D2 RSP                                                               *
+*******************************************************************************/
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2ut_public_defs.h b/mcu/protocol/interface/ddm/d2ut_public_defs.h
new file mode 100644
index 0000000..28d8f09
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2ut_public_defs.h
@@ -0,0 +1,76 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * d2ut_public_defs.h
+ *
+ * Project:
+ * --------
+ * 
+ *
+ * Description:
+ * ------------
+ *   
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __D2UT_PUBLIC_DEFS_H__
+#define __D2UT_PUBLIC_DEFS_H__
+
+// Type denifitions
+typedef enum
+{
+    D2UT_EVENT_NONE = (0x00000000), 
+    D2UT_EVENT_ACT_DATA_CALL = (0x00000001), 
+    D2UT_EVENT_MAX = (0x7FFFFFFF)
+}d2ut_event_enum;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2ut_struct.h b/mcu/protocol/interface/ddm/d2ut_struct.h
new file mode 100644
index 0000000..09bacd5
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2ut_struct.h
@@ -0,0 +1,82 @@
+/*****************************************************************************
+*  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) 2012
+*
+*  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).
+*
+*****************************************************************************/
+
+#ifndef  __D2UT_STRUCT_H__
+#define  __D2UT_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "d2ut_public_defs.h"
+
+// Type definition
+// N/A
+
+// Macros
+#define D2UT_REQ_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint32 src_id;
+
+#define D2UT_CNF_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint32 src_id;
+
+#define D2UT_IND_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint32 src_id;
+
+#define D2UT_RSP_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint32 src_id;
+
+// Functions
+// N/A
+
+// Implementation
+// N/A
+
+/*******************************************************************************
+* User to D2UT REQ                                                             *
+*******************************************************************************/
+
+// MSG_ID_D2UT_TEST_REQ
+typedef struct
+{
+    D2UT_REQ_LOCAL_PARA_HDR
+
+    d2ut_event_enum event;
+
+}d2ut_test_req_struct;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/ddm_common_struct.h b/mcu/protocol/interface/ddm/ddm_common_struct.h
new file mode 100644
index 0000000..456c67d
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ddm_common_struct.h
@@ -0,0 +1,319 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ddm_common_struct.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             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!
+ * 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 _DDM_COMMON_STRUCT_H
+#define _DDM_COMMON_STRUCT_H
+
+#include "kal_public_defs.h"
+#include "d2pm_public_defs.h"
+#include "atcmd_struct.h"
+#include "netinfo_common_struct.h"
+#include "ps_public_enum.h"
+
+typedef struct
+{
+    at_token_parse_result_enum              S_NSSAI_parse_result;
+    at_s_nssai_struct                       S_NSSAI;                                                            // string type
+    at_token_parse_result_enum              SSC_mode_parse_result;
+    atcmd_SSC_mode_enum                     SSC_mode;                                                           // integer type
+    at_token_parse_result_enum              Access_type_parse_result; 
+    atcmd_Access_type_enum                  Access_type;                                                        // integer type 
+} at_eapnset_UE_local_config_struct;
+
+#define MAX_PCSCF_NUMBER 6
+
+typedef enum {
+    DDM_APN_TYPE_UNKNOWN      = 0x00000000,
+    DDM_APN_TYPE_DEFAULT      = 0x00000001,
+    DDM_APN_TYPE_IMS          = 0x00000002,
+    DDM_APN_TYPE_MMS          = 0x00000004,
+    DDM_APN_TYPE_SUPL         = 0x00000008,
+    DDM_APN_TYPE_DUN          = 0x00000010,
+//    DDM_APN_TYPE_HIPRI        = 0x00000020,
+    DDM_APN_TYPE_FOTA         = 0x00000040,
+//    DDM_APN_TYPE_CBS          = 0x00000080,
+    DDM_APN_TYPE_EMERGENCY    = 0x00000100,
+    DDM_APN_TYPE_IA           = 0x00000200,
+//    DDM_APN_TYPE_DM           = 0x00000400,
+//    DDM_APN_TYPE_WAP          = 0x00000800,
+//    DDM_APN_TYPE_NET          = 0x00001000,
+//    DDM_APN_TYPE_CMMAIL       = 0x00002000,
+//    DDM_APN_TYPE_TETHERING    = 0x00004000,
+//    DDM_APN_TYPE_RCSE         = 0x00008000,
+    DDM_APN_TYPE_XCAP         = 0x00010000,
+//    DDM_APN_TYPE_RCS          = 0x00020000,
+    DDM_APN_TYPE_RCS_PCSCF    = 0x00040000,
+    DDM_APN_TYPE_VSIM         = 0x00080000,
+//    DDM_APN_TYPE_BIP          = 0x00100000,
+    DDM_APN_TYPE_PTT          = 0x00200000,
+    DDM_APN_TYPE_NW_ASSIGNED  = 0x80000000,
+} ddm_apn_type_enum;
+
+/* this is a bitmap */
+typedef enum {
+    PDX_ATTR_UNKNOWN                = 0x00000000,
+    PDX_ATTR_NOT_NOTIFY             = 0x00000001,
+    PDX_ATTR_IS_DANGLING            = 0x00000002,
+    PDX_ATTR_IS_IA                  = 0x00000004,
+} pdx_attribute_enum;
+
+typedef enum {
+    DDM_PDP_TYPE_NONE = 0x0,
+    DDM_PDP_TYPE_V4 = 0x1,
+    DDM_PDP_TYPE_V6 = 0x2,
+    DDM_PDP_TYPE_V4V6 = 0x3,    /* V4 | V6 */
+} ddm_pdp_type_enum;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint32 sbp_id;
+    kal_uint8  mcc[MAX_MCC_STR_LEN];
+    kal_uint8  mnc[MAX_MNC_STR_LEN];
+} ddm_dsbp_ready_ind_struct;
+
+typedef struct {
+    kal_uint32  apn_type_activate;  /* ddm_apn_type */
+    kal_uint32  apn_type_all;       /* ddm_apn_type */
+} apn_type_info_struct;
+
+typedef struct {
+    kal_int32 p_cid;    // to activate a dedicated bearer
+    kal_int32 fb_cid;   // to activate an IPv4v6 fallback bearer
+    kal_int32 old_cid;  // for SSC mode 3
+} cid_info_struct;
+
+typedef struct {
+    kal_bool cgdcont_req_present;
+    at_cgdcont_req_struct cgdcont_req;
+    kal_bool egpco_req_present;
+    at_egpco_req_struct egpco_req;
+} d2_legacy_at_struct;
+
+typedef struct {
+     kal_uint32 network_interface_id;
+} network_interface_id_info_struct;
+
+typedef enum
+{
+    //   DDM_RES_SUCC_RETRY, not exist
+    DDM_RES_NONE = D2PM_RES_NONE,
+    DDM_RES_FAIL = D2PM_RES_FAIL,
+    DDM_RES_SUCC = D2PM_RES_SUCC,
+    // a subsequent CID
+    DDM_RES_FAIL_ABORT = D2PM_RES_FAIL_ABORT,
+    DDM_RES_SUCC_ABORT = D2PM_RES_SUCC_ABORT,
+    DDM_RES_FAIL_CONT = D2PM_RES_FAIL_CONT,
+    DDM_RES_SUCC_CONT = D2PM_RES_SUCC_CONT,
+    // otherwise
+    DDM_RES_REJ = D2PM_RES_REJ,
+    DDM_RES_RETRY = D2PM_RES_RETRY,
+    DDM_RES_MAX = 0x7FFFFFFF
+}ddm_res_enum;
+
+// => Common strcuture
+typedef atcmd_request_type_enum ddm_req_type_enum;
+//typedef at_cgpaddr_ind_struct ddm_ip_info_struct;    // [GT] NOT to use at_cmd format for Wi-Fi, etc.
+typedef network_ip_info_struct ddm_ip_info_struct;
+//typedef at_cgcontrdp_ind_struct ddm_net_info_struct;    // [GT] NOT to use at_cmd format for Wi-Fi, etc.
+typedef net_info_struct ddm_net_info_struct;
+typedef retry_info_struct ddm_retry_info_struct;
+
+typedef ims_info_struct ddm_ims_info_struct;
+// => AT Command interface
+typedef at_cgact_req_struct ddm_get_data_call_list_req_struct;
+typedef at_cgact_ind_struct ddm_get_data_call_list_cnf_struct;
+typedef at_cgact_ind_struct ddm_get_data_call_list_ind_struct;
+typedef at_cgcontrdp_req_struct ddm_get_dynamic_param_req_struct;
+typedef at_cgcontrdp_ind_struct ddm_get_dynamic_param_cnf_struct;
+typedef at_cgcontrdp_ind_struct ddm_get_dynamic_param_ind_struct;
+typedef at_cgscontrdp_req_struct ddm_get_secondary_dynamic_param_req_struct;
+typedef at_cgscontrdp_ind_struct ddm_get_secondary_dynamic_param_cnf_struct;
+typedef at_cgscontrdp_ind_struct ddm_get_secondary_dynamic_param_ind_struct;
+typedef at_cgpaddr_req_struct ddm_get_pdp_address_req_struct;
+typedef at_cgpaddr_ind_struct ddm_get_pdp_address_cnf_struct;
+typedef at_cgpaddr_ind_struct ddm_get_pdp_address_ind_struct;
+typedef at_cgeqosrdp_req_struct ddm_get_qos_req_struct;
+typedef at_cgeqosrdp_ind_struct ddm_get_qos_cnf_struct;
+typedef at_cgeqosrdp_ind_struct ddm_get_qos_ind_struct;
+typedef at_c5gqosrdp_req_struct ddm_get_5gqos_req_struct;
+typedef at_c5gqosrdp_ind_struct ddm_get_5gqos_cnf_struct;
+typedef at_c5gqosrdp_ind_struct ddm_get_5gqos_ind_struct;
+typedef at_cgtftrdp_req_struct ddm_get_tft_req_struct;
+typedef at_cgtftrdp_ind_struct ddm_get_tft_cnf_struct;
+typedef at_cgtftrdp_ind_struct ddm_get_tft_ind_struct;
+typedef at_eglnkpf_req_struct ddm_set_packet_filter_req_struct;
+typedef at_cgtftrdp_ind_struct ddm_set_packet_filter_cnf_struct;
+typedef at_cgtftrdp_ind_struct ddm_set_packet_filter_ind_struct;
+typedef at_eglnkpf_req_struct ddm_get_packet_filter_req_struct;
+typedef at_eglnkpf_ind_struct ddm_get_packet_filter_cnf_struct;
+typedef at_eglnkpf_ind_struct ddm_get_packet_filter_ind_struct;
+typedef at_cgcmod_req_struct ddm_modify_data_call_req_struct;
+typedef at_cmd_cnf_struct ddm_modify_data_call_cnf_struct;    // [GT] at_cgcmod_req_struct does NOT exist
+typedef at_cmd_cnf_struct ddm_modify_data_call_ind_struct;    // [GT] at_cgcmod_req_struct does NOT exist
+
+#endif // _DDM_COMMON_STRUCT_H
+
+
diff --git a/mcu/protocol/interface/ddm/ddm_enum.h b/mcu/protocol/interface/ddm/ddm_enum.h
new file mode 100644
index 0000000..438caae
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ddm_enum.h
@@ -0,0 +1,114 @@
+#ifndef _DDM_ENUM_H
+#define _DDM_ENUM_H
+#include "../l4misc/l4c_common_enum.h"
+#include "sim_ps_enum.h"
+#include "module_id_range.h"
+
+#ifdef __CMUX_SUPPORT__
+#include "cmux_vp_num.h"
+#define CMUX_CHANNELS_NUM ((CMUX_VP_NUM_FOR_SINGLE_SIM * MAX_SIM_NUM) + CMUX_VPEX_TOTAL_NUM)
+#else
+#define CMUX_CHANNELS_NUM (1)
+#endif
+
+#define DDM_MAX_NUM_OF_APN    (16)
+#define APN_TYPE_STRING_LEN    (32)
+#define APN_TYPE_LIST_STRING_LEN    (256)
+
+#define DDM_SRC_ID_ALL L4B_MAX_CHANNEL_NUMBER // L4B_MAX_CHANNEL_NUMBER is at least larger than 29
+#define DDM_RESERVE_SRC_NUM (30)
+#define DDM_SRC_ID_NUM (DDM_SRC_ID_ALL - DDM_RESERVE_SRC_NUM)
+
+#define D2_CHANNELS_NUM (8)
+#define DDM_CHANNELS_NUM (4)
+
+#define D2_ICCID_STR_LEN   21
+#define D2_IMSI_STR_LEN    16
+#define D2_GID1_LEN        NUM_GID1
+#define D2_GID2_LEN        NUM_GID2
+#define D2_FULL_PNN_LEN    50
+#define D2_GSM_SPN_LEN     LEN_OF_SPN
+#define D2_C2K_SPN_LEN     35
+#define D2_MCF_MTU_CFG_ENTRY_NUM 10
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+typedef enum
+{
+    DDM_SRC_CMUX_START = 0,
+    DDM_SRC_CMUX_END = DDM_SRC_CMUX_START + (CMUX_CHANNELS_NUM - 1),
+    DDM_SRC_D2_START,
+    DDM_SRC_D2AM_IA_REUSE = DDM_SRC_D2_START,
+    DDM_SRC_D2_IMSM,
+    DDM_SRC_D2_END = DDM_SRC_D2_START + (D2_CHANNELS_NUM - 1),
+    DDM_SRC_START,
+    DDM_SRC_FB_IPv4,
+    DDM_SRC_FB_IPv6,
+    DDM_SRC_END = DDM_SRC_START + (DDM_CHANNELS_NUM - 1),
+    DDM_ALL_NUM,
+} ddm_source_id_enum;
+
+typedef enum
+{
+    DDM_SRC_DDM_START = 0,
+    DDM_SRC_DDM_END = DDM_SRC_DDM_START + (DDM_SRC_ID_NUM - 1),
+    DDM_SRC_RESERVE_START,
+    DDM_SRC_IA_DEFINE = DDM_SRC_RESERVE_START,
+    DDM_SRC_IA_GET_NET_INFO,
+    DDM_SRC_CGEV_QUERY,
+    DDM_SRC_REDEACT_PDN,
+    DDM_SRC_DEACT_ONE_PDN,
+    DDM_SRC_PCO_UPDATE,
+    DDM_SRC_PCO_UPDATE_NW_MODIFY,
+    DDM_SRC_DEACT_AND_ACT_PDN,
+    DDM_SRC_IA_FALLBACK,
+    DDM_SRC_GRT_REQ,
+    DDM_SRC_QUERY_PS_DATA_OFF,
+    DDM_SRC_SET_CGCMOD,
+    DDM_SRC_FALLBACK_IPv4,
+    DDM_SRC_FALLBACK_IPv6,
+    DDM_SRC_FALLBACK_DEACT_PDN,
+    DDM_SRC_QOS_CHECK,
+    DDM_SRC_QOS_RELIABILITY,
+    DDM_SRC_QOS_CHECK_GET_APN,
+    DDM_SRC_ACT_AND_DEACT_PDN,
+    DDM_SRC_DEACT_INTERNET_AND_ACT_PDN,
+    DDM_SRC_EMM_DEACT_FOR_GARBAGE_PAGING,
+	DDM_SRC_VGMM_DEACT_FOR_GARBAGE_PAGING,
+    DDM_SRC_DEACT_DEFAULT_PDN,
+    DDM_SRC_ACTIVATE_DEFAULT_PDN,
+    DDM_SRC_DEACT_NO_IP_PDN,
+    DDM_SRC_VZWAPN_CMD,
+    DDM_SRC_RESERVE_END = DDM_SRC_RESERVE_START + (DDM_RESERVE_SRC_NUM - 1),
+    DDM_ALL = DDM_SRC_RESERVE_END,
+} ddm_src_id_enum;
+
+typedef enum {
+    D2AM_NW_NO_ACTION = 0,
+    D2AM_NW_EDALLOW_SET_0,
+    D2AM_NW_EDALLOW_SET_1,
+    D2AM_NW_ACTION_MAX = 0xFF,
+} d2am_nw_action_enum;
+
+#define DDM_SRC_ID_TOTAL_NUM DDM_ALL
+#define DDM_UNSOLICITED    DDM_ALL
+// flag
+#define DDM_IS_STANDARD   (0x00000001)
+#define DDM_IS_ACTTEST    (0x00000010)
+
+#define EIF_SUPPORT_HO    (1 << 0)
+#define EIF_SUPPORT_IPCHG (1 << 1)
+
+#define IGNORE_SRC_ID (0x7788)
+
+#endif
diff --git a/mcu/protocol/interface/ddm/ddm_public_api.h b/mcu/protocol/interface/ddm/ddm_public_api.h
new file mode 100644
index 0000000..3ae66d1
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ddm_public_api.h
@@ -0,0 +1,10 @@
+#ifndef __DDM_PUBLIC_API_H__
+#define __DDM_PUBLIC_API_H__
+
+
+
+extern kal_uint32 ddm_get_ipv6_mtu_by_apn(kal_uint8 ps_id, kal_char *apn_name);
+
+
+
+#endif
diff --git a/mcu/protocol/interface/ddm/ursp_public_defs.h b/mcu/protocol/interface/ddm/ursp_public_defs.h
new file mode 100644
index 0000000..ef63ef3
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ursp_public_defs.h
@@ -0,0 +1,173 @@
+#ifndef __URSP_PUBLIC_DEFS_H__
+#define __URSP_PUBLIC_DEFS_H__
+
+#include "d2pm_public_defs.h"
+
+// Type denifitions
+typedef enum
+{
+    URSP_RES_FAIL = -1, 
+    URSP_RES_NONE, 
+    URSP_RES_SUCC, 
+    URSP_RES_MAX = 0x7FFFFFFF
+}ursp_res_enum;
+
+typedef enum
+{
+    URSP_ROUTE_SUPP_PROFILE_TYPE_NONE = 0, 
+    URSP_ROUTE_SUPP_PROFILE_TYPE_REQ, 
+    URSP_ROUTE_SUPP_PROFILE_TYPE_MAX = 0x7FFFFFFF
+}ursp_route_supp_profile_type_enum;
+
+typedef enum
+{
+    URSP_REEVAL_EVENT_NONE = 0, 
+    URSP_REEVAL_EVENT_PERIODIC, 
+    URSP_REEVAL_EVENT_PDU_REL, 
+    URSP_REEVAL_EVENT_PCF_UPDATE, 
+    URSP_REEVAL_EVENT_INTER_SYS, 
+    URSP_REEVAL_EVENT_REG, 
+    URSP_REEVAL_EVENT_WLAN_EST, 
+    URSP_REEVAL_EVENT_WLAN_REL, 
+    URSP_REEVAL_EVENT_ALLOWED_NSSAI, 
+    URSP_REEVAL_EVENT_LADN, 
+    URSP_REEVAL_EVENT_MAX = 0x7FFFFFFF
+}ursp_reeval_event_enum;
+
+// => Internal
+typedef enum {
+    TD_TYPE_MATACH_ALL = 0x00,
+    TD_TYPE_OS_APP_ID = 0x08,
+    TD_TYPE_IPV4_REMOTE_ADDR = 0x10,
+    TD_TYPE_IPV6_REMOTE_ADDR = 0x21,
+    TD_TYPE_PROTOCOL_ID = 0x30,
+    TD_TYPE_SINGLE_REMOTE_PORT = 0x50,
+    TD_TYPE_REMOTE_PORT_RANGE = 0x51,
+    TD_TYPE_SPI = 0x60,
+    TD_TYPE_TOS = 0x70,
+    TD_TYPE_FLOW_LABEL = 0x80,
+    TD_TYPE_DEST_MAC = 0x81,
+    TD_TYPE_C_TAG_VID = 0x83,
+    TD_TYPE_S_TAG_VID = 0x84,
+    TD_TYPE_C_TAG_PCP = 0x85,
+    TD_TYPE_S_TAG_PCP = 0x86,
+    TD_TYPE_ETHER_TYPE = 0x87,
+    TD_TYPE_DNN = 0x88,
+    TD_TYPE_CONN_CAPA = 0x90,
+    TD_TYPE_DEST_FQDN = 0x91,
+    TD_TYPE_APP_ID = 0xa0,
+} traffic_descriptor_component_type_enum;
+
+typedef enum {
+    RS_TYPE_SSC = 0x01,
+    RS_TYPE_SNSSAI = 0x02,
+    RS_TYPE_DNN = 0x04,
+    RS_TYPE_PDU_SESSION_TYPE = 0x08,
+    RS_TYPE_PREFER_ACCESS_TYPE = 0x10,
+    RS_TYPE_NON_SEAMLESS = 0x20,
+} route_selection_descriptor_component_type_enum;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+// Macro
+#define URSP_CID_BITMAP_SIZE    (D2PM_CID_BITMAP_SIZE)
+#define URSP_UE_POLICY_MAX_RULE_LIST_SIZE    (8)    // 'eight' refers to the maximum size of allowed NSSAI, i.e. at most eight different slices
+#define URSP_RULE_MAX_ROUTE_SEL_DESC_LIST_SIZE    (8)    // 'eight' refers to the maximum size of allowed NSSAI, i.e. at most eight different slices
+// => LADN
+#define URSP_MAX_LADN_DNN_NUM    (8)
+#define URSP_LADN_DNN_DELIM    "\x1F"
+#define URSP_LDAN_DNN_BITMAP_SIZE    (((URSP_MAX_LADN_DNN_NUM - 1) >> 3) + 1)
+// => Evaluation Flags
+#define URSP_EVAL_FLAG_NONE    (0x00000000)
+#define URSP_EVAL_MATCH_ALL_DISALLOW    (0x00000001)
+// => Route attributes
+#define URSP_ROUTE_ATTR_NONE    (0x00000000)
+#define URSP_ROUTE_ATTR_MATCH_ALL    (0x00000001)
+#define URSP_ROUTE_ATTR_UE_LOCAL_CONF    (0x00000002)
+// => Internal
+#define URSP_DNN_SIZE    (100)    // APN in TS 23.003
+// => => Traffic descriptor component type identifier
+#define URSP_TDC_TYPE_MATCH_ALL    (0x01)
+#define URSP_TDC_TYPE_OS_ID    (0x08)
+#define URSP_TDC_TYPE_IPV4_REMOTE_ADDR    (0x10)
+#define URSP_TDC_TYPE_IPV6_REMOTE_ADDR    (0x21)
+#define URSP_TDC_TYPE_IPV4_PROT_ID    (0x30)
+#define URSP_TDC_TYPE_IPV6_NEXT_HDR    (0x30)
+#define URSP_TDC_TYPE_SINGLE_REMOTE_PORT    (0x50)
+#define URSP_TDC_TYPE_REMOTE_PORT_RANGE    (0x51)
+#define URSP_TDC_TYPE_IP_3_TUPLE    (0x52)    // max{(IPV4_REMOTE_ADDR, IPV4_REMOTE_MASK), (IPV6_REMOTE_ADDR, IPV6_PREFIX_LEN)} + IPV4_PROT_ID/IPV6_NEXT_HDR  + max{SINGLE_REMOTE_PORT, (PORT_RANGE_LOW_LIMIT, PORT_RANGE_HIGH_LIMIT)}
+#define URSP_TDC_TYPE_SEC_PARAM_IDX    (0x60)
+#define URSP_TDC_TYPE_TYPE_OF_SVC    (0x70)
+#define URSP_TDC_TYPE_TFC_CLASS    (0x70)
+#define URSP_TDC_TYPE_FLOW_LABEL    (0x80)
+#define URSP_TDC_TYPE_DST_MAC_ADDR    (0x81)
+#define URSP_TDC_TYPE_C_TAG_VID    (0x83)
+#define URSP_TDC_TYPE_S_TAG_VID    (0x84)
+#define URSP_TDC_TYPE_C_TAG_PCP_DEI    (0x85)
+#define URSP_TDC_TYPE_S_TAG_PCP_DEI    (0x86)
+#define URSP_TDC_TYPE_ETH_TYPE    (0x87)
+#define URSP_TDC_TYPE_DNN    (0x88)
+#define URSP_TDC_TYPE_CONN_CAP    (0x90)
+#define URSP_TDC_TYPE_DST_FQDN    (0x91)
+#define URSP_TDC_TYPE_OS_APP_ID    (0xA0)
+// => => Length of traffic descriptor component value field
+#define URSP_TDC_LEN_MATCH_ALL    (0)
+#define URSP_TDC_LEN_OS_ID    (16)    // UUID in RFC 4122
+#define URSP_TDC_LEN_IPV4_REMOTE_ADDR    (4)
+#define URSP_TDC_LEN_IPV4_REMOTE_MASK    (4)
+#define URSP_TDC_LEN_IPV6_REMOTE_ADDR    (16)
+#define URSP_TDC_LEN_IPV6_PREFIX_LEN    (1)
+#define URSP_TDC_LEN_IPV4_PROT_ID    (1)
+#define URSP_TDC_LEN_IPV6_NEXT_HDR    (1)
+#define URSP_TDC_LEN_SINGLE_REMOTE_PORT    (2)
+#define URSP_TDC_LEN_PORT_RANGE_LOW_LIMIT    (2)
+#define URSP_TDC_LEN_PORT_RANGE_HIGH_LIMIT    (2)
+#define URSP_TDC_LEN_IP_3_TUPLE    (22)    // max{(IPV4_REMOTE_ADDR, IPV4_REMOTE_MASK), (IPV6_REMOTE_ADDR, IPV6_PREFIX_LEN)} + IPV4_PROT_ID/IPV6_NEXT_HDR  + max{SINGLE_REMOTE_PORT, (PORT_RANGE_LOW_LIMIT, PORT_RANGE_HIGH_LIMIT)}
+#define URSP_TDC_LEN_SEC_PARAM_IDX    (4)
+#define URSP_TDC_LEN_TYPE_OF_SVC    (1)
+#define URSP_TDC_LEN_TFC_CLASS    (1)
+#define URSP_TDC_LEN_TYPE_OF_SVC_MASK    (1)
+#define URSP_TDC_LEN_TFC_CLASS_MASK    (1)
+#define URSP_TDC_LEN_FLOW_LABEL    (3)
+#define URSP_TDC_LEN_DST_MAC_ADDR    (6)
+#define URSP_TDC_LEN_C_TAG_VID    (2)
+#define URSP_TDC_LEN_S_TAG_VID    (2)
+#define URSP_TDC_LEN_C_TAG_PCP_DEI    (1)
+#define URSP_TDC_LEN_S_TAG_PCP_DEI    (1)
+#define URSP_TDC_LEN_ETH_TYPE    (2)
+#define URSP_TDC_LEN_DNN    (URSP_DNN_SIZE)
+#define URSP_TDC_LEN_CONN_CAP    (255)
+#define URSP_TDC_LEN_DST_FQDN    (255)
+#define URSP_TDC_LEN_OS_APP_ID    (255)
+// => => Route selection descriptor component type identifier
+#define URSP_RSDC_TYPE_SSC_MODE    (0x01)
+#define URSP_RSDC_TYPE_S_NSSAI    (0x02)
+#define URSP_RSDC_TYPE_DNN    (0x04)
+#define URSP_RSDC_TYPE_PDU_SESSION_TYPE    (0x08)
+#define URSP_RSDC_TYPE_PREF_ACCESS_TYPE    (0x10)
+#define URSP_RSDC_TYPE_MULTI_ACCESS_PREF    (0x11)
+#define URSP_RSDC_TYPE_NON_SEAMLESS_NON_3GPP_OFFLOAD_IND    (0x20)
+#define URSP_RSDC_TYPE_LOC_CRITERIA    (0x40)
+#define URSP_RSDC_TYPE_TIME_WIN    (0x80)
+// => => Length of route selection descriptor component value field
+#define URSP_RSDC_LEN_SSC_MODE    (1)
+#define URSP_RSDC_LEN_S_NSSAI    (8)    // S-NSSAI in TS 24.501
+#define URSP_RSDC_LEN_DNN    (URSP_DNN_SIZE)
+#define URSP_RSDC_LEN_PDU_SESSION_TYPE    (1)
+#define URSP_RSDC_LEN_PREF_ACCESS_TYPE    (1)
+#define URSP_RSDC_LEN_NON_SEAMLESS_NON_3GPP_OFFLOAD_IND    (0)
+
+// APIs
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/ursp_struct.h b/mcu/protocol/interface/ddm/ursp_struct.h
new file mode 100644
index 0000000..c97db98
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ursp_struct.h
@@ -0,0 +1,424 @@
+#ifndef  __URSP_STRUCT_H__
+#define  __URSP_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "mcd_l3_inc_struct.h"
+#include "atcmd_enum.h"
+#include "ursp_public_defs.h"
+
+// Type definition
+typedef struct ursp_hdr ursp_hdr_t;
+typedef struct ursp_hdr* ursp_hdr_ptr_t;
+
+// Macros
+#define URSP_REQ_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 seq_num;
+
+#define URSP_CNF_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 seq_num;
+
+#define URSP_IND_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 seq_num;
+
+#define URSP_RSP_LOCAL_PARA_HDR    \
+    LOCAL_PARA_HDR \
+    kal_uint16 seq_num;
+
+// Interface
+// N/A
+
+// Implementation
+struct ursp_hdr
+{
+    LOCAL_PARA_HDR
+    kal_uint16 seq_num;
+};
+
+
+/*******************************************************************************
+ * URSP Internal                                                               *
+ *******************************************************************************/
+
+// => Internal data type for URSP
+#pragma pack(push, 1)
+typedef struct
+{
+    kal_uint8 ipv4_addr[URSP_TDC_LEN_IPV4_REMOTE_ADDR];
+    kal_uint8 ipv4_mask[URSP_TDC_LEN_IPV4_REMOTE_MASK];
+}tdc_16_t;
+typedef struct
+{
+    kal_uint8 ipv6_addr[URSP_TDC_LEN_IPV6_REMOTE_ADDR];
+    kal_uint8 ipv6_prefix_len;
+}tdc_33_t;
+typedef union
+{
+    kal_uint8 ipv4_prot_id;
+    kal_uint8 ipv6_next_hdr;
+}tdc_48_t;
+typedef struct tdc_81
+{
+    kal_uint16 min_remote_port;
+    kal_uint16 max_remote_port;
+}tdc_81_t;
+typedef struct tdc_82
+{
+    union
+    {
+        tdc_16_t ipv4;
+        tdc_33_t ipv6;
+    }remote_addr;
+    tdc_48_t prot_id_next_hdr;
+    union
+    {
+        kal_uint16 single;
+        tdc_81_t range;
+    }remote_port;
+}tdc_82_t;
+typedef struct
+{
+    union
+    {
+        kal_uint8 ipv4_tos;
+        kal_uint8 ipv6_tc;
+    }val;
+    union
+    {
+        kal_uint8 ipv4_tos_mask;
+        kal_uint8 ipv6_tc_mask;
+    }mask;
+}tdc_112_t;
+typedef struct
+{
+    kal_uint8 s_tag_pcp;
+    kal_uint8 s_tag_dei;
+}tdc_134_t;
+#pragma pack(pop)
+
+typedef struct
+{
+    kal_bool is_match_all;
+    kal_uint8 dnn_len;
+    kal_char dnn[URSP_TDC_LEN_DNN];    // APN in TS 23.003
+    kal_uint8 os_id[URSP_TDC_LEN_OS_ID];    // UUID in RFC 4122
+    kal_uint8 app_id_len;
+    kal_uint8 app_id[URSP_TDC_LEN_OS_APP_ID];
+    kal_uint8 ipv4_addr[URSP_TDC_LEN_IPV4_REMOTE_ADDR];
+    kal_uint8 ipv4_mask[URSP_TDC_LEN_IPV4_REMOTE_MASK];
+    kal_uint8 ipv6_addr[URSP_TDC_LEN_IPV6_REMOTE_ADDR];
+    kal_uint8 ipv6_prefix_len;
+    kal_uint8 prot_id_next_hdr;
+    kal_uint16 single_remote_port;
+    kal_uint16 min_remote_port;
+    kal_uint16 max_remote_port;
+    kal_uint8 dst_fqdn_len;
+    kal_uint8 dst_fqdn[URSP_TDC_LEN_DST_FQDN];
+}ursp_traffic_desc_struct;
+
+typedef struct
+{
+    kal_uint8 p_val;
+    kal_uint8 ssc_mode;
+    kal_uint8 s_nssai_len;
+    kal_uint8 s_nssai[URSP_RSDC_LEN_S_NSSAI];
+    kal_uint8 dnn_len;
+    kal_uint8 dnn[URSP_TDC_LEN_DNN];    // APN in TS 23.003
+    kal_uint8 pdu_session_type;
+    kal_uint8 pref_access_type;
+}ursp_route_sel_desc_struct;
+
+typedef struct
+{
+    kal_uint8 p_val;
+    ursp_traffic_desc_struct traffic_desc;
+    kal_uint8 num_of_rsd;
+    ursp_route_sel_desc_struct route_sel_desc_list[URSP_RULE_MAX_ROUTE_SEL_DESC_LIST_SIZE];
+}ursp_rule_struct;
+
+typedef struct
+{
+    kal_uint8 ssc_mode;
+    kal_uint8 s_nssai_len;
+    kal_uint8 s_nssai[URSP_RSDC_LEN_S_NSSAI];
+    kal_uint8 dnn_len;
+    kal_uint8 dnn[URSP_TDC_LEN_DNN];    // APN in TS 23.003
+    kal_uint8 pdu_session_type;
+    kal_uint8 pref_access_type;
+}ursp_ue_local_conf_struct;
+typedef ursp_ue_local_conf_struct ursp_est_req_param_struct;
+
+
+/*******************************************************************************
+ * User to URSP REQ                                                            *
+ *******************************************************************************/
+
+// MSG_ID_URSP_GET_ROUTE_PROFILE_REQ
+typedef struct
+{
+    URSP_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+}ursp_get_route_profile_req_struct;
+
+// MSG_ID_URSP_REEVAL_REQ
+typedef struct
+{
+    URSP_REQ_LOCAL_PARA_HDR
+
+    /* common part */
+    ursp_reeval_event_enum event;
+    union
+    {
+        // Periodic
+        struct
+        {
+            int unused;
+        }periodic;
+
+        // PDU release
+        struct
+        {
+            int unused;
+        }pdu_rel;
+
+        // PCF Update
+        struct
+        {
+            int unused;
+        }pcf_update;
+
+        // Inter-system change from S1 to N1
+        struct
+        {
+            int unused;
+        }inter_sys;
+
+        // Registered in N1
+        struct
+        {
+            int unused;
+        }reg;
+
+        // Establishing a connection to a WLAN access
+        struct
+        {
+            int unused;
+        }wlan_est;
+
+        // Releasing a connection to a WLAN access
+        struct
+        {
+            int unused;
+        }wlan_rel;
+
+        // Allowed NSSAI change
+        struct
+        {
+            int unused;
+        }allowed_nssai;
+
+        // LADN information changed
+        struct
+        {
+            kal_char dnn_list[APN_STRING_LEN * URSP_MAX_LADN_DNN_NUM];
+            kal_uint8 in_out[URSP_LDAN_DNN_BITMAP_SIZE];
+        }ladn;
+    }param;
+}ursp_reeval_req_struct;
+
+// MSG_ID_URSP_SET_PRECONF_UE_POLICY_REQ
+typedef struct
+{
+    URSP_REQ_LOCAL_PARA_HDR
+
+    plmn_id_struct plmn_id;
+    kal_uint8 num_of_rule;
+    ursp_rule_struct rule_list[URSP_UE_POLICY_MAX_RULE_LIST_SIZE];
+}ursp_set_preconf_ue_policy_req_struct;
+
+// MSG_ID_URSP_SET_USIM_UE_POLICY_REQ
+typedef struct
+{
+    URSP_REQ_LOCAL_PARA_HDR
+
+    int unused;
+}ursp_set_usim_ue_policy_req_struct;
+
+// MSG_ID_URSP_GET_UE_POLICY_REQ
+typedef struct
+{
+    URSP_REQ_LOCAL_PARA_HDR
+
+    plmn_id_struct plmn_id;
+}ursp_get_ue_policy_req_struct;
+
+
+/*******************************************************************************
+ * URSP to User CNF                                                            *
+ *******************************************************************************/
+
+// MSG_ID_URSP_GET_ROUTE_PROFILE_CNF
+typedef struct
+{
+    URSP_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    ursp_res_enum res;
+}ursp_get_route_profile_cnf_struct;
+
+// MSG_ID_URSP_REEVAL_CNF
+typedef struct
+{
+    URSP_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    ursp_res_enum res;
+}ursp_reeval_cnf_struct;
+
+// MSG_ID_URSP_SET_PRECONF_UE_POLICY_CNF
+typedef struct
+{
+    URSP_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    ursp_res_enum res;
+}ursp_set_preconf_ue_policy_cnf_struct;
+
+// MSG_ID_URSP_SET_USIM_UE_POLICY_CNF
+typedef struct
+{
+    URSP_CNF_LOCAL_PARA_HDR
+
+    int unused;
+}ursp_set_usim_ue_policy_cnf_struct;
+
+// MSG_ID_URSP_GET_UE_POLICY_CNF
+typedef struct
+{
+    URSP_CNF_LOCAL_PARA_HDR
+
+    /* common part */
+    ursp_res_enum res;
+}ursp_get_ue_policy_cnf_struct;
+
+
+/*******************************************************************************
+ * URSP to User IND                                                            *
+ *******************************************************************************/
+
+// MSG_ID_URSP_GET_ROUTE_PROFILE_IND
+typedef struct
+{
+    URSP_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    ursp_est_req_param_struct est_req_param;
+    kal_uint32 attr;
+}ursp_get_route_profile_ind_struct;
+
+// MSG_ID_URSP_GET_ROUTE_SUPP_PROFILE_IND
+typedef struct
+{
+    URSP_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_int32 cid;
+    ursp_route_supp_profile_type_enum type;
+    union
+    {
+        struct
+        {
+            ursp_traffic_desc_struct traffic_desc;
+            ursp_ue_local_conf_struct ue_local_conf;
+            kal_bool match_all_disallow;
+        }req;
+    }info;
+}ursp_get_route_supp_profile_ind_struct;
+
+// MSG_ID_URSP_REEVAL_IND
+typedef struct
+{
+    URSP_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    kal_uint8 cid[URSP_CID_BITMAP_SIZE]; // a bitmap
+    ursp_reeval_event_enum event;
+}ursp_reeval_ind_struct;
+
+// MSG_ID_URSP_GET_UE_POLICY_IND
+typedef struct
+{
+    URSP_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    plmn_id_struct plmn_id;
+    kal_uint8 num_of_rule;
+    ursp_rule_struct rule_list[URSP_UE_POLICY_MAX_RULE_LIST_SIZE];
+}ursp_get_ue_policy_ind_struct;
+
+// MSG_ID_URSP_UE_POLICY_CHG_IND
+typedef struct
+{
+    URSP_IND_LOCAL_PARA_HDR
+
+    /* common part */
+    plmn_id_struct plmn_id;
+}ursp_ue_policy_chg_ind_struct;
+
+// MSG_ID_URSP_RULE_TBL_DUMP_IND
+typedef struct
+{
+    URSP_IND_LOCAL_PARA_HDR
+
+    // UPSI
+    plmn_id_struct plmn_id;
+    kal_uint16 upsc;
+
+    // URSP rule
+    kal_uint8 rule_p_val;
+    kal_uint8 rsd_p_val;
+
+    // Traffic descriptor
+    kal_bool is_match_all;
+    kal_uint8 os_id[URSP_TDC_LEN_OS_ID];
+    tdc_16_t tdc_16;
+    tdc_16_t tdc_33;
+    tdc_16_t tdc_48;
+    kal_uint16 single_remote_port;
+    tdc_16_t tdc_81;
+    kal_uint32 ipsec_spi;
+    tdc_16_t tdc_112;
+    kal_uint8 flow_label[3];
+    kal_uint8 dst_mac_addr[6];
+    kal_uint8 c_tag_vid[2];
+    kal_uint8 s_tag_vid[2];
+    kal_uint8 c_tag_pcp_dei;
+    kal_uint8 s_tag_pcp_dei;
+    kal_uint16 eth_type;
+    kal_uint8 td_dnn[URSP_TDC_LEN_DNN];
+    kal_uint8 conn_cap[URSP_TDC_LEN_CONN_CAP];
+    kal_uint8 dst_fqdn[URSP_TDC_LEN_DST_FQDN];
+    kal_uint8 os_app_id[URSP_TDC_LEN_OS_APP_ID];
+
+    // Route selection descriptor
+    kal_uint8 ssc_mode;
+    kal_uint8 s_nssai[URSP_RSDC_LEN_S_NSSAI];
+    kal_uint8 rsd_dnn[URSP_RSDC_LEN_DNN];
+    kal_uint8 pdu_session_type;
+    kal_uint8 pref_access_type;
+    kal_bool is_nsn3_offload;    
+}ursp_rule_tbl_dump_ind_struct;
+
+
+/*******************************************************************************
+ * User to URSP RSP                                                            *
+ *******************************************************************************/
+// N/A
+
+#endif