Hi Hans,
Ack with one question, started with [Vu]. Thanks!
Regards, Vu
-----Original Message-----
From: Hans Nordeback <hans.nordeb...@ericsson.com>
Sent: Monday, May 28, 2018 6:18 PM
To: vu.m.ngu...@dektech.com.au
Cc: opensaf-devel@lists.sourceforge.net; Hans Nordeback
<hans.nordeb...@ericsson.com>
Subject: [PATCH 1/1] mds: return success at failure in case of using
broadcast
send type [#2866]
---
src/mds/apitest/mdstipc.h | 2 +
src/mds/apitest/mdstipc_api.c | 130
++++++++++++++++++++++++++++++++++
src/mds/mds_dt_tipc.c | 2 +-
3 files changed, 133 insertions(+), 1 deletion(-)
diff --git a/src/mds/apitest/mdstipc.h b/src/mds/apitest/mdstipc.h
index 01b58c405..07cf55696 100644
--- a/src/mds/apitest/mdstipc.h
+++ b/src/mds/apitest/mdstipc.h
@@ -361,6 +361,8 @@ void tet_broadcast_to_svc_tp_3(void);
void tet_broadcast_to_svc_tp_4(void);
void tet_broadcast_to_svc_tp_5(void);
void tet_broadcast_to_svc_tp_6(void);
+void tet_broadcast_to_svc_tp_7(void);
+void tet_broadcast_to_svc_tp_8(void);
void tet_direct_just_send_tp_1(void);
void tet_direct_just_send_tp_2(void);
void tet_direct_just_send_tp_3(void);
diff --git a/src/mds/apitest/mdstipc_api.c b/src/mds/apitest/mdstipc_api.c
index de166d11d..e320e094e 100644
--- a/src/mds/apitest/mdstipc_api.c
+++ b/src/mds/apitest/mdstipc_api.c
@@ -7479,6 +7479,130 @@ void tet_broadcast_to_svc_tp_6()
test_validate(FAIL, 0);
}
+void tet_broadcast_to_svc_tp_7()
+{
+ int FAIL = 0;
+ MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN};
+
+ // Test broadcast of large message
+ char tmp[65220] = " Hi All ";
+ TET_MDS_MSG *mesg;
+ mesg = (TET_MDS_MSG *)malloc(sizeof(TET_MDS_MSG));
+ memset(mesg, 0, sizeof(TET_MDS_MSG));
+ memcpy(mesg->send_data, tmp, sizeof(tmp));
+ mesg->send_len = sizeof(tmp);
+
+ /*Start up*/
+ if (tet_initialise_setup(false)) {
+ printf("\nSetup Initialisation has Failed \n");
+ FAIL = 1;
+ } else {
+
/*--------------------------------------------------------------------*/
+ printf(
+ "\nCase 1: Svc INTMIN on VDEST=200 Broadcasting a LOW
Priority message to Svc EXTMIN\n");
+ if (mds_service_subscribe(gl_tet_vdest[1].mds_pwe1_hdl,
+ NCSMDS_SVC_ID_INTERNAL_MIN,
+ NCSMDS_SCOPE_NONE, 1,
+ svcids) != NCSCC_RC_SUCCESS) {
+ printf("\nFail\n");
+ FAIL = 1;
+ }
+ if (mds_service_retrieve(gl_tet_vdest[1].mds_pwe1_hdl,
+ NCSMDS_SVC_ID_INTERNAL_MIN,
+ SA_DISPATCH_ALL) !=
NCSCC_RC_SUCCESS) {
+ printf("\nFail\n");
+ FAIL = 1;
+ }
+ if (mds_broadcast_to_svc(
+ gl_tet_vdest[1].mds_pwe1_hdl,
+ NCSMDS_SVC_ID_INTERNAL_MIN,
NCSMDS_SVC_ID_EXTERNAL_MIN,
+ NCSMDS_SCOPE_NONE, MDS_SEND_PRIORITY_LOW,
+ mesg) != NCSCC_RC_SUCCESS) {
+ printf("\nFail\n");
+ FAIL = 1;
+ } else
+ printf("\nSuccess\n");
+ if (mds_service_cancel_subscription(
+ gl_tet_vdest[1].mds_pwe1_hdl,
+ NCSMDS_SVC_ID_INTERNAL_MIN, 1,
+ svcids) != NCSCC_RC_SUCCESS) {
+ printf("\nFail\n");
+ FAIL = 1;
+ }
+ }
+
/*---------------------------------------------------------------------*/
+ /*clean up*/
+ if (tet_cleanup_setup()) {
+ printf("\nSetup Clean Up has Failed \n");
+ FAIL = 1;
+ }
+
+ free(mesg);
+ test_validate(FAIL, 0);
+}
+
+void tet_broadcast_to_svc_tp_8()
+{
+ int FAIL = 0;
+ MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN};
+
+ // Test broadcast of large message
+ char tmp[66000] = " Hi All ";
+ TET_MDS_MSG *mesg;
+ mesg = (TET_MDS_MSG *)malloc(sizeof(TET_MDS_MSG));
+ memset(mesg, 0, sizeof(TET_MDS_MSG));
+ memcpy(mesg->send_data, tmp, sizeof(tmp));
+ mesg->send_len = sizeof(tmp);
+
+ /*Start up*/
+ if (tet_initialise_setup(false)) {
+ printf("\nSetup Initialisation has Failed \n");
+ FAIL = 1;
+ } else {
+
/*--------------------------------------------------------------------*/
+ printf(
+ "\nCase 1: Svc INTMIN on VDEST=200 Broadcasting a LOW
Priority message to Svc EXTMIN\n");
+ if (mds_service_subscribe(gl_tet_vdest[1].mds_pwe1_hdl,
+ NCSMDS_SVC_ID_INTERNAL_MIN,
+ NCSMDS_SCOPE_NONE, 1,
+ svcids) != NCSCC_RC_SUCCESS) {
+ printf("\nFail\n");
+ FAIL = 1;
+ }
+ if (mds_service_retrieve(gl_tet_vdest[1].mds_pwe1_hdl,
+ NCSMDS_SVC_ID_INTERNAL_MIN,
+ SA_DISPATCH_ALL) !=
NCSCC_RC_SUCCESS) {
+ printf("\nFail\n");
+ FAIL = 1;
+ }
+ if (mds_broadcast_to_svc(
+ gl_tet_vdest[1].mds_pwe1_hdl,
+ NCSMDS_SVC_ID_INTERNAL_MIN,
NCSMDS_SVC_ID_EXTERNAL_MIN,
+ NCSMDS_SCOPE_NONE, MDS_SEND_PRIORITY_LOW,
+ mesg) != NCSCC_RC_SUCCESS) {
+ printf("\nFail\n");
+ FAIL = 1;
+ } else
+ printf("\nSuccess\n");
+ if (mds_service_cancel_subscription(
+ gl_tet_vdest[1].mds_pwe1_hdl,
+ NCSMDS_SVC_ID_INTERNAL_MIN, 1,
+ svcids) != NCSCC_RC_SUCCESS) {
+ printf("\nFail\n");
+ FAIL = 1;
+ }
+ }
+
/*---------------------------------------------------------------------*/
+ /*clean up*/
+ if (tet_cleanup_setup()) {
+ printf("\nSetup Clean Up has Failed \n");
+ FAIL = 1;
+ }
+
+ free(mesg);
+ test_validate(FAIL, 0);
+}
+
/*---------------- DIRECT SEND TEST
CASES--------------------------------*/
void tet_direct_just_send_tp_1()
@@ -13422,6 +13546,12 @@ __attribute__((constructor)) static void
mdsTipcAPI_constructor(void)
test_case_add(
12, tet_broadcast_to_svc_tp_6,
"Svc INTMIN on VDEST=200 Broadcasting a VERY HIGH Priority
message (>MDS_DIRECT_BUF_MAXSIZE) to Svc EXTMIN");
+ test_case_add(
+ 12, tet_broadcast_to_svc_tp_7,
+ "Svc INTMIN on VDEST=200 Broadcasting a LOW Priority message
to Svc EXTMIN, large buffer near MDS_DIRECT_BUF_MAXSIZE");
+ test_case_add(
+ 12, tet_broadcast_to_svc_tp_8,
+ "Svc INTMIN on VDEST=200 Broadcasting a LOW Priority message
to Svc EXTMIN, large buffer > MDS_DIRECT_BUF_MAXSIZE");
test_suite_add(13, "Direct Just Send test cases");
test_case_add(
diff --git a/src/mds/mds_dt_tipc.c b/src/mds/mds_dt_tipc.c
index 77141757b..a3abff5f7 100644
--- a/src/mds/mds_dt_tipc.c
+++ b/src/mds/mds_dt_tipc.c
@@ -2700,7 +2700,7 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_REQ
*req)
req->src_svc_id,
get_svc_names(req->dest_svc_id),
req->dest_svc_id);
- if (len > MDS_DIRECT_BUF_MAXSIZE) {
+ if (len -
sum_mds_hdr_plus_mdtm_hdr_plus_len > MDS_DIRECT_BUF_MAXSIZE) {
[Vu] Seems this check is a dead code because it already has a check prior?
if (len > frag_size) {
/* Packet needs to be fragmented and send */
return mdtm_frag_and_send(req, frag_seq_num, tipc_id, frag_size);
}
m_MMGR_FREE_BUFR_LIST(usrbuf);
free(body);
LOG_NO(
--
2.17.0