summaryrefslogtreecommitdiff
path: root/sysdeps/aix
diff options
context:
space:
mode:
authorCarlos Perelló Marín <carlos@gnome.org>2003-10-19 16:55:56 +0000
committerCarlos Perelló Marín <carlos@src.gnome.org>2003-10-19 16:55:56 +0000
commit4c8ae9e25c1940d8876ca3f2330426863cae4737 (patch)
treec43f97bc0647546b0ed87022db0749c137f24edc /sysdeps/aix
parentbae16b467f90df94d80feae41dceb7e816f16c61 (diff)
downloadlibgtop-4c8ae9e25c1940d8876ca3f2330426863cae4737.tar.gz
Reverted libgtop changes. It's a common module and I should not modify it.
2003-10-19 Carlos Perelló Marín <carlos@gnome.org> * support/*: Reverted libgtop changes. It's a common module and I should not modify it. * Added/removed files. Now the move should be done.
Diffstat (limited to 'sysdeps/aix')
-rw-r--r--sysdeps/aix/ChangeLog3
-rw-r--r--sysdeps/aix/Makefile.am23
-rw-r--r--sysdeps/aix/close.c30
-rw-r--r--sysdeps/aix/cpu.c125
-rw-r--r--sysdeps/aix/glibtop_machine.h53
-rw-r--r--sysdeps/aix/glibtop_server.h52
-rw-r--r--sysdeps/aix/glibtop_suid.h52
-rw-r--r--sysdeps/aix/loadavg.c78
-rw-r--r--sysdeps/aix/mem.c76
-rw-r--r--sysdeps/aix/msg_limits.c81
-rw-r--r--sysdeps/aix/netload.c207
-rw-r--r--sysdeps/aix/nosuid.c46
-rw-r--r--sysdeps/aix/open.c82
-rw-r--r--sysdeps/aix/ppp.c44
-rw-r--r--sysdeps/aix/procargs.c132
-rw-r--r--sysdeps/aix/prockernel.c98
-rw-r--r--sysdeps/aix/proclist.c247
-rw-r--r--sysdeps/aix/procmap.c50
-rw-r--r--sysdeps/aix/procmem.c73
-rw-r--r--sysdeps/aix/procsegment.c74
-rw-r--r--sysdeps/aix/procsignal.c89
-rw-r--r--sysdeps/aix/procstate.c127
-rw-r--r--sysdeps/aix/proctime.c72
-rw-r--r--sysdeps/aix/procuid.c101
-rw-r--r--sysdeps/aix/sem_limits.c86
-rw-r--r--sysdeps/aix/shm_limits.c79
-rw-r--r--sysdeps/aix/siglist.c72
-rw-r--r--sysdeps/aix/swap.c128
-rw-r--r--sysdeps/aix/sysinfo.c194
-rw-r--r--sysdeps/aix/uptime.c73
-rw-r--r--sysdeps/aix/utils.c141
-rw-r--r--sysdeps/aix/utils.h45
32 files changed, 2833 insertions, 0 deletions
diff --git a/sysdeps/aix/ChangeLog b/sysdeps/aix/ChangeLog
new file mode 100644
index 00000000..0b61ebd3
--- /dev/null
+++ b/sysdeps/aix/ChangeLog
@@ -0,0 +1,3 @@
+2002-09-24 Laurent Vivier <Laurent.Vivier@bull.net>
+
+ * Create sysdeps/aix (from stub)
diff --git a/sysdeps/aix/Makefile.am b/sysdeps/aix/Makefile.am
new file mode 100644
index 00000000..e0c6c2f6
--- /dev/null
+++ b/sysdeps/aix/Makefile.am
@@ -0,0 +1,23 @@
+LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
+
+INCLUDES = @INCLUDES@
+
+lib_LTLIBRARIES = libgtop_sysdeps-2.0.la libgtop_sysdeps_suid-2.0.la
+
+libgtop_sysdeps_2_0_la_SOURCES = siglist.c nosuid.c
+
+libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
+
+libgtop_sysdeps_suid_2_0_la_SOURCES = open.c close.c cpu.c mem.c swap.c \
+ uptime.c loadavg.c shm_limits.c msg_limits.c \
+ sem_limits.c proclist.c procstate.c procuid.c \
+ proctime.c procmem.c procsignal.c prockernel.c \
+ procsegment.c procargs.c procmap.c netload.c \
+ ppp.c utils.c utils.h sysinfo.c
+
+libgtop_sysdeps_suid_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
+libgtop_sysdeps_suid_2_0_la_LIBADD = $(top_builddir)/sysdeps/common/libgtop_suid_common-2.0.la $(GLIB_LIBS)
+
+libgtopinclude_HEADERS = glibtop_server.h glibtop_machine.h glibtop_suid.h
+
+libgtopincludedir = $(includedir)/libgtop-2.0
diff --git a/sysdeps/aix/close.c b/sysdeps/aix/close.c
new file mode 100644
index 00000000..4262d2f0
--- /dev/null
+++ b/sysdeps/aix/close.c
@@ -0,0 +1,30 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <glibtop/close.h>
+
+/* Closes pipe to gtop server. */
+
+void
+glibtop_close_s (glibtop *server)
+{ }
diff --git a/sysdeps/aix/cpu.c b/sysdeps/aix/cpu.c
new file mode 100644
index 00000000..81fb5c04
--- /dev/null
+++ b/sysdeps/aix/cpu.c
@@ -0,0 +1,125 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <stdlib.h>
+#include <sys/systemcfg.h>
+#include <sys/sysinfo.h>
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/cpu.h>
+
+#include <utils.h>
+
+static const unsigned long _glibtop_sysdeps_cpu =
+(1L << GLIBTOP_CPU_TOTAL) + (1L << GLIBTOP_CPU_USER) +
+(1L << GLIBTOP_CPU_SYS) + (1L << GLIBTOP_CPU_IDLE) +
+(1L << GLIBTOP_CPU_NICE) + (1 << GLIBTOP_CPU_FREQUENCY) +
+(1L << GLIBTOP_XCPU_TOTAL) + (1L << GLIBTOP_XCPU_USER) +
+(1L << GLIBTOP_XCPU_SYS) + (1L << GLIBTOP_XCPU_IDLE) +
+(1L << GLIBTOP_XCPU_NICE);
+
+/* Init function. */
+
+void
+glibtop_init_cpu_p (glibtop *server)
+{
+ off_t result;
+
+ server->ncpu = _system_configuration.ncpus;
+ if (server->ncpu == 1)
+ {
+ server->ncpu = 0; /* means single-processor, see glibtop.h */
+ }
+
+ result = _glibtop_get_kmem_offset(server, "cpuinfo");
+ if (result == -1)
+ {
+ server->sysdeps.cpu = 0;
+
+ return;
+ }
+ server->machine.cpuinfo_offset = result;
+
+ server->machine.cpuinfo = (struct cpuinfo*)calloc(_system_configuration.ncpus, sizeof(struct cpuinfo));
+
+ server->sysdeps.cpu = _glibtop_sysdeps_cpu;
+}
+
+/* Provides information about cpu usage. */
+
+void
+glibtop_get_cpu_p (glibtop *server, glibtop_cpu *buf)
+{
+ int result;
+ int cpu;
+
+ glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_CPU), 0);
+
+ memset (buf, 0, sizeof (glibtop_cpu));
+
+ result = _glibtop_get_kmem_info(server, server->machine.cpuinfo_offset,
+ server->machine.cpuinfo,
+ _system_configuration.ncpus
+ * sizeof(struct cpuinfo));
+
+ if (result <= 0)
+ {
+ glibtop_error_io_r (server, "Cannot read cpuinfo");
+ return;
+ }
+
+ buf->idle = 0;
+ buf->user = 0;
+ buf->sys = 0;
+ buf->nice = 0;
+ for (cpu = 0; cpu < _system_configuration.ncpus; cpu++)
+ {
+ if (cpu < GLIBTOP_NCPU)
+ {
+ buf->xcpu_idle[cpu] =
+ server->machine.cpuinfo[cpu].cpu[CPU_IDLE];
+ buf->xcpu_user[cpu] =
+ server->machine.cpuinfo[cpu].cpu[CPU_USER];
+ buf->xcpu_sys[cpu] =
+ server->machine.cpuinfo[cpu].cpu[CPU_KERNEL];
+ buf->xcpu_nice[cpu] =
+ server->machine.cpuinfo[cpu].cpu[CPU_WAIT];
+
+ buf->xcpu_total[cpu] = buf->xcpu_idle[cpu] +
+ buf->xcpu_user[cpu] +
+ buf->xcpu_sys[cpu] +
+ buf->xcpu_nice[cpu];
+ }
+
+ buf->idle += server->machine.cpuinfo[cpu].cpu[CPU_IDLE];
+ buf->user += server->machine.cpuinfo[cpu].cpu[CPU_USER];
+ buf->sys += server->machine.cpuinfo[cpu].cpu[CPU_KERNEL];
+ buf->nice += server->machine.cpuinfo[cpu].cpu[CPU_WAIT];
+
+ buf->total = buf->idle + buf->user + buf->sys + buf->nice ;
+ }
+
+ buf->frequency = sysconf(_SC_CLK_TCK);
+ buf->flags = _glibtop_sysdeps_cpu;
+}
diff --git a/sysdeps/aix/glibtop_machine.h b/sysdeps/aix/glibtop_machine.h
new file mode 100644
index 00000000..508d6c21
--- /dev/null
+++ b/sysdeps/aix/glibtop_machine.h
@@ -0,0 +1,53 @@
+/* $Id$ */
+
+/*
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, March 1999.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef __GLIBTOP_MACHINE_H__
+#define __GLIBTOP_MACHINE_H__
+
+#include <procinfo.h>
+
+BEGIN_LIBGTOP_DECLS
+
+typedef struct _glibtop_machine glibtop_machine;
+
+struct _glibtop_machine
+{
+ uid_t uid, euid;
+ gid_t gid, egid;
+
+ int kmem_fd;
+
+ off_t cpuinfo_offset;
+ off_t ifnet_offset;
+ off_t loadavg_offset;
+ off_t shminfo_offset;
+ off_t seminfo_offset;
+ off_t msginfo_offset;
+
+ struct cpuinfo *cpuinfo;
+ struct procsinfo last_pinfo;
+};
+
+END_LIBGTOP_DECLS
+
+#endif /* __GLIBTOP_MACHINE_H__ */
diff --git a/sysdeps/aix/glibtop_server.h b/sysdeps/aix/glibtop_server.h
new file mode 100644
index 00000000..ca57af36
--- /dev/null
+++ b/sysdeps/aix/glibtop_server.h
@@ -0,0 +1,52 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef __GLIBTOP_SERVER_H__
+#define __GLIBTOP_SERVER_H__
+
+BEGIN_LIBGTOP_DECLS
+
+#define GLIBTOP_SUID_CPU (1 << GLIBTOP_SYSDEPS_CPU)
+#define GLIBTOP_SUID_MEM 0
+#define GLIBTOP_SUID_SWAP 0
+#define GLIBTOP_SUID_UPTIME (1 << GLIBTOP_SYSDEPS_UPTIME)
+#define GLIBTOP_SUID_LOADAVG (1 << GLIBTOP_SYSDEPS_LOADAVG)
+#define GLIBTOP_SUID_SHM_LIMITS (1 << GLIBTOP_SYSDEPS_SHM_LIMITS)
+#define GLIBTOP_SUID_MSG_LIMITS (1 << GLIBTOP_SYSDEPS_MSG_LIMITS)
+#define GLIBTOP_SUID_SEM_LIMITS (1 << GLIBTOP_SYSDEPS_SEM_LIMITS)
+#define GLIBTOP_SUID_PROCLIST 0
+#define GLIBTOP_SUID_PROC_STATE 0
+#define GLIBTOP_SUID_PROC_UID 0
+#define GLIBTOP_SUID_PROC_MEM 0
+#define GLIBTOP_SUID_PROC_TIME 0
+#define GLIBTOP_SUID_PROC_SIGNAL 0
+#define GLIBTOP_SUID_PROC_KERNEL 0
+#define GLIBTOP_SUID_PROC_SEGMENT 0
+#define GLIBTOP_SUID_PROC_ARGS 0
+#define GLIBTOP_SUID_PROC_MAP 0
+#define GLIBTOP_SUID_NETLOAD (1 << GLIBTOP_SYSDEPS_NETLOAD)
+#define GLIBTOP_SUID_PPP 0
+
+END_LIBGTOP_DECLS
+
+#endif
diff --git a/sysdeps/aix/glibtop_suid.h b/sysdeps/aix/glibtop_suid.h
new file mode 100644
index 00000000..0d971143
--- /dev/null
+++ b/sysdeps/aix/glibtop_suid.h
@@ -0,0 +1,52 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef __GLIBTOP_SUID_H__
+#define __GLIBTOP_SUID_H__
+
+BEGIN_LIBGTOP_DECLS
+
+#if _IN_LIBGTOP
+#include <sys/param.h>
+#endif
+
+static inline void glibtop_suid_enter (glibtop *server) {
+ setegid (server->machine.egid);
+}
+
+static inline void glibtop_suid_leave (glibtop *server) {
+ if (setegid (server->machine.gid))
+ _exit (1);
+}
+
+void
+glibtop_init_p (glibtop *server, const unsigned long features,
+ const unsigned flags);
+void
+glibtop_open_p (glibtop *server, const char *program_name,
+ const unsigned long features,
+ const unsigned flags);
+
+END_LIBGTOP_DECLS
+
+#endif
diff --git a/sysdeps/aix/loadavg.c b/sysdeps/aix/loadavg.c
new file mode 100644
index 00000000..67913413
--- /dev/null
+++ b/sysdeps/aix/loadavg.c
@@ -0,0 +1,78 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <nlist.h>
+#include <glibtop.h>
+#include <glibtop/loadavg.h>
+#include <glibtop/error.h>
+
+#include <glibtop_suid.h>
+
+static const unsigned long _glibtop_sysdeps_loadavg =
+(1 << GLIBTOP_LOADAVG_LOADAVG);
+
+/* Init function. */
+
+void
+glibtop_init_loadavg_p (glibtop *server)
+{
+ int result;
+
+ result = _glibtop_get_kmem_offset(server, "avenrun");
+ if (result == -1)
+ {
+ server->sysdeps.loadavg = 0;
+ return;
+ }
+
+ server->machine.loadavg_offset = result;
+
+ server->sysdeps.loadavg = _glibtop_sysdeps_loadavg;
+}
+
+/* Provides load averange. */
+
+void
+glibtop_get_loadavg_p (glibtop *server, glibtop_loadavg *buf)
+{
+ int result;
+ int loadavg[3];
+
+ glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_LOADAVG), 0);
+
+ memset (buf, 0, sizeof (glibtop_loadavg));
+
+ result = _glibtop_get_kmem_info(server, server->machine.loadavg_offset,
+ loadavg, sizeof(loadavg));
+ if (result <= 0)
+ {
+ glibtop_error_io_r (server, "Cannot read loadavg");
+ return;
+ }
+
+ buf->loadavg[0] = loadavg[0] / 65536.0;
+ buf->loadavg[1] = loadavg[1] / 65536.0;
+ buf->loadavg[2] = loadavg[2] / 65536.0;
+
+ buf->flags = _glibtop_sysdeps_loadavg;
+}
diff --git a/sysdeps/aix/mem.c b/sysdeps/aix/mem.c
new file mode 100644
index 00000000..c2811fd5
--- /dev/null
+++ b/sysdeps/aix/mem.c
@@ -0,0 +1,76 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <unistd.h>
+#include <sys/vminfo.h>
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/mem.h>
+
+static const unsigned long _glibtop_sysdeps_mem =
+(1 << GLIBTOP_MEM_TOTAL) + (1 << GLIBTOP_MEM_USED) +
+(1 << GLIBTOP_MEM_FREE) + (1 << GLIBTOP_MEM_LOCKED);
+
+/* Init function. */
+
+void
+glibtop_init_mem_s (glibtop *server)
+{
+ server->sysdeps.mem = _glibtop_sysdeps_mem;
+}
+
+/* Provides information about memory usage. */
+
+void
+glibtop_get_mem_s (glibtop *server, glibtop_mem *buf)
+{
+ struct vminfo vminfo;
+ int pagesize;
+ int result;
+
+ memset (buf, 0, sizeof (glibtop_mem));
+
+ pagesize = sysconf(_SC_PAGESIZE);
+
+#ifdef HAVE_VMGETINFO
+ result = vmgetinfo((void*)&vminfo, VMINFO, sizeof(vminfo));
+#else
+ result = _glibtop_vmgetinfo((void*)&vminfo, VMINFO, sizeof(vminfo));
+#endif
+ if (result == -1)
+ {
+ glibtop_error_io_r (server, "Cannot read vminfo");
+ return;
+ }
+
+
+ buf->total = vminfo.memsizepgs * pagesize;
+ buf->used = (vminfo.numwseguse + vminfo.numpseguse +
+ vminfo.numclseguse) * pagesize;
+ buf->free = vminfo.numfrb * pagesize;
+ buf->locked = (vminfo.numwsegpin + vminfo.numpsegpin +
+ vminfo.numclsegpin) * pagesize;
+
+ buf->flags = _glibtop_sysdeps_mem;
+}
diff --git a/sysdeps/aix/msg_limits.c b/sysdeps/aix/msg_limits.c
new file mode 100644
index 00000000..94bf4446
--- /dev/null
+++ b/sysdeps/aix/msg_limits.c
@@ -0,0 +1,81 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <sys/msg.h>
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/msg_limits.h>
+
+static const unsigned long _glibtop_sysdeps_msg_limits =
+(1 << GLIBTOP_IPC_MSGMAX) + (1 << GLIBTOP_IPC_MSGMNB) +
+(1 << GLIBTOP_IPC_MSGMNI) + (1 << GLIBTOP_IPC_MSGTQL);
+
+/* Init function. */
+
+void
+glibtop_init_msg_limits_p (glibtop *server)
+{
+ off_t result;
+
+ result = _glibtop_get_kmem_offset(server, "msginfo");
+ if (result <= 0)
+ {
+ server->sysdeps.sem_limits = 0;
+ return;
+ }
+
+ server->machine.msginfo_offset = result;
+
+ server->sysdeps.msg_limits = _glibtop_sysdeps_msg_limits;
+}
+
+/* Provides information about sysv ipc limits. */
+
+void
+glibtop_get_msg_limits_p (glibtop *server, glibtop_msg_limits *buf)
+{
+ int result;
+ struct msginfo msginfo;
+
+ glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_MSG_LIMITS), 0);
+
+ memset (buf, 0, sizeof (glibtop_msg_limits));
+
+ result = _glibtop_get_kmem_info(server, server->machine.msginfo_offset,
+ &msginfo, sizeof(msginfo));
+
+ if (result <= 0)
+ {
+ glibtop_error_io_r (server, "Cannot read seminfo");
+
+ return;
+ }
+
+ buf->msgmax = msginfo.msgmax;
+ buf->msgmnb = msginfo.msgmnb;
+ buf->msgmni = msginfo.msgmni;
+ buf->msgtql = msginfo.msgmnm;
+
+ buf->flags = _glibtop_sysdeps_msg_limits;
+}
diff --git a/sysdeps/aix/netload.c b/sysdeps/aix/netload.c
new file mode 100644
index 00000000..ffad1c66
--- /dev/null
+++ b/sysdeps/aix/netload.c
@@ -0,0 +1,207 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, October 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <sys/socket.h>
+#include <net/if.h>
+#include <netinet/in.h>
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/netload.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_netload =
+(1 << GLIBTOP_NETLOAD_IF_FLAGS) + (1 << GLIBTOP_NETLOAD_MTU) +
+(1 << GLIBTOP_NETLOAD_SUBNET) + (1 << GLIBTOP_NETLOAD_ADDRESS) +
+(1 << GLIBTOP_NETLOAD_PACKETS_IN) + (1 << GLIBTOP_NETLOAD_PACKETS_OUT) +
+(1 << GLIBTOP_NETLOAD_PACKETS_TOTAL) + (1 << GLIBTOP_NETLOAD_BYTES_IN) +
+(1 << GLIBTOP_NETLOAD_BYTES_OUT) + (1 << GLIBTOP_NETLOAD_BYTES_TOTAL) +
+(1 << GLIBTOP_NETLOAD_ERRORS_IN) + (1 << GLIBTOP_NETLOAD_ERRORS_OUT) +
+(1 << GLIBTOP_NETLOAD_ERRORS_TOTAL) + (1 << GLIBTOP_NETLOAD_COLLISIONS);
+
+static void get_ifaddr(glibtop* server, struct ifaddr* next, long* addr, long* mask)
+{
+ struct ifaddr ifaddr;
+ struct sockaddr_in sockaddr;
+
+ *addr = 0;
+ *mask = 0;
+
+ while (next)
+ {
+ /* get interface ifaddr structure */
+
+ _glibtop_get_kmem_info(server, (off_t)next, &ifaddr, sizeof(ifaddr));
+
+ /* get socket addr information */
+
+ _glibtop_get_kmem_info( server, (off_t)ifaddr.ifa_addr
+ , &sockaddr, sizeof(sockaddr));
+
+ /* if valid family : UDP, TCP, ...*/
+
+ if (sockaddr.sin_family == AF_INET)
+ {
+ *addr = sockaddr.sin_addr.s_addr;
+
+ _glibtop_get_kmem_info( server, (off_t)ifaddr.ifa_netmask
+ , &sockaddr, sizeof(sockaddr));
+
+ *mask = sockaddr.sin_addr.s_addr;
+
+ /* address found */
+
+ return;
+ }
+
+ next = ifaddr.ifa_next;
+ }
+}
+
+/* Init function. */
+
+void
+glibtop_init_netload_p (glibtop *server)
+{
+ off_t result;
+ off_t addr;
+
+ result = _glibtop_get_kmem_offset(server, "ifnet");
+ if (result <= 0)
+ {
+ server->sysdeps.netload = 0;
+ return;
+ }
+
+ result = _glibtop_get_kmem_info(server, result, &addr, sizeof(addr));
+ if (result <= 0)
+ {
+ server->sysdeps.netload = 0;
+ return;
+ }
+
+ server->machine.ifnet_offset = addr;
+
+ server->sysdeps.netload = _glibtop_sysdeps_netload;
+}
+
+/* Provides network statistics. */
+
+void
+glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
+ const char *interface)
+{
+ int result;
+ off_t offset;
+ struct ifnet ifnet;
+ long addr;
+ long mask;
+ char name[16];
+
+ memset (buf, 0, sizeof (glibtop_netload));
+
+ for ( offset = server->machine.ifnet_offset;
+ offset != 0;
+ offset = (off_t)ifnet.if_next
+ )
+ {
+ result = _glibtop_get_kmem_info(server, offset,
+ &ifnet, sizeof(ifnet));
+ if (result <= 0)
+ {
+ glibtop_error_io_r (server, "Cannot read ifnet");
+
+ return;
+ }
+
+ result = _glibtop_get_kmem_info(server, (off_t)ifnet.if_name,
+ name, sizeof(name));
+ if (result <= 0)
+ {
+ glibtop_error_io_r (server, "Cannot read if_name");
+
+ return;
+ }
+
+ sprintf(name+strlen(name), "%d", ifnet.if_unit);
+ if (strcmp(name, interface) != 0)
+ {
+ continue;
+ }
+
+ if (ifnet.if_flags & IFF_UP)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_UP);
+ if (ifnet.if_flags & IFF_BROADCAST)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_BROADCAST);
+ if (ifnet.if_flags & IFF_LOOPBACK)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_LOOPBACK);
+ if (ifnet.if_flags & IFF_POINTOPOINT)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_POINTOPOINT);
+ if (ifnet.if_flags & IFF_RUNNING)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_RUNNING);
+ if (ifnet.if_flags & IFF_NOARP)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_NOARP);
+ if (ifnet.if_flags & IFF_PROMISC)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_PROMISC);
+ if (ifnet.if_flags & IFF_ALLMULTI)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_ALLMULTI);
+ if (ifnet.if_flags & IFF_OACTIVE)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_OACTIVE);
+ if (ifnet.if_flags & IFF_SIMPLEX)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_SIMPLEX);
+ if (ifnet.if_flags & IFF_LINK0)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_LINK0);
+ if (ifnet.if_flags & IFF_LINK1)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_LINK1);
+ if (ifnet.if_flags & IFF_LINK2)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_LINK2);
+ if (ifnet.if_flags & IFF_LINK2)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_LINK2);
+ if (ifnet.if_flags & 0x80000)
+ buf->if_flags |= (1 << GLIBTOP_IF_FLAGS_MULTICAST);
+
+ buf->mtu = ifnet.if_mtu;
+
+ get_ifaddr(server, ifnet.if_addrlist, &addr, &mask);
+
+ buf->subnet = addr & mask;
+ buf->address = addr;
+
+ buf->packets_in = ifnet.if_ipackets;
+ buf->packets_out = ifnet.if_opackets;
+ buf->packets_total = buf->packets_in + buf->packets_out;
+
+ buf->bytes_in = ifnet.if_ibytes;
+ buf->bytes_out = ifnet.if_obytes;
+ buf->bytes_total = buf->bytes_in + buf->bytes_out;
+
+ buf->errors_in = ifnet.if_ierrors;
+ buf->errors_out = ifnet.if_oerrors;
+ buf->errors_total = ifnet.if_ierrors + ifnet.if_oerrors;
+
+ buf->collisions = ifnet.if_collisions;
+ }
+
+ buf->flags = _glibtop_sysdeps_netload;
+}
diff --git a/sysdeps/aix/nosuid.c b/sysdeps/aix/nosuid.c
new file mode 100644
index 00000000..c904a3a5
--- /dev/null
+++ b/sysdeps/aix/nosuid.c
@@ -0,0 +1,46 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <sys/systemcfg.h>
+
+#include <glibtop.h>
+#include <glibtop/open.h>
+#include <glibtop/close.h>
+
+void
+glibtop_open_s (glibtop *server,
+ const char *program_name,
+ const unsigned long features,
+ const unsigned flags)
+{
+ server->ncpu = _system_configuration.ncpus;
+
+ if (server->ncpu == 1)
+ {
+ server->ncpu = 0; /* means single-processor, see glibtop.h */
+ }
+}
+
+void
+glibtop_close_s (glibtop *server)
+{ }
diff --git a/sysdeps/aix/open.c b/sysdeps/aix/open.c
new file mode 100644
index 00000000..8a0757fa
--- /dev/null
+++ b/sysdeps/aix/open.c
@@ -0,0 +1,82 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/open.h>
+
+#include "glibtop_suid.h"
+
+/* !!! THIS FUNCTION RUNS SUID ROOT - CHANGE WITH CAUTION !!! */
+
+void
+glibtop_init_p (glibtop *server, const unsigned long features,
+ const unsigned flags)
+{
+ glibtop_init_func_t *init_fkt;
+
+ if (server == NULL)
+ glibtop_error_r (NULL, "glibtop_init_p (server == NULL)");
+
+ if ((server->flags & _GLIBTOP_INIT_STATE_SYSDEPS) == 0) {
+ glibtop_open_p (server, "glibtop", features, flags);
+
+ for (init_fkt = _glibtop_init_hook_p; *init_fkt; init_fkt++)
+ (*init_fkt) (server);
+ server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS;
+ }
+}
+
+/* Opens pipe to gtop server. Returns 0 on success and -1 on error. */
+
+void
+glibtop_open_p (glibtop *server, const char *program_name,
+ const unsigned long features, const unsigned flags)
+{
+ /* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */
+
+ server->machine.uid = getuid ();
+ server->machine.euid = geteuid ();
+ server->machine.gid = getgid ();
+ server->machine.egid = getegid ();
+
+ /* open kmem */
+
+ server->machine.kmem_fd = open("/dev/kmem", O_RDONLY);
+ if (server->machine.kmem_fd == -1)
+ glibtop_error_io_r (server, "Cannot open /dev/kmem");
+
+ /* Drop priviledges. */
+
+ if (seteuid (server->machine.uid))
+ _exit (1);
+
+ if (setegid (server->machine.gid))
+ _exit (1);
+
+ /* !!! END OF SUID ROOT PART !!! */
+
+ server->name = program_name;
+}
diff --git a/sysdeps/aix/ppp.c b/sysdeps/aix/ppp.c
new file mode 100644
index 00000000..6d0905d5
--- /dev/null
+++ b/sysdeps/aix/ppp.c
@@ -0,0 +1,44 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, October 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/ppp.h>
+
+static const unsigned long _glibtop_sysdeps_ppp = 0;
+
+/* Init function. */
+
+void
+glibtop_init_ppp_s (glibtop *server)
+{
+ server->sysdeps.ppp = _glibtop_sysdeps_ppp;
+}
+
+/* Provides PPP/ISDN information. */
+
+void
+glibtop_get_ppp_s (glibtop *server, glibtop_ppp *buf, unsigned short device)
+{
+ memset (buf, 0, sizeof (glibtop_ppp));
+}
diff --git a/sysdeps/aix/procargs.c b/sysdeps/aix/procargs.c
new file mode 100644
index 00000000..97bf0b34
--- /dev/null
+++ b/sysdeps/aix/procargs.c
@@ -0,0 +1,132 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <procinfo.h>
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/xmalloc.h>
+#include <glibtop/procargs.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_proc_args =
+ (1 << GLIBTOP_PROC_ARGS_SIZE);
+
+/* Init function. */
+
+void
+glibtop_init_proc_args_s (glibtop *server)
+{
+ server->sysdeps.proc_args = _glibtop_sysdeps_proc_args;
+}
+
+/* Provides detailed information about a process. */
+
+static void _glibtop_remove_non_ascii(char* string)
+{
+ for (;*string != 0;string++)
+ {
+ if (!isascii(*string))
+ *string = '?';
+ }
+}
+
+char *
+glibtop_get_proc_args_s (glibtop *server, glibtop_proc_args *buf,
+ pid_t pid, unsigned max_len)
+{
+ struct procsinfo *pinfo;
+ char *args_buffer;
+ char* args = NULL;
+ int size;
+ int result;
+ int len;
+
+ memset (buf, 0, sizeof (glibtop_proc_args));
+
+ pinfo = _glibtop_get_procinfo(server, pid);
+ if (pinfo == NULL)
+ {
+ glibtop_error_io_r (server, "Cannot read procsinfo");
+
+ return NULL;
+ }
+
+ size = max_len != 0 ? max_len : 4096;
+ args_buffer = glibtop_malloc_r (server, size);
+ if (args_buffer == NULL)
+ {
+ glibtop_error_io_r (server, "Cannot malloc procsinfo");
+
+ return NULL;
+
+ }
+
+ result = getargs(pinfo, sizeof(struct procsinfo), args_buffer, size);
+ if (result == -1)
+ {
+ glibtop_error_io_r (server, "Cannot malloc getargs");
+
+ glibtop_free_r(server, args_buffer);
+
+ return NULL;
+ }
+
+ /* look if empty string */
+
+ if (args_buffer[0] == 0)
+ {
+ glibtop_free_r(server, args_buffer);
+
+ return NULL;
+ }
+
+ /* compute length of args and realloc */
+
+ len = 0;
+ while ((args_buffer[len] != 0) && (len < size))
+ {
+ _glibtop_remove_non_ascii(args_buffer + len);
+
+ len += strlen(args_buffer + len) + 1;
+ }
+
+ args = glibtop_malloc_r (server, len);
+ if (args == NULL)
+ {
+ glibtop_error_io_r (server, "Cannot malloc procsinfo");
+
+ glibtop_free_r(server, args_buffer);
+
+ return NULL;
+ }
+ memcpy(args, args_buffer, len);
+ glibtop_free_r(server, args_buffer);
+
+ buf->size = len - 1;
+
+ buf->flags = _glibtop_sysdeps_proc_args;
+
+ return args;
+}
diff --git a/sysdeps/aix/prockernel.c b/sysdeps/aix/prockernel.c
new file mode 100644
index 00000000..e8885994
--- /dev/null
+++ b/sysdeps/aix/prockernel.c
@@ -0,0 +1,98 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <procinfo.h>
+#include <sys/proc.h>
+
+#include <glibtop.h>
+#include <glibtop/prockernel.h>
+#include <glibtop/error.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_proc_kernel =
+(1 <<GLIBTOP_PROC_KERNEL_MIN_FLT) + (1 <<GLIBTOP_PROC_KERNEL_MAJ_FLT) +
+(1 <<GLIBTOP_PROC_KERNEL_CMIN_FLT) + (1 <<GLIBTOP_PROC_KERNEL_CMAJ_FLT) +
+(1 <<GLIBTOP_PROC_KERNEL_KSTK_ESP) + (1 <<GLIBTOP_PROC_KERNEL_KSTK_EIP) +
+(1 <<GLIBTOP_PROC_KERNEL_NWCHAN);
+
+
+
+/* Init function. */
+
+void
+glibtop_init_proc_kernel_s (glibtop *server)
+{
+ server->sysdeps.proc_kernel = _glibtop_sysdeps_proc_kernel;
+}
+
+/* Provides detailed information about a process. */
+
+void
+glibtop_get_proc_kernel_s (glibtop *server, glibtop_proc_kernel *buf,
+ pid_t pid)
+{
+ struct thrdsinfo thinfo;
+ struct procsinfo *pinfo;
+ tid_t thid;
+ int result;
+
+ memset (buf, 0, sizeof (glibtop_proc_kernel));
+
+ pinfo = _glibtop_get_procinfo(server, pid);
+ if (pinfo == NULL)
+ {
+ glibtop_error_io_r(server, "Cannot read procsinfo");
+
+ return;
+ }
+
+ if (!(pinfo->pi_flags | SKPROC))
+ {
+ /* not a kernel process */
+
+ return;
+ }
+
+ buf->min_flt = pinfo->pi_ru.ru_minflt;
+ buf->maj_flt = pinfo->pi_ru.ru_majflt;
+
+ buf->cmin_flt = pinfo->pi_cru.ru_minflt;
+ buf->cmaj_flt = pinfo->pi_cru.ru_majflt;
+
+ thid = 0;
+ result = getthrds(pid, &thinfo, sizeof(thinfo), &thid, 1);
+ if (result != 1)
+ {
+ glibtop_error_io_r(server, "Cannot read thrdsinfo");
+
+ return;
+ }
+
+ buf->kstk_esp = thinfo.ti_ustk;
+ buf->kstk_eip = thinfo.ti_code;
+
+ buf->nwchan = thinfo.ti_wchan;
+
+ buf->flags = _glibtop_sysdeps_proc_kernel;
+}
diff --git a/sysdeps/aix/proclist.c b/sysdeps/aix/proclist.c
new file mode 100644
index 00000000..b92c5669
--- /dev/null
+++ b/sysdeps/aix/proclist.c
@@ -0,0 +1,247 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <procinfo.h>
+
+#include <glibtop.h>
+#include <glibtop/xmalloc.h>
+#include <glibtop/proclist.h>
+
+static const unsigned long _glibtop_sysdeps_proclist =
+(1 << GLIBTOP_PROCLIST_NUMBER) + (1 << GLIBTOP_PROCLIST_TOTAL) +
+(1 << GLIBTOP_PROCLIST_SIZE);
+
+#define BLOCK_COUNT 256
+#define BLOCK_SIZE (BLOCK_COUNT * sizeof (unsigned int))
+
+/* Init function. */
+
+void
+glibtop_init_proclist_s (glibtop *server)
+{
+ server->sysdeps.proclist = _glibtop_sysdeps_proclist;
+}
+
+/* Fetch list of currently running processes.
+ *
+ * IMPORTANT NOTE:
+ * On error, this function MUST return NULL and set buf->flags to zero !
+ * On success, it returnes a pointer to a list of buf->number elements
+ * each buf->size big. The total size is stored in buf->total. */
+
+unsigned *
+glibtop_get_proclist_s (glibtop *server, glibtop_proclist *buf,
+ int64_t which, int64_t arg)
+{
+ struct procsinfo pinfo;
+ int count, total;
+ unsigned pids [BLOCK_COUNT], *pids_chain = NULL;
+ int pids_size = 0, pids_offset = 0, new_size;
+ pid_t current;
+ int result;
+
+ memset (buf, 0, sizeof (glibtop_proclist));
+
+ for( count = total = 0, current = 0
+ , result = getprocs(&pinfo, sizeof(pinfo), NULL, 0, &current, 1);
+ result == 1;
+ result = getprocs(&pinfo, sizeof(pinfo), NULL, 0, &current, 1))
+ {
+ if (which & GLIBTOP_EXCLUDE_IDLE)
+ {
+ if (pinfo.pi_state & SIDL)
+ {
+ /* exclude idle processes */
+
+ continue;
+ }
+ }
+
+ if (which & GLIBTOP_EXCLUDE_SYSTEM)
+ {
+ if (pinfo.pi_flags & SKPROC)
+ {
+ /* exclude Kernel processes */
+
+ continue;
+ }
+ }
+
+ if (which & GLIBTOP_EXCLUDE_NOTTY)
+ {
+ if (!pinfo.pi_ttyp)
+ {
+ /* exclude processes without tty */
+
+ continue;
+ }
+ }
+
+ switch(which & GLIBTOP_KERN_PROC_MASK)
+ {
+ case GLIBTOP_KERN_PROC_ALL:
+
+ /* return information about all processes
+ * so, let's go ahead
+ */
+
+ break;
+
+ case GLIBTOP_KERN_PROC_PID:
+
+ /* return information about all processes with
+ * pid passed in arg
+ */
+
+ if (pinfo.pi_pid != arg)
+ {
+ continue;
+ }
+
+ break;
+
+ case GLIBTOP_KERN_PROC_PGRP:
+
+ /* return information about all processes in
+ * process group passed in arg
+ */
+
+ if (pinfo.pi_pgrp != arg)
+ {
+ continue;
+ }
+
+ break;
+
+ case GLIBTOP_KERN_PROC_SESSION:
+
+ /* return information about all processes in
+ * session passed in arg
+ */
+
+ if (pinfo.pi_sid != arg)
+ {
+ continue;
+ }
+
+ break;
+
+ case GLIBTOP_KERN_PROC_TTY:
+
+ /* return information about all processes with
+ * tty device number passed in arg
+ */
+
+ if (pinfo.pi_ttyd != arg)
+ {
+ continue;
+ }
+
+ break;
+
+ case GLIBTOP_KERN_PROC_UID:
+
+ /* return information about all processes with
+ * effective uid passed in arg
+ */
+
+ if (pinfo.pi_cred.cr_uid != arg)
+ {
+ continue;
+ }
+
+ break;
+
+ case GLIBTOP_KERN_PROC_RUID:
+
+ /* return information about all processes with
+ * real uid passed in arg
+ */
+
+ if (pinfo.pi_cred.cr_ruid != arg)
+ {
+ continue;
+ }
+
+ break;
+ }
+
+ if (count >= BLOCK_COUNT)
+ {
+ /* The following call to glibtop_realloc will be
+ * equivalent to glibtop_malloc () if `pids_chain' is
+ * NULL. We just calculate the new size and copy `pids'
+ * to the beginning of the newly allocated block. */
+
+ new_size = pids_size + BLOCK_SIZE;
+
+ pids_chain = glibtop_realloc_r
+ (server, pids_chain, new_size);
+ memcpy (pids_chain + pids_offset, pids, BLOCK_SIZE);
+
+ pids_size = new_size;
+ pids_offset += BLOCK_COUNT;
+ count = 0;
+ }
+
+ /* pids is now big enough to hold at least one single pid. */
+
+ pids[count++] = pinfo.pi_pid;
+
+ total++;
+ }
+
+ if (result == -1)
+ {
+ glibtop_error_io_r(server, "Cannot read procsinfo");
+ }
+
+ /* count is only zero if an error occured (one a running Linux system,
+ * we have at least one single process). */
+
+ if (!count) return NULL;
+
+ /* The following call to glibtop_realloc will be equivalent to
+ * glibtop_malloc if pids_chain is NULL. We just calculate the
+ * new size and copy pids to the beginning of the newly allocated
+ * block. */
+
+ new_size = pids_size + count * sizeof (unsigned);
+
+ pids_chain = glibtop_realloc_r (server, pids_chain, new_size);
+
+ memcpy (pids_chain + pids_offset, pids, count * sizeof (unsigned));
+
+ pids_size = new_size;
+
+ /* Since everything is ok now, we can set buf->flags, fill in the
+ * remaining fields and return the `pids_chain'. */
+
+ buf->size = sizeof(unsigned int);
+ buf->number = total;
+ buf->total = total * buf->size;
+
+ buf->flags = _glibtop_sysdeps_proclist;
+
+ return pids_chain;
+}
diff --git a/sysdeps/aix/procmap.c b/sysdeps/aix/procmap.c
new file mode 100644
index 00000000..2ed372aa
--- /dev/null
+++ b/sysdeps/aix/procmap.c
@@ -0,0 +1,50 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/xmalloc.h>
+#include <glibtop/procmap.h>
+
+static const unsigned long _glibtop_sysdeps_proc_map = 0;
+
+/* Init function. */
+
+void
+glibtop_init_proc_map_s (glibtop *server)
+{
+ server->sysdeps.proc_map = _glibtop_sysdeps_proc_map;
+}
+
+/* Provides detailed information about a process. */
+
+glibtop_map_entry *
+glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid)
+{
+ glibtop_init_p (&server, GLIBTOP_SYSDEPS_PROC_MAP, 0);
+
+ memset (buf, 0, sizeof (glibtop_proc_map));
+
+ return NULL;
+}
diff --git a/sysdeps/aix/procmem.c b/sysdeps/aix/procmem.c
new file mode 100644
index 00000000..2e7738d3
--- /dev/null
+++ b/sysdeps/aix/procmem.c
@@ -0,0 +1,73 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <unistd.h>
+#include <sys/vminfo.h>
+#include <sys/resource.h>
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/procmem.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_proc_mem =
+(1 << GLIBTOP_PROC_MEM_SIZE) + (1 << GLIBTOP_PROC_MEM_VSIZE) +
+(1 << GLIBTOP_PROC_MEM_RESIDENT) + (1 << GLIBTOP_PROC_MEM_RSS) +
+(1 << GLIBTOP_PROC_MEM_RSS_RLIM);
+
+/* Init function. */
+
+void
+glibtop_init_proc_mem_s (glibtop *server)
+{
+ server->sysdeps.proc_mem = _glibtop_sysdeps_proc_mem;
+}
+
+/* Provides detailed information about a process. */
+
+void
+glibtop_get_proc_mem_s (glibtop *server, glibtop_proc_mem *buf,
+ pid_t pid)
+{
+ struct procsinfo *pinfo;
+ int pagesize;
+
+ memset (buf, 0, sizeof (glibtop_proc_mem));
+
+ pinfo = _glibtop_get_procinfo(server, pid);
+ if (pinfo == NULL)
+ {
+ glibtop_error_io_r (server, "Cannot read procsinfo");
+
+ return;
+ }
+
+ pagesize = sysconf(_SC_PAGESIZE);
+
+ buf->vsize = buf->size = pinfo->pi_size * pagesize;
+ buf->resident = buf->rss = (pinfo->pi_drss + pinfo->pi_trss) * pagesize;
+ buf->rss_rlim = pinfo->pi_rlimit[RLIMIT_RSS].rlim_cur;
+
+ buf->flags = _glibtop_sysdeps_proc_mem;
+}
diff --git a/sysdeps/aix/procsegment.c b/sysdeps/aix/procsegment.c
new file mode 100644
index 00000000..b1cf02a1
--- /dev/null
+++ b/sysdeps/aix/procsegment.c
@@ -0,0 +1,74 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <unistd.h>
+#include <sys/vminfo.h>
+#include <sys/resource.h>
+
+#include <glibtop.h>
+#include <glibtop/procsegment.h>
+#include <glibtop/error.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_proc_segment =
+(1 << GLIBTOP_PROC_SEGMENT_TEXT_RSS) + (1 << GLIBTOP_PROC_SEGMENT_SHLIB_RSS) +
+(1 << GLIBTOP_PROC_SEGMENT_DATA_RSS) + (1 << GLIBTOP_PROC_SEGMENT_STACK_RSS);
+
+
+/* Init function. */
+
+void
+glibtop_init_proc_segment_s (glibtop *server)
+{
+ server->sysdeps.proc_segment = _glibtop_sysdeps_proc_segment;
+}
+
+/* Provides detailed information about a process. */
+
+void
+glibtop_get_proc_segment_s (glibtop *server, glibtop_proc_segment *buf,
+ pid_t pid)
+{
+ struct procsinfo *pinfo;
+ int pagesize;
+
+ memset (buf, 0, sizeof (glibtop_proc_segment));
+
+ pinfo = _glibtop_get_procinfo(server, pid);
+ if (pinfo == NULL)
+ {
+ glibtop_error_io_r (server, "Cannot read procsinfo");
+
+ return;
+ }
+
+ pagesize = sysconf(_SC_PAGESIZE);
+
+ buf->text_rss = pinfo->pi_trss * pagesize;
+ buf->data_rss = pinfo->pi_drss * pagesize;
+ buf->shlib_rss = pinfo->pi_ru.ru_ixrss * pagesize;
+ buf->stack_rss = pinfo->pi_ru.ru_isrss * pagesize;
+
+ buf->flags = _glibtop_sysdeps_proc_segment;
+}
diff --git a/sysdeps/aix/procsignal.c b/sysdeps/aix/procsignal.c
new file mode 100644
index 00000000..dbcb7829
--- /dev/null
+++ b/sysdeps/aix/procsignal.c
@@ -0,0 +1,89 @@
+/* $Id$ */
+
+/* Copyright (C)) +998-99 Martin Baulig
+ This file is part of LibGTop) +.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April) +998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version) + of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite) +30,
+ Boston, MA) +2111-1307, USA.
+*/
+
+#include <unistd.h>
+#include <sys/vminfo.h>
+#include <sys/resource.h>
+#include <sys/signal.h>
+
+#include <glibtop.h>
+#include <glibtop/procsignal.h>
+#include <glibtop/error.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_proc_signal =
+(1 <<GLIBTOP_PROC_SIGNAL_SIGNAL) + (1 <<GLIBTOP_PROC_SIGNAL_BLOCKED) +
+(1 <<GLIBTOP_PROC_SIGNAL_SIGIGNORE) + (1 <<GLIBTOP_PROC_SIGNAL_SIGCATCH);
+
+/* Init function. */
+
+void
+glibtop_init_proc_signal_s (glibtop *server)
+{
+ server->sysdeps.proc_signal = _glibtop_sysdeps_proc_signal;
+}
+
+/* Provides detailed information about a process. */
+
+void
+glibtop_get_proc_signal_s (glibtop *server, glibtop_proc_signal *buf,
+ pid_t pid)
+{
+ struct procsinfo *pinfo;
+ int i;
+ long bit;
+
+ memset (buf, 0, sizeof (glibtop_proc_signal));
+
+ pinfo = _glibtop_get_procinfo(server, pid);
+ if (pinfo == NULL)
+ {
+ glibtop_error_io_r (server, "Cannot read procsinfo");
+
+ return;
+ }
+
+ /* pending signals */
+
+#define NB_BITS (8 * sizeof(u_int64_t))
+
+ for (i = 0; (i < NSIG) && (i < 2 * NB_BITS); i++)
+ {
+ bit = 1 << (NB_BITS - 1 - (i % NB_BITS));
+
+ if (sigismember(&pinfo->pi_sig, i))
+ buf->signal[i / NB_BITS] |= bit;
+
+ if (pinfo->pi_signal[i] == (long)SIG_HOLD)
+ buf->blocked[i / NB_BITS] |= bit;
+
+ if (pinfo->pi_signal[i] == (long)SIG_IGN)
+ buf->sigignore[i / NB_BITS] |= bit;
+
+ if (pinfo->pi_signal[i] == (long)SIG_CATCH)
+ buf->sigcatch[i / NB_BITS] |= bit;
+ }
+
+ buf->flags = _glibtop_sysdeps_proc_signal;
+}
diff --git a/sysdeps/aix/procstate.c b/sysdeps/aix/procstate.c
new file mode 100644
index 00000000..b0a9c814
--- /dev/null
+++ b/sysdeps/aix/procstate.c
@@ -0,0 +1,127 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <procinfo.h>
+#include <sys/thread.h>
+
+#include <glibtop.h>
+#include <glibtop/procstate.h>
+#include <glibtop/error.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_proc_state =
+(1 << GLIBTOP_PROC_STATE_CMD) + (1 << GLIBTOP_PROC_STATE_STATE) +
+(1 << GLIBTOP_PROC_STATE_UID) + (1 << GLIBTOP_PROC_STATE_GID);
+
+/* Init function. */
+
+void
+glibtop_init_proc_state_s (glibtop *server)
+{
+ server->sysdeps.proc_state = _glibtop_sysdeps_proc_state;
+}
+
+/* Provides detailed information about a process. */
+
+void
+glibtop_get_proc_state_s (glibtop *server, glibtop_proc_state *buf,
+ pid_t pid)
+{
+ struct procsinfo *pinfo;
+ struct thrdsinfo thinfo;
+ tid_t thid;
+ int result;
+
+ memset (buf, 0, sizeof (glibtop_proc_state));
+
+ pinfo = _glibtop_get_procinfo(server, pid);
+ if (pinfo == NULL)
+ {
+ glibtop_error_io_r(server, "Cannot read procsinfo");
+
+ return;
+ }
+
+ if (pinfo->pi_pid == 0)
+ {
+ strcpy(buf->cmd, "swapper");
+ }
+
+ if (pinfo->pi_comm[0] == 0)
+ {
+ strcpy(buf->cmd, "<unknown>");
+ }
+ else
+ {
+ strncpy(buf->cmd, pinfo->pi_comm, 39);
+ }
+
+ buf->uid = pinfo->pi_uid;
+ buf->gid = pinfo->pi_cred.cr_gid;
+
+ if (pinfo->pi_state == SZOMB)
+ {
+ buf->state = 'Z';
+ strcpy(buf->cmd, "<defunct>");
+ }
+ else
+ {
+ /* get state of first thread */
+
+ thid = 0;
+ result = getthrds(pid, &thinfo, sizeof(thinfo), &thid, 1);
+ if (result != 1)
+ {
+ glibtop_error_io_r(server, "Cannot read threadinfo");
+ }
+
+ switch (thinfo.ti_state)
+ {
+ case TSIDL:
+ buf->state = 'D';
+ break;
+ case TSRUN:
+ buf->state = 'R';
+ break;
+ case TSSLEEP:
+ buf->state = 'S';
+ break;
+ case TSZOMB:
+ buf->state = 'Z';
+ strcpy(buf->cmd, "<defunct>");
+ break;
+ case TSSTOP:
+ buf->state = 'T';
+ break;
+ case TSSWAP:
+ buf->state = 'W';
+ break;
+ default:
+ buf->state = 0;
+ break;
+ }
+ }
+
+ buf->flags = _glibtop_sysdeps_proc_state;
+}
diff --git a/sysdeps/aix/proctime.c b/sysdeps/aix/proctime.c
new file mode 100644
index 00000000..4526a889
--- /dev/null
+++ b/sysdeps/aix/proctime.c
@@ -0,0 +1,72 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <unistd.h>
+
+#include <glibtop.h>
+#include <glibtop/proctime.h>
+#include <glibtop/error.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_proc_time =
+(1 << GLIBTOP_PROC_TIME_START_TIME) + (1 << GLIBTOP_PROC_TIME_RTIME) +
+(1 << GLIBTOP_PROC_TIME_UTIME) + (1 << GLIBTOP_PROC_TIME_STIME) +
+(1 << GLIBTOP_PROC_TIME_CUTIME) + (1 << GLIBTOP_PROC_TIME_CSTIME) +
+(1 << GLIBTOP_PROC_TIME_FREQUENCY);
+
+/* Init function. */
+
+void
+glibtop_init_proc_time_s (glibtop *server)
+{
+ server->sysdeps.proc_time = _glibtop_sysdeps_proc_time;
+}
+
+/* Provides detailed information about a process. */
+
+void
+glibtop_get_proc_time_s (glibtop *server, glibtop_proc_time *buf,
+ pid_t pid)
+{
+ struct procsinfo *pinfo;
+
+ memset (buf, 0, sizeof (glibtop_proc_time));
+
+ pinfo = _glibtop_get_procinfo(server, pid);
+ if (pinfo == NULL)
+ {
+ glibtop_error_io_r (server, "Cannot read procsinfo");
+ return;
+ }
+
+ buf->start_time = pinfo->pi_start;
+ buf->utime = pinfo->pi_ru.ru_utime.tv_sec + (double)pinfo->pi_ru.ru_utime.tv_usec/1000000.0;
+ buf->stime = pinfo->pi_ru.ru_stime.tv_sec + (double)pinfo->pi_ru.ru_stime.tv_usec/1000000.0;
+ buf->rtime = buf->utime + buf->stime;
+ buf->cutime = pinfo->pi_cru.ru_utime.tv_sec + (double)pinfo->pi_cru.ru_utime.tv_usec/1000000.0;
+ buf->cstime = pinfo->pi_cru.ru_stime.tv_sec + (double)pinfo->pi_cru.ru_stime.tv_usec/1000000.0;
+ buf->frequency = sysconf(_SC_CLK_TCK);
+
+ buf->flags = _glibtop_sysdeps_proc_time;
+}
diff --git a/sysdeps/aix/procuid.c b/sysdeps/aix/procuid.c
new file mode 100644
index 00000000..c5fe476f
--- /dev/null
+++ b/sysdeps/aix/procuid.c
@@ -0,0 +1,101 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <unistd.h>
+#include <sys/vminfo.h>
+#include <sys/resource.h>
+
+#include <glibtop.h>
+#include <glibtop/procuid.h>
+#include <glibtop/error.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_proc_uid =
+(1 << GLIBTOP_PROC_UID_UID) + (1 << GLIBTOP_PROC_UID_EUID) +
+(1 << GLIBTOP_PROC_UID_GID) + (1 << GLIBTOP_PROC_UID_EGID) +
+(1 << GLIBTOP_PROC_UID_PID) + (1 << GLIBTOP_PROC_UID_PPID) +
+(1 << GLIBTOP_PROC_UID_PGRP) + (1 << GLIBTOP_PROC_UID_SESSION) +
+(1 << GLIBTOP_PROC_UID_TTY) + (1 << GLIBTOP_PROC_UID_PRIORITY) +
+(1 << GLIBTOP_PROC_UID_NICE);
+
+
+/* Init function. */
+
+void
+glibtop_init_proc_uid_s (glibtop *server)
+{
+ server->sysdeps.proc_uid = _glibtop_sysdeps_proc_uid;
+}
+
+/* Provides detailed information about a process. */
+
+void
+glibtop_get_proc_uid_s (glibtop *server, glibtop_proc_uid *buf,
+ pid_t pid)
+{
+ struct procsinfo *pinfo;
+ struct thrdsinfo thinfo;
+ tid_t thid;
+ int result;
+
+ memset (buf, 0, sizeof (glibtop_proc_uid));
+
+ pinfo = _glibtop_get_procinfo(server, pid);
+ if (pinfo == NULL)
+ {
+ glibtop_error_io_r (server, "Cannot read procsinfo");
+
+ return;
+ }
+
+ buf->uid = pinfo->pi_cred.cr_ruid;
+ buf->euid = pinfo->pi_cred.cr_uid;
+ buf->gid = pinfo->pi_cred.cr_rgid;
+ buf->egid = pinfo->pi_cred.cr_gid;
+
+ buf->pid = pinfo->pi_pid;
+ buf->ppid = pinfo->pi_ppid;
+
+ buf->pgrp = pinfo->pi_pgrp;
+ buf->session = pinfo->pi_sid;
+
+ buf->tty = pinfo->pi_ttyd;
+
+ buf->nice = pinfo->pi_nice;
+
+ buf->flags = _glibtop_sysdeps_proc_uid;
+
+ thid = 0;
+ result = getthrds(pid, &thinfo, sizeof(thinfo), &thid, 1);
+ if (result != 1)
+ {
+ buf->flags &= ~(1 << GLIBTOP_PROC_UID_PRIORITY);
+
+ glibtop_error_io_r(server, "Cannot read thrdsinfo");
+ }
+
+ /* priority of first thread */
+
+ buf->priority = thinfo.ti_pri;
+}
diff --git a/sysdeps/aix/sem_limits.c b/sysdeps/aix/sem_limits.c
new file mode 100644
index 00000000..f3fce8d5
--- /dev/null
+++ b/sysdeps/aix/sem_limits.c
@@ -0,0 +1,86 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <glibtop.h>
+#include <glibtop/sem_limits.h>
+#include <glibtop/error.h>
+
+#include "utils.h"
+
+static const unsigned long _glibtop_sysdeps_sem_limits =
+(1 << GLIBTOP_IPC_SEMMNI) + (1 << GLIBTOP_IPC_SEMMSL) +
+(1 << GLIBTOP_IPC_SEMOPM) + (1 << GLIBTOP_IPC_SEMUME) +
+(1 << GLIBTOP_IPC_SEMUSZ) + (1 << GLIBTOP_IPC_SEMVMX) +
+(1 << GLIBTOP_IPC_SEMAEM);
+
+/* Init function. */
+
+void
+glibtop_init_sem_limits_p (glibtop *server)
+{
+ off_t result;
+
+ result = _glibtop_get_kmem_offset(server, "seminfo");
+ if (result <= 0)
+ {
+ server->sysdeps.sem_limits = 0;
+ return;
+ }
+
+ server->machine.seminfo_offset = result;
+
+ server->sysdeps.sem_limits = _glibtop_sysdeps_sem_limits;
+}
+
+/* Provides information about sysv sem limits. */
+
+void
+glibtop_get_sem_limits_p (glibtop *server, glibtop_sem_limits *buf)
+{
+ int result;
+ struct seminfo seminfo;
+
+ glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_SEM_LIMITS), 0);
+
+ memset (buf, 0, sizeof (glibtop_sem_limits));
+
+ result = _glibtop_get_kmem_info(server, server->machine.seminfo_offset,
+ &seminfo, sizeof(seminfo));
+
+ if (result <= 0)
+ {
+ glibtop_error_io_r (server, "Cannot read seminfo");
+
+ return;
+ }
+
+ buf->semmni = seminfo.semmni;
+ buf->semmsl = seminfo.semmsl;
+ buf->semopm = seminfo.semopm;
+ buf->semume = seminfo.semume;
+ buf->semusz = seminfo.semusz;
+ buf->semvmx = seminfo.semvmx;
+ buf->semaem = seminfo.semaem;
+
+ buf->flags = _glibtop_sysdeps_sem_limits;
+}
diff --git a/sysdeps/aix/shm_limits.c b/sysdeps/aix/shm_limits.c
new file mode 100644
index 00000000..67d20517
--- /dev/null
+++ b/sysdeps/aix/shm_limits.c
@@ -0,0 +1,79 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <sys/shm.h>
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/shm_limits.h>
+
+static const unsigned long _glibtop_sysdeps_shm_limits =
+(1L << GLIBTOP_IPC_SHMMAX) + (1L << GLIBTOP_IPC_SHMMIN) +
+(1L << GLIBTOP_IPC_SHMMNI);
+
+/* Init function. */
+
+void
+glibtop_init_shm_limits_p (glibtop *server)
+{
+ int result;
+
+ result = _glibtop_get_kmem_offset(server, "shminfo");
+ if (result == -1)
+ {
+ server->sysdeps.shm_limits = 0;
+ return;
+ }
+
+ server->machine.shminfo_offset = result;
+
+ server->sysdeps.shm_limits = _glibtop_sysdeps_shm_limits;
+}
+
+/* Provides information about sysv ipc limits. */
+
+void
+glibtop_get_shm_limits_p (glibtop *server, glibtop_shm_limits *buf)
+{
+ int result;
+ struct shminfo shminfo;
+ int s;
+
+ glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_SHM_LIMITS), 0);
+
+ memset (buf, 0, sizeof (glibtop_shm_limits));
+
+ result = _glibtop_get_kmem_info(server, server->machine.shminfo_offset,
+ &shminfo, sizeof(struct shminfo));
+ if (result <= 0)
+ {
+ glibtop_error_io_r (server, "Cannot read shminfo");
+ return;
+ }
+
+ buf->shmmax = shminfo.shmmax;
+ buf->shmmin = shminfo.shmmin;
+ buf->shmmni = shminfo.shmmni;
+
+ buf->flags = _glibtop_sysdeps_shm_limits;
+}
diff --git a/sysdeps/aix/siglist.c b/sysdeps/aix/siglist.c
new file mode 100644
index 00000000..9778c0f8
--- /dev/null
+++ b/sysdeps/aix/siglist.c
@@ -0,0 +1,72 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <glibtop.h>
+#include <glibtop/signal.h>
+
+const glibtop_signame glibtop_sys_siglist [] =
+{ { 1, "SIGHUP", "Hangup" },
+ { 2, "SIGINT", "Interrupt" },
+ { 3, "SIGQUIT", "Quit" },
+ { 4, "SIGILL", "Illegal Instruction" },
+ { 5, "SIGTRAP", "Trace/Breakpoint Trap" },
+ { 6, "SIGABRT", "Abort" },
+ { 7, "SIGEMT", "Emulation Trap" },
+ { 8, "SIGFPE", "Arithmetic Exception" },
+ { 9, "SIGKILL", "Killed" },
+ { 10, "SIGBUS", "Bus Error" },
+ { 11, "SIGSEGV", "Segmentation Fault" },
+ { 12, "SIGSYS", "Bad System Call" },
+ { 13, "SIGPIPE", "Broken Pipe" },
+ { 14, "SIGALRM", "Alarm Clock" },
+ { 15, "SIGTERM", "Terminated" },
+ { 16, "SIGURG", "Urgent Socket Condition" },
+ { 17, "SIGSTOP", "Stop (signal)" },
+ { 18, "SIGSTP", "Stop (user)" },
+ { 19, "SIGCONT", "Continue" },
+ { 20, "SIGCHLD", "Child Status Changed" },
+ { 21, "SIGTTIN", "Stopped (tty input)" },
+ { 22, "SIGTTOU", "Stopped (tty output)" },
+ { 23, "SIGIO", "I/O completed" },
+ { 24, "SIGXCPU", "Cpu Limit Exceeded" },
+ { 25, "SIGXFSZ", "File Size Limit Exceeded" },
+ { 27, "SIGMSG", "Message" },
+ { 28, "SIGWINCH","Window Size Change" },
+ { 29, "SIGPWR", "Power-Fail/Restart" },
+ { 30, "SIGUSR1", "User Signal 1" },
+ { 31, "SIGUSR2", "User Signal 2" },
+ { 32, "SIGPROF", "Profiling Timer Expired" },
+ { 33, "SIGDANGER","System Crash Imminent" },
+ { 34, "SIGVTALRM","Virtual Timer Expired" },
+ { 35, "SIGMIGRATE","Migrate Process" },
+ { 36, "SIGPRE", "Programming Exception" },
+ { 37, "SIGVIRT", "AIX Virtual Time Alarm" },
+ { 38, "SIGALRM1", "m:n Condition Variables" },
+ { 39, "SIGWAITING","Scheduling" },
+ { 59, "SIGCPUFAIL","Predictive De-configuration of Processors" },
+ { 60, "SIGKAP", "Keep Alive" },
+ { 61, "SIGRETRACT","Monitor Mode Relinguish" },
+ { 62, "SIGSOUND", "Sound Control Completed" },
+ { 63, "SIGSAK", "Secure Attention Key" },
+ { 0, NULL, NULL }
+};
diff --git a/sysdeps/aix/swap.c b/sysdeps/aix/swap.c
new file mode 100644
index 00000000..7e4db97c
--- /dev/null
+++ b/sysdeps/aix/swap.c
@@ -0,0 +1,128 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <sys/vminfo.h>
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/swap.h>
+
+static const unsigned long _glibtop_sysdeps_swap =
+(1 << GLIBTOP_SWAP_TOTAL) + (1 << GLIBTOP_SWAP_USED) +
+(1 << GLIBTOP_SWAP_FREE) + (1 << GLIBTOP_SWAP_PAGEIN) +
+(1 << GLIBTOP_SWAP_PAGEOUT);
+
+#define FILENAME "/etc/swapspaces"
+
+/* Init function. */
+
+void
+glibtop_init_swap_s (glibtop *server)
+{
+ server->sysdeps.swap = _glibtop_sysdeps_swap;
+}
+
+/* Provides information about swap usage. */
+
+void
+glibtop_get_swap_s (glibtop *server, glibtop_swap *buf)
+{
+ struct vminfo vminfo;
+ struct pginfo pginfo;
+ int pagesize;
+ int result;
+ FILE* fd;
+ char device_name[128];
+ int c;
+ int comment = 0;
+ int pos = 0;
+
+ memset (buf, 0, sizeof (glibtop_swap));
+
+ pagesize = sysconf(_SC_PAGESIZE);
+
+ fd = fopen(FILENAME, "r");
+ if (fd == NULL)
+ {
+ glibtop_error_io_r (server, "open (%s)", FILENAME);
+ }
+
+ buf->total = 0;
+ buf->free = 0;
+ while((c = getc(fd)) != EOF)
+ {
+ if (comment)
+ {
+ /* skip comments */
+ if (c == '\n') comment = 0;
+ continue;
+ }
+ switch(c)
+ {
+ case '*':
+ comment = 1;
+ break;
+ case '\n':
+ device_name[pos] = 0;
+ pos = 0;
+
+ if (strncmp("dev=", device_name, 4) == 0)
+ {
+ result = swapqry(device_name+4, &pginfo);
+ if (result == -1)
+ {
+ glibtop_error_io_r (server, "Cannot read pginfo");
+ break;
+ }
+
+ buf->total += pginfo.size * pagesize;
+ buf->free += pginfo.free * pagesize;;
+ }
+ break;
+ case ' ':
+ case '\t':
+ break;
+ default:
+ device_name[pos++] = c;
+ break;
+ }
+ }
+
+ buf->used = buf->total - buf->free;
+ fclose(fd);
+#ifdef HAVE_VMGETINFO
+ result = vmgetinfo((void*)&vminfo, VMINFO, sizeof(vminfo));
+#else
+ result = _glibtop_vmgetinfo((void*)&vminfo, VMINFO, sizeof(vminfo));
+#endif
+ if (result == -1)
+ {
+ glibtop_error_io_r (server, "Cannot read vminfo");
+ return;
+ }
+
+ buf->pagein = vminfo.pageins;
+ buf->pageout = vminfo.pageouts;
+
+ buf->flags = _glibtop_sysdeps_swap;
+}
diff --git a/sysdeps/aix/sysinfo.c b/sysdeps/aix/sysinfo.c
new file mode 100644
index 00000000..8185c6cc
--- /dev/null
+++ b/sysdeps/aix/sysinfo.c
@@ -0,0 +1,194 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <sys/systemcfg.h>
+
+#include <config.h>
+#include <glibtop/sysinfo.h>
+
+static const unsigned long _glibtop_sysdeps_sysinfo =
+(1L << GLIBTOP_SYSINFO_CPUINFO);
+
+static glibtop_sysinfo sysinfo;
+
+static void add_info(glibtop_entry* entry, char* label, char* value)
+{
+ g_ptr_array_add(entry->labels, g_strdup(label));
+ g_hash_table_insert(entry->values, label, g_strdup(value));
+}
+
+static void init_sysinfo(void)
+{
+ int cpu;
+ char buf[64];
+
+ memset (&sysinfo, 0, sizeof (glibtop_sysinfo));
+
+ sysinfo.ncpu = MIN(_system_configuration.ncpus, GLIBTOP_NCPU);
+
+ for (cpu = 0; cpu < sysinfo.ncpu ; cpu++)
+ {
+ /* init cpu data structure */
+
+ sysinfo.cpuinfo[cpu].labels = g_ptr_array_new();
+ sysinfo.cpuinfo[cpu].values = g_hash_table_new (NULL, NULL);
+
+ /* add properties */
+
+ switch(_system_configuration.architecture)
+ {
+ case POWER_RS:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "architecture"
+ , "Power Classic architecture");
+ break;
+ case POWER_PC:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "architecture"
+ , "Power PC architecture");
+ break;
+ case IA64:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "architecture"
+ , "Intel IA64 architecture");
+ break;
+ default:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "architecture"
+ , "Unknown architecture");
+ break;
+ }
+
+ if ( (_system_configuration.architecture == POWER_RS) ||
+ (_system_configuration.architecture == POWER_PC) )
+ {
+ switch(_system_configuration.implementation)
+ {
+ case POWER_RS1:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "RS1");
+ break;
+ case POWER_RSC:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "RSC");
+ break;
+ case POWER_RS2:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "RS2");
+ break;
+ case POWER_601:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "601");
+ break;
+ case POWER_603:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "603");
+ break;
+ case POWER_604:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "604");
+ break;
+ case POWER_620:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "620");
+ break;
+ case POWER_630:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "630");
+ break;
+ case POWER_A35:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "A35");
+ break;
+ case POWER_RS64II:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "RS64II");
+ break;
+ case POWER_RS64III:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "RS64III");
+ break;
+ }
+ }
+ else if (_system_configuration.architecture == IA64)
+ {
+ switch(_system_configuration.implementation)
+ {
+ case IA64_M1:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "IA64 M1");
+ break;
+ case IA64_M2:
+ add_info( &sysinfo.cpuinfo[cpu]
+ , "implementation"
+ , "IA64 M2");
+ break;
+ }
+ }
+
+ sprintf(buf,"%d", _system_configuration.width);
+ add_info( &sysinfo.cpuinfo[cpu], "width", buf);
+
+ if (_system_configuration.cache_attrib & (1 << 31))
+ {
+ /* L1 cache is present */
+
+ sprintf(buf,"%d", _system_configuration.icache_size);
+ add_info( &sysinfo.cpuinfo[cpu], "L1 instruction cache size", buf);
+
+ sprintf(buf,"%d", _system_configuration.dcache_size);
+ add_info( &sysinfo.cpuinfo[cpu], "L1 data cache size", buf);
+ }
+
+ sprintf(buf,"%d", _system_configuration.L2_cache_size);
+ add_info( &sysinfo.cpuinfo[cpu], "L2 cache size", buf);
+ }
+
+ sysinfo.flags = _glibtop_sysdeps_sysinfo;
+}
+
+glibtop_sysinfo *
+glibtop_get_sysinfo_s (glibtop *server)
+{
+ static int first_time = 1;
+
+ if (first_time)
+ {
+ init_sysinfo();
+ first_time = 0;
+ }
+
+ return &sysinfo;
+}
diff --git a/sysdeps/aix/uptime.c b/sysdeps/aix/uptime.c
new file mode 100644
index 00000000..250a72d1
--- /dev/null
+++ b/sysdeps/aix/uptime.c
@@ -0,0 +1,73 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/uptime.h>
+
+#include <glibtop/cpu.h>
+
+#include <glibtop_suid.h>
+
+static const unsigned long _glibtop_sysdeps_uptime =
+(1L << GLIBTOP_UPTIME_UPTIME) + (1L << GLIBTOP_UPTIME_IDLETIME);
+
+static const unsigned long _required_cpu_flags =
+(1L << GLIBTOP_CPU_TOTAL) + (1L << GLIBTOP_CPU_IDLE) +
+(1L << GLIBTOP_CPU_FREQUENCY);
+
+/* Init function. */
+
+void
+glibtop_init_uptime_p (glibtop *server)
+{
+ server->sysdeps.uptime = _glibtop_sysdeps_uptime;
+}
+
+/* Provides uptime and idle time. */
+
+void
+glibtop_get_uptime_p (glibtop *server, glibtop_uptime *buf)
+{
+ glibtop_cpu cpu;
+
+ glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_UPTIME), 0);
+
+ memset (buf, 0, sizeof (glibtop_uptime));
+
+ /* We simply calculate it from the CPU usage. */
+
+ glibtop_get_cpu_p (server, &cpu);
+
+ /* Make sure all required fields are present. */
+
+ if ((cpu.flags & _required_cpu_flags) != _required_cpu_flags)
+ return;
+
+ /* Calculate values. */
+
+ buf->uptime = (double) cpu.total / (double) cpu.frequency;
+ buf->idletime = (double) cpu.idle / (double) cpu.frequency;
+
+ buf->flags = _glibtop_sysdeps_uptime;
+}
diff --git a/sysdeps/aix/utils.c b/sysdeps/aix/utils.c
new file mode 100644
index 00000000..e230eb77
--- /dev/null
+++ b/sysdeps/aix/utils.c
@@ -0,0 +1,141 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <nlist.h>
+
+#include <procinfo.h>
+#include <sys/proc.h>
+#include <sys/vminfo.h>
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/xmalloc.h>
+#include "glibtop_suid.h"
+#include "utils.h"
+
+#ifndef HAVE_VMGETINFO
+#include <dlfcn.h>
+typedef int (*vmgetinfo_proto)(void *out, int command, int arg);
+#endif
+
+off_t
+_glibtop_get_kmem_offset(glibtop* server, char* kname)
+{
+ int result;
+ struct nlist kernelnames[] =
+ { {NULL, 0, 0, 0, 0, 0},
+ {NULL, 0, 0, 0, 0, 0},
+ };
+
+ kernelnames[0]._n._n_name = kname;
+
+ glibtop_suid_enter(server);
+
+ result = knlist(kernelnames, 1, sizeof(struct nlist));
+
+ glibtop_suid_leave(server);
+
+ if (result == -1)
+ {
+ return -1;
+ }
+
+ return kernelnames[0].n_value;
+}
+
+int
+_glibtop_get_kmem_info(glibtop* server, off_t offset, void* buf, size_t len)
+{
+ int result;
+
+ glibtop_suid_enter(server);
+
+ lseek(server->machine.kmem_fd, offset, SEEK_SET);
+
+ result = read(server->machine.kmem_fd, buf, len);
+
+ glibtop_suid_leave(server);
+
+ return result;
+}
+
+struct procsinfo*
+_glibtop_get_procinfo (glibtop *server, pid_t pid)
+{
+ int result;
+ pid_t current;
+ static int first_time = 1;
+
+ /* test if procsinfo already found */
+
+ if ((server->machine.last_pinfo.pi_pid == pid) && (!first_time))
+ {
+ return &server->machine.last_pinfo;
+ }
+
+ /* seek procsinfo if given pid */
+
+ first_time = 0;
+ current = 0;
+ while ((result = getprocs( &server->machine.last_pinfo
+ , sizeof(struct procsinfo)
+ , NULL, 0, &current, 1)) == 1)
+ {
+
+ if (pid == server->machine.last_pinfo.pi_pid)
+ {
+ return &server->machine.last_pinfo;
+ }
+ }
+ return NULL;
+}
+
+#ifndef HAVE_VMGETINFO
+int
+_glibtop_vmgetinfo (void *out, int command, int arg)
+{
+ void* handle;
+
+ static vmgetinfo_proto kern_vmgetinfo = NULL;
+
+ if (kern_vmgetinfo == NULL)
+ {
+ handle = dlopen("/unix", RTLD_NOW | RTLD_GLOBAL);
+ if (handle == NULL)
+ {
+ return -1;
+ }
+
+ kern_vmgetinfo = dlsym( handle, "vmgetinfo");
+
+ dlclose(handle);
+
+ if (kern_vmgetinfo == NULL)
+ {
+ return -1;
+ }
+ }
+
+ return kern_vmgetinfo(out, command, arg);
+}
+#endif
diff --git a/sysdeps/aix/utils.h b/sysdeps/aix/utils.h
new file mode 100644
index 00000000..f845f61a
--- /dev/null
+++ b/sysdeps/aix/utils.h
@@ -0,0 +1,45 @@
+/* $Id$ */
+
+/*
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, March 1999.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef __UTILS_H__
+#define __UTILS_H__
+
+BEGIN_LIBGTOP_DECLS
+
+extern off_t
+_glibtop_get_kmem_offset(glibtop* server, char* kname);
+
+extern int
+_glibtop_get_kmem_info(glibtop* server, off_t offset, void* buf, size_t len);
+
+extern struct procsinfo*
+_glibtop_get_procinfo (glibtop *server, pid_t pid);
+
+#ifndef HAVE_VMGETINFO
+extern int
+_glibtop_vmgetinfo (void *out, int command, int arg);
+#endif
+
+END_LIBGTOP_DECLS
+
+#endif /* __UTILS_H__ */