osaf/services/infrastructure/dtms/config/dtmd.conf | 12 +++++++++++
osaf/services/infrastructure/dtms/dtm/dtm_intra.c | 13 +++++------
osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c | 10 +++-----
osaf/services/infrastructure/dtms/dtm/dtm_read_config.c | 15 ++++++++++++++
osaf/services/infrastructure/dtms/include/dtm.h | 2 +
osaf/services/infrastructure/dtms/include/dtm_cb.h | 2 +
osaf/services/infrastructure/dtms/include/dtm_intra_disc.h | 2 -
7 files changed, 41 insertions(+), 15 deletions(-)
Made DTM-TCP inter-node & intra-node socket SO_SNDBUF and
SO_RCVBUF buffer in bytes configurable . The kernel doubles this value (to
allow space for bookkeeping over-head) when it is set using setsockopt(),and
this doubled value is returned by getsockopt(). The default value is
set to DTM_SOCK_SND_RCV_BUF_SIZE=126976
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
@@ -72,4 +72,16 @@ DTM_TCP_KEEPALIVE_INTVL=1
# Optional
DTM_TCP_KEEPALIVE_PROBES=2
+#
+#Used to Set the dtm internode & intranode socket SO_SNDBUF/SO_RCVBUF buffer
in bytes.
+#The kernel doubles this value (to allow space for bookkeeping over-head)
+#when it is set using setsockopt(),and this doubled value is returned by
+#getsockopt(). The default value is set by the rmem_default/wmem_default
+#sysctl and the maximum allowed value is set by the rmem_max/wmem_max sysctl.
+#
+# IMP NOTE : If DTM_SOCK_SND_RCV_BUF_SIZE is configured according to
application requirements ,
+#it is also mandatory to export `MDS_SOCK_SND_RCV_BUF_SIZE=` with the same
value of
+#for example if set as DTM_SOCK_SND_RCV_BUF_SIZE=16777216 need to do :
+#export MDS_SOCK_SND_RCV_BUF_SIZE=16777216
+DTM_SOCK_SND_RCV_BUF_SIZE=126976
diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_intra.c
b/osaf/services/infrastructure/dtms/dtm/dtm_intra.c
--- a/osaf/services/infrastructure/dtms/dtm/dtm_intra.c
+++ b/osaf/services/infrastructure/dtms/dtm/dtm_intra.c
@@ -42,7 +42,6 @@ DTM_INTRANODE_CB *dtm_intranode_cb = NUL
#define DTM_INTRANODE_MAX_PROCESSES 100
#define DTM_INTRANODE_POLL_TIMEOUT 20000
-#define DTM_RECV_BUFFER_SIZE 1500
#define DTM_INTRANODE_TASKNAME "DTM_INTRANODE"
#define DTM_INTRANODE_STACKSIZE NCS_STACKSIZE_HUGE
@@ -58,7 +57,7 @@ static struct pollfd pfd_list[DTM_INTRAN
static int dtm_intranode_max_fd;
-static uint32_t dtm_intra_processing_init(char *node_ip, DTM_IP_ADDR_TYPE
i_addr_family);
+static uint32_t dtm_intra_processing_init(char *node_ip, DTM_IP_ADDR_TYPE
i_addr_family, int32_t sock_snd_rcv_buf_size);
static void dtm_intranode_processing(void);
static uint32_t dtm_intranode_add_poll_fdlist(int fd, uint16_t event);
static uint32_t dtm_intranode_create_rcv_task(int task_hdl);
@@ -79,10 +78,9 @@ uint32_t dtm_socket_domain = AF_UNIX;
*/
uint32_t dtm_service_discovery_init(DTM_INTERNODE_CB *dtms_cb)
{
- return dtm_intra_processing_init(dtms_cb->ip_addr,
dtms_cb->i_addr_family);
+ return dtm_intra_processing_init(dtms_cb->ip_addr,
dtms_cb->i_addr_family, dtms_cb->sock_snd_rcv_buf_size);
}
-#define DTM_INTRANODE_SOCK_SIZE 64000
/**
* Function to init the intranode processing
@@ -92,10 +90,10 @@ uint32_t dtm_service_discovery_init(DTM_
* @return NCSCC_RC_FAILURE
*
*/
-uint32_t dtm_intra_processing_init(char *node_ip, DTM_IP_ADDR_TYPE
i_addr_family)
+uint32_t dtm_intra_processing_init(char *node_ip, DTM_IP_ADDR_TYPE
i_addr_family, int32_t sock_snd_rcv_buf_size)
{
- int servlen, size = DTM_INTRANODE_SOCK_SIZE; /* For socket fd and
server len */
+ int servlen, size = sock_snd_rcv_buf_size; /* For socket fd and
server len */
struct sockaddr_un serv_addr; /* For Unix Sock address */
char server_ux_name[255];
NCS_PATRICIA_PARAMS pat_tree_params;
@@ -112,6 +110,7 @@ uint32_t dtm_intra_processing_init(char
return NCSCC_RC_FAILURE;
}
dtm_intranode_cb->sock_domain = dtm_socket_domain;
+ dtm_intranode_cb->sock_snd_rcv_buf_size = sock_snd_rcv_buf_size;
/* Open a socket, If socket opens to fail return Error */
dtm_intranode_cb->server_sockfd = socket(dtm_socket_domain,
SOCK_STREAM, 0);
@@ -894,7 +893,7 @@ static uint32_t dtm_intranode_process_in
{
int flags;
/* Accept processing */
- int accept_fd = 0, retry_count = 0, size = DTM_INTRANODE_SOCK_SIZE;
+ int accept_fd = 0, retry_count = 0, size =
dtm_intranode_cb->sock_snd_rcv_buf_size;
socklen_t len = sizeof(struct sockaddr_un);
struct sockaddr_un cli_addr;
/* Accept should be non_block */
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
@@ -26,7 +26,6 @@
#define MYPORT "6900"
#define MAXBUFLEN 100
-#define DTM_INTERNODE_SOCK_SIZE 64000
struct addrinfo *mcast_sender_addr; /* Holder for mcast_sender_addr address
*/
@@ -431,7 +430,7 @@ uint32_t dtm_comm_socket_send(int sock_d
int rtn = 0;
int err = 0;
int rc = NCSCC_RC_SUCCESS;
- rtn = send(sock_desc, (raw_type *) buffer, buffer_len, 0);
+ rtn = send(sock_desc, (raw_type *) buffer, buffer_len, MSG_NOSIGNAL);
err = errno;
if (rtn < 0) {
if (!IS_BLOCKIN_ERROR(err)) {
@@ -508,7 +507,7 @@ static char *comm_get_foreign_address(in
int comm_socket_setup_new(DTM_INTERNODE_CB * dtms_cb, const char
*foreign_address, in_port_t foreign_port,
DTM_IP_ADDR_TYPE ip_addr_type)
{
- int sock_desc = -1, size = DTM_INTERNODE_SOCK_SIZE;
+ int sock_desc = -1, size = dtms_cb->sock_snd_rcv_buf_size;
int err = 0, rv;
char local_port_str[INET6_ADDRSTRLEN];
struct addrinfo *addr_list;
@@ -660,7 +659,7 @@ uint32_t dtm_stream_nonblocking_listener
struct addrinfo addr_criteria; /* Criteria for address match */
char local_port_str[6];
struct addrinfo *addr_list = NULL, *p;; /* List of serv addresses */
- int size = DTM_INTERNODE_SOCK_SIZE;
+ int size = dtms_cb->sock_snd_rcv_buf_size;
int rv;
char ip_addr_eth[INET6_ADDRSTRLEN + IFNAMSIZ];
dtms_cb->stream_sock = -1;
@@ -1249,7 +1248,6 @@ int dtm_process_connect(DTM_INTERNODE_CB
}
-#define DTM_INTERNODE_SOCK_SIZE 64000
/**
* Function for dtm accept the connection
@@ -1270,7 +1268,7 @@ int dtm_process_accept(DTM_INTERNODE_CB
int err = 0;
DTM_NODE_DB node;
DTM_NODE_DB *new_node;
- int new_conn_sd, size = DTM_INTERNODE_SOCK_SIZE;
+ int new_conn_sd, size = dtms_cb->sock_snd_rcv_buf_size;
const struct sockaddr *clnt_addr1 = (struct sockaddr *)&clnt_addr;
TRACE_ENTER();
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
@@ -94,6 +94,8 @@ void dtm_print_config(DTM_INTERNODE_CB *
TRACE(" %d", config->initial_dis_timeout);
TRACE(" DTM_BCAST_FRE_MSECS: ");
TRACE(" %d", config->bcast_msg_freq);
+ TRACE(" DTM_SOCK_SND_RCV_BUF_SIZE: ");
+ TRACE(" %d", config->sock_snd_rcv_buf_size);
TRACE("DTM : ");
}
@@ -220,6 +222,7 @@ int dtm_read_config(DTM_INTERNODE_CB * c
config->i_addr_family = DTM_IP_ADDR_TYPE_IPV4;
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->mcast_flag = false;
config->scope_link = false;
config->node_id = m_NCS_GET_NODE_ID;
@@ -424,6 +427,18 @@ int dtm_read_config(DTM_INTERNODE_CB * c
tag_len = 0;
}
+ if (strncmp(line, "DTM_SOCK_SND_RCV_BUF_SIZE=",
strlen("DTM_SOCK_SND_RCV_BUF_SIZE=")) == 0) {
+ tag_len = strlen("DTM_SOCK_SND_RCV_BUF_SIZE=");
+ config->sock_snd_rcv_buf_size =
atoi(&line[tag_len]);
+ if (config->sock_snd_rcv_buf_size < 126976) {
+ LOG_ER("DTM: DTM_SOCK_SND_RCV_BUF_SIZE
must be greater than rmem_default/wmem_default sysctl 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.h
b/osaf/services/infrastructure/dtms/include/dtm.h
--- a/osaf/services/infrastructure/dtms/include/dtm.h
+++ b/osaf/services/infrastructure/dtms/include/dtm.h
@@ -37,6 +37,8 @@ extern uint8_t initial_discovery_phase;
#define m_NODE_DISCOVERY_TASKNAME "NODE_DISCOVERY"
#define m_NODE_DISCOVERY_STACKSIZE NCS_STACKSIZE_HUGE
+/* The default value of SO_RCVBUF & SO_SNDBUF , it is set by the
rmem_default/wmem_default */
+#define DTM_SOCK_SND_RCV_BUF_SIZE 126976
#define DTM_MAX_TAG_LEN 256
typedef enum {
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
@@ -90,6 +90,7 @@ typedef struct dtm_internode_cb {
int comm_keepidle_time;
int comm_keepalive_intvl;
int comm_keepalive_probes;
+ int32_t sock_snd_rcv_buf_size; /* The value of SO_RCVBUF & SO_SNDBUF */
SYSF_MBX mbx;
int mbx_fd;
} DTM_INTERNODE_CB;
@@ -116,6 +117,7 @@ typedef struct dtm_intranode_cb {
SYSF_MBX mbx;
int mbx_fd;
int sock_domain;
+ int32_t sock_snd_rcv_buf_size; /* The value of SO_RCVBUF & SO_SNDBUF */
} DTM_INTRANODE_CB;
extern DTM_INTRANODE_CB *dtm_intranode_cb;
diff --git a/osaf/services/infrastructure/dtms/include/dtm_intra_disc.h
b/osaf/services/infrastructure/dtms/include/dtm_intra_disc.h
--- a/osaf/services/infrastructure/dtms/include/dtm_intra_disc.h
+++ b/osaf/services/infrastructure/dtms/include/dtm_intra_disc.h
@@ -17,8 +17,6 @@
#ifndef DTM_INTRA_DISC_H
#define DTM_INTRA_DISC_H
-#define DTM_INTRANODE_MSG_SIZE 1400
-#define DTM_INTERNODE_MSG_SIZE DTM_INTRANODE_MSG_SIZE
/* 2 -len(0), 4 - iden(2), 1- ver(6), 1-msg type(7), 4- server_type (8),
4 -server lower(12), 4 -server lower(16), 8 -ref(20), 4
- nodeid(28),
------------------------------------------------------------------------------
"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