osaf/services/infrastructure/dtms/config/dtmd.conf | 11 ++++
osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c | 36 ++++++++--------
osaf/services/infrastructure/dtms/dtm/dtm_read_config.c | 15 ++++++
osaf/services/infrastructure/dtms/include/dtm_cb.h | 1 +
4 files changed, 45 insertions(+), 18 deletions(-)
Made TCP_NODELAY configurable to specifi whether MDS TCP
transport should follow the Nagle algorithm for deciding when to send data.By
default, TCP will follow the Nagle algorithm is disable this behavior , can be
configured to TRUE(1) or FALSE(0)
Note :This path is on top of Hans Feldt published on 4-29-2014 10:58 AM.
diff --git a/osaf/services/infrastructure/dtms/config/dtmd.conf
b/osaf/services/infrastructure/dtms/config/dtmd.conf
--- a/osaf/services/infrastructure/dtms/config/dtmd.conf
+++ b/osaf/services/infrastructure/dtms/config/dtmd.conf
@@ -85,3 +85,14 @@ DTM_TCP_KEEPALIVE_PROBES=2
#export MDS_SOCK_SND_RCV_BUF_SIZE=16777216
DTM_SOCK_SND_RCV_BUF_SIZE=126976
+#
+#Specifies whether MDS TCP transport should follow the Nagle algorithm for
+#deciding when to send data.By default, TCP will follow the Nagle algorithm is
disable
+#this behavior,MDS TCP transport can enable TCP_NODELAY to force
+#TCP to always send data immediately.For example,TCP_NODELAY should be used
+#when there is an application using TCP for a request/response.
+#This option is only supported for sockets with an address family
+#of AF_INET or AF_INET6 (internode )and type of SOCK_STREAM
+# TRUE(1) or FALSE(0)
+DTM_TCP_NODELAY_FLAG=1
+
diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c
b/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c
--- a/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c
+++ b/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c
@@ -577,12 +577,12 @@ int comm_socket_setup_new(DTM_INTERNODE_
goto done;
}
- int flag = 1;
- if (setsockopt(sock_desc, IPPROTO_TCP, TCP_NODELAY, (void *)&flag,
sizeof(flag)) != 0) {
- LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s",
strerror(errno));
- dtm_comm_socket_close(&sock_desc);
- goto done;
- }
+ int flag = dtms_cb->tcp_nodelay_flag;
+ if (setsockopt(sock_desc, IPPROTO_TCP, TCP_NODELAY, (void *)&flag,
sizeof(flag)) != 0) {
+ LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s",
strerror(errno));
+ dtm_comm_socket_close(&sock_desc);
+ goto done;
+ }
if (NCSCC_RC_SUCCESS != set_keepalive(dtms_cb, sock_desc)) {
LOG_ER("DTM :set_keepalive failed ");
@@ -727,12 +727,12 @@ uint32_t dtm_stream_nonblocking_listener
LOG_ER("DTM:Socket snd buf size set failed err :%s",
strerror(errno));
}
- int flag = 1;
- if (setsockopt(dtms_cb->stream_sock, IPPROTO_TCP, TCP_NODELAY, (void
*)&flag, sizeof(flag)) != 0) {
- LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s",
strerror(errno));
- dtm_sockdesc_close(dtms_cb->stream_sock);
- return NCSCC_RC_FAILURE;
- }
+ int flag = dtms_cb->tcp_nodelay_flag;
+ if (setsockopt(dtms_cb->stream_sock, IPPROTO_TCP, TCP_NODELAY, (void
*)&flag, sizeof(flag)) != 0) {
+ LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s",
strerror(errno));
+ dtm_sockdesc_close(dtms_cb->stream_sock);
+ return NCSCC_RC_FAILURE;
+ }
if (set_keepalive(dtms_cb, dtms_cb->stream_sock) != NCSCC_RC_SUCCESS) {
LOG_ER("DTM : set_keepalive() failed");
@@ -1296,12 +1296,12 @@ int dtm_process_accept(DTM_INTERNODE_CB
goto done;
}
- int flag = 1;
- if (setsockopt(new_conn_sd, IPPROTO_TCP, TCP_NODELAY, (void *)&flag,
sizeof(flag)) != 0) {
- LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s",
strerror(errno));
- dtm_comm_socket_close(&new_conn_sd);
- goto done;
- }
+ int flag = dtms_cb->tcp_nodelay_flag;
+ if (setsockopt(new_conn_sd, IPPROTO_TCP, TCP_NODELAY, (void *)&flag,
sizeof(flag)) != 0) {
+ LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s",
strerror(errno));
+ dtm_comm_socket_close(&new_conn_sd);
+ goto done;
+ }
if (NCSCC_RC_SUCCESS != set_keepalive(dtms_cb, new_conn_sd)) {
LOG_ER("DTM:set_keepalive failed ");
diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
--- a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
+++ b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
@@ -96,6 +96,8 @@ void dtm_print_config(DTM_INTERNODE_CB *
TRACE(" %d", config->bcast_msg_freq);
TRACE(" DTM_SOCK_SND_RCV_BUF_SIZE: ");
TRACE(" %d", config->sock_snd_rcv_buf_size);
+ TRACE(" DTM_TCP_NODELAY_FLAG: ");
+ TRACE(" %d", config->tcp_nodelay_flag);
TRACE("DTM : ");
}
@@ -223,6 +225,7 @@ int dtm_read_config(DTM_INTERNODE_CB * c
config->bcast_msg_freq = BCAST_FRE;
config->initial_dis_timeout = DIS_TIME_OUT;
config->sock_snd_rcv_buf_size = DTM_SOCK_SND_RCV_BUF_SIZE;
+ config->tcp_nodelay_flag = true;
config->mcast_flag = false;
config->scope_link = false;
config->node_id = m_NCS_GET_NODE_ID;
@@ -439,6 +442,18 @@ int dtm_read_config(DTM_INTERNODE_CB * c
tag_len = 0;
}
+
+ if (strncmp(line, "DTM_TCP_NODELAY_FLAG=",
strlen("DTM_TCP_NODELAY_FLAG=")) == 0) {
+ tag_len = strlen("DTM_TCP_NODELAY_FLAG=");
+ config->tcp_nodelay_flag = atoi(&line[tag_len]);
+ if (config->tcp_nodelay_flag < 0 ||
config->tcp_nodelay_flag > 1) {
+ LOG_ER("DTM: DTM_TCP_NODELAY_FLAG
needs to be 0 or 1 of dtmd.conf ");
+ return -1;
+ }
+ tag = 0;
+ tag_len = 0;
+
+ }
}
memset(line, 0, DTM_MAX_TAG_LEN);
diff --git a/osaf/services/infrastructure/dtms/include/dtm_cb.h
b/osaf/services/infrastructure/dtms/include/dtm_cb.h
--- a/osaf/services/infrastructure/dtms/include/dtm_cb.h
+++ b/osaf/services/infrastructure/dtms/include/dtm_cb.h
@@ -91,6 +91,7 @@ typedef struct dtm_internode_cb {
int comm_keepalive_intvl;
int comm_keepalive_probes;
int32_t sock_snd_rcv_buf_size; /* The value of SO_RCVBUF & SO_SNDBUF */
+ uint32_t tcp_nodelay_flag; /* The value of TCP_NODELAY Flag */
SYSF_MBX mbx;
int mbx_fd;
} DTM_INTERNODE_CB;
------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel