+#if KERNEL_LINUX
+static int ipc_read_sem (void) /* {{{ */
+{
+ struct seminfo seminfo;
+ union semun arg;
+ int status;
+
+ arg.array = (void *) &seminfo;
+
+ 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)));
+ return (-1);
+ }
+
+ ipc_submit_g("sem", "count", "arrays", seminfo.semusz);
+ ipc_submit_g("sem", "count", "total", seminfo.semaem);
+
+ return (0);
+} /* }}} int ipc_read_sem */
+
+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)
+ {
+ char errbuf[1024];
+ ERROR("ipc plugin: shmctl(2) failed: %s. "
+ "Maybe the kernel is not configured for shared memory?",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ return (-1);
+ }
+
+ ipc_submit_g("shm", "segments", NULL, shm_info.used_ids);
+ ipc_submit_g("shm", "bytes", "total", shm_info.shm_tot * pagesize_g);
+ ipc_submit_g("shm", "bytes", "rss", shm_info.shm_rss * pagesize_g);
+ ipc_submit_g("shm", "bytes", "swapped", shm_info.shm_swp * pagesize_g);
+ return (0);
+}
+/* }}} int ipc_read_shm */
+
+static int ipc_read_msg (void) /* {{{ */
+{
+ struct msginfo msginfo;
+
+ if ( msgctl(0, MSG_INFO, (struct msqid_ds *) (void *) &msginfo) < 0 )
+ {
+ ERROR("Kernel is not configured for message queues");
+ return (-1);
+ }
+ ipc_submit_g("msg", "count", "queues", msginfo.msgmni);
+ ipc_submit_g("msg", "count", "headers", msginfo.msgmap);
+ ipc_submit_g("msg", "count", "space", msginfo.msgtql);
+
+ return (0);
+}
+/* }}} int ipc_read_msg */
+
+static int ipc_init (void) /* {{{ */
+{
+ pagesize_g = sysconf(_SC_PAGESIZE);
+ return (0);
+}
+/* }}} */
+/* #endif KERNEL_LINUX */
+
+#elif KERNEL_AIX