osaf/libs/common/cpsv/include/cpnd.h | 1 + osaf/libs/common/cpsv/include/cpnd_cb.h | 5 +- osaf/libs/common/cpsv/include/cpnd_init.h | 3 +- osaf/libs/common/cpsv/include/cpsv_shm.h | 6 +- osaf/services/saf/cpsv/cpnd/Makefile.am | 1 + osaf/services/saf/cpsv/cpnd/cpnd_db.c | 6 +- osaf/services/saf/cpsv/cpnd/cpnd_evt.c | 71 ++++++++++++++++++-------- osaf/services/saf/cpsv/cpnd/cpnd_main.c | 7 ++ osaf/services/saf/cpsv/cpnd/cpnd_proc.c | 83 ++++++++++++++++++++++-------- osaf/services/saf/cpsv/cpnd/cpnd_res.c | 20 +++--- 10 files changed, 143 insertions(+), 60 deletions(-)
diff --git a/osaf/libs/common/cpsv/include/cpnd.h b/osaf/libs/common/cpsv/include/cpnd.h --- a/osaf/libs/common/cpsv/include/cpnd.h +++ b/osaf/libs/common/cpsv/include/cpnd.h @@ -34,6 +34,7 @@ #define CPND_H #include <stdint.h> +#include "osaf_extended_name.h" #include "ncssysf_def.h" #include "ncs_main_papi.h" #include "ncssysf_tsk.h" diff --git a/osaf/libs/common/cpsv/include/cpnd_cb.h b/osaf/libs/common/cpsv/include/cpnd_cb.h --- a/osaf/libs/common/cpsv/include/cpnd_cb.h +++ b/osaf/libs/common/cpsv/include/cpnd_cb.h @@ -34,6 +34,9 @@ extern uint32_t gl_cpnd_cb_hdl; #define m_CPND_GIVEUP_CPND_CB ncshm_give_hdl(gl_cpnd_cb_hdl) #define CPND_MAX_REPLICAS 1000 +#define CPND_MAX_REPLICA_NAME_LENGTH 255 +#define CPND_REP_NAME_MAX_CKPT_NAME_LENGTH (CPND_MAX_REPLICA_NAME_LENGTH - 32) + #define CPSV_GEN_SECTION_ID_SIZE 4 #define CPSV_WAIT_TIME 1000 @@ -169,7 +172,7 @@ typedef struct cpnd_all_repl_write_evt_n typedef struct cpnd_ckpt_node { NCS_PATRICIA_NODE patnode; SaCkptCheckpointHandleT ckpt_id; /* index for identifying the checkpoint */ - SaNameT ckpt_name; + SaConstStringT ckpt_name; SaCkptCheckpointCreationAttributesT create_attrib; SaCkptCheckpointOpenFlagsT open_flags; uint32_t ckpt_lcl_ref_cnt; diff --git a/osaf/libs/common/cpsv/include/cpnd_init.h b/osaf/libs/common/cpsv/include/cpnd_init.h --- a/osaf/libs/common/cpsv/include/cpnd_init.h +++ b/osaf/libs/common/cpsv/include/cpnd_init.h @@ -130,6 +130,7 @@ uint32_t cpnd_all_repl_rsp_expiry(CPND_C uint32_t cpnd_open_active_sync_expiry(CPND_CB *cb, CPND_TMR_INFO *tmr_info); void cpnd_proc_free_read_data(CPSV_EVT *evt); SaUint32T cpnd_get_scAbsenceAllowed_attr(); +SaUint32T cpnd_get_longDnsAllowed_attr(); /* End cpnd_proc.c */ /* File : --- cpnd_amf.c */ @@ -163,7 +164,7 @@ void cpnd_evt_node_get(CPND_CB *cb, SaCk void cpnd_evt_node_getnext(CPND_CB *cb, SaCkptCheckpointHandleT lcl_ckpt_id, CPSV_CPND_ALL_REPL_EVT_NODE **evt_node); uint32_t cpnd_evt_node_add(CPND_CB *cb, CPSV_CPND_ALL_REPL_EVT_NODE *evt_node); uint32_t cpnd_evt_node_del(CPND_CB *cb, CPSV_CPND_ALL_REPL_EVT_NODE *evt_node); -CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaNameT ckpt_name); +CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaConstStringT ckpt_name); CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_add(CPND_CKPT_NODE *cp_node, SaCkptSectionIdT *id, SaTimeT exp_time, uint32_t gen_flag); void cpnd_evt_backup_queue_add(CPND_CKPT_NODE *cp_node, CPND_EVT *evt); diff --git a/osaf/libs/common/cpsv/include/cpsv_shm.h b/osaf/libs/common/cpsv/include/cpsv_shm.h --- a/osaf/libs/common/cpsv/include/cpsv_shm.h +++ b/osaf/libs/common/cpsv/include/cpsv_shm.h @@ -18,6 +18,8 @@ #ifndef CPSV_SHM_H #define CPSV_SHM_H +#include "osaf_extended_name.h" + #define MAX_CLIENTS 1000 #define MAX_CKPTS 2000 #define MAX_SIZE 30 @@ -29,7 +31,7 @@ typedef struct cpsv_ckpt_hdr { SaCkptCheckpointHandleT ckpt_id; /* Index for identifying the checkpoint */ - SaNameT ckpt_name; + char ckpt_name[kOsafMaxDnLength]; SaCkptCheckpointCreationAttributesT create_attrib; SaCkptCheckpointOpenFlagsT open_flags; uint32_t ckpt_lcl_ref_cnt; @@ -55,7 +57,7 @@ typedef struct cpsv_sect_hdr { } CPSV_SECT_HDR; typedef struct ckpt_info { - SaNameT ckpt_name; + char ckpt_name[kOsafMaxDnLength]; SaCkptCheckpointHandleT ckpt_id; uint32_t maxSections; SaSizeT maxSecSize; diff --git a/osaf/services/saf/cpsv/cpnd/Makefile.am b/osaf/services/saf/cpsv/cpnd/Makefile.am --- a/osaf/services/saf/cpsv/cpnd/Makefile.am +++ b/osaf/services/saf/cpsv/cpnd/Makefile.am @@ -26,6 +26,7 @@ osaf_execbin_PROGRAMS = osafckptnd osafckptnd_CPPFLAGS = \ -DSA_CLM_B01=1 \ -DNCS_CPND=1 \ + -DSA_EXTENDED_NAME_SOURCE \ $(AM_CPPFLAGS) \ -I$(top_srcdir)/osaf/libs/common/immsv/include \ -I$(top_srcdir)/osaf/libs/common/cpsv/include diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_db.c b/osaf/services/saf/cpsv/cpnd/cpnd_db.c --- a/osaf/services/saf/cpsv/cpnd/cpnd_db.c +++ b/osaf/services/saf/cpsv/cpnd/cpnd_db.c @@ -158,6 +158,8 @@ void cpnd_ckpt_node_destroy(CPND_CB *cb, cpnd_ckpt_sec_map_destroy(&cp_node->replica_info); + free((void *)cp_node->ckpt_name); + m_MMGR_FREE_CPND_CKPT_NODE(cp_node); TRACE_LEAVE(); @@ -275,7 +277,7 @@ uint32_t cpnd_client_node_del(CPND_CB *c * * Notes : None. *****************************************************************************/ -CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaNameT ckpt_name) +CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaConstStringT ckpt_name) { CPND_CKPT_NODE *ckpt_node = NULL; SaCkptCheckpointHandleT prev_ckpt_id; @@ -284,7 +286,7 @@ CPND_CKPT_NODE *cpnd_ckpt_node_find_by_n while (ckpt_node) { prev_ckpt_id = ckpt_node->ckpt_id; - if (memcmp(&ckpt_name, &ckpt_node->ckpt_name, sizeof(SaNameT)) == 0) { + if (strcmp(ckpt_name, ckpt_node->ckpt_name) == 0) { return ckpt_node; } cpnd_ckpt_node_getnext(cpnd_cb, prev_ckpt_id, &ckpt_node); diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c --- a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c +++ b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c @@ -593,7 +593,7 @@ static uint32_t cpnd_evt_proc_ckpt_final static uint32_t cpnd_evt_proc_ckpt_open(CPND_CB *cb, CPND_EVT *evt, CPSV_SEND_INFO *sinfo) { CPSV_EVT send_evt, *out_evt = NULL; - SaNameT ckpt_name; + SaConstStringT ckpt_name = NULL; uint32_t rc = NCSCC_RC_SUCCESS; CPND_CPD_DEFERRED_REQ_NODE *node = NULL; CPND_CKPT_CLIENT_NODE *cl_node = NULL; @@ -605,12 +605,18 @@ static uint32_t cpnd_evt_proc_ckpt_open( TRACE_ENTER(); memset(&send_evt, '\0', sizeof(CPSV_EVT)); + if ((cpnd_get_longDnsAllowed_attr() == 0) && osaf_is_an_extended_name(&evt->info.openReq.ckpt_name)) { + LOG_ER("cpnd - longDnsAllowed == false - NOT supporting extended name"); + send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_INVALID_PARAM; + goto agent_rsp; + } + if (!cpnd_is_cpd_up(cb)) { send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_TRY_AGAIN; goto agent_rsp; } - ckpt_name = evt->info.openReq.ckpt_name; + ckpt_name = osaf_extended_name_borrow(&evt->info.openReq.ckpt_name); client_hdl = evt->info.openReq.client_hdl; cpnd_client_node_get(cb, client_hdl, &cl_node); @@ -714,7 +720,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( send_evt.type = CPSV_EVT_TYPE_CPD; send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_CREATE; - send_evt.info.cpd.info.ckpt_create.ckpt_name = ckpt_name; + osaf_extended_name_lend(ckpt_name, &send_evt.info.cpd.info.ckpt_create.ckpt_name); send_evt.info.cpd.info.ckpt_create.attributes = evt->info.openReq.ckpt_attrib; send_evt.info.cpd.info.ckpt_create.ckpt_flags = evt->info.openReq.ckpt_flags; send_evt.info.cpd.info.ckpt_create.client_version = cl_node->version; @@ -723,14 +729,14 @@ static uint32_t cpnd_evt_proc_ckpt_open( rc = cpnd_mds_msg_sync_send(cb, NCSMDS_SVC_ID_CPD, cb->cpd_mdest_id, &send_evt, &out_evt, CPSV_WAIT_TIME); if (rc != NCSCC_RC_SUCCESS) { - TRACE_4("cpnd ckpt open failure for ckpt_name:%s,client_hdl:%llx",ckpt_name.value,client_hdl); + TRACE_4("cpnd ckpt open failure for ckpt_name:%s,client_hdl:%llx",ckpt_name, client_hdl); if (rc == NCSCC_RC_REQ_TIMOUT) { node = (CPND_CPD_DEFERRED_REQ_NODE *)m_MMGR_ALLOC_CPND_CPD_DEFERRED_REQ_NODE; if (!node) { TRACE_4("cpnd cpd deferred req node memory allocation for ckpt_name:%s,client_hdl:%llx", - ckpt_name.value, client_hdl); + ckpt_name, client_hdl); send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_NO_MEMORY; goto agent_rsp; } @@ -738,7 +744,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( memset(node, '\0', sizeof(CPND_CPD_DEFERRED_REQ_NODE)); node->evt.type = CPSV_EVT_TYPE_CPD; node->evt.info.cpd.type = CPD_EVT_ND2D_CKPT_DESTROY_BYNAME; - node->evt.info.cpd.info.ckpt_destroy_byname.ckpt_name = ckpt_name; + osaf_extended_name_lend(ckpt_name, &node->evt.info.cpd.info.ckpt_destroy_byname.ckpt_name); ncs_enqueue(&cb->cpnd_cpd_deferred_reqs_list, (void *)node); } @@ -773,7 +779,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( cp_node->clist = NULL; cp_node->cpnd_dest_list = NULL; - cp_node->ckpt_name = ckpt_name; + cp_node->ckpt_name = strdup(ckpt_name); cp_node->create_attrib = out_evt->info.cpnd.info.ckpt_info.attributes; cp_node->open_flags = SA_CKPT_CHECKPOINT_CREATE; @@ -828,7 +834,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( rc = cpnd_ckpt_replica_create(cb, cp_node); if (rc == NCSCC_RC_FAILURE) { TRACE_4("cpnd ckpt rep create failed ckpt_name:%s,client_hdl:%llx", - ckpt_name.value, client_hdl); + ckpt_name, client_hdl); send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_NO_RESOURCES; goto ckpt_node_free_error; } @@ -837,14 +843,14 @@ static uint32_t cpnd_evt_proc_ckpt_open( rc = cpnd_ckpt_hdr_update(cp_node); if (rc == NCSCC_RC_FAILURE) { TRACE_4("cpnd ckpt hdr update failed ckpt_name:%s,client_hdl:%llx", - ckpt_name.value, client_hdl); + ckpt_name, client_hdl); } } rc = cpnd_restart_shm_ckpt_update(cb, cp_node, client_hdl); if (rc == NCSCC_RC_FAILURE) { TRACE_4("cpnd restart shm ckpt update failed ckpt_name:%s,client_hdl:%llx", - ckpt_name.value, client_hdl); + ckpt_name, client_hdl); send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_NO_RESOURCES; goto ckpt_shm_node_free_error; } @@ -893,12 +899,12 @@ static uint32_t cpnd_evt_proc_ckpt_open( if (rc == NCSCC_RC_REQ_TIMOUT) { send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_TIMEOUT; TRACE_4("cpnd remote to active mds send fail with timeout for ckpt_name:%s,cpnd_mdest_id:%"PRIu64",\ - active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name.value, cb->cpnd_mdest_id, cp_node->active_mds_dest, cp_node->ckpt_id); + active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name, cb->cpnd_mdest_id, cp_node->active_mds_dest, cp_node->ckpt_id); } else { send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_TRY_AGAIN; TRACE_4("cpnd remote to active mds send fail with timeout for ckpt_name:%s,cpnd_mdest_id:%"PRIu64", \ - active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name.value, cb->cpnd_mdest_id, cp_node->active_mds_dest, cp_node->ckpt_id); + active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name, cb->cpnd_mdest_id, cp_node->active_mds_dest, cp_node->ckpt_id); } goto agent_rsp; @@ -941,7 +947,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( send_evt.info.cpa.info.openRsp.active_dest = cp_node->active_mds_dest; } if (send_evt.info.cpa.info.openRsp.error == SA_AIS_OK) { - TRACE_4("cpnd ckpt open success ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,active_mds_dest:%"PRIu64"",ckpt_name.value, + TRACE_4("cpnd ckpt open success ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,active_mds_dest:%"PRIu64"",ckpt_name, client_hdl, cp_node->ckpt_id,cp_node->active_mds_dest); /* CPND RESTART UPDATE THE SHARED MEMORY WITH CLIENT INFO */ cpnd_restart_set_reader_writer_flags_cnt(cb, cl_node); @@ -1128,10 +1134,17 @@ static uint32_t cpnd_evt_proc_ckpt_unlin CPND_CKPT_NODE *cp_node = NULL; uint32_t rc = NCSCC_RC_SUCCESS; CPND_CPD_DEFERRED_REQ_NODE *node = NULL; + SaConstStringT ckpt_name = osaf_extended_name_borrow(&evt->info.ulinkReq.ckpt_name); TRACE_ENTER(); memset(&send_evt, '\0', sizeof(CPSV_EVT)); + if ((cpnd_get_longDnsAllowed_attr() == 0) && osaf_is_an_extended_name(&evt->info.ulinkReq.ckpt_name)) { + LOG_ER("cpnd - longDnsAllowed == false - NOT supporting extended name"); + send_evt.info.cpa.info.ulinkRsp.error = SA_AIS_ERR_INVALID_PARAM; + goto agent_rsp; + } + if (!cpnd_is_cpd_up(cb)) { send_evt.info.cpa.info.ulinkRsp.error = SA_AIS_ERR_TRY_AGAIN; goto agent_rsp; @@ -1170,14 +1183,14 @@ static uint32_t cpnd_evt_proc_ckpt_unlin } } - cp_node = cpnd_ckpt_node_find_by_name(cb, evt->info.ulinkReq.ckpt_name); + cp_node = cpnd_ckpt_node_find_by_name(cb, ckpt_name); if (cp_node == NULL) { if (out_evt != NULL) send_evt.info.cpa.info.ulinkRsp.error = out_evt->info.cpnd.info.ulink_ack.error; else send_evt.info.cpa.info.ulinkRsp.error = SA_AIS_ERR_TIMEOUT; - TRACE_2("cpnd proc ckpt unlink success ckpt_name:%s",evt->info.ulinkReq.ckpt_name.value); + TRACE_2("cpnd proc ckpt unlink success ckpt_name:%s", ckpt_name); goto agent_rsp; } cp_node->cpa_sinfo = *(sinfo); @@ -1271,7 +1284,9 @@ static uint32_t cpnd_evt_proc_ckpt_unlin cpnd_restart_ckpt_name_length_reset(cb, cp_node); cp_node->is_unlink = true; - cp_node->ckpt_name.length = 0; + + free((void *)cp_node->ckpt_name); + cp_node->ckpt_name = strdup(""); if (cp_node->cpnd_rep_create) { rc = cpnd_ckpt_hdr_update(cp_node); @@ -1521,7 +1536,7 @@ static uint32_t cpnd_evt_proc_ckpt_ckpt_ CPND_CKPT_NODE *cp_node = NULL; SaCkptHandleT client_hdl; - SaNameT ckpt_name; + SaConstStringT ckpt_name; CPSV_EVT send_evt; uint32_t rc = NCSCC_RC_SUCCESS; CPND_CKPT_CLIENT_NODE *cl_node = NULL; @@ -1529,7 +1544,7 @@ static uint32_t cpnd_evt_proc_ckpt_ckpt_ TRACE_ENTER(); memset(&send_evt, '\0', sizeof(CPSV_EVT)); - ckpt_name = evt->info.ckptListUpdate.ckpt_name; + ckpt_name = osaf_extended_name_borrow(&evt->info.ckptListUpdate.ckpt_name); client_hdl = evt->info.ckptListUpdate.client_hdl; if (((cp_node = cpnd_ckpt_node_find_by_name(cb, ckpt_name)) != NULL) && cp_node->is_unlink == false) { @@ -1545,8 +1560,7 @@ static uint32_t cpnd_evt_proc_ckpt_ckpt_ } else { - TRACE_4("cpnd ckpt_name get failed or unlinked for ckpt_name :%s",ckpt_name.value); - + TRACE_4("cpnd ckpt_name get failed or unlinked for ckpt_name :%s",ckpt_name); } TRACE_LEAVE(); @@ -3611,7 +3625,8 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt send_evt.info.cpa.info.openRsp.active_dest = cp_node->active_mds_dest; } - TRACE_4("cpnd ckpt open success for ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,mds_mdest:%"PRIu64 ,cp_node->ckpt_name.value, evt->info.ckpt_nd2nd_sync.ckpt_sync.client_hdl, + TRACE_4("cpnd ckpt open success for ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,mds_mdest:%"PRIu64 + ,cp_node->ckpt_name, evt->info.ckpt_nd2nd_sync.ckpt_sync.client_hdl, cp_node->ckpt_id, cp_node->active_mds_dest); } else { memset(&des_evt, '\0', sizeof(CPSV_EVT)); @@ -4098,7 +4113,7 @@ static uint32_t cpnd_evt_proc_ckpt_creat cp_node->clist = NULL; cp_node->cpnd_dest_list = NULL; - cp_node->ckpt_name = evt->info.ckpt_create.ckpt_name; + cp_node->ckpt_name = strdup(osaf_extended_name_borrow(&evt->info.ckpt_create.ckpt_name)); cp_node->create_attrib = evt->info.ckpt_create.ckpt_info.attributes; cp_node->ckpt_id = evt->info.ckpt_create.ckpt_info.ckpt_id; @@ -4613,6 +4628,18 @@ uint32_t cpnd_evt_destroy(CPSV_EVT *evt) } break; } + } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_OPEN) { + if (osaf_is_an_extended_name(&evt->info.cpnd.info.openReq.ckpt_name)) + free((void *)osaf_extended_name_borrow(&evt->info.cpnd.info.openReq.ckpt_name)); + } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_UNLINK) { + if (osaf_is_an_extended_name(&evt->info.cpnd.info.ulinkReq.ckpt_name)) + free((void *)osaf_extended_name_borrow(&evt->info.cpnd.info.ulinkReq.ckpt_name)); + } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_LIST_UPDATE) { + if (osaf_is_an_extended_name(&evt->info.cpnd.info.ckptListUpdate.ckpt_name)) + free((void *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckptListUpdate.ckpt_name)); + } else if (evt->info.cpnd.type == CPND_EVT_D2ND_CKPT_CREATE) { + if (osaf_is_an_extended_name(&evt->info.cpnd.info.ckpt_create.ckpt_name)) + free((void *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckpt_create.ckpt_name)); } m_MMGR_FREE_CPSV_EVT(evt, NCS_SERVICE_ID_CPND); diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_main.c b/osaf/services/saf/cpsv/cpnd/cpnd_main.c --- a/osaf/services/saf/cpsv/cpnd/cpnd_main.c +++ b/osaf/services/saf/cpsv/cpnd/cpnd_main.c @@ -15,6 +15,7 @@ * */ +#include <stdlib.h> #include <ncssysf_tsk.h> #include <logtrace.h> @@ -27,6 +28,12 @@ static int __init_cpnd(void) { NCS_LIB_REQ_INFO lib_create; + /* Enable extended SaNameT */ + if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0) { + LOG_ER("Failed to set environment variable: SA_ENABLE_EXTENDED_NAMES"); + return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); + } + /* Init LIB_CREATE request for Server */ memset(&lib_create, 0, sizeof(lib_create)); lib_create.i_op = NCS_LIB_REQ_CREATE; diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_proc.c b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c --- a/osaf/services/saf/cpsv/cpnd/cpnd_proc.c +++ b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c @@ -55,6 +55,7 @@ static void cpnd_dump_shm_info(NCS_OS_PO static void cpnd_dump_ckpt_attri(CPND_CKPT_NODE *cp_node); static void cpnd_ckpt_sc_cpnd_mdest_del(CPND_CB *cb); static void cpnd_headless_ckpt_node_del(CPND_CB *cb); +static SaUint32T cpnd_get_imm_attr(char **attribute_names); /**************************************************************************** * Name : cpnd_ckpt_client_add @@ -455,7 +456,6 @@ uint32_t cpnd_ckpt_replica_create(CPND_C uint32_t rc = NCSCC_RC_SUCCESS; char *buf; - uint8_t size = 0, total_length; int32_t sec_cnt = 0; TRACE_ENTER(); @@ -466,14 +466,11 @@ uint32_t cpnd_ckpt_replica_create(CPND_C return NCSCC_RC_FAILURE; } - size = cp_node->ckpt_name.length; - total_length = size + sizeof(cp_node->ckpt_id) + sizeof(NODE_ID) + 5; - - buf = m_MMGR_ALLOC_CPND_DEFAULT(total_length); - memset(buf, '\0', total_length); - strncpy(buf, (char *)cp_node->ckpt_name.value, size); - - sprintf(buf + size - 1, "_%d_%llu", (uint32_t)m_NCS_NODE_ID_FROM_MDS_DEST(cb->cpnd_mdest_id), cp_node->ckpt_id); + buf = m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH); + memset(buf, '\0', CPND_MAX_REPLICA_NAME_LENGTH); + strncpy(buf, cp_node->ckpt_name, CPND_REP_NAME_MAX_CKPT_NAME_LENGTH); + + sprintf(buf + strlen(buf) - 1, "_%u_%llu", (uint32_t)m_NCS_NODE_ID_FROM_MDS_DEST(cb->cpnd_mdest_id), cp_node->ckpt_id); /* size of chkpt */ memset(&cp_node->replica_info.open, '\0', sizeof(cp_node->replica_info.open)); @@ -1816,7 +1813,7 @@ uint32_t cpnd_ckpt_hdr_update(CPND_CKPT_ memset(&write_req, '\0', sizeof(write_req)); memset(&ckpt_hdr, '\0', sizeof(CPSV_CKPT_HDR)); ckpt_hdr.ckpt_id = cp_node->ckpt_id; - ckpt_hdr.ckpt_name = cp_node->ckpt_name; + strncpy(ckpt_hdr.ckpt_name, cp_node->ckpt_name, kOsafMaxDnLength); ckpt_hdr.create_attrib = cp_node->create_attrib; ckpt_hdr.open_flags = cp_node->open_flags; ckpt_hdr.is_unlink = cp_node->is_unlink; @@ -2122,7 +2119,7 @@ void cpnd_dump_ckpt_info(CPND_CKPT_NODE CPSV_CPND_DEST_INFO *cpnd_dest_list = NULL; TRACE("++++++++++++++++++++++++++++++++++++++++++++++++++"); - TRACE("Ckpt_id - %d Ckpt Name - %.10s ", (uint32_t)ckpt_node->ckpt_id, ckpt_node->ckpt_name.value); + TRACE("Ckpt_id - %d Ckpt Name - %.10s ", (uint32_t)ckpt_node->ckpt_id, ckpt_node->ckpt_name); if (ckpt_node->is_unlink) TRACE("Ckpt Unlinked - "); if (ckpt_node->is_close) @@ -2529,12 +2526,12 @@ void cpnd_proc_ckpt_info_update(CPND_CB remaining_node--; /* send info to cpd */ - LOG_NO("cpnd_proc_update_cpd_data::ckpt_name = %s[%llu]", (char*)ckpt_node->ckpt_name.value, + LOG_NO("cpnd_proc_update_cpd_data::ckpt_name = %s[%llu]", (char*)ckpt_node->ckpt_name, ckpt_node->ckpt_id); send_evt.type = CPSV_EVT_TYPE_CPD; send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_INFO_UPDATE; send_evt.info.cpd.info.ckpt_info.ckpt_id = ckpt_node->ckpt_id; - send_evt.info.cpd.info.ckpt_info.ckpt_name = ckpt_node->ckpt_name; + osaf_extended_name_lend(ckpt_node->ckpt_name, &send_evt.info.cpd.info.ckpt_info.ckpt_name); send_evt.info.cpd.info.ckpt_info.attributes = ckpt_node->create_attrib; send_evt.info.cpd.info.ckpt_info.ckpt_flags = ckpt_node->open_flags; send_evt.info.cpd.info.ckpt_info.num_users = ckpt_node->ckpt_lcl_ref_cnt; @@ -2725,6 +2722,56 @@ void cpnd_proc_active_down_ckpt_node_del SaUint32T cpnd_get_scAbsenceAllowed_attr() { SaUint32T rc_attr_val = 0; + char *attribute_names[] = { + "scAbsenceAllowed", + NULL + }; + + TRACE_ENTER(); + + rc_attr_val = cpnd_get_imm_attr(attribute_names); + + TRACE_LEAVE(); + return rc_attr_val; +} + +/**************************************************************************************** + * Name : cpnd_get_longDnsAllowed_attr() + * + * Description : This function gets scAbsenceAllowed attribute + * + * Arguments : - + * + * Return Values : scAbsenceAllowed attribute (0 = not allowed) + *****************************************************************************************/ +SaUint32T cpnd_get_longDnsAllowed_attr() +{ + SaUint32T rc_attr_val = 0; + char *attribute_names[] = { + "longDnsAllowed", + NULL + }; + + TRACE_ENTER(); + + rc_attr_val = cpnd_get_imm_attr(attribute_names); + + TRACE_LEAVE(); + return rc_attr_val; +} + +/**************************************************************************************** + * Name : cpnd_get_imm_attr + * + * Description : This function gets IMM attribute + * + * Arguments : - + * + * Return Values : scAbsenceAllowed attribute (0 = not allowed) + *****************************************************************************************/ +static SaUint32T cpnd_get_imm_attr(char **attribute_names) +{ + SaUint32T rc_attr_val = 0; SaAisErrorT rc = SA_AIS_OK; SaImmAccessorHandleT accessorHandle; SaImmHandleT immOmHandle; @@ -2733,15 +2780,10 @@ SaUint32T cpnd_get_scAbsenceAllowed_attr TRACE_ENTER(); - char *attribute_names[] = { - "scAbsenceAllowed", - NULL - }; char object_name_str[] = "opensafImm=opensafImm,safApp=safImmService"; SaNameT object_name; - strncpy((char *) object_name.value, object_name_str, SA_MAX_NAME_LENGTH); - object_name.length = strlen((char *) object_name.value) + 1; + osaf_extended_name_lend(object_name_str, &object_name); /* Save immutil settings and reconfigure */ struct ImmutilWrapperProfile tmp_immutilWrapperProfile; @@ -2767,7 +2809,6 @@ SaUint32T cpnd_get_scAbsenceAllowed_attr goto done; } - rc = immutil_saImmOmAccessorGet_2(accessorHandle, &object_name, attribute_names, &attributes); if (rc != SA_AIS_OK) { TRACE("%s saImmOmAccessorGet_2 Fail '%s'", __FUNCTION__, saf_error(rc)); @@ -2776,11 +2817,9 @@ SaUint32T cpnd_get_scAbsenceAllowed_attr void *value; - /* Handle the global scAbsenceAllowed_flag */ attribute = attributes[0]; TRACE("%s attrName \"%s\"",__FUNCTION__,attribute->attrName); if ((attribute != NULL) && (attribute->attrValuesNumber != 0)) { - /* scAbsenceAllowed has value. Get the value */ value = attribute->attrValues[0]; rc_attr_val = *((SaUint32T *) value); } diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_res.c b/osaf/services/saf/cpsv/cpnd/cpnd_res.c --- a/osaf/services/saf/cpsv/cpnd/cpnd_res.c +++ b/osaf/services/saf/cpsv/cpnd/cpnd_res.c @@ -482,7 +482,7 @@ void *cpnd_restart_shm_create(NCS_OS_POS } memset(cp_node, '\0', sizeof(CPND_CKPT_NODE)); - cp_node->ckpt_name = cp_info.ckpt_name; + cp_node->ckpt_name = strdup(cp_info.ckpt_name); cp_node->ckpt_id = cp_info.ckpt_id; cp_node->offset = cp_info.offset; cp_node->is_close = cp_info.is_close; @@ -495,12 +495,10 @@ void *cpnd_restart_shm_create(NCS_OS_POS if (cp_info.cpnd_rep_create) { /* OPEN THE SHARED MEMORY ALREADY CREATED FOR CHECKPOINT REPLICA */ /* size=cp_node->ckpt_name.length; */ - size = cp_node->ckpt_name.length; - total_length = size + sizeof(cp_node->ckpt_id) + sizeof(NODE_ID) + 5; - buf = m_MMGR_ALLOC_CPND_DEFAULT(total_length); - memset(buf, '\0', total_length); - strncpy(buf, (char *)cp_node->ckpt_name.value, size); - sprintf(buf + size - 1, "_%d_%d", (uint32_t)nodeid, (uint32_t)cp_node->ckpt_id); + buf = m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH); + memset(buf, '\0', CPND_MAX_REPLICA_NAME_LENGTH); + strncpy(buf, cp_node->ckpt_name, CPND_REP_NAME_MAX_CKPT_NAME_LENGTH); + sprintf(buf + strlen(buf) - 1, "_%u_%llu", (uint32_t)nodeid, cp_node->ckpt_id); rc = cpnd_ckpt_replica_create_res(&ckpt_rep_open, buf, &cp_node, 0, &cp_info, cb->shm_alloc_guaranteed); if (rc != NCSCC_RC_SUCCESS) { /* assert(0); */ @@ -511,8 +509,10 @@ void *cpnd_restart_shm_create(NCS_OS_POS } cb->num_rep++; } - if (cp_node->is_unlink) - cp_node->ckpt_name.length = 0; + if (cp_node->is_unlink) { + free((void *)cp_node->ckpt_name); + cp_node->ckpt_name = strdup(""); + } memset(&tmp_cp_info, '\0', sizeof(CKPT_INFO)); memcpy(&tmp_cp_info, &cp_info, sizeof(CKPT_INFO)); @@ -1021,7 +1021,7 @@ uint32_t cpnd_write_ckpt_info(CPND_CB *c TRACE_ENTER(); memset(&ckpt_info, 0, sizeof(CKPT_INFO)); - ckpt_info.ckpt_name = cp_node->ckpt_name; + strncpy(ckpt_info.ckpt_name, cp_node->ckpt_name, kOsafMaxDnLength); ckpt_info.ckpt_id = cp_node->ckpt_id; ckpt_info.maxSections = cp_node->create_attrib.maxSections; ckpt_info.maxSecSize = cp_node->create_attrib.maxSectionSize; ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel