diff --git a/src/os/darwin/darwin_sigar.c b/src/os/darwin/darwin_sigar.c index 4f02fc7c..d8df827f 100644 --- a/src/os/darwin/darwin_sigar.c +++ b/src/os/darwin/darwin_sigar.c @@ -21,6 +21,11 @@ #include "sigar_util.h" #include "sigar_os.h" +#include +#include +#include +#include + #ifdef DARWIN #include #include @@ -33,10 +38,6 @@ #include #include #include -#include -#include -#include -#include #include #else #include @@ -48,6 +49,13 @@ #include #endif +#ifdef __FreeBSD__ +#include +#include +#else +#include +#endif + #include #include #include @@ -2231,6 +2239,7 @@ sigar_tcp_stat_get(sigar_t *sigar, return SIGAR_OK; } +#ifndef __FreeBSD__ static int get_nfsstats(struct nfsstats *stats) { size_t len = sizeof(*stats); @@ -2243,6 +2252,7 @@ static int get_nfsstats(struct nfsstats *stats) return SIGAR_OK; } } +#endif static void map_nfs_stats(sigar_nfs_v3_t *nfsstat, int *rpc) { @@ -2285,6 +2295,16 @@ int sigar_nfs_server_v2_get(sigar_t *sigar, int sigar_nfs_client_v3_get(sigar_t *sigar, sigar_nfs_client_v3_t *nfsstat) { +#ifdef __FreeBSD__ + struct nfsstats stats; + size_t size = sizeof(stats); + + if (sysctlbyname("vfs.nfs.nfsstats", &stats, &size, NULL, 0) == -1) { + return errno; + } + + map_nfs_stats((sigar_nfs_v3_t *)nfsstat, &stats.rpccnt[0]); +#else int status; struct nfsstats stats; @@ -2293,6 +2313,7 @@ int sigar_nfs_client_v3_get(sigar_t *sigar, } map_nfs_stats((sigar_nfs_v3_t *)nfsstat, &stats.rpccnt[0]); +#endif return SIGAR_OK; } @@ -2300,6 +2321,16 @@ int sigar_nfs_client_v3_get(sigar_t *sigar, int sigar_nfs_server_v3_get(sigar_t *sigar, sigar_nfs_server_v3_t *nfsstat) { +#ifdef __FreeBSD__ + struct nfsrvstats stats; + size_t size = sizeof(stats); + + if (sysctlbyname("vfs.nfsrv.nfsrvstats", &stats, &size, NULL, 0) == -1) { + return errno; + } + + map_nfs_stats((sigar_nfs_v3_t *)nfsstat, &stats.srvrpccnt[0]); +#else int status; struct nfsstats stats; @@ -2308,6 +2339,7 @@ int sigar_nfs_server_v3_get(sigar_t *sigar, } map_nfs_stats((sigar_nfs_v3_t *)nfsstat, &stats.srvrpccnt[0]); +#endif return SIGAR_OK; }