Package: vnstat
Version: 1.4-4
Severity: normal
Tags: patch
vnstat collects data from the wrong interface if you have interfaces
with more than one digit in the interface name:
# vnstat -D -u -i eth1
arg 1: "-D"
arg 2: "-u"
Updating database...
arg 3: "-i"
Used interface: eth1
bzise 4096
blocks 4085595
bfree 1858554
bavail 1651016
ffree 1974741
6604064 free space left
Database loaded for interface "eth1"...
eth16: 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0
btime 1225467954
rx: 0 - 0 = 0
tx: 0 - 0 = 0
Database saved...
In this case vnstat tries to collect data from eth16 instead of eth1.
The following patch fixes the problem for me:
diff -ur vnstat-1.4.orig/src/proc.c vnstat-1.4/src/proc.c
--- vnstat-1.4.orig/src/proc.c 2004-03-26 14:22:42.000000000 +0100
+++ vnstat-1.4/src/proc.c 2009-01-21 21:37:07.000000000 +0100
@@ -5,7 +5,7 @@
void readproc(char iface[32])
{
FILE *fp;
- char temp[64], inface[32];
+ char temp[64], inface[32], *p;
int check;
if ((fp=fopen("/proc/net/dev","r"))==NULL) {
@@ -22,7 +22,9 @@
check=0;
while (fgets(procline,512,fp)!=NULL) {
sscanf(procline,"%s",temp);
- if (strncmp(inface,temp,strlen(inface))==0) {
+ if ((p = strchr(temp, ':')) != NULL)
+ *p = '\0';
+ if (strcmp(inface, temp) == 0) {
if (debug)
printf("\n%s\n",procline);
check=1;
As 'apt-get source' seems not to honor apt preferences I started with
sources from the wrong version, so you can get the patch for vnstat 1.6
too ;-)
diff -ur vnstat-1.6.orig/src/ifinfo.c vnstat-1.6/src/ifinfo.c
--- vnstat-1.6.orig/src/ifinfo.c 2008-01-01 17:13:00.000000000 +0100
+++ vnstat-1.6/src/ifinfo.c 2009-01-21 20:58:40.000000000 +0100
@@ -32,7 +32,7 @@
int readproc(char iface[32])
{
FILE *fp;
- char temp[4][64], procline[512], *proclineptr;
+ char temp[4][64], procline[512], *proclineptr, *p;
int check;
if ((fp=fopen("/proc/net/dev", "r"))==NULL) {
@@ -44,7 +44,9 @@
check = 0;
while (fgets(procline, 512, fp)!=NULL) {
sscanf(procline, "%s", temp[0]);
- if (strncmp(iface, temp[0], strlen(iface))==0) {
+ if ((p = strchr(temp[0], ':')) != NULL)
+ *p = '\0';
+ if (strcmp(iface, temp[0]) == 0) {
if (debug)
printf("\n%s\n", procline);
check = 1;
BTW proc.c seems to be obsolete in version 1.6.
Regards
Uwe
-- System Information:
Debian Release: 4.0
APT prefers stable
APT policy: (850, 'stable'), (750, 'testing'), (650, 'unstable'), (1,
'experimental')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-6-k7
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)
Versions of packages vnstat depends on:
ii libc6 2.3.6.ds1-13etch8 GNU C Library: Shared libraries
vnstat recommends no packages.
-- no debconf information
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]