X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fipc.c;h=97d71429bffe02b3a886606546b6dffc77b6151d;hb=336c5c5170b65c3983bf98e9b114759cce1de54c;hp=b4038472efb76e4ff48df62e95b91307a8ff2dfc;hpb=092e0c8763ef268918fb8117be9579d375ac8cfc;p=collectd.git diff --git a/src/ipc.c b/src/ipc.c index b4038472..97d71429 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -27,75 +27,73 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" -#include "configfile.h" #if KERNEL_LINUX - /* _GNU_SOURCE is needed for struct shm_info.used_ids on musl libc */ -# define _GNU_SOURCE - - /* X/OPEN tells us to use for semctl() */ - /* X/OPEN tells us to use for msgctl() */ - /* X/OPEN tells us to use for shmctl() */ -# include -# include -# include -# include -# include - - /* For older kernels the same holds for the defines below */ -# ifndef MSG_STAT -# define MSG_STAT 11 -# define MSG_INFO 12 -# endif - -# ifndef SHM_STAT -# define SHM_STAT 13 -# define SHM_INFO 14 - struct shm_info { - int used_ids; - ulong shm_tot; /* total allocated shm */ - ulong shm_rss; /* total resident shm */ - ulong shm_swp; /* total swapped shm */ - ulong swap_attempts; - ulong swap_successes; - }; -# endif - -# ifndef SEM_STAT -# define SEM_STAT 18 -# define SEM_INFO 19 -# endif - - /* The last arg of semctl is a union semun, but where is it defined? - X/OPEN tells us to define it ourselves, but until recently - Linux include files would also define it. */ -# if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED) - /* union semun is defined by including */ -# else - /* according to X/OPEN we have to define it ourselves */ - union semun { - int val; - struct semid_ds *buf; - unsigned short *array; - struct seminfo *__buf; - }; -# endif +/* _GNU_SOURCE is needed for struct shm_info.used_ids on musl libc */ +#define _GNU_SOURCE + +/* X/OPEN tells us to use for semctl() */ +/* X/OPEN tells us to use for msgctl() */ +/* X/OPEN tells us to use for shmctl() */ +#include +#include +#include +#include +#include + +/* For older kernels the same holds for the defines below */ +#ifndef MSG_STAT +#define MSG_STAT 11 +#define MSG_INFO 12 +#endif + +#ifndef SHM_STAT +#define SHM_STAT 13 +#define SHM_INFO 14 +struct shm_info { + int used_ids; + ulong shm_tot; /* total allocated shm */ + ulong shm_rss; /* total resident shm */ + ulong shm_swp; /* total swapped shm */ + ulong swap_attempts; + ulong swap_successes; +}; +#endif + +#ifndef SEM_STAT +#define SEM_STAT 18 +#define SEM_INFO 19 +#endif + +/* The last arg of semctl is a union semun, but where is it defined? + X/OPEN tells us to define it ourselves, but until recently + Linux include files would also define it. */ +#if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED) +/* union semun is defined by including */ +#else +/* according to X/OPEN we have to define it ourselves */ +union semun { + int val; + struct semid_ds *buf; + unsigned short *array; + struct seminfo *__buf; +}; +#endif static long pagesize_g; /* #endif KERNEL_LINUX */ #elif KERNEL_AIX -# include +#include /* #endif KERNEL_AIX */ #else -# error "No applicable input method." +#error "No applicable input method." #endif -__attribute__ ((nonnull(1))) -static void ipc_submit_g (const char *plugin_instance, - const char *type, - const char *type_instance, - gauge_t value) /* {{{ */ +__attribute__((nonnull(1))) static void +ipc_submit_g(const char *plugin_instance, const char *type, + const char *type_instance, gauge_t value) /* {{{ */ { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; @@ -104,32 +102,31 @@ static void ipc_submit_g (const char *plugin_instance, vl.values = values; vl.values_len = 1; - sstrncpy (vl.host, hostname_g, sizeof (vl.host)); - sstrncpy (vl.plugin, "ipc", sizeof (vl.plugin)); - sstrncpy (vl.plugin_instance, plugin_instance, sizeof (vl.plugin_instance)); - sstrncpy (vl.type, type, sizeof (vl.type)); + sstrncpy(vl.host, hostname_g, sizeof(vl.host)); + sstrncpy(vl.plugin, "ipc", sizeof(vl.plugin)); + sstrncpy(vl.plugin_instance, plugin_instance, sizeof(vl.plugin_instance)); + sstrncpy(vl.type, type, sizeof(vl.type)); if (type_instance != NULL) - sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); + sstrncpy(vl.type_instance, type_instance, sizeof(vl.type_instance)); - plugin_dispatch_values (&vl); + plugin_dispatch_values(&vl); } /* }}} */ #if KERNEL_LINUX -static int ipc_read_sem (void) /* {{{ */ +static int ipc_read_sem(void) /* {{{ */ { struct seminfo seminfo; union semun arg; int status; - arg.array = (void *) &seminfo; + arg.array = (void *)&seminfo; - status = semctl (/* id = */ 0, /* num = */ 0, SEM_INFO, arg); - if (status == -1) - { + status = semctl(/* id = */ 0, /* num = */ 0, SEM_INFO, arg); + if (status == -1) { char errbuf[1024]; ERROR("ipc plugin: semctl(2) failed: %s. " - "Maybe the kernel is not configured for semaphores?", - sstrerror (errno, errbuf, sizeof (errbuf))); + "Maybe the kernel is not configured for semaphores?", + sstrerror(errno, errbuf, sizeof(errbuf))); return (-1); } @@ -139,18 +136,17 @@ static int ipc_read_sem (void) /* {{{ */ return (0); } /* }}} int ipc_read_sem */ -static int ipc_read_shm (void) /* {{{ */ +static int ipc_read_shm(void) /* {{{ */ { struct shm_info shm_info; int status; - status = shmctl (/* id = */ 0, SHM_INFO, (void *) &shm_info); - if (status == -1) - { + status = shmctl(/* id = */ 0, SHM_INFO, (void *)&shm_info); + if (status == -1) { char errbuf[1024]; ERROR("ipc plugin: shmctl(2) failed: %s. " - "Maybe the kernel is not configured for shared memory?", - sstrerror (errno, errbuf, sizeof (errbuf))); + "Maybe the kernel is not configured for shared memory?", + sstrerror(errno, errbuf, sizeof(errbuf))); return (-1); } @@ -162,12 +158,11 @@ static int ipc_read_shm (void) /* {{{ */ } /* }}} int ipc_read_shm */ -static int ipc_read_msg (void) /* {{{ */ +static int ipc_read_msg(void) /* {{{ */ { struct msginfo msginfo; - if ( msgctl(0, MSG_INFO, (struct msqid_ds *) (void *) &msginfo) < 0 ) - { + if (msgctl(0, MSG_INFO, (struct msqid_ds *)(void *)&msginfo) < 0) { ERROR("Kernel is not configured for message queues"); return (-1); } @@ -179,7 +174,7 @@ static int ipc_read_msg (void) /* {{{ */ } /* }}} int ipc_read_msg */ -static int ipc_init (void) /* {{{ */ +static int ipc_init(void) /* {{{ */ { pagesize_g = sysconf(_SC_PAGESIZE); return (0); @@ -188,17 +183,17 @@ static int ipc_init (void) /* {{{ */ /* #endif KERNEL_LINUX */ #elif KERNEL_AIX -static caddr_t ipc_get_info (cid_t cid, int cmd, int version, int stsize, int *nmemb) /* {{{ */ +static caddr_t ipc_get_info(cid_t cid, int cmd, int version, int stsize, + int *nmemb) /* {{{ */ { int size = 0; caddr_t buff = NULL; - if (get_ipc_info(cid, cmd, version, buff, &size) < 0) - { + if (get_ipc_info(cid, cmd, version, buff, &size) < 0) { if (errno != ENOSPC) { char errbuf[1024]; - WARNING ("ipc plugin: get_ipc_info: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); + WARNING("ipc plugin: get_ipc_info: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); return (NULL); } } @@ -207,23 +202,22 @@ static caddr_t ipc_get_info (cid_t cid, int cmd, int version, int stsize, int *n return NULL; if (size % stsize) { - ERROR ("ipc plugin: ipc_get_info: missmatch struct size and buffer size"); + ERROR("ipc plugin: ipc_get_info: missmatch struct size and buffer size"); return (NULL); } *nmemb = size / stsize; - buff = (caddr_t)malloc (size); - if (buff == NULL) { - ERROR ("ipc plugin: ipc_get_info malloc failed."); + buff = malloc(size); + if (buff == NULL) { + ERROR("ipc plugin: ipc_get_info malloc failed."); return (NULL); } - if (get_ipc_info(cid, cmd, version, buff, &size) < 0) - { + if (get_ipc_info(cid, cmd, version, buff, &size) < 0) { char errbuf[1024]; - WARNING ("ipc plugin: get_ipc_info: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); + WARNING("ipc plugin: get_ipc_info: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); free(buff); return (NULL); } @@ -231,19 +225,19 @@ static caddr_t ipc_get_info (cid_t cid, int cmd, int version, int stsize, int *n return buff; } /* }}} */ -static int ipc_read_sem (void) /* {{{ */ +static int ipc_read_sem(void) /* {{{ */ { ipcinfo_sem_t *ipcinfo_sem; - unsigned short sem_nsems=0; - unsigned short sems=0; - int i,n; + unsigned short sem_nsems = 0; + unsigned short sems = 0; + int n; - ipcinfo_sem = (ipcinfo_sem_t *)ipc_get_info(0, - GET_IPCINFO_SEM_ALL, IPCINFO_SEM_VERSION, sizeof(ipcinfo_sem_t), &n); + ipcinfo_sem = (ipcinfo_sem_t *)ipc_get_info( + 0, GET_IPCINFO_SEM_ALL, IPCINFO_SEM_VERSION, sizeof(ipcinfo_sem_t), &n); if (ipcinfo_sem == NULL) return -1; - for (i=0; ishm_segsz; } @@ -281,24 +275,24 @@ static int ipc_read_shm (void) /* {{{ */ } /* }}} int ipc_read_shm */ -static int ipc_read_msg (void) /* {{{ */ +static int ipc_read_msg(void) /* {{{ */ { ipcinfo_msg_t *ipcinfo_msg; - uint32_t msg_used_space=0; - uint32_t msg_alloc_queues=0; - msgqnum32_t msg_qnum=0; - int i,n; + uint32_t msg_used_space = 0; + uint32_t msg_alloc_queues = 0; + msgqnum32_t msg_qnum = 0; + int n; - ipcinfo_msg = (ipcinfo_msg_t *)ipc_get_info(0, - GET_IPCINFO_MSG_ALL, IPCINFO_MSG_VERSION, sizeof(ipcinfo_msg_t), &n); + ipcinfo_msg = (ipcinfo_msg_t *)ipc_get_info( + 0, GET_IPCINFO_MSG_ALL, IPCINFO_MSG_VERSION, sizeof(ipcinfo_msg_t), &n); if (ipcinfo_msg == NULL) return -1; - for (i=0; i