diff --git a/sysdeps/freebsd/ChangeLog b/sysdeps/freebsd/ChangeLog index 4f928f65..c06dedf0 100644 --- a/sysdeps/freebsd/ChangeLog +++ b/sysdeps/freebsd/ChangeLog @@ -1,3 +1,7 @@ +1998-11-17 Martin Baulig + + * Make it work with FreeBSD 3.0. + 1998-11-11 Martin Baulig * *.c: It does not work to get information about the swapper task diff --git a/sysdeps/freebsd/netload.c b/sysdeps/freebsd/netload.c index cc727b6e..8639d4a9 100644 --- a/sysdeps/freebsd/netload.c +++ b/sysdeps/freebsd/netload.c @@ -28,6 +28,11 @@ #include #include #include + +#ifdef HAVE_NET_IF_VAR_H +#include +#endif + #include #include @@ -102,7 +107,11 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf, tname, 16) != 16)) glibtop_error_io_r (server, "kvm_read (ifnetaddr)"); +#if (defined __FreeBSD__) && (__FreeBSD_version >= 300000) + ifaddraddr = (u_long) ifnet.if_addrhead.tqh_first; +#else ifaddraddr = (u_long) ifnet.if_addrlist; +#endif } if (ifaddraddr) { @@ -171,10 +180,18 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf, buf->flags = _glibtop_sysdeps_netload; return; } - + +#if (defined __FreeBSD__) && (__FreeBSD_version >= 300000) + ifaddraddr = (u_long)ifaddr.ifa.ifa_link.tqe_next; +#else ifaddraddr = (u_long)ifaddr.ifa.ifa_next; +#endif } +#if (defined __FreeBSD__) && (__FreeBSD_version >= 300000) + ifnetaddr = (u_long) ifnet.if_link.tqe_next; +#else ifnetaddr = (u_long) ifnet.if_next; +#endif } } diff --git a/sysdeps/freebsd/ppp.c b/sysdeps/freebsd/ppp.c index 94f48175..e3fc2599 100644 --- a/sysdeps/freebsd/ppp.c +++ b/sysdeps/freebsd/ppp.c @@ -29,6 +29,11 @@ #include #include + +#ifdef HAVE_NET_IF_VAR_H +#include +#endif + #include #include diff --git a/sysdeps/freebsd/prockernel.c b/sysdeps/freebsd/prockernel.c index 0918ba07..bc46af0d 100644 --- a/sysdeps/freebsd/prockernel.c +++ b/sysdeps/freebsd/prockernel.c @@ -142,12 +142,18 @@ glibtop_get_proc_kernel_p (glibtop *server, (unsigned long) &u_addr->u_pcb, (char *) &pcb, sizeof (pcb)) == sizeof (pcb)) { - /* Same like with pstats above. */ - +#if (defined __FreeBSD__) && (__FreeBSD_version >= 300000) + + /* Sorry, don't know how to get it for + * FreeBSD 3.0 at the moment. + */ + +#else buf->kstk_esp = (u_int64_t) pcb.pcb_ksp; buf->kstk_eip = (u_int64_t) pcb.pcb_pc; buf->flags |= _glibtop_sysdeps_proc_kernel_pcb; +#endif } /* Taken from `wchan ()' in `/usr/src/bin/ps/print.c'. */ diff --git a/sysdeps/freebsd/proctime.c b/sysdeps/freebsd/proctime.c index 3f941edf..5b9afc8c 100644 --- a/sysdeps/freebsd/proctime.c +++ b/sysdeps/freebsd/proctime.c @@ -71,6 +71,14 @@ calcru(p, up, sp, ip) tot = 1; } +#if (defined __FreeBSD__) && (__FreeBSD_version >= 300000) + + /* This was changed from a `struct timeval' into a `u_int64_t' + * on FreeBSD 3.0 and renamed p_rtime -> p_runtime. + */ + + totusec = (u_quad_t) p->p_runtime; +#else sec = p->p_rtime.tv_sec; usec = p->p_rtime.tv_usec; @@ -81,6 +89,8 @@ calcru(p, up, sp, ip) (long)totusec); totusec = 0; } +#endif + u = totusec; st = (u * st) / tot; @@ -161,7 +171,11 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf, glibtop_suid_leave (server); +#if (defined __FreeBSD__) && (__FreeBSD_version >= 300000) + buf->rtime = pinfo [0].kp_proc.p_runtime; +#else buf->rtime = tv2sec (pinfo [0].kp_proc.p_rtime); +#endif buf->frequency = 1000000;