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_REP_NAME_MAX_CKPT_NAME_LENGTH 150
+#define CPND_MAX_REPLICA_NAME_LENGTH (CPND_REP_NAME_MAX_CKPT_NAME_LENGTH + 50)
+
#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();
@@ -3600,7 +3614,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));
@@ -4087,7 +4102,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;
@@ -4602,6 +4617,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, "_%d_%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));
@@ -1811,7 +1808,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;
@@ -2117,7 +2114,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)
@@ -2518,12 +2515,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;
@@ -2714,6 +2711,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;
@@ -2722,15 +2769,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;
@@ -2756,7 +2798,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));
@@ -2765,11 +2806,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
@@ -465,7 +465,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;
@@ -478,12 +478,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,
"_%d_%d", (uint32_t)nodeid, (uint32_t)cp_node->ckpt_id);
rc =
cpnd_ckpt_replica_create_res(&ckpt_rep_open, buf, &cp_node, 0, &cp_info);
if (rc != NCSCC_RC_SUCCESS) {
/* assert(0); */
@@ -494,8 +492,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));
@@ -1004,7 +1004,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;
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel