X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fgmond.c;h=b6971b1a685be1625a1b0b508d9a9c535356867e;hb=c5960550f1b05c46cc7859270a0ed819a8b5fd40;hp=2ac9f2501c390e09b3a0f9783fb3078ec0c2fae4;hpb=abc30f241619b3eb66c801c324390e1e9e6e001f;p=collectd.git diff --git a/src/gmond.c b/src/gmond.c index 2ac9f250..b6971b1a 100644 --- a/src/gmond.c +++ b/src/gmond.c @@ -30,12 +30,6 @@ #include "configfile.h" #include "utils_avltree.h" -#if HAVE_PTHREAD_H -# include -#endif -#if HAVE_SYS_SOCKET_H -# include -#endif #if HAVE_NETDB_H # include #endif @@ -83,12 +77,12 @@ typedef struct staging_entry_s staging_entry_t; struct metric_map_s { - char *ganglia_name; - char *type; - char *type_instance; - char *ds_name; - int ds_type; - int ds_index; + char *ganglia_name; + char *type; + char *type_instance; + char *ds_name; + int ds_type; + size_t ds_index; }; typedef struct metric_map_s metric_map_t; @@ -166,7 +160,7 @@ static metric_map_t *metric_lookup (const char *key) /* {{{ */ return (NULL); /* Look up the DS type and ds_index. */ - if ((map[i].ds_type < 0) || (map[i].ds_index < 0)) /* {{{ */ + if (map[i].ds_type < 0) /* {{{ */ { const data_set_t *ds; @@ -191,7 +185,7 @@ static metric_map_t *metric_lookup (const char *key) /* {{{ */ } else { - int j; + size_t j; for (j = 0; j < ds->ds_num; j++) if (strcasecmp (ds->ds[j].name, map[i].ds_name) == 0) @@ -217,7 +211,7 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ size_t *ret_sockets_num, const char *node, const char *service, int listen) { - struct addrinfo ai_hints; + struct addrinfo ai_hints = { 0 }; struct addrinfo *ai_list; struct addrinfo *ai_ptr; int ai_return; @@ -230,14 +224,10 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ if (*ret_sockets != NULL) return (EINVAL); - memset (&ai_hints, 0, sizeof (ai_hints)); - ai_hints.ai_flags = 0; + ai_hints.ai_flags = AI_ADDRCONFIG; #ifdef AI_PASSIVE ai_hints.ai_flags |= AI_PASSIVE; #endif -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif ai_hints.ai_family = AF_UNSPEC; ai_hints.ai_socktype = SOCK_DGRAM; ai_hints.ai_protocol = IPPROTO_UDP; @@ -314,7 +304,6 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ if (ai_ptr->ai_family == AF_INET) { struct sockaddr_in *addr; - struct ip_mreq mreq; int loop; addr = (struct sockaddr_in *) ai_ptr->ai_addr; @@ -326,19 +315,32 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ } loop = 1; - setsockopt (sockets[sockets_num].fd, IPPROTO_IP, IP_MULTICAST_LOOP, + status = setsockopt (sockets[sockets_num].fd, IPPROTO_IP, IP_MULTICAST_LOOP, (void *) &loop, sizeof (loop)); + if (status != 0) + { + char errbuf[1024]; + WARNING ("gmond plugin: setsockopt(2) failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + } + + struct ip_mreq mreq = { + .imr_multiaddr.s_addr = addr->sin_addr.s_addr, + .imr_interface.s_addr = htonl (INADDR_ANY) + }; - memset (&mreq, 0, sizeof (mreq)); - mreq.imr_multiaddr.s_addr = addr->sin_addr.s_addr; - mreq.imr_interface.s_addr = htonl (INADDR_ANY); - setsockopt (sockets[sockets_num].fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, + status = setsockopt (sockets[sockets_num].fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void *) &mreq, sizeof (mreq)); + if (status != 0) + { + char errbuf[1024]; + WARNING ("gmond plugin: setsockopt(2) failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + } } /* if (ai_ptr->ai_family == AF_INET) */ else if (ai_ptr->ai_family == AF_INET6) { struct sockaddr_in6 *addr; - struct ipv6_mreq mreq; int loop; addr = (struct sockaddr_in6 *) ai_ptr->ai_addr; @@ -350,15 +352,29 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ } loop = 1; - setsockopt (sockets[sockets_num].fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, + status = setsockopt (sockets[sockets_num].fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (void *) &loop, sizeof (loop)); + if (status != 0) + { + char errbuf[1024]; + WARNING ("gmond plugin: setsockopt(2) failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + } + + struct ipv6_mreq mreq = { + .ipv6mr_interface = 0 /* any */ + }; - memset (&mreq, 0, sizeof (mreq)); memcpy (&mreq.ipv6mr_multiaddr, &addr->sin6_addr, sizeof (addr->sin6_addr)); - mreq.ipv6mr_interface = 0; /* any */ - setsockopt (sockets[sockets_num].fd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, + status = setsockopt (sockets[sockets_num].fd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (void *) &mreq, sizeof (mreq)); + if (status != 0) + { + char errbuf[1024]; + WARNING ("gmond plugin: setsockopt(2) failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + } } /* if (ai_ptr->ai_family == AF_INET6) */ sockets_num++; @@ -379,14 +395,12 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ static int request_meta_data (const char *host, const char *name) /* {{{ */ { - Ganglia_metadata_msg msg; - char buffer[BUFF_SIZE]; + Ganglia_metadata_msg msg = { 0 }; + char buffer[BUFF_SIZE] = { 0 }; unsigned int buffer_size; XDR xdr; size_t i; - memset (&msg, 0, sizeof (msg)); - msg.id = gmetadata_request; msg.Ganglia_metadata_msg_u.grequest.metric_id.host = strdup (host); msg.Ganglia_metadata_msg_u.grequest.metric_id.name = strdup (name); @@ -399,7 +413,6 @@ static int request_meta_data (const char *host, const char *name) /* {{{ */ return (-1); } - memset (buffer, 0, sizeof (buffer)); xdrmem_create (&xdr, buffer, sizeof (buffer), XDR_ENCODE); if (!xdr_Ganglia_metadata_msg (&xdr, &msg)) @@ -457,10 +470,9 @@ static staging_entry_t *staging_entry_get (const char *host, /* {{{ */ return (se); /* insert new entry */ - se = (staging_entry_t *) malloc (sizeof (*se)); + se = calloc (1, sizeof (*se)); if (se == NULL) return (NULL); - memset (se, 0, sizeof (*se)); sstrncpy (se->key, key, sizeof (se->key)); se->flags = 0; @@ -496,7 +508,7 @@ static staging_entry_t *staging_entry_get (const char *host, /* {{{ */ static int staging_entry_update (const char *host, const char *name, /* {{{ */ const char *type, const char *type_instance, - int ds_index, int ds_type, value_t value) + size_t ds_index, int ds_type, value_t value) { const data_set_t *ds; staging_entry_t *se; @@ -510,7 +522,7 @@ static int staging_entry_update (const char *host, const char *name, /* {{{ */ if (ds->ds_num <= ds_index) { - ERROR ("gmond plugin: Invalid index %i: %s has only %i data source(s).", + ERROR ("gmond plugin: Invalid index %zu: %s has only %zu data source(s).", ds_index, ds->type, ds->ds_num); return (-1); } @@ -696,7 +708,7 @@ static int mc_handle_metadata_msg (Ganglia_metadata_msg *msg) /* {{{ */ msg_meta = msg->Ganglia_metadata_msg_u.gfull; - if (msg_meta.metric.tmax <= 0) + if (msg_meta.metric.tmax == 0) return (-1); map = metric_lookup (msg_meta.metric_id.name); @@ -764,9 +776,8 @@ static int mc_handle_metric (void *buffer, size_t buffer_size) /* {{{ */ case gmetric_float: case gmetric_double: { - Ganglia_value_msg msg; + Ganglia_value_msg msg = { 0 }; - memset (&msg, 0, sizeof (msg)); if (xdr_Ganglia_value_msg (&xdr, &msg)) mc_handle_value_msg (&msg); break; @@ -775,8 +786,7 @@ static int mc_handle_metric (void *buffer, size_t buffer_size) /* {{{ */ case gmetadata_full: case gmetadata_request: { - Ganglia_metadata_msg msg; - memset (&msg, 0, sizeof (msg)); + Ganglia_metadata_msg msg = { 0 }; if (xdr_Ganglia_metadata_msg (&xdr, &msg)) mc_handle_metadata_msg (&msg); break; @@ -916,7 +926,7 @@ static int mc_receive_thread_stop (void) /* {{{ */ return (0); } /* }}} int mc_receive_thread_stop */ -/* +/* * Config: * * @@ -1089,7 +1099,7 @@ static int gmond_init (void) /* {{{ */ (mc_receive_port != NULL) ? mc_receive_port : MC_RECEIVE_PORT_DEFAULT, /* listen = */ 0); - staging_tree = c_avl_create ((void *) strcmp); + staging_tree = c_avl_create ((int (*) (const void *, const void *)) strcmp); if (staging_tree == NULL) { ERROR ("gmond plugin: c_avl_create failed.");