diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.c b/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.c
old mode 100644
new mode 100755
index f3201cc..ea0b0be
--- a/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.c
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.c
@@ -180,6 +180,7 @@
     uint8_t v6_full_addr_count;
     mipc_v6_full_addr_struct4 *v6_full_addr_list_ptr;
     uint32_t cause;
+    mipc_msg_sim_ps_id_enum sim_ps_id;
 
     causeStr = (char *)calloc(1, MAX_CAUSE_LENGTH);
     if (causeStr == NULL){
@@ -198,6 +199,8 @@
 
     // get cmd
     cmd = mipc_msg_get_val_uint8(msg_ptr, MIPC_INTERNAL_EIF_IND_T_CMD, 0xff);
+    sim_ps_id = (mipc_msg_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id;
+    cmd_obj->sim_id = sim_ps_id;
 
     switch (cmd) {
         case MIPC_INTERNAL_EIF_IND_CMD_IFUP:
@@ -223,6 +226,7 @@
                     MEH_LOG_E("[MEH] can't allocate cmd_obj_for_mtu\n");
                     goto error;
                 }
+                cmd_obj_for_mtu->sim_id = cmd_obj->sim_id;
                 cmd_obj_for_mtu->cmd = NETAGENT_IO_CMD_SETMTU;
                 cmd_obj_for_mtu->parameter.mtu.mtu_size = mtu;
                 MEH_LOG_D("[MEH] EIF_IND cmd_obj_for_mtu->parameter.mtu.mtu_size=%d \n",
@@ -264,6 +268,20 @@
     }
 
     enqueueReqToNa(cmd_obj, REQUEST_TYPE_L5);
+    if (cmd == MIPC_INTERNAL_EIF_IND_CMD_IFUP && mtu > 0) {
+        // needs to update MTU size
+        cmd_obj_for_mtu = netagent_io_cmd_alloc(transid, NETAGENT_IO_CMD_MAX);
+        if (!cmd_obj_for_mtu) {
+            MEH_LOG_E("[MEH] can't allocate cmd_obj_for_mtu\n");
+            goto error;
+        }
+        cmd_obj_for_mtu->sim_id = cmd_obj->sim_id;
+        cmd_obj_for_mtu->cmd = NETAGENT_IO_CMD_SETMTU;
+        cmd_obj_for_mtu->parameter.mtu.mtu_size = mtu;
+        MEH_LOG_D("[MEH] EIF_IND cmd_obj_for_mtu->parameter.mtu.mtu_size=%d \n",
+                cmd_obj_for_mtu->parameter.mtu.mtu_size);
+        enqueueReqToNa(cmd_obj_for_mtu, REQUEST_TYPE_L5);
+    }
     return;
 
 error:
@@ -410,6 +428,7 @@
 
     //register MIPC_INTERNAL_EIF_IND
     mipc_msg_register_ind(MIPC_MSG_PS0, MIPC_INTERNAL_EIF_IND, (void *)onEifIndCallback, NULL);
+    mipc_msg_register_ind(MIPC_MSG_PS1, MIPC_INTERNAL_EIF_IND, (void *)onEifIndCallback, NULL);
 }
 
 unsigned int getIpAddrTypeFromMdMsg(uint8_t v4FullAddrCount, uint8_t v6FullAddrCount) {
@@ -537,8 +556,7 @@
     return 1;
 }
 
-int confirmInterfaceUpToMd(unsigned int transId) {
-    mipc_msg_t *msg_cnf_ptr;
+int confirmInterfaceUpToMd(unsigned int transId, int sim_ps_id) {
     mipc_msg_t *msg_req_ptr;
 
     if (transId == INVALID_TRANS_ID) {
@@ -547,19 +565,17 @@
     }
     MEH_LOG_D("[MEH] confirmInterfaceUpToMd: transId=%d \n", transId);
 
-    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, MIPC_MSG_PS0);
+    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
     mipc_msg_add_tlv_uint32(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_TRANSID, transId);
     mipc_msg_add_tlv_uint32(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_CMD, MIPC_INTERNAL_EIF_REQ_CMD_IFUP);
 
-    msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+    mipc_msg_async(msg_req_ptr, NULL, NULL);
     mipc_msg_deinit(msg_req_ptr);
-    mipc_msg_deinit(msg_cnf_ptr);
     MEH_LOG_D("[MEH] confirmInterfaceUpToMd: transId=%d done!\n", transId);
     return 1;
 }
 
-int confirmInterfaceDownToMd(unsigned int transId){
-    mipc_msg_t *msg_cnf_ptr;
+int confirmInterfaceDownToMd(unsigned int transId, int sim_ps_id){
     mipc_msg_t *msg_req_ptr;
 
     if (transId == INVALID_TRANS_ID) {
@@ -568,19 +584,17 @@
     }
     MEH_LOG_D("[MEH] confirmInterfaceDownToMd: transId=%d \n", transId);
 
-    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, MIPC_MSG_PS0);
+    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
     mipc_msg_add_tlv_uint32(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_TRANSID, transId);
     mipc_msg_add_tlv_uint32(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_CMD, MIPC_INTERNAL_EIF_REQ_CMD_IFDOWN);
 
-    msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+    mipc_msg_async(msg_req_ptr, NULL, NULL);
     mipc_msg_deinit(msg_req_ptr);
-    mipc_msg_deinit(msg_cnf_ptr);
     MEH_LOG_D("[MEH] confirmInterfaceDownToMd: transId=%d done!\n", transId);
     return 1;
 }
 
-int confirmIpUpdateToMd(unsigned int transId, netagent_io_addr_type_e addrType, unsigned int* addr, int ipv6PrefixLength){
-    mipc_msg_t *msg_cnf_ptr = NULL;
+int confirmIpUpdateToMd(unsigned int transId, netagent_io_addr_type_e addrType, unsigned int* addr, int ipv6PrefixLength, int sim_ps_id){
     mipc_msg_t *msg_req_ptr = NULL;
     mipc_full_addr_struct4 full_addr;
     int log_enable = getCfgValue("enable_sensitive_log");
@@ -591,7 +605,7 @@
     }
     MEH_LOG_D("[MEH] confirmIpUpdateToMd: transId=%d addrType=%02X\n", transId, addrType);
 
-    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, MIPC_MSG_PS0);
+    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
     mipc_msg_add_tlv_uint32(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_TRANSID, transId);
     mipc_msg_add_tlv_uint32(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_CMD, MIPC_INTERNAL_EIF_REQ_CMD_IPUPDATE);
 
@@ -621,22 +635,18 @@
     }
     mipc_msg_add_tlv(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_NEW_ADDR, sizeof(full_addr), &full_addr);
 
-    msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+    mipc_msg_async(msg_req_ptr, NULL, NULL);
     mipc_msg_deinit(msg_req_ptr);
-    mipc_msg_deinit(msg_cnf_ptr);
     MEH_LOG_D("[MEH] confirmIpUpdateToMd: transId=%d done!\n", transId);
     return 1;
 
 error:
     if (msg_req_ptr != NULL)
         mipc_msg_deinit(msg_req_ptr);
-    if (msg_cnf_ptr != NULL)
-        mipc_msg_deinit(msg_cnf_ptr);
     return 0;
 }
 
-int confirmNoRaToMd(unsigned int transId, netagent_io_ra_e flag) {
-    mipc_msg_t *msg_cnf_ptr;
+int confirmNoRaToMd(unsigned int transId, netagent_io_ra_e flag, int sim_ps_id) {
     mipc_msg_t *msg_req_ptr;
 
     if (transId == INVALID_TRANS_ID) {
@@ -645,7 +655,7 @@
     }
     MEH_LOG_D("[MEH] confirmNoRaToMd: transId=%d RA_FALG=%d\n", transId, flag);
 
-    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, MIPC_MSG_PS0);
+    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
     mipc_msg_add_tlv_uint32(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_TRANSID, transId);
 
     if (flag == NETAGENT_IO_NO_RA_INITIAL) {
@@ -658,16 +668,15 @@
         return 0;
     }
 
-    msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+    mipc_msg_async(msg_req_ptr, NULL, NULL);
 
     mipc_msg_deinit(msg_req_ptr);
-    mipc_msg_deinit(msg_cnf_ptr);
     MEH_LOG_D("[MEH] confirmNoRaToMd: transId=%d done!\n", transId);
     return 1;
 }
 
-int confirmIpAddOrDelToMd(unsigned int transId, netagent_io_cmd_e cmd, int result, netagent_io_addr_type_e addrType, unsigned int* addr, int ipv6PrefixLength) {
-    mipc_msg_t *msg_cnf_ptr = NULL;
+int confirmIpAddOrDelToMd(unsigned int transId, netagent_io_cmd_e cmd, int result,
+        netagent_io_addr_type_e addrType, unsigned int* addr, int ipv6PrefixLength, int sim_ps_id) {
     mipc_msg_t *msg_req_ptr = NULL;
     mipc_full_addr_struct4 full_addr;
     int log_enable = getCfgValue("enable_sensitive_log");
@@ -678,7 +687,7 @@
     }
     MEH_LOG_D("[MEH] confirmIpAddOrDelToMd: transId=%d cmd=%d addrType=%02X\n", transId, cmd, addrType);
 
-    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, MIPC_MSG_PS0);
+    msg_req_ptr = mipc_msg_init(MIPC_INTERNAL_EIF_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
     mipc_msg_add_tlv_uint32(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_TRANSID, transId);
 
     if (cmd == NETAGENT_IO_CMD_IPADD) {
@@ -716,18 +725,15 @@
     }
     mipc_msg_add_tlv(msg_req_ptr, MIPC_INTERNAL_EIF_REQ_T_NEW_ADDR, sizeof(full_addr), &full_addr);
 
-    msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+    mipc_msg_async(msg_req_ptr, NULL, NULL);
 
     mipc_msg_deinit(msg_req_ptr);
-    mipc_msg_deinit(msg_cnf_ptr);
     MEH_LOG_D("[MEH] confirmIpAddOrDelToMd: transId=%d done!\n", transId);
     return 1;
 
 error:
     if (msg_req_ptr != NULL)
         mipc_msg_deinit(msg_req_ptr);
-    if (msg_cnf_ptr != NULL)
-        mipc_msg_deinit(msg_cnf_ptr);
     return 0;
 }
 
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.h b/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.h
old mode 100644
new mode 100755
index a8a1e3e..758c719
--- a/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.h
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.h
@@ -72,11 +72,11 @@
 int copyIpAddressToReqInfo(netagent_io_cmd_obj_t *cmd_obj, mipc_v4_full_addr_struct4 *ipV4list, mipc_v6_full_addr_struct4 *ipV6list);
 
 
-int confirmInterfaceUpToMd(unsigned int transId);
-int confirmInterfaceDownToMd(unsigned int transId);
-int confirmIpUpdateToMd(unsigned int transId, netagent_io_addr_type_e addrType, unsigned int* addr, int ipv6PrefixLength);
-int confirmNoRaToMd(unsigned int transId, netagent_io_ra_e flag);
-int confirmIpAddOrDelToMd(unsigned int transId, netagent_io_cmd_e cmd, int result, netagent_io_addr_type_e addrType, unsigned int* addr, int ipv6PrefixLength);
+int confirmInterfaceUpToMd(unsigned int transId, int sim_ps_id);
+int confirmInterfaceDownToMd(unsigned int transId, int sim_ps_id);
+int confirmIpUpdateToMd(unsigned int transId, netagent_io_addr_type_e addrType, unsigned int* addr, int ipv6PrefixLength, int sim_ps_id);
+int confirmNoRaToMd(unsigned int transId, netagent_io_ra_e flag, int sim_ps_id);
+int confirmIpAddOrDelToMd(unsigned int transId, netagent_io_cmd_e cmd, int result, netagent_io_addr_type_e addrType, unsigned int* addr, int ipv6PrefixLength, int sim_ps_id);
 int confirmTcpUdpRsvnToMd(unsigned int transId, netagent_io_cmd_e cmd, uint8_t rsvnAction, unsigned int response);
 // Sensitive log control
 int getCfgValue(char *name);
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.cpp b/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.cpp
old mode 100644
new mode 100755
index 777a4e1..343f8de
--- a/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.cpp
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.cpp
@@ -82,7 +82,7 @@
     pthread_cond_init(&mDispatchCond, NULL);
     m_lTransIntfId.clear();
     isMultiHomingFeatureSupport = false;
-
+    m_wait_v6_sim_id = 0;
 
     for (int i = 0; i < 2; i++) {
         cbUpdateKernelAddress[i] = NULL;
@@ -548,8 +548,10 @@
     char addressV4[MAX_IPV4_ADDRESS_LENGTH] = {0};
     char addressV6[MAX_IPV6_ADDRESS_LENGTH] = {0};
     char *reason = NULL;
+    int sim_id = 0;
 
     NA_GET_IFST_STATE(config, state);
+    NA_GET_SIM_ID(pReqInfo->pNetAgentCmdObj, &sim_id);
 
     if (NA_GET_IF_ID(pReqInfo->pNetAgentCmdObj, &interfaceId) != NETAGENT_IO_RET_SUCCESS) {
         NA_LOG_E("[%s] fail to get interface id", __FUNCTION__);
@@ -669,7 +671,7 @@
                     confirmIpUpdateToMd(transId,
                         NETAGENT_IO_ADDR_TYPE_IPv4,
                         &addrV4_,
-                        INVALID_IPV6_PREFIX_LENGTH);
+                        INVALID_IPV6_PREFIX_LENGTH, sim_id);
                 } else {
                     NA_LOG_E("[%s] error occurs when get addressV4", __FUNCTION__);
                 }
@@ -685,9 +687,10 @@
         //confirmInterfaceState(interfaceId, state, addrType);
         NA_LOG_D("[%s] send confirm %d to L5", __FUNCTION__, state);
         if (config == ENABLE) {
-            confirmInterfaceUpToMd(getTransIntfId(interfaceId));
+            confirmInterfaceUpToMd(getTransIntfId(interfaceId), sim_id);
+            m_wait_v6_sim_id = sim_id;
         } else {
-            confirmInterfaceDownToMd(getTransIntfId(interfaceId));
+            confirmInterfaceDownToMd(getTransIntfId(interfaceId), sim_id);
         }
         NA_LOG_D("[%s] confirm complete!", __FUNCTION__);
     }
@@ -742,6 +745,9 @@
     char addressV6[MAX_IPV6_ADDRESS_LENGTH] = {0};
     unsigned int addrV6_binary[4] = {0};
     int log_enable = getCfgValue("enable_sensitive_log");
+    int sim_id = 0;
+
+    NA_GET_SIM_ID(pReqInfo->pNetAgentCmdObj, &sim_id);
 
     // get interface id
     if (NA_GET_IF_ID(pReqInfo->pNetAgentCmdObj, &interfaceId) != NETAGENT_IO_RET_SUCCESS) {
@@ -792,7 +798,7 @@
                 result = 0;
             }
             //confirmIpAddOrDel(interfaceId, NETAGENT_IO_CMD_IPADD, result, addrType, addrV6_binary, INVALID_IPV6_PREFIX_LENGTH);
-            confirmIpAddOrDelToMd(getTransIntfId(interfaceId), NETAGENT_IO_CMD_IPADD, result, addrType, addrV6_binary, INVALID_IPV6_PREFIX_LENGTH);
+            confirmIpAddOrDelToMd(getTransIntfId(interfaceId), NETAGENT_IO_CMD_IPADD, result, addrType, addrV6_binary, INVALID_IPV6_PREFIX_LENGTH, sim_id);
         } else {
             NA_LOG_E("[%s] is not link local address", __FUNCTION__);
             return;
@@ -812,6 +818,9 @@
     char addressV6[MAX_IPV6_ADDRESS_LENGTH] = {0};
     unsigned int addrV6_binary[4] = {0};
     int log_enable = getCfgValue("enable_sensitive_log");
+    int sim_id = 0;
+
+    NA_GET_SIM_ID(pReqInfo->pNetAgentCmdObj, &sim_id);
 
     // get interface id
     if (NA_GET_IF_ID(pReqInfo->pNetAgentCmdObj, &interfaceId) != NETAGENT_IO_RET_SUCCESS) {
@@ -859,7 +868,8 @@
         }
         recordPdnIpInfo(interfaceId, addrType,addressV4, addressV6);
         //confirmIpAddOrDel(interfaceId, NETAGENT_IO_CMD_IPDEL, result, addrType, addrV6_binary, INVALID_IPV6_PREFIX_LENGTH);
-        confirmIpAddOrDelToMd(getTransIntfId(interfaceId), NETAGENT_IO_CMD_IPDEL, result, addrType, addrV6_binary, INVALID_IPV6_PREFIX_LENGTH);
+        confirmIpAddOrDelToMd(getTransIntfId(interfaceId), NETAGENT_IO_CMD_IPDEL, result, addrType, addrV6_binary, INVALID_IPV6_PREFIX_LENGTH, sim_id);
+
     } else {
         NA_LOG_E("[%s] not get address", __FUNCTION__);
         return;
@@ -1769,14 +1779,14 @@
             cmd = (action == ACTION_ADDR_UPDATED) ? NETAGENT_IO_CMD_IPADD : NETAGENT_IO_CMD_IPDEL;
             result = 99;
             //confirmIpAddOrDel(interfaceId, cmd, result, NETAGENT_IO_ADDR_TYPE_IPv6, addrV6_, ipv6PrefixLength);
-            confirmIpAddOrDelToMd(getTransIntfId(interfaceId), cmd, result, NETAGENT_IO_ADDR_TYPE_IPv6, addrV6_, ipv6PrefixLength);
+            confirmIpAddOrDelToMd(getTransIntfId(interfaceId), cmd, result, NETAGENT_IO_ADDR_TYPE_IPv6, addrV6_, ipv6PrefixLength, m_wait_v6_sim_id);
 
         } else {
             //confirmIpUpdate(interfaceId, NETAGENT_IO_ADDR_TYPE_IPv6, addrV6_, ipv6PrefixLength);
             confirmIpUpdateToMd(getTransIntfId(interfaceId),
                     NETAGENT_IO_ADDR_TYPE_IPv6,
                     addrV6_,
-                    INVALID_IPV6_PREFIX_LENGTH);
+                    INVALID_IPV6_PREFIX_LENGTH, m_wait_v6_sim_id);
         }
 
         if (m_pRouteHandler->setLastReqInfo(pReqInfo->pNetAgentCmdObj) != NETLINK_RET_SUCCESS) {
@@ -1784,7 +1794,7 @@
         }
     } else if (action == ACTION_ADDR_REMOVED && isNoRA(address, &flag)) {
         //confirmNoRA(interfaceId, flag);
-        confirmNoRaToMd(getTransIntfId(interfaceId), flag);
+        confirmNoRaToMd(getTransIntfId(interfaceId), flag, m_wait_v6_sim_id);
     }
 }
 
@@ -1963,6 +1973,9 @@
     unsigned int addrV4_;
     unsigned int addrV6_[4];
     int log_enable = getCfgValue("enable_sensitive_log");
+    int sim_id = 0;
+
+    NA_GET_SIM_ID(pReqInfo->pNetAgentCmdObj, &sim_id);
 
     if (NA_GET_IF_ID(pReqInfo->pNetAgentCmdObj, &interfaceId) != NETAGENT_IO_RET_SUCCESS) {
         NA_LOG_E("[%s] fail to get interface id", __FUNCTION__);
@@ -2076,7 +2089,7 @@
             //        NETAGENT_IO_ADDR_TYPE_IPv4,
             //        &addrV4_,
             //        INVALID_IPV6_PREFIX_LENGTH);
-            confirmIpUpdateToMd(getTransIntfId(interfaceId), NETAGENT_IO_ADDR_TYPE_IPv4, &addrV4_, INVALID_IPV6_PREFIX_LENGTH);
+            confirmIpUpdateToMd(getTransIntfId(interfaceId), NETAGENT_IO_ADDR_TYPE_IPv4, &addrV4_, INVALID_IPV6_PREFIX_LENGTH, sim_id);
             break;
         default:
             // No address, shall not go to here.
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.h b/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.h
old mode 100644
new mode 100755
index dbc2f35..1e43e54
--- a/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.h
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.h
@@ -163,6 +163,7 @@
 #define NA_GET_ADDR_V4(a, b) netagent_io_get_addr_v4(a, b)
 #define NA_GET_ADDR_V6(a, b) netagent_io_get_addr_v6(a, b)
 #define NA_GET_IP_CHANGE_REASON(a, b) netagent_io_get_ip_change_reason(a, b)
+#define NA_GET_SIM_ID(a, b) netagent_io_get_sim_id(a, b)
 #define NA_GET_PDN_HO_INFO(a, b) netagent_io_get_pdnho_info(a, b)
 //#define NA_FLUSH_IPSEC_POLICY(a, b) netagent_io_flush_ipsec_policy(a, b)
 #define NA_GET_NAPTR(a, b) netagent_io_get_naptr(a, b)
@@ -440,6 +441,7 @@
         std::map<int, int> m_rsvnFdMap;
 
         bool isMultiHomingFeatureSupport;
+        int m_wait_v6_sim_id;
 };
 
 #endif /* __NET_AGENT_SERVICE_H__ */
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/ioutils/netagent_io.c b/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/ioutils/netagent_io.c
old mode 100644
new mode 100755
index 915dfa3..b4b379a
--- a/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/ioutils/netagent_io.c
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/ioutils/netagent_io.c
@@ -467,6 +467,20 @@
 }
 
 int
+netagent_io_get_sim_id(void *co, int *sim_id) {
+    netagent_io_cmd_obj_t   *cmd_obj = co;
+
+    if (!cmd_obj) {
+        ErrMsg("obj is NULL");
+        return NETAGENT_IO_RET_GENERIC_FAILURE;
+    }
+
+    *sim_id = cmd_obj->sim_id;
+    return NETAGENT_IO_RET_SUCCESS;
+}
+
+
+int
 netagent_io_get_cmd_type(void *co, netagent_io_cmd_e *cmd) {
     netagent_io_cmd_obj_t   *cmd_obj = co;
 
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/nautils/include/ioutils/netagent_io.h b/src/telephonyware/3.0/netagent/src/libnetagent/nautils/include/ioutils/netagent_io.h
old mode 100644
new mode 100755
index 6c8e6e0..59c7ef9
--- a/src/telephonyware/3.0/netagent/src/libnetagent/nautils/include/ioutils/netagent_io.h
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/nautils/include/ioutils/netagent_io.h
@@ -213,6 +213,7 @@
     unsigned int    trans_intf_id;
     unsigned int    cmd;
     char*           reason;
+    int             sim_id;
     union {
         netagent_io_ifst_parameter_t        ifst;   // cmd = NETAGENT_IO_CMD_IFST
         netagent_io_mtu_parameter_t         mtu;    // cmd = NETAGENT_IO_CMD_SETMTU
@@ -266,6 +267,7 @@
 
 int netagent_io_get_if_id(void *co, unsigned int *if_id);
 int netagent_io_get_ip_change_reason(void *co, char **reason);
+int netagent_io_get_sim_id(void *co, int* sim_id);
 int netagent_io_get_cmd_type(void *co, netagent_io_cmd_e *cmd);
 int netagent_io_get_addr_type(void *co, netagent_io_addr_type_e *addr_type);
 int netagent_io_get_mtu_size(void *co, unsigned int *mtu_size);
