- guess the commit message should start with "dtm: "
- not sure how this change relates to 654 which is an mds ticket
- again I don't see the use case /benefit of this patch in the commit message
- and again I don't think dtm should set a default value for rcvbuf and sndbuf 
since that makes it impossible to use standard tool sysctl

Thanks,
Hans

> -----Original Message-----
> From: [email protected] [mailto:[email protected]]
> Sent: den 19 maj 2014 06:41
> To: [email protected]; Hans Feldt
> Cc: [email protected]
> Subject: [PATCH 2 of 3] mds: make SO_RCVBUF & SO_SNDBUF value of TCP 
> configurable [#654]
> 
>  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

Reply via email to