From be5ee7b6000ca2c27c1472162b8baa90b509df65 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Thu, 5 Apr 2007 02:26:00 +0000 Subject: [PATCH] [SIGAR-4] Add hook for using mirrored /proc/net/tcp file --- src/os/linux/linux_sigar.c | 29 ++++++++++++++++++++++++++--- src/os/linux/sigar_os.h | 1 + 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/os/linux/linux_sigar.c b/src/os/linux/linux_sigar.c index 2b21fb6f..a33e7962 100644 --- a/src/os/linux/linux_sigar.c +++ b/src/os/linux/linux_sigar.c @@ -168,6 +168,9 @@ int sigar_os_open(sigar_t **sigar) (*sigar)->fsdev = NULL; + /* hook for using mirrored /proc/net/tcp file */ + (*sigar)->proc_net = getenv("SIGAR_PROC_NET"); + return SIGAR_OK; } @@ -1817,12 +1820,32 @@ static int proc_net_read(sigar_net_connection_walker_t *walker, const char *fname, int type) { - FILE *fp; + FILE *fp = NULL; char buffer[8192]; - char *ptr; + sigar_t *sigar = walker->sigar; + char *ptr = sigar->proc_net; int flags = walker->flags; - if (!(fp = fopen(fname, "r"))) { + if (ptr) { + snprintf(buffer, sizeof(buffer), + "%s/%s", ptr, + fname + sizeof(PROC_FS_ROOT)-1); + + if ((fp = fopen(buffer, "r"))) { + if (SIGAR_LOG_IS_DEBUG(sigar)) { + sigar_log_printf(sigar, SIGAR_LOG_DEBUG, + "[proc_net] using %s", + buffer); + } + } + else if (SIGAR_LOG_IS_DEBUG(sigar)) { + sigar_log_printf(sigar, SIGAR_LOG_DEBUG, + "[proc_net] cannot open %s", + buffer); + } + } + + if (!(fp || (fp = fopen(fname, "r")))) { return errno; } diff --git a/src/os/linux/sigar_os.h b/src/os/linux/sigar_os.h index 1494ffb9..9279ac19 100644 --- a/src/os/linux/sigar_os.h +++ b/src/os/linux/sigar_os.h @@ -67,6 +67,7 @@ struct sigar_t { int lcpu; linux_iostat_e iostat; sigar_cache_t *fsdev; + char *proc_net; }; #define HAVE_STRERROR_R