implement NetBSD support, and some build problems on FreeBSD (Closes:
2004-03-09 Bastien Nocera <hadess@hadess.net> * Makefile.am: * cpu.c: (glibtop_init_cpu_p), (glibtop_get_cpu_p): * glibtop_machine.h: * mem.c: * netload.c: (glibtop_get_netload_p): * prockernel.c: (glibtop_get_proc_kernel_p): * proclist.c: (glibtop_get_proclist_p): * procmap.c: (glibtop_get_proc_map_p): * procmem.c: (glibtop_get_proc_mem_p): * procsignal.c: (glibtop_get_proc_signal_p): * procstate.c: (glibtop_get_proc_state_p): * proctime.c: * procuid.c: (glibtop_get_proc_uid_p): * uptime.c: (glibtop_get_uptime_p): implement NetBSD support, and some build problems on FreeBSD (Closes: #135674)
This commit is contained in:
committed by
Bastien Nocera
parent
a795ff4847
commit
4bd9752d52
@@ -1,3 +1,21 @@
|
||||
2004-03-09 Bastien Nocera <hadess@hadess.net>
|
||||
|
||||
* Makefile.am:
|
||||
* cpu.c: (glibtop_init_cpu_p), (glibtop_get_cpu_p):
|
||||
* glibtop_machine.h:
|
||||
* mem.c:
|
||||
* netload.c: (glibtop_get_netload_p):
|
||||
* prockernel.c: (glibtop_get_proc_kernel_p):
|
||||
* proclist.c: (glibtop_get_proclist_p):
|
||||
* procmap.c: (glibtop_get_proc_map_p):
|
||||
* procmem.c: (glibtop_get_proc_mem_p):
|
||||
* procsignal.c: (glibtop_get_proc_signal_p):
|
||||
* procstate.c: (glibtop_get_proc_state_p):
|
||||
* proctime.c:
|
||||
* procuid.c: (glibtop_get_proc_uid_p):
|
||||
* uptime.c: (glibtop_get_uptime_p): implement NetBSD support, and
|
||||
some build problems on FreeBSD (Closes: #135674)
|
||||
|
||||
2004-03-09 Bastien Nocera <hadess@hadess.net>
|
||||
|
||||
* procargs.c: (glibtop_get_proc_args_p):
|
||||
|
@@ -7,7 +7,7 @@ libgtop_sysdeps_2_0_la_SOURCES = nosuid.c siglist.c
|
||||
|
||||
libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
|
||||
|
||||
libgtop_sysdeps_suid_2_0_la_SOURCES = open.c close.c siglist.c cpu.c mem.c swap.c \
|
||||
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 \
|
||||
|
@@ -27,11 +27,16 @@
|
||||
|
||||
#include <glibtop_suid.h>
|
||||
|
||||
#ifdef __NetBSD__
|
||||
#include <sys/sched.h>
|
||||
#endif
|
||||
|
||||
static const unsigned long _glibtop_sysdeps_cpu =
|
||||
(1L << GLIBTOP_CPU_TOTAL) + (1L << GLIBTOP_CPU_USER) +
|
||||
(1L << GLIBTOP_CPU_NICE) + (1L << GLIBTOP_CPU_SYS) +
|
||||
(1L << GLIBTOP_CPU_IDLE) + (1L << GLIBTOP_CPU_FREQUENCY);
|
||||
|
||||
#ifndef KERN_CP_TIME
|
||||
/* nlist structure for kernel access */
|
||||
static struct nlist nlst [] = {
|
||||
#ifdef __bsdi__
|
||||
@@ -41,20 +46,26 @@ static struct nlist nlst [] = {
|
||||
#endif
|
||||
{ 0 }
|
||||
};
|
||||
#endif
|
||||
|
||||
/* MIB array for sysctl */
|
||||
static int mib_length=2;
|
||||
static int mib [] = { CTL_KERN, KERN_CLOCKRATE };
|
||||
#ifdef KERN_CP_TIME
|
||||
static int mib2 [] = { CTL_KERN, KERN_CP_TIME };
|
||||
#endif
|
||||
|
||||
/* Init function. */
|
||||
|
||||
void
|
||||
glibtop_init_cpu_p (glibtop *server)
|
||||
{
|
||||
#ifndef KERN_CP_TIME
|
||||
if (kvm_nlist (server->machine.kd, nlst) < 0) {
|
||||
glibtop_warn_io_r (server, "kvm_nlist (cpu)");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Set this only if kvm_nlist () succeeded. */
|
||||
server->sysdeps.cpu = _glibtop_sysdeps_cpu;
|
||||
@@ -65,7 +76,11 @@ glibtop_init_cpu_p (glibtop *server)
|
||||
void
|
||||
glibtop_get_cpu_p (glibtop *server, glibtop_cpu *buf)
|
||||
{
|
||||
#ifdef KERN_CP_TIME
|
||||
u_int64_t cpts [CPUSTATES];
|
||||
#else
|
||||
long cpts [CPUSTATES];
|
||||
#endif
|
||||
/* sysctl vars*/
|
||||
struct clockinfo ci;
|
||||
size_t length;
|
||||
@@ -78,11 +93,19 @@ glibtop_get_cpu_p (glibtop *server, glibtop_cpu *buf)
|
||||
if (server->sysdeps.cpu == 0)
|
||||
return;
|
||||
|
||||
#ifdef KERN_CP_TIME
|
||||
length = sizeof (cpts);
|
||||
if (sysctl (mib2, mib_length, cpts, &length, NULL, 0)) {
|
||||
glibtop_warn_io_r (server, "sysctl");
|
||||
return;
|
||||
}
|
||||
#else
|
||||
if (kvm_read (server->machine.kd, nlst [0].n_value,
|
||||
&cpts, sizeof (cpts)) != sizeof (cpts)) {
|
||||
glibtop_warn_io_r (server, "kvm_read (cp_time)");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Get the clockrate data */
|
||||
length = sizeof (struct clockinfo);
|
||||
|
@@ -39,6 +39,14 @@
|
||||
#include <osreldate.h>
|
||||
#endif
|
||||
|
||||
#ifdef __NetBSD__
|
||||
#include <sys/proc.h>
|
||||
|
||||
#ifndef SRUN
|
||||
#define SRUN SACTIVE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct _glibtop_machine glibtop_machine;
|
||||
|
@@ -29,7 +29,9 @@
|
||||
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/vmmeter.h>
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ < 105020000)
|
||||
#include <vm/vm_param.h>
|
||||
#endif
|
||||
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
|
||||
#include <uvm/uvm_extern.h>
|
||||
@@ -74,7 +76,6 @@ static struct nlist nlst [] = {
|
||||
};
|
||||
|
||||
/* MIB array for sysctl */
|
||||
static int mib_length=2;
|
||||
#ifdef __bsdi__
|
||||
static int mib [] = { CTL_VM, VM_TOTAL };
|
||||
#else
|
||||
|
@@ -83,6 +83,7 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
|
||||
u_long ifnetaddr, ifnetfound, ifaddraddr;
|
||||
struct sockaddr *sa;
|
||||
char tname [16];
|
||||
char temp [16];
|
||||
|
||||
union {
|
||||
struct ifaddr ifa;
|
||||
@@ -109,10 +110,13 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
|
||||
sizeof (ifnet)) != sizeof (ifnet))
|
||||
glibtop_error_io_r (server, "kvm_read (ifnetaddr)");
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__bsdi__)
|
||||
#if (defined(__FreeBSD__) && (__FreeBSD_version < 501113)) || defined(__bsdi__)
|
||||
if (kvm_read (server->machine.kd, (u_long) ifnet.if_name,
|
||||
tname, 16) != 16)
|
||||
glibtop_error_io_r (server, "kvm_read (if_name)");
|
||||
snprintf(temp, (15 - strlen(tname)), "%d", ifnet.if_unit);
|
||||
strcat(tname, temp);
|
||||
tname [15] = 0;
|
||||
#else
|
||||
strncpy (tname, ifnet.if_xname, 16);
|
||||
tname [15] = 0;
|
||||
@@ -140,39 +144,39 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
|
||||
sin = (struct sockaddr_in *)sa;
|
||||
|
||||
if (ifnet.if_flags & IFF_UP)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_UP;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_UP);
|
||||
if (ifnet.if_flags & IFF_BROADCAST)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_BROADCAST;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_BROADCAST);
|
||||
if (ifnet.if_flags & IFF_DEBUG)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_DEBUG;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_DEBUG);
|
||||
if (ifnet.if_flags & IFF_LOOPBACK)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_LOOPBACK;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_LOOPBACK);
|
||||
if (ifnet.if_flags & IFF_POINTOPOINT)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_POINTOPOINT;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_POINTOPOINT);
|
||||
if (ifnet.if_flags & IFF_RUNNING)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_RUNNING;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_RUNNING);
|
||||
if (ifnet.if_flags & IFF_NOARP)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_NOARP;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_NOARP);
|
||||
if (ifnet.if_flags & IFF_PROMISC)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_PROMISC;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_PROMISC);
|
||||
if (ifnet.if_flags & IFF_ALLMULTI)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_ALLMULTI;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_ALLMULTI);
|
||||
if (ifnet.if_flags & IFF_OACTIVE)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_OACTIVE;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_OACTIVE);
|
||||
if (ifnet.if_flags & IFF_SIMPLEX)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_SIMPLEX;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_SIMPLEX);
|
||||
if (ifnet.if_flags & IFF_LINK0)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_LINK0;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_LINK0);
|
||||
if (ifnet.if_flags & IFF_LINK1)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_LINK1;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_LINK1);
|
||||
if (ifnet.if_flags & IFF_LINK2)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_LINK2;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_LINK2);
|
||||
#ifdef __FreeBSD__
|
||||
if (ifnet.if_flags & IFF_ALTPHYS)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_ALTPHYS;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_ALTPHYS);
|
||||
#endif
|
||||
if (ifnet.if_flags & IFF_MULTICAST)
|
||||
buf->if_flags |= GLIBTOP_IF_FLAGS_MULTICAST;
|
||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_MULTICAST);
|
||||
|
||||
#if !defined(__bsdi__)
|
||||
/* Commenting out to "fix" #13345. */
|
||||
|
@@ -34,12 +34,10 @@
|
||||
#if (!defined __OpenBSD__) && (!defined __bsdi__)
|
||||
#include <sys/user.h>
|
||||
#endif
|
||||
#if !defined(__bsdi__) && !(defined(__FreeBSD__) && defined(__alpha__))
|
||||
#if !defined(__bsdi__) && !(defined(__FreeBSD__) && defined(__alpha__)) && \
|
||||
!defined(__NetBSD__)
|
||||
#include <machine/pcb.h>
|
||||
#endif
|
||||
#if defined(__FreeBSD__) && !defined(__alpha__)
|
||||
#include <machine/tss.h>
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
@@ -48,6 +46,23 @@
|
||||
#include <osreldate.h>
|
||||
#endif
|
||||
|
||||
#ifdef __NetBSD__
|
||||
#include <machine/vmparam.h>
|
||||
#include <machine/pmap.h>
|
||||
#ifdef __arm32__
|
||||
#define KERNBASE KERNEL_BASE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __NetBSD__
|
||||
#include <machine/vmparam.h>
|
||||
#include <machine/pmap.h>
|
||||
#ifdef __arm32__
|
||||
#define KERNBASE KERNEL_BASE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
static const unsigned long _glibtop_sysdeps_proc_kernel_pstats =
|
||||
(1L << GLIBTOP_PROC_KERNEL_MIN_FLT) +
|
||||
(1L << GLIBTOP_PROC_KERNEL_MAJ_FLT) +
|
||||
@@ -78,9 +93,11 @@ glibtop_get_proc_kernel_p (glibtop *server,
|
||||
pid_t pid)
|
||||
{
|
||||
struct kinfo_proc *pinfo;
|
||||
#ifndef __FreeBSD__
|
||||
struct user *u_addr = (struct user *)USRSTACK;
|
||||
struct pstats pstats;
|
||||
struct pcb pcb;
|
||||
#endif
|
||||
int count;
|
||||
|
||||
char filename [BUFSIZ];
|
||||
@@ -101,17 +118,36 @@ glibtop_get_proc_kernel_p (glibtop *server,
|
||||
if ((pinfo == NULL) || (count != 1))
|
||||
glibtop_error_io_r (server, "kvm_getprocs (%d)", pid);
|
||||
|
||||
buf->nwchan = (unsigned long) pinfo [0].kp_proc.p_wchan &~ KERNBASE;
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500013)
|
||||
|
||||
#define PROC_WCHAN ki_wchan
|
||||
#define PROC_WMESG ki_wmesg
|
||||
#define PROC_WMESG ki_wmesg
|
||||
|
||||
#else
|
||||
|
||||
#define PROC_WCHAN kp_proc.p_wchan
|
||||
#define PROC_WMESG kp_proc.p_wmesg
|
||||
#define PROC_WMESG kp_eproc.e_wmesg
|
||||
|
||||
#endif
|
||||
|
||||
#if !defined(__NetBSD__) || !defined(SACTIVE)
|
||||
buf->nwchan = (unsigned long) pinfo [0].PROC_WCHAN &~ KERNBASE;
|
||||
|
||||
buf->flags |= (1L << GLIBTOP_PROC_KERNEL_NWCHAN);
|
||||
|
||||
if (pinfo [0].kp_proc.p_wchan && pinfo [0].kp_proc.p_wmesg) {
|
||||
strncpy (buf->wchan, pinfo [0].kp_eproc.e_wmesg,
|
||||
if (pinfo [0].PROC_WCHAN && pinfo [0].PROC_WMESG) {
|
||||
strncpy (buf->wchan, pinfo [0].PROC_WMESG,
|
||||
sizeof (buf->wchan) - 1);
|
||||
buf->wchan [sizeof (buf->wchan) - 1] = 0;
|
||||
buf->flags |= (1L << GLIBTOP_PROC_KERNEL_WCHAN);
|
||||
} else {
|
||||
buf->wchan [0] = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef __FreeBSD__
|
||||
|
||||
/* Taken from `saveuser ()' in `/usr/src/bin/ps/ps.c'. */
|
||||
|
||||
@@ -129,8 +165,17 @@ glibtop_get_proc_kernel_p (glibtop *server,
|
||||
|
||||
glibtop_suid_enter (server);
|
||||
|
||||
#if !defined(__NetBSD__) || !defined(SACTIVE)
|
||||
#ifdef __NetBSD__
|
||||
/* On NetBSD, there is no kvm_uread(), and kvm_read() always reads
|
||||
* from kernel memory. */
|
||||
|
||||
if (kvm_read (server->machine.kd,
|
||||
#else
|
||||
|
||||
if ((pinfo [0].kp_proc.p_flag & P_INMEM) &&
|
||||
kvm_uread (server->machine.kd, &(pinfo [0]).kp_proc,
|
||||
#endif
|
||||
(unsigned long) &u_addr->u_stats,
|
||||
(char *) &pstats, sizeof (pstats)) == sizeof (pstats))
|
||||
{
|
||||
@@ -149,8 +194,12 @@ glibtop_get_proc_kernel_p (glibtop *server,
|
||||
buf->flags |= _glibtop_sysdeps_proc_kernel_pstats;
|
||||
}
|
||||
|
||||
#ifdef __NetBSD__
|
||||
if (kvm_read (server->machine.kd,
|
||||
#else
|
||||
if ((pinfo [0].kp_proc.p_flag & P_INMEM) &&
|
||||
kvm_uread (server->machine.kd, &(pinfo [0]).kp_proc,
|
||||
#endif
|
||||
(unsigned long) &u_addr->u_pcb,
|
||||
(char *) &pcb, sizeof (pcb)) == sizeof (pcb))
|
||||
{
|
||||
@@ -167,18 +216,52 @@ glibtop_get_proc_kernel_p (glibtop *server,
|
||||
/*xxx FreeBSD/Alpha? */
|
||||
#endif
|
||||
#else
|
||||
#ifdef __i386__
|
||||
buf->kstk_esp = (guint64) pcb.pcb_tss.tss_esp0;
|
||||
#ifdef __bsdi__
|
||||
buf->kstk_eip = (guint64) pcb.pcb_tss.tss_eip;
|
||||
#else
|
||||
buf->kstk_eip = (guint64) pcb.pcb_tss.__tss_eip;
|
||||
#endif
|
||||
|
||||
#else
|
||||
#if defined(__NetBSD__)
|
||||
#if defined(__m68k__)
|
||||
buf->kstk_esp = (u_int64_t) pcb.pcb_usp;
|
||||
buf->kstk_eip = (u_int64_t) 0;
|
||||
#elif (defined(__arm32__) || defined(__powerpc__))
|
||||
buf->kstk_esp = (u_int64_t) pcb.pcb_sp;
|
||||
buf->kstk_eip = (u_int64_t) 0;
|
||||
#elif defined(__mipsel__)
|
||||
buf->kstk_esp = (u_int64_t) pcb.pcb_context[8];
|
||||
buf->kstk_eip = (u_int64_t) 0;
|
||||
#elif defined(__sparc__)
|
||||
buf->kstk_esp = (u_int64_t) pcb.pcb_sp;
|
||||
buf->kstk_eip = (u_int64_t) pcb.pcb_pc;
|
||||
#elif defined(__alpha__)
|
||||
buf->kstk_esp = (u_int64_t) pcb.pcb_context[9];
|
||||
buf->kstk_eip = (u_int64_t) pcb.pcb_context[8];
|
||||
#else
|
||||
/* provide some defaults for other platforms */
|
||||
buf->kstk_esp = (u_int64_t) 0;
|
||||
buf->kstk_eip = (u_int64_t) 0;
|
||||
#endif /* ${MACHINE_ARCH} */
|
||||
#endif /* __NetBSD__ */
|
||||
buf->flags |= _glibtop_sysdeps_proc_kernel_pcb;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Taken from `wchan ()' in `/usr/src/bin/ps/print.c'. */
|
||||
|
||||
glibtop_suid_leave (server);
|
||||
|
||||
#else
|
||||
/* XXX: the code here was, quite frankly, junk, and almost
|
||||
* certainly wrong - remove it all, leave these fields
|
||||
* unpopulated, and give up until such time as the right
|
||||
* code is produced for both FreeBSD 4.x and 5.x
|
||||
*/
|
||||
return;
|
||||
#endif /* __FreeBSD__ */
|
||||
}
|
||||
|
@@ -85,13 +85,25 @@ glibtop_get_proclist_p (glibtop *server, glibtop_proclist *buf,
|
||||
pids = g_realloc (pids, count * sizeof (unsigned));
|
||||
/* Copy the pids over to this chain */
|
||||
for (i=j=0; i < count; i++) {
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500013)
|
||||
#define PROC_STAT ki_stat
|
||||
#define PROC_RUID ki_ruid
|
||||
#define PROC_PID ki_pid
|
||||
|
||||
#else
|
||||
#define PROC_STAT kp_proc.p_stat
|
||||
#define PROC_RUID kp_eproc.e_pcred.p_ruid
|
||||
#define PROC_PID kp_proc.p_pid
|
||||
|
||||
#endif
|
||||
|
||||
if ((real_which & GLIBTOP_EXCLUDE_IDLE) &&
|
||||
(pinfo[i].kp_proc.p_stat != SRUN))
|
||||
(pinfo[i].PROC_STAT != SRUN))
|
||||
continue;
|
||||
else if ((real_which & GLIBTOP_EXCLUDE_SYSTEM) &&
|
||||
(pinfo[i].kp_eproc.e_pcred.p_ruid == 0))
|
||||
(pinfo[i].PROC_RUID == 0))
|
||||
continue;
|
||||
pids [j++] = (unsigned) pinfo[i].kp_proc.p_pid;
|
||||
pids [j++] = (unsigned) pinfo[i].PROC_PID;
|
||||
} /* end for */
|
||||
/* Set the fields in buf */
|
||||
buf->number = j;
|
||||
|
@@ -31,9 +31,21 @@
|
||||
#include <sys/param.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/resource.h>
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ < 105020000)
|
||||
#include <vm/vm_object.h>
|
||||
#include <vm/vm_prot.h>
|
||||
#include <vm/vm_map.h>
|
||||
#elif defined(__NetBSD__) && (__NetBSD_Version__ >= 105020000)
|
||||
#include <uvm/uvm_extern.h>
|
||||
#else
|
||||
#include <vm/vm_object.h>
|
||||
#include <vm/vm_map.h>
|
||||
#if (__FreeBSD_version >= 400011)
|
||||
#include <vm/vm.h>
|
||||
#else
|
||||
#include <vm/vm_prot.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <sys/vnode.h>
|
||||
#include <sys/mount.h>
|
||||
@@ -45,7 +57,9 @@
|
||||
#include <sys/user.h>
|
||||
#endif
|
||||
#include <sys/sysctl.h>
|
||||
#if !defined(__NetBSD__) || (__NetBSD_Version__ < 105020000)
|
||||
#include <vm/vm.h>
|
||||
#endif
|
||||
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
|
||||
/* Fixme ... */
|
||||
@@ -90,8 +104,9 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
||||
glibtop_map_entry *maps;
|
||||
#if defined __FreeBSD__
|
||||
struct vnode vnode;
|
||||
#if __FreeBSD_version >= 500039
|
||||
struct inode inode;
|
||||
struct mount mount;
|
||||
#endif
|
||||
#endif
|
||||
int count, i = 0;
|
||||
int update = 0;
|
||||
@@ -113,7 +128,11 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
||||
/* Now we get the memory maps. */
|
||||
|
||||
if (kvm_read (server->machine.kd,
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500013)
|
||||
(unsigned long) pinfo [0].ki_vmspace,
|
||||
#else
|
||||
(unsigned long) pinfo [0].kp_proc.p_vmspace,
|
||||
#endif
|
||||
(char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace))
|
||||
glibtop_error_io_r (server, "kvm_read (vmspace)");
|
||||
|
||||
@@ -213,9 +232,10 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
||||
#endif
|
||||
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
|
||||
#if defined(UVM_VNODE_VALID)
|
||||
if (!vnode.v_uvm.u_flags & UVM_VNODE_VALID)
|
||||
continue;
|
||||
|
||||
#endif
|
||||
if ((vnode.v_type != VREG) || (vnode.v_tag != VT_UFS) ||
|
||||
!vnode.v_data) continue;
|
||||
|
||||
@@ -243,6 +263,15 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
||||
&vnode, sizeof (vnode)) != sizeof (vnode))
|
||||
glibtop_error_io_r (server, "kvm_read (vnode)");
|
||||
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500039)
|
||||
switch (vnode.v_type) {
|
||||
case VREG:
|
||||
maps [i-1].inode = vnode.v_cachedid;
|
||||
maps [i-1].device = vnode.v_cachedfs;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
#else
|
||||
if ((vnode.v_type != VREG) || (vnode.v_tag != VT_UFS) ||
|
||||
!vnode.v_data) continue;
|
||||
|
||||
@@ -255,7 +284,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
||||
(unsigned long) vnode.v_mount,
|
||||
&mount, sizeof (mount)) != sizeof (mount))
|
||||
glibtop_error_io_r (server, "kvm_read (mount)");
|
||||
|
||||
#endif
|
||||
maps [i-1].inode = inode.i_number;
|
||||
maps [i-1].device = inode.i_dev;
|
||||
#endif
|
||||
|
@@ -31,8 +31,12 @@
|
||||
#include <sys/param.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/resource.h>
|
||||
#ifdef __NetBSD__ && (__NetBSD_Version__ >= 105020000)
|
||||
#include <uvm/uvm_extern.h>
|
||||
#else
|
||||
#include <vm/vm_object.h>
|
||||
#include <vm/vm_map.h>
|
||||
#endif
|
||||
|
||||
#include <sys/vnode.h>
|
||||
#include <ufs/ufs/quota.h>
|
||||
@@ -43,9 +47,14 @@
|
||||
#include <sys/user.h>
|
||||
#endif
|
||||
#include <sys/sysctl.h>
|
||||
#ifdef __NetBSD__ && (__NetBSD_Version__ >= 105020000)
|
||||
#include <uvm/uvm.h>
|
||||
#else
|
||||
#include <vm/vm.h>
|
||||
#endif
|
||||
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
|
||||
#if defined(__NetBSD__) && \
|
||||
(__NetBSD_Version__ >= 104000000) && (__NetBSD_Version__ < 105020000)
|
||||
/* Fixme ... */
|
||||
#undef _KERNEL
|
||||
#define _UVM_UVM_AMAP_I_H_ 1
|
||||
@@ -113,7 +122,6 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
|
||||
struct vmspace *vms, vmspace;
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
|
||||
struct vnode vnode;
|
||||
struct inode inode;
|
||||
#else
|
||||
struct vm_object object;
|
||||
#endif
|
||||
@@ -136,9 +144,24 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
|
||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||
return;
|
||||
}
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500013)
|
||||
|
||||
#define PROC_VMSPACE ki_vmspace
|
||||
|
||||
buf->rss_rlim = pinfo [0].ki_rssize;
|
||||
|
||||
buf->vsize = buf->size = (u_int64_t) pagetok
|
||||
(pinfo [0].ki_tsize + pinfo [0].ki_dsize + pinfo[0].ki_ssize)
|
||||
<< LOG1024;
|
||||
buf->resident = buf->rss = (u_int64_t) pagetok
|
||||
(pinfo [0].ki_rssize) << LOG1024;
|
||||
|
||||
#else
|
||||
|
||||
#define PROC_VMSPACE kp_proc.p_vmspace
|
||||
|
||||
if (kvm_read (server->machine.kd,
|
||||
(unsigned long) pinfo [0].kp_proc.p_limit,
|
||||
(unsigned long) pinfo [0].PROC_VMSPACE,
|
||||
(char *) &plimit, sizeof (plimit)) != sizeof (plimit)) {
|
||||
glibtop_warn_io_r (server, "kvm_read (plimit)");
|
||||
return;
|
||||
@@ -154,11 +177,12 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
|
||||
|
||||
buf->resident = buf->rss = (guint64) pagetok
|
||||
(vms->vm_rssize) << LOG1024;
|
||||
#endif
|
||||
|
||||
/* Now we get the shared memory. */
|
||||
|
||||
if (kvm_read (server->machine.kd,
|
||||
(unsigned long) pinfo [0].kp_proc.p_vmspace,
|
||||
(unsigned long) pinfo [0].PROC_VMSPACE,
|
||||
(char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace)) {
|
||||
glibtop_warn_io_r (server, "kvm_read (vmspace)");
|
||||
return;
|
||||
@@ -233,17 +257,26 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
|
||||
/* If the object is of type vnode, add its size */
|
||||
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
|
||||
#if defined(UVM_VNODE_VALID)
|
||||
if (!vnode.v_uvm.u_flags & UVM_VNODE_VALID)
|
||||
continue;
|
||||
|
||||
#endif
|
||||
if ((vnode.v_type != VREG) || (vnode.v_tag != VT_UFS) ||
|
||||
!vnode.v_data) continue;
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 105250000)
|
||||
/* Reference count must be at least two. */
|
||||
if (vnode.v_usecount <= 1)
|
||||
continue;
|
||||
|
||||
buf->share += pagetok (vnode.v_uobj.uo_npages) << LOG1024;
|
||||
#else
|
||||
|
||||
/* Reference count must be at least two. */
|
||||
if (vnode.v_uvm.u_obj.uo_refs <= 1)
|
||||
continue;
|
||||
|
||||
buf->share += pagetok (vnode.v_uvm.u_obj.uo_npages) << LOG1024;
|
||||
#endif /* __NetBSD_Version__ >= 105250000 */
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
|
@@ -27,6 +27,8 @@
|
||||
|
||||
#include <glibtop_suid.h>
|
||||
|
||||
#include <sys/param.h>
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#include <osreldate.h>
|
||||
#endif
|
||||
@@ -67,11 +69,30 @@ glibtop_get_proc_signal_p (glibtop *server,
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500013)
|
||||
|
||||
#define PROC_SIGLIST ki_siglist
|
||||
#define PROC_SIGMASK ki_sigmask
|
||||
#define PROC_SIGIGNORE ki_sigignore
|
||||
#define PROC_SIGCATCH ki_sigcatch
|
||||
|
||||
#else
|
||||
|
||||
#define PROC_SIGLIST kp_proc.p_siglist
|
||||
#define PROC_SIGMASK kp_proc.p_sigmask
|
||||
#define PROC_SIGIGNORE kp_proc.p_sigignore
|
||||
#define PROC_SIGCATCH kp_proc.p_sigcatch
|
||||
|
||||
#endif
|
||||
|
||||
/* signal: mask of pending signals.
|
||||
* pinfo [0].kp_proc.p_siglist
|
||||
*/
|
||||
#if (defined(__NetBSD__) && (NSIG > 32)) || (__FreeBSD_version >= 400011)
|
||||
buf->signal [0] = pinfo [0].kp_proc.p_siglist.__bits[0];
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 105150000)
|
||||
buf->signal [0] = pinfo [0].kp_proc.p_sigctx.ps_siglist.__bits[0];
|
||||
#elif (defined(__NetBSD__) && (NSIG > 32)) || \
|
||||
(defined(__FreeBSD__) && (__FreeBSD_version >= 400011))
|
||||
buf->signal [0] = pinfo [0].PROC_SIGLIST.__bits[0];
|
||||
#else
|
||||
buf->signal [0] = pinfo [0].kp_proc.p_siglist;
|
||||
#endif
|
||||
@@ -79,8 +100,11 @@ glibtop_get_proc_signal_p (glibtop *server,
|
||||
/* blocked: mask of blocked signals.
|
||||
* pinfo [0].kp_proc.p_sigmask
|
||||
*/
|
||||
#if (defined(__NetBSD__) && (NSIG > 32)) || (__FreeBSD_version >= 400011)
|
||||
buf->blocked [0] = pinfo [0].kp_proc.p_sigmask.__bits[0];
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 105150000)
|
||||
buf->blocked [0] = pinfo [0].kp_proc.p_sigctx.ps_sigmask.__bits[0];
|
||||
#elif (defined(__NetBSD__) && (NSIG > 32)) || \
|
||||
(defined(__FreeBSD__) && (__FreeBSD_version >= 400011))
|
||||
buf->blocked [0] = pinfo [0].PROC_SIGMASK.__bits[0];
|
||||
#else
|
||||
buf->blocked [0] = pinfo [0].kp_proc.p_sigmask;
|
||||
#endif
|
||||
@@ -88,8 +112,11 @@ glibtop_get_proc_signal_p (glibtop *server,
|
||||
/* sigignore: mask of ignored signals.
|
||||
* pinfo [0].kp_proc.p_sigignore
|
||||
*/
|
||||
#if (defined(__NetBSD__) && (NSIG > 32)) || (__FreeBSD_version >= 400011)
|
||||
buf->sigignore [0] = pinfo [0].kp_proc.p_sigignore.__bits[0];
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 105150000)
|
||||
buf->sigignore [0] = pinfo [0].kp_proc.p_sigctx.ps_sigignore.__bits[0];
|
||||
#elif (defined(__NetBSD__) && (NSIG > 32)) || \
|
||||
(defined(__FreeBSD__) && (__FreeBSD_version >= 400011))
|
||||
buf->sigignore [0] = pinfo [0].PROC_SIGIGNORE.__bits[0];
|
||||
#else
|
||||
buf->sigignore [0] = pinfo [0].kp_proc.p_sigignore;
|
||||
#endif
|
||||
@@ -97,8 +124,11 @@ glibtop_get_proc_signal_p (glibtop *server,
|
||||
/* sigcatch: mask of caught signals.
|
||||
* pinfo [0].kp_proc.p_sigcatch
|
||||
*/
|
||||
#if (defined(__NetBSD__) && (NSIG > 32)) || (__FreeBSD_version >= 400011)
|
||||
buf->sigcatch [0] = pinfo [0].kp_proc.p_sigcatch.__bits[0];
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 105150000)
|
||||
buf->sigcatch [0] = pinfo [0].kp_proc.p_sigctx.ps_sigcatch.__bits[0];
|
||||
#elif (defined(__NetBSD__) && (NSIG > 32)) || \
|
||||
(defined(__FreeBSD__) && (__FreeBSD_version >= 400011))
|
||||
buf->sigcatch [0] = pinfo [0].PROC_SIGCATCH.__bits[0];
|
||||
#else
|
||||
buf->sigcatch [0] = pinfo [0].kp_proc.p_sigcatch;
|
||||
#endif
|
||||
|
@@ -37,11 +37,7 @@ static const unsigned long _glibtop_sysdeps_proc_state =
|
||||
(1L << GLIBTOP_PROC_STATE_GID);
|
||||
|
||||
static const unsigned long _glibtop_sysdeps_proc_state_new =
|
||||
#if LIBGTOP_VERSION_CODE >= 1001000
|
||||
(1L << GLIBTOP_PROC_STATE_RUID) + (1L << GLIBTOP_PROC_STATE_RGID);
|
||||
#else
|
||||
0;
|
||||
#endif
|
||||
|
||||
/* Init function. */
|
||||
|
||||
@@ -76,32 +72,47 @@ glibtop_get_proc_state_p (glibtop *server,
|
||||
return;
|
||||
}
|
||||
|
||||
strncpy (buf->cmd, pinfo [0].kp_proc.p_comm, sizeof (buf->cmd)-1);
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500013)
|
||||
#define PROC_COMM ki_comm
|
||||
#define PROC_SVUID ki_svuid
|
||||
#define PROC_SVGID ki_svgid
|
||||
#define PROC_RUID ki_ruid
|
||||
#define PROC_RGID ki_rgid
|
||||
#define PROC_STAT ki_stat
|
||||
|
||||
#else
|
||||
#define PROC_COMM kp_proc.p_comm
|
||||
#define PROC_SVUID kp_eproc.e_pcred.p_svuid
|
||||
#define PROC_SVGID kp_eproc.e_pcred.p_svgid
|
||||
#define PROC_RUID kp_eproc.e_pcred.p_ruid
|
||||
#define PROC_RGID kp_eproc.e_pcred.p_rgid
|
||||
#define PROC_STAT kp_proc.p_stat
|
||||
|
||||
#endif
|
||||
|
||||
strncpy (buf->cmd, pinfo [0].PROC_COMM, sizeof (buf->cmd)-1);
|
||||
buf->cmd [sizeof (buf->cmd)-1] = 0;
|
||||
|
||||
buf->uid = pinfo [0].kp_eproc.e_pcred.p_svuid;
|
||||
buf->gid = pinfo [0].kp_eproc.e_pcred.p_svgid;
|
||||
|
||||
#if LIBGTOP_VERSION_CODE >= 1001000
|
||||
buf->ruid = pinfo [0].kp_eproc.e_pcred.p_ruid;
|
||||
buf->rgid = pinfo [0].kp_eproc.e_pcred.p_rgid;
|
||||
#endif
|
||||
buf->uid = pinfo [0].PROC_SVUID;
|
||||
buf->gid = pinfo [0].PROC_SVGID;
|
||||
|
||||
/* Set the flags for the data we're about to return*/
|
||||
buf->flags = _glibtop_sysdeps_proc_state |
|
||||
_glibtop_sysdeps_proc_state_new;
|
||||
|
||||
#if LIBGTOP_VERSION_CODE >= 1001000
|
||||
switch (pinfo [0].kp_proc.p_stat) {
|
||||
switch (pinfo [0].PROC_STAT) {
|
||||
case SIDL:
|
||||
buf->state = 0;
|
||||
break;
|
||||
case SRUN:
|
||||
buf->state = GLIBTOP_PROCESS_RUNNING;
|
||||
break;
|
||||
#ifdef SSLEEP
|
||||
case SSLEEP:
|
||||
buf->state = GLIBTOP_PROCESS_INTERRUPTIBLE;
|
||||
break;
|
||||
#endif
|
||||
case SSTOP:
|
||||
buf->state = GLIBTOP_PROCESS_STOPPED;
|
||||
break;
|
||||
@@ -112,16 +123,18 @@ glibtop_get_proc_state_p (glibtop *server,
|
||||
return;
|
||||
}
|
||||
#else
|
||||
switch (pinfo [0].kp_proc.p_stat) {
|
||||
switch (pinfo [0].PROC_STAT) {
|
||||
case SIDL:
|
||||
buf->state = 'S';
|
||||
break;
|
||||
case SRUN:
|
||||
buf->state = 'R';
|
||||
break;
|
||||
#ifdef SSLEEP
|
||||
case SSLEEP:
|
||||
buf->state = 'S';
|
||||
break;
|
||||
#endif
|
||||
case SSTOP:
|
||||
buf->state = 'T';
|
||||
break;
|
||||
|
@@ -57,6 +57,8 @@ glibtop_init_proc_time_p (glibtop *server)
|
||||
* system, and interrupt time usage.
|
||||
*/
|
||||
|
||||
#ifndef __FreeBSD__
|
||||
|
||||
static void
|
||||
calcru(p, up, sp, ip)
|
||||
struct proc *p;
|
||||
@@ -66,9 +68,7 @@ calcru(p, up, sp, ip)
|
||||
{
|
||||
quad_t totusec;
|
||||
u_quad_t u, st, ut, it, tot;
|
||||
#if (__FreeBSD_version < 300003)
|
||||
long sec, usec;
|
||||
#endif
|
||||
struct timeval tv;
|
||||
|
||||
st = p->p_sticks;
|
||||
@@ -117,6 +117,8 @@ calcru(p, up, sp, ip)
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* !__FreeBSD__ */
|
||||
|
||||
/* Provides detailed information about a process. */
|
||||
|
||||
void
|
||||
@@ -142,7 +144,7 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
|
||||
/* It does not work for the swapper task. */
|
||||
if (pid == 0) return;
|
||||
|
||||
#if !(defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000))
|
||||
#if (defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000))
|
||||
if (server->sysdeps.proc_time == 0)
|
||||
return;
|
||||
|
||||
@@ -157,7 +159,9 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
|
||||
if ((pinfo == NULL) || (count != 1))
|
||||
glibtop_error_io_r (server, "kvm_getprocs (%d)", pid);
|
||||
|
||||
#if (defined __FreeBSD__) && (__FreeBSD_version >= 300003)
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500013)
|
||||
buf->rtime = pinfo [0].ki_runtime;
|
||||
#elif (defined __FreeBSD__) && (__FreeBSD_version <= 500013)
|
||||
buf->rtime = pinfo [0].kp_proc.p_runtime;
|
||||
#else
|
||||
buf->rtime = tv2sec (pinfo [0].kp_proc.p_rtime);
|
||||
@@ -192,8 +196,40 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
|
||||
|
||||
buf->flags |= _glibtop_sysdeps_proc_time_user;
|
||||
#else
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500013)
|
||||
#if __FreeBSD_version >= 500016
|
||||
if ((pinfo [0].ki_flag & PS_INMEM)) {
|
||||
#else
|
||||
if ((pinfo [0].ki_flag & P_INMEM)) {
|
||||
#endif
|
||||
buf->utime = pinfo [0].ki_runtime;
|
||||
buf->stime = 0; /* XXX */
|
||||
buf->cutime = tv2sec (pinfo [0].ki_childtime);
|
||||
buf->cstime = 0; /* XXX */
|
||||
buf->start_time = tv2sec (pinfo [0].ki_start);
|
||||
buf->flags = _glibtop_sysdeps_proc_time_user;
|
||||
}
|
||||
|
||||
glibtop_suid_enter (server);
|
||||
|
||||
#elif (__FreeBSD_version <= 500013)
|
||||
|
||||
if ((pinfo [0].kp_proc.p_flag & P_INMEM) &&
|
||||
kvm_uread (server->machine.kd, &(pinfo [0]).kp_proc,
|
||||
(unsigned long) &u_addr->u_stats,
|
||||
(char *) &pstats, sizeof (pstats)) == sizeof (pstats))
|
||||
{
|
||||
|
||||
buf->utime = tv2sec (pinfo[0].kp_eproc.e_stats.p_ru.ru_utime);
|
||||
buf->stime = tv2sec (pinfo[0].kp_eproc.e_stats.p_ru.ru_stime);
|
||||
buf->cutime = tv2sec (pinfo[0].kp_eproc.e_stats.p_cru.ru_utime);
|
||||
buf->cstime = tv2sec (pinfo[0].kp_eproc.e_stats.p_cru.ru_stime);
|
||||
buf->start_time = tv2sec (pinfo[0].kp_eproc.e_stats.p_start);
|
||||
buf->flags = _glibtop_sysdeps_proc_time_user;
|
||||
glibtop_suid_leave (server);
|
||||
}
|
||||
#else
|
||||
|
||||
if ((pinfo [0].kp_proc.p_flag & P_INMEM) &&
|
||||
kvm_uread (server->machine.kd, &(pinfo [0]).kp_proc,
|
||||
(unsigned long) &u_addr->u_stats,
|
||||
@@ -222,7 +258,7 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
|
||||
|
||||
buf->flags = _glibtop_sysdeps_proc_time_user;
|
||||
}
|
||||
|
||||
#endif
|
||||
glibtop_suid_leave (server);
|
||||
#endif
|
||||
}
|
||||
|
@@ -35,15 +35,7 @@ static const unsigned long _glibtop_sysdeps_proc_uid =
|
||||
(1L << GLIBTOP_PROC_UID_NICE);
|
||||
|
||||
static const unsigned long _glibtop_sysdeps_proc_uid_groups =
|
||||
#if LIBGTOP_VERSION_CODE >= 1001000
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
|
||||
(1L << GLIBTOP_PROC_UID_NGROUPS) + (1L << GLIBTOP_PROC_UID_GROUPS);
|
||||
#else
|
||||
0L;
|
||||
#endif
|
||||
#else /* LIBGTOP_VERSION_CODE < 1001000 */
|
||||
0L;
|
||||
#endif
|
||||
|
||||
/* Init function. */
|
||||
|
||||
@@ -84,24 +76,57 @@ glibtop_get_proc_uid_p (glibtop *server, glibtop_proc_uid *buf,
|
||||
return;
|
||||
}
|
||||
|
||||
buf->uid = pinfo [0].kp_eproc.e_pcred.p_ruid;
|
||||
buf->euid = pinfo [0].kp_eproc.e_pcred.p_svuid;
|
||||
buf->gid = pinfo [0].kp_eproc.e_pcred.p_rgid;
|
||||
buf->egid = pinfo [0].kp_eproc.e_pcred.p_svgid;
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500013)
|
||||
|
||||
buf->ppid = pinfo [0].kp_eproc.e_ppid;
|
||||
buf->pgrp = pinfo [0].kp_eproc.e_pgid;
|
||||
buf->tpgid = pinfo [0].kp_eproc.e_tpgid;
|
||||
#define PROC_RUID ki_ruid
|
||||
#define PROC_SVUID ki_svuid
|
||||
#define PROC_RGID ki_rgid
|
||||
#define PROC_SVGID ki_svgid
|
||||
#define PROC_PPID ki_ppid
|
||||
#define PROC_PGID ki_pgid
|
||||
#define PROC_TPGID ki_tpgid
|
||||
#define PROC_NICE ki_nice
|
||||
#if __FreeBSD_version >= 500013
|
||||
#define PROC_PRIORITY ki_pri.pri_user
|
||||
#else
|
||||
#define PROC_PRIORITY ki_priority
|
||||
#endif
|
||||
#else
|
||||
|
||||
buf->nice = pinfo [0].kp_proc.p_nice;
|
||||
buf->priority = pinfo [0].kp_proc.p_priority;
|
||||
#define PROC_RUID kp_eproc.e_pcred.p_ruid
|
||||
#define PROC_SVUID kp_eproc.e_pcred.p_svuid
|
||||
#define PROC_RGID kp_eproc.e_pcred.p_rgid
|
||||
#define PROC_SVGID kp_eproc.e_pcred.p_svgid
|
||||
#define PROC_PPID kp_eproc.e_ppid
|
||||
#define PROC_PGID kp_eproc.e_pgid
|
||||
#define PROC_TPGID kp_eproc.e_tpgid
|
||||
#define PROC_NICE kp_proc.p_nice
|
||||
#define PROC_PRIORITY kp_proc.p_priority
|
||||
|
||||
#endif
|
||||
|
||||
buf->uid = pinfo [0].PROC_RUID;
|
||||
buf->euid = pinfo [0].PROC_SVUID;
|
||||
buf->gid = pinfo [0].PROC_RGID;
|
||||
buf->egid = pinfo [0].PROC_SVGID;
|
||||
|
||||
buf->ppid = pinfo [0].PROC_PPID;
|
||||
buf->pgrp = pinfo [0].PROC_PGID;
|
||||
buf->tpgid = pinfo [0].PROC_TPGID;
|
||||
|
||||
buf->nice = pinfo [0].PROC_NICE;
|
||||
#if defined(__NetBSD__) && defined(SACTIVE)
|
||||
buf->priority = 0;
|
||||
#else
|
||||
buf->priority = pinfo [0].PROC_PRIORITY;
|
||||
#endif
|
||||
|
||||
/* Set the flags for the data we're about to return*/
|
||||
buf->flags = _glibtop_sysdeps_proc_uid;
|
||||
|
||||
/* Use LibGTop conditionals here so we can more easily merge this
|
||||
* code into the LIBGTOP_STABLE_1_0 branch. */
|
||||
#if LIBGTOP_VERSION_CODE >= 1001000
|
||||
#if 0
|
||||
/* This probably also works with other versions, but not yet
|
||||
* tested. Please remove the conditional if this is true. */
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
|
||||
|
@@ -49,6 +49,27 @@ glibtop_init_uptime_p (glibtop *server)
|
||||
void
|
||||
glibtop_get_uptime_p (glibtop *server, glibtop_uptime *buf)
|
||||
{
|
||||
#ifdef __NetBSD__
|
||||
time_t now;
|
||||
time_t uptime;
|
||||
int mib[2];
|
||||
struct timeval boottime;
|
||||
size_t size;
|
||||
|
||||
mib[0] = CTL_KERN;
|
||||
mib[1] = KERN_BOOTTIME;
|
||||
size = sizeof(boottime);
|
||||
if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 &&
|
||||
boottime.tv_sec != 0) {
|
||||
time(&now);
|
||||
buf->uptime = now - boottime.tv_sec;
|
||||
/* XXX: don't know a useful value to put here. */
|
||||
buf->idletime = 0;
|
||||
buf->flags = _glibtop_sysdeps_uptime;
|
||||
}
|
||||
#else
|
||||
buf->flags = _glibtop_sysdeps_uptime;
|
||||
|
||||
glibtop_cpu cpu;
|
||||
|
||||
glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_UPTIME), 0);
|
||||
@@ -70,4 +91,5 @@ glibtop_get_uptime_p (glibtop *server, glibtop_uptime *buf)
|
||||
buf->idletime = (double) cpu.idle / (double) cpu.frequency;
|
||||
|
||||
buf->flags = _glibtop_sysdeps_uptime;
|
||||
#endif
|
||||
}
|
||||
|
Reference in New Issue
Block a user