ports/devel/sigar/files/patch-src_os_darwin_darwin__sigar.c

188 lines
5 KiB
C

--- src/os/darwin/darwin_sigar.c.orig 2014-11-17 13:46:20.000000000 -0800
+++ src/os/darwin/darwin_sigar.c 2017-04-20 15:52:24.386676000 -0700
@@ -123,6 +123,69 @@
#endif
#if defined(SIGAR_FREEBSD5)
+#if __FreeBSD_version >= 1200028
+#define VMMETER_TYPE uint64_t
+#else
+#define VMMETER_TYPE u_int
+#endif
+struct __vmmeter {
+ VMMETER_TYPE v_vm_faults;
+ VMMETER_TYPE v_io_faults;
+ VMMETER_TYPE v_cow_faults;
+ VMMETER_TYPE v_cow_optim;
+ VMMETER_TYPE v_zfod;
+ VMMETER_TYPE v_ozfod;
+ VMMETER_TYPE v_swapin;
+ VMMETER_TYPE v_swapout;
+ VMMETER_TYPE v_swappgsin;
+ VMMETER_TYPE v_swappgsout;
+ VMMETER_TYPE v_vnodein;
+ VMMETER_TYPE v_vnodeout;
+ VMMETER_TYPE v_vnodepgsin;
+ VMMETER_TYPE v_vnodepgsout;
+ VMMETER_TYPE v_intrans;
+ VMMETER_TYPE v_reactivated;
+ VMMETER_TYPE v_pdwakeups;
+ VMMETER_TYPE v_pdpages;
+ VMMETER_TYPE v_pdshortfalls;
+ VMMETER_TYPE v_dfree;
+ VMMETER_TYPE v_pfree;
+ VMMETER_TYPE v_tfree;
+ VMMETER_TYPE v_forks;
+ VMMETER_TYPE v_vforks;
+ VMMETER_TYPE v_rforks;
+ VMMETER_TYPE v_kthreads;
+ VMMETER_TYPE v_forkpages;
+ VMMETER_TYPE v_vforkpages;
+ VMMETER_TYPE v_rforkpages;
+ VMMETER_TYPE v_kthreadpages;
+ VMMETER_TYPE v_swtch;
+ VMMETER_TYPE v_syscall;
+ VMMETER_TYPE v_trap;
+ VMMETER_TYPE v_intr;
+ VMMETER_TYPE v_soft;
+ u_int v_page_size;
+ u_int v_page_count;
+ u_int v_free_reserved;
+ u_int v_free_target;
+ u_int v_free_min;
+ u_int v_free_count;
+ u_int v_wire_count;
+ u_int v_active_count;
+ u_int v_inactive_target;
+ u_int v_inactive_count;
+ u_int v_laundry_count;
+ u_int v_pageout_free_min;
+ u_int v_interrupt_free_min;
+ u_int v_free_severe;
+#if (__FreeBSD_version < 1200016)
+ u_int v_cache_count;
+#endif
+#if (__FreeBSD_version < 1100079)
+ u_int v_cache_min;
+ u_int v_cache_max;
+#endif
+};
#define KI_FD ki_fd
#define KI_PID ki_pid
@@ -342,24 +405,21 @@
}
}
#elif defined(__FreeBSD__)
-static int sigar_vmstat(sigar_t *sigar, struct vmmeter *vmstat)
+static int sigar_vmstat(sigar_t *sigar, struct __vmmeter *vmstat)
{
- int status;
- size_t size = sizeof(unsigned int);
-
- status = kread(sigar, vmstat, sizeof(*vmstat),
- sigar->koffsets[KOFFSET_VMMETER]);
-
- if (status == SIGAR_OK) {
- return SIGAR_OK;
- }
+ size_t size;
SIGAR_ZERO(vmstat);
/* derived from src/usr.bin/vmstat/vmstat.c */
/* only collect the ones we actually use */
-#define GET_VM_STATS(cat, name, used) \
- if (used) sysctlbyname("vm.stats." #cat "." #name, &vmstat->name, &size, NULL, 0)
+#define GET_VM_STATS(cat, name, used) do { \
+ if (used) { \
+ size = sizeof(vmstat->name); \
+ sysctlbyname("vm.stats." #cat "." #name, &vmstat->name, \
+ &size, NULL, 0); \
+ } \
+} while (0)
/* sys */
GET_VM_STATS(sys, v_swtch, 0);
@@ -399,9 +459,13 @@
GET_VM_STATS(vm, v_active_count, 0);
GET_VM_STATS(vm, v_inactive_target, 0);
GET_VM_STATS(vm, v_inactive_count, 1);
+#if (__FreeBSD_version < 1200016 )
GET_VM_STATS(vm, v_cache_count, 1);
+#endif
+#if (__FreeBSD_version < 1100079 )
GET_VM_STATS(vm, v_cache_min, 0);
GET_VM_STATS(vm, v_cache_max, 0);
+#endif
GET_VM_STATS(vm, v_pageout_free_min, 0);
GET_VM_STATS(vm, v_interrupt_free_min, 0);
GET_VM_STATS(vm, v_forks, 0);
@@ -440,7 +504,7 @@
unsigned long mem_total;
#endif
#if defined(__FreeBSD__)
- struct vmmeter vmstat;
+ struct __vmmeter vmstat;
#elif defined(__OpenBSD__) || defined(__NetBSD__)
struct uvmexp vmstat;
#endif
@@ -479,7 +543,11 @@
kern *= sigar->pagesize;
#elif defined(__FreeBSD__)
if ((status = sigar_vmstat(sigar, &vmstat)) == SIGAR_OK) {
+#if (__FreeBSD_version < 1200016 )
kern = vmstat.v_cache_count + vmstat.v_inactive_count;
+#else
+ kern = vmstat.v_inactive_count;
+#endif
kern *= sigar->pagesize;
mem->free = vmstat.v_free_count;
mem->free *= sigar->pagesize;
@@ -689,7 +757,7 @@
swap->page_out = vmstat.pageouts;
#elif defined(__FreeBSD__)
struct kvm_swap kswap[1];
- struct vmmeter vmstat;
+ struct __vmmeter vmstat;
if (getswapinfo_sysctl(kswap, 1) != SIGAR_OK) {
if (!sigar->kmem) {
@@ -3055,8 +3123,13 @@
int type, istcp = 0;
char *buf;
const char *mibvar;
+#if defined(__FreeBSD__) && (__FreeBSD_version >= 1200026)
+ struct xtcpcb *tp = NULL;
+ struct xinpcb *inp;
+#else
struct tcpcb *tp = NULL;
struct inpcb *inp;
+#endif
struct xinpgen *xig, *oxig;
struct xsocket *so;
size_t len;
@@ -3094,6 +3167,15 @@
xig->xig_len > sizeof(struct xinpgen);
xig = (struct xinpgen *)((char *)xig + xig->xig_len))
{
+#if defined(__FreeBSD__) && (__FreeBSD_version >= 1200026)
+ if (istcp) {
+ tp = (struct xtcpcb *)xig;
+ inp = &tp->xt_inp;
+ } else {
+ inp = (struct xinpcb *)xig;
+ }
+ so = &inp->xi_socket;
+#else
if (istcp) {
struct xtcpcb *cb = (struct xtcpcb *)xig;
tp = &cb->xt_tp;
@@ -3105,6 +3187,7 @@
inp = &cb->xi_inp;
so = &cb->xi_socket;
}
+#endif
if (so->xso_protocol != proto) {
continue;