vnstat_SOURCES = src/vnstat.c src/vnstat.h \
src/ifinfo.c src/ifinfo.h \
+ src/iflist.c src/iflist.h \
src/dbsql.c src/dbsql.h \
src/dbxml.c src/dbxml.h \
src/dbjson.c src/dbjson.h \
vnstatd_SOURCES = src/vnstatd.c src/vnstatd.h \
src/ifinfo.c src/ifinfo.h \
+ src/iflist.c src/iflist.h \
src/dbsql.c src/dbsql.h \
src/dbaccess.c src/dbaccess.h \
src/datacache.c src/datacache.h \
src/daemon.c src/daemon.h
vnstati_SOURCES = src/vnstati.c src/vnstati.h \
+ src/iflist.c src/iflist.h \
src/image.c src/image.h \
src/dbsql.c src/dbsql.h \
src/common.c src/common.h \
src/dbxml.c src/dbxml.h \
src/ibw.c src/ibw.h \
src/ifinfo.c src/ifinfo.h \
+ src/iflist.c src/iflist.h \
src/misc.c src/misc.h \
src/fs.c src/fs.h \
src/id.c src/id.h
src/dbsql.c src/dbsql.h src/dbaccess.c src/dbaccess.h \
src/datacache.c src/datacache.h src/dbshow.c src/dbshow.h \
src/dbjson.c src/dbjson.h src/dbxml.c src/dbxml.h src/ibw.c \
- src/ibw.h src/ifinfo.c src/ifinfo.h src/misc.c src/misc.h \
- src/fs.c src/fs.h src/id.c src/id.h tests/image_tests.c \
- tests/image_tests.h src/image.c src/image.h
+ src/ibw.h src/ifinfo.c src/ifinfo.h src/iflist.c src/iflist.h \
+ src/misc.c src/misc.h src/fs.c src/fs.h src/id.c src/id.h \
+ tests/image_tests.c tests/image_tests.h src/image.c \
+ src/image.h
am__dirstamp = $(am__leading_dot)dirstamp
@HAVE_CHECK_TRUE@@HAVE_LIBGD_TRUE@am__objects_1 = tests/check_vnstat-image_tests.$(OBJEXT) \
@HAVE_CHECK_TRUE@@HAVE_LIBGD_TRUE@ src/check_vnstat-image.$(OBJEXT)
@HAVE_CHECK_TRUE@ src/check_vnstat-dbxml.$(OBJEXT) \
@HAVE_CHECK_TRUE@ src/check_vnstat-ibw.$(OBJEXT) \
@HAVE_CHECK_TRUE@ src/check_vnstat-ifinfo.$(OBJEXT) \
+@HAVE_CHECK_TRUE@ src/check_vnstat-iflist.$(OBJEXT) \
@HAVE_CHECK_TRUE@ src/check_vnstat-misc.$(OBJEXT) \
@HAVE_CHECK_TRUE@ src/check_vnstat-fs.$(OBJEXT) \
@HAVE_CHECK_TRUE@ src/check_vnstat-id.$(OBJEXT) \
check_vnstat_LINK = $(CCLD) $(check_vnstat_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
am_vnstat_OBJECTS = src/vnstat.$(OBJEXT) src/ifinfo.$(OBJEXT) \
- src/dbsql.$(OBJEXT) src/dbxml.$(OBJEXT) src/dbjson.$(OBJEXT) \
- src/dbshow.$(OBJEXT) src/common.$(OBJEXT) src/misc.$(OBJEXT) \
- src/cfg.$(OBJEXT) src/cfgoutput.$(OBJEXT) src/ibw.$(OBJEXT) \
- src/fs.$(OBJEXT) src/id.$(OBJEXT) src/traffic.$(OBJEXT)
+ src/iflist.$(OBJEXT) src/dbsql.$(OBJEXT) src/dbxml.$(OBJEXT) \
+ src/dbjson.$(OBJEXT) src/dbshow.$(OBJEXT) src/common.$(OBJEXT) \
+ src/misc.$(OBJEXT) src/cfg.$(OBJEXT) src/cfgoutput.$(OBJEXT) \
+ src/ibw.$(OBJEXT) src/fs.$(OBJEXT) src/id.$(OBJEXT) \
+ src/traffic.$(OBJEXT)
vnstat_OBJECTS = $(am_vnstat_OBJECTS)
vnstat_LDADD = $(LDADD)
am_vnstatd_OBJECTS = src/vnstatd.$(OBJEXT) src/ifinfo.$(OBJEXT) \
- src/dbsql.$(OBJEXT) src/dbaccess.$(OBJEXT) \
- src/datacache.$(OBJEXT) src/common.$(OBJEXT) \
- src/misc.$(OBJEXT) src/cfg.$(OBJEXT) src/ibw.$(OBJEXT) \
- src/fs.$(OBJEXT) src/id.$(OBJEXT) src/daemon.$(OBJEXT)
+ src/iflist.$(OBJEXT) src/dbsql.$(OBJEXT) \
+ src/dbaccess.$(OBJEXT) src/datacache.$(OBJEXT) \
+ src/common.$(OBJEXT) src/misc.$(OBJEXT) src/cfg.$(OBJEXT) \
+ src/ibw.$(OBJEXT) src/fs.$(OBJEXT) src/id.$(OBJEXT) \
+ src/daemon.$(OBJEXT)
vnstatd_OBJECTS = $(am_vnstatd_OBJECTS)
vnstatd_LDADD = $(LDADD)
-am_vnstati_OBJECTS = src/vnstati.$(OBJEXT) src/image.$(OBJEXT) \
- src/dbsql.$(OBJEXT) src/common.$(OBJEXT) src/misc.$(OBJEXT) \
- src/fs.$(OBJEXT) src/id.$(OBJEXT) src/cfg.$(OBJEXT)
+am_vnstati_OBJECTS = src/vnstati.$(OBJEXT) src/iflist.$(OBJEXT) \
+ src/image.$(OBJEXT) src/dbsql.$(OBJEXT) src/common.$(OBJEXT) \
+ src/misc.$(OBJEXT) src/fs.$(OBJEXT) src/id.$(OBJEXT) \
+ src/cfg.$(OBJEXT)
vnstati_OBJECTS = $(am_vnstati_OBJECTS)
vnstati_DEPENDENCIES =
AM_V_P = $(am__v_P_@AM_V@)
vnstati_LDADD = @IMAGELIBS@
vnstat_SOURCES = src/vnstat.c src/vnstat.h \
src/ifinfo.c src/ifinfo.h \
+ src/iflist.c src/iflist.h \
src/dbsql.c src/dbsql.h \
src/dbxml.c src/dbxml.h \
src/dbjson.c src/dbjson.h \
vnstatd_SOURCES = src/vnstatd.c src/vnstatd.h \
src/ifinfo.c src/ifinfo.h \
+ src/iflist.c src/iflist.h \
src/dbsql.c src/dbsql.h \
src/dbaccess.c src/dbaccess.h \
src/datacache.c src/datacache.h \
src/daemon.c src/daemon.h
vnstati_SOURCES = src/vnstati.c src/vnstati.h \
+ src/iflist.c src/iflist.h \
src/image.c src/image.h \
src/dbsql.c src/dbsql.h \
src/common.c src/common.h \
@HAVE_CHECK_TRUE@ src/datacache.h src/dbshow.c src/dbshow.h \
@HAVE_CHECK_TRUE@ src/dbjson.c src/dbjson.h src/dbxml.c \
@HAVE_CHECK_TRUE@ src/dbxml.h src/ibw.c src/ibw.h src/ifinfo.c \
-@HAVE_CHECK_TRUE@ src/ifinfo.h src/misc.c src/misc.h src/fs.c \
-@HAVE_CHECK_TRUE@ src/fs.h src/id.c src/id.h $(am__append_4)
+@HAVE_CHECK_TRUE@ src/ifinfo.h src/iflist.c src/iflist.h \
+@HAVE_CHECK_TRUE@ src/misc.c src/misc.h src/fs.c src/fs.h \
+@HAVE_CHECK_TRUE@ src/id.c src/id.h $(am__append_4)
all: all-recursive
.SUFFIXES:
src/$(DEPDIR)/$(am__dirstamp)
src/check_vnstat-ifinfo.$(OBJEXT): src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
+src/check_vnstat-iflist.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
src/check_vnstat-misc.$(OBJEXT): src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
src/check_vnstat-fs.$(OBJEXT): src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
src/ifinfo.$(OBJEXT): src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
+src/iflist.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
src/dbsql.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
src/dbxml.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
src/dbjson.$(OBJEXT): src/$(am__dirstamp) \
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/check_vnstat-ibw.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/check_vnstat-id.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/check_vnstat-ifinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/check_vnstat-iflist.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/check_vnstat-image.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/check_vnstat-misc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/common.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ibw.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/id.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ifinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/iflist.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/image.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/misc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/traffic.Po@am__quote@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_vnstat_CFLAGS) $(CFLAGS) -c -o src/check_vnstat-ifinfo.obj `if test -f 'src/ifinfo.c'; then $(CYGPATH_W) 'src/ifinfo.c'; else $(CYGPATH_W) '$(srcdir)/src/ifinfo.c'; fi`
+src/check_vnstat-iflist.o: src/iflist.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_vnstat_CFLAGS) $(CFLAGS) -MT src/check_vnstat-iflist.o -MD -MP -MF src/$(DEPDIR)/check_vnstat-iflist.Tpo -c -o src/check_vnstat-iflist.o `test -f 'src/iflist.c' || echo '$(srcdir)/'`src/iflist.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/check_vnstat-iflist.Tpo src/$(DEPDIR)/check_vnstat-iflist.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/iflist.c' object='src/check_vnstat-iflist.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_vnstat_CFLAGS) $(CFLAGS) -c -o src/check_vnstat-iflist.o `test -f 'src/iflist.c' || echo '$(srcdir)/'`src/iflist.c
+
+src/check_vnstat-iflist.obj: src/iflist.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_vnstat_CFLAGS) $(CFLAGS) -MT src/check_vnstat-iflist.obj -MD -MP -MF src/$(DEPDIR)/check_vnstat-iflist.Tpo -c -o src/check_vnstat-iflist.obj `if test -f 'src/iflist.c'; then $(CYGPATH_W) 'src/iflist.c'; else $(CYGPATH_W) '$(srcdir)/src/iflist.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/check_vnstat-iflist.Tpo src/$(DEPDIR)/check_vnstat-iflist.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/iflist.c' object='src/check_vnstat-iflist.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_vnstat_CFLAGS) $(CFLAGS) -c -o src/check_vnstat-iflist.obj `if test -f 'src/iflist.c'; then $(CYGPATH_W) 'src/iflist.c'; else $(CYGPATH_W) '$(srcdir)/src/iflist.c'; fi`
+
src/check_vnstat-misc.o: src/misc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_vnstat_CFLAGS) $(CFLAGS) -MT src/check_vnstat-misc.o -MD -MP -MF src/$(DEPDIR)/check_vnstat-misc.Tpo -c -o src/check_vnstat-misc.o `test -f 'src/misc.c' || echo '$(srcdir)/'`src/misc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/check_vnstat-misc.Tpo src/$(DEPDIR)/check_vnstat-misc.Po
#include "common.h"
#include "ifinfo.h"
+#include "iflist.h"
#include "dbsql.h"
#include "dbaccess.h"
#include "datacache.h"
timeused_debug(__func__, 1);
/* get list of currently visible interfaces */
- if (getiflist(&ifacelist, 0) == 0) {
+ if (getifliststring(&ifacelist, 0) == 0) {
free(ifacelist);
return 0;
}
if (debug)
printf("Interface list: \"%s\"\n", ifacelist);
+ // TODO: refactor to use list structure
while (sscanf(ifacelist + index, "%31s", interface) != EOF) {
if (debug)
printf("Processing: \"%s\"\n", interface);
while (iterator != NULL) {
if (!db_getinterfacecountbyname(iterator->interface)) {
- iflistadd(&dbifl, iterator->interface, -1);
+ iflistadd(&dbifl, iterator->interface, 0);
}
iterator = iterator->next;
}
timeused_debug(__func__, 1);
/* get list of currently visible interfaces */
- if (getiflist(&ifacelist, 0) == 0) {
+ if (getifliststring(&ifacelist, 0) == 0) {
free(ifacelist);
s->iflisthash = 0;
return;
#include "common.h"
#include "misc.h"
+#include "iflist.h"
#include "dbsql.h"
/* global db */
if (sqlite3_column_text(sqlstmt, 0) == NULL) {
continue;
}
- if (!iflistadd(ifl, (const char *)sqlite3_column_text(sqlstmt, 0), -1)) {
+ if (!iflistadd(ifl, (const char *)sqlite3_column_text(sqlstmt, 0), 0)) {
break;
}
rc++;
#define DBSQL_H
#include <sqlite3.h>
-#include "misc.h"
+#include "iflist.h"
typedef struct dbdatalist {
time_t timestamp;
return 0;
}
-int getiflist(char **ifacelist, int showspeed)
+int getifliststring(char **ifacelist, int showspeed)
+{
+ char temp[64];
+ iflist *ifl = NULL, *ifl_iterator = NULL;
+
+ /* initialize list string */
+ *ifacelist = (char *)malloc(sizeof(char));
+ if (*ifacelist == NULL) {
+ panicexit(__FILE__, __LINE__);
+ }
+ *ifacelist[0] = '\0';
+
+ if (getiflist(&ifl, showspeed) > 0) {
+
+ ifl_iterator = ifl;
+
+ /* seek to end of list to show entries in original input order */
+ while (ifl_iterator->next != NULL) {
+ ifl_iterator = ifl_iterator->next;
+ }
+
+ while (ifl_iterator != NULL) {
+ *ifacelist = (char *)realloc(*ifacelist, ((strlen(*ifacelist) + strlen(ifl_iterator->interface) + 2) * sizeof(char)));
+ if (*ifacelist == NULL) {
+ panicexit(__FILE__, __LINE__);
+ }
+ strcat(*ifacelist, ifl_iterator->interface);
+ strcat(*ifacelist, " ");
+
+ if (showspeed && ifl_iterator->bandwidth > 0) {
+ snprintf(temp, 64, "(%u Mbit) ", ifl_iterator->bandwidth);
+ *ifacelist = (char *)realloc(*ifacelist, ((strlen(*ifacelist) + strlen(temp) + 1) * sizeof(char)));
+ if (*ifacelist == NULL) {
+ panicexit(__FILE__, __LINE__);
+ }
+ strcat(*ifacelist, temp);
+ }
+
+ ifl_iterator = ifl_iterator->prev;
+ }
+
+ iflistfree(&ifl);
+ return 1;
+ }
+
+ iflistfree(&ifl);
+ return 0;
+}
+
+int getiflist(iflist **ifl, int getspeed)
{
- uint32_t speed;
char temp[64];
#if defined(__linux__) || defined(CHECK_VNSTAT)
char interface[32];
struct ifaddrs *ifap, *ifa;
#endif
- /* initialize list */
- *ifacelist = (char *)malloc(sizeof(char));
- if (*ifacelist == NULL) {
- panicexit(__FILE__, __LINE__);
- }
- *ifacelist[0] = '\0';
-
#if defined(__linux__) || defined(CHECK_VNSTAT)
if ((fp = fopen(PROCNETDEV, "r")) != NULL) {
sscanf(procline, "%63s", temp);
if (strlen(temp) > 0 && (isdigit(temp[(strlen(temp) - 1)]) || temp[(strlen(temp) - 1)] == ':')) {
sscanf(temp, "%31[^':']s", interface);
- *ifacelist = (char *)realloc(*ifacelist, ((strlen(*ifacelist) + strlen(interface) + 2) * sizeof(char)));
- if (*ifacelist == NULL) {
- panicexit(__FILE__, __LINE__);
- }
- strcat(*ifacelist, interface);
- strcat(*ifacelist, " ");
- if (!showspeed) {
- continue;
- }
- speed = getifspeed(interface);
- if (speed > 0) {
- snprintf(temp, 64, "(%u Mbit) ", speed);
- *ifacelist = (char *)realloc(*ifacelist, ((strlen(*ifacelist) + strlen(temp) + 1) * sizeof(char)));
- if (*ifacelist == NULL) {
- panicexit(__FILE__, __LINE__);
- }
- strcat(*ifacelist, temp);
+ if (getspeed) {
+ iflistadd(ifl, interface, getifspeed(interface));
+ } else {
+ iflistadd(ifl, interface, 0);
}
}
}
if (di->d_name[0] == '.' || strlen(di->d_name) > 31) {
continue;
}
- *ifacelist = (char *)realloc(*ifacelist, ((strlen(*ifacelist) + strlen(di->d_name) + 2) * sizeof(char)));
- if (*ifacelist == NULL) {
- panicexit(__FILE__, __LINE__);
- }
- strcat(*ifacelist, di->d_name);
- strcat(*ifacelist, " ");
- if (!showspeed) {
- continue;
- }
- speed = getifspeed(di->d_name);
- if (speed > 0) {
- snprintf(temp, 64, "(%u Mbit) ", speed);
- *ifacelist = (char *)realloc(*ifacelist, ((strlen(*ifacelist) + strlen(temp) + 1) * sizeof(char)));
- if (*ifacelist == NULL) {
- panicexit(__FILE__, __LINE__);
- }
- strcat(*ifacelist, temp);
+ if (getspeed) {
+ iflistadd(ifl, di->d_name, getifspeed(di->d_name));
+ } else {
+ iflistadd(ifl, di->d_name, 0);
}
}
if (ifa->ifa_addr->sa_family != AF_LINK || strlen(ifa->ifa_name) > 31) {
continue;
}
- *ifacelist = realloc(*ifacelist, ((strlen(*ifacelist) + strlen(ifa->ifa_name) + 2) * sizeof(char)));
- if (*ifacelist == NULL) {
- panicexit(__FILE__, __LINE__);
- }
- strcat(*ifacelist, ifa->ifa_name);
- strcat(*ifacelist, " ");
- if (!showspeed) {
- continue;
- }
- speed = getifspeed(ifa->ifa_name);
- if (speed > 0) {
- snprintf(temp, 64, "(%u Mbit) ", speed);
- *ifacelist = realloc(*ifacelist, ((strlen(*ifacelist) + strlen(temp) + 1) * sizeof(char)));
- if (*ifacelist == NULL) {
- panicexit(__FILE__, __LINE__);
- }
- strcat(*ifacelist, temp);
+ if (getspeed) {
+ iflistadd(ifl, ifa->ifa_name, getifspeed(ifa->ifa_name));
+ } else {
+ iflistadd(ifl, ifa->ifa_name, 0);
}
}
#ifndef IFINFO_H
#define IFINFO_H
+#include "iflist.h"
+
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__FreeBSD_kernel__)
#include <net/if.h>
#endif
int getifinfo(const char *iface);
-int getiflist(char **ifacelist, int showspeed);
+int getifliststring(char **ifacelist, int showspeed);
+int getiflist(iflist **ifl, int getspeed);
int readproc(const char *iface);
int readsysclassnet(const char *iface);
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__FreeBSD_kernel__)
--- /dev/null
+#include "common.h"
+#include "iflist.h"
+
+int iflistadd(iflist **ifl, const char *iface, const uint32_t bandwidth)
+{
+ iflist *newif;
+
+ newif = malloc(sizeof(iflist));
+ if (newif == NULL) {
+ return 0;
+ }
+
+ newif->next = *ifl;
+ newif->prev = NULL;
+
+ if (*ifl != NULL) {
+ (*ifl)->prev = newif;
+ }
+
+ *ifl = newif;
+
+ strncpy_nt(newif->interface, iface, 32);
+ newif->bandwidth = bandwidth;
+
+ return 1;
+}
+
+void iflistfree(iflist **ifl)
+{
+ iflist *ifl_prev;
+
+ while (*ifl != NULL) {
+ ifl_prev = *ifl;
+ *ifl = (*ifl)->next;
+ free(ifl_prev);
+ }
+}
--- /dev/null
+#ifndef IFLIST_H
+#define IFLIST_H
+
+typedef struct iflist {
+ char interface[32];
+ uint32_t bandwidth;
+ struct iflist *next;
+ struct iflist *prev;
+} iflist;
+
+int iflistadd(iflist **ifl, const char *iface, const uint32_t bandwidth);
+void iflistfree(iflist **ifl);
+
+#endif
return 0;
}
-
-int iflistadd(iflist **ifl, const char *iface, const int bandwidth)
-{
- iflist *newif;
-
- newif = malloc(sizeof(iflist));
- if (newif == NULL) {
- return 0;
- }
-
- newif->next = *ifl;
- *ifl = newif;
- strncpy_nt(newif->interface, iface, 32);
- newif->bandwidth = bandwidth;
-
- return 1;
-}
-
-void iflistfree(iflist **ifl)
-{
- iflist *ifl_prev;
-
- while (*ifl != NULL) {
- ifl_prev = *ifl;
- *ifl = (*ifl)->next;
- free(ifl_prev);
- }
-}
LT_Top
} ListType;
-typedef struct iflist {
- char interface[32];
- int bandwidth;
- struct iflist *next;
-} iflist;
-
int spacecheck(const char *path);
void sighandler(int sig);
uint64_t getbtime(void);
void eraseline(void);
int validatedatetime(const char *str);
int issametimeslot(const ListType listtype, const time_t entry, const time_t updated);
-int iflistadd(iflist **ifl, const char *iface, const int bandwidth);
-void iflistfree(iflist **ifl);
#endif
#include "common.h"
#include "ifinfo.h"
+#include "iflist.h"
#include "traffic.h"
#include "dbsql.h"
#include "dbxml.h"
return 1;
}
} else if (strcmp(argv[currentarg], "--iflist") == 0) {
- getiflist(&p.ifacelist, 1);
+ getifliststring(&p.ifacelist, 1);
printf("Available interfaces: %s\n", p.ifacelist);
free(p.ifacelist);
return 0;
/* give more help if there's no database */
if (p.ifcount == 0) {
- getiflist(&p.ifacelist, 1);
+ getifliststring(&p.ifacelist, 1);
printf("No interfaces found in the database, nothing to do. Use --help for help.\n\n");
printf("Interfaces can be added to the database with the following command:\n");
printf(" %s --add -i eth0\n\n", argv[0]);
}
if (!p->force && !getifinfo(p->interface)) {
- getiflist(&p->ifacelist, 1);
+ getifliststring(&p->ifacelist, 1);
printf("Only available interfaces can be added for monitoring.\n\n");
printf("The following interfaces are currently available:\n %s\n", p->ifacelist);
free(p->ifacelist);
}
if (!isifavailable(p->interface)) {
- getiflist(&p->ifacelist, 0);
+ getifliststring(&p->ifacelist, 0);
if (p->defaultiface) {
printf("Error: Configured default interface \"%s\" isn't available.\n\n", p->interface);
if (strlen(cfg.cfgfile)) {
ck_assert_int_eq(remove_directory(TESTDIR), 1);
fake_proc_net_dev("w", "ethsomething", 1, 2, 3, 4);
fake_proc_net_dev("a", "ethelse", 5, 6, 7, 8);
- ck_assert_int_ne(getiflist(&ifacelist, 0), 0);
+ ck_assert_int_ne(getifliststring(&ifacelist, 0), 0);
ifhash = simplehash(ifacelist, (int)strlen(ifacelist));
s.iflisthash = ifhash;
#include "cfg.h"
#include "ibw.h"
-START_TEST(getiflist_no_source)
+START_TEST(getifliststring_no_source)
{
char *ifacelist;
linuxonly;
ck_assert_int_eq(remove_directory(TESTDIR), 1);
- ck_assert_int_eq(getiflist(&ifacelist, 0), 0);
+ ck_assert_int_eq(getifliststring(&ifacelist, 0), 0);
ck_assert_str_eq(ifacelist, "");
free(ifacelist);
}
END_TEST
-START_TEST(getiflist_proc_one_interface)
+START_TEST(getifliststring_proc_one_interface)
{
char *ifacelist;
ck_assert_int_eq(remove_directory(TESTDIR), 1);
fake_proc_net_dev("w", "ethunusual", 0, 0, 0, 0);
- ck_assert_int_eq(getiflist(&ifacelist, 1), 1);
+ ck_assert_int_eq(getifliststring(&ifacelist, 1), 1);
ck_assert_str_eq(ifacelist, "lo ethunusual ");
free(ifacelist);
}
END_TEST
-START_TEST(getiflist_proc_one_interface_with_speed)
+START_TEST(getifliststring_proc_one_interface_with_speed)
{
char *ifacelist;
fake_proc_net_dev("w", "ethunusual", 0, 0, 0, 0);
fake_sys_class_net("ethunusual", 0, 0, 0, 0, 10);
- ck_assert_int_eq(getiflist(&ifacelist, 1), 1);
+ ck_assert_int_eq(getifliststring(&ifacelist, 1), 1);
ck_assert_str_eq(ifacelist, "lo ethunusual (10 Mbit) ");
free(ifacelist);
}
END_TEST
-START_TEST(getiflist_proc_multiple_interfaces)
+START_TEST(getifliststring_proc_multiple_interfaces)
{
char *ifacelist;
fake_proc_net_dev("a", "fun", 0, 0, 0, 0);
fake_proc_net_dev("a", "i", 0, 0, 0, 0);
- ck_assert_int_eq(getiflist(&ifacelist, 0), 1);
+ ck_assert_int_eq(getifliststring(&ifacelist, 0), 1);
ck_assert_str_eq(ifacelist, "lo random interfaces having fun i ");
free(ifacelist);
}
END_TEST
-START_TEST(getiflist_proc_long_interface_names)
+START_TEST(getifliststring_proc_long_interface_names)
{
char *ifacelist;
fake_proc_net_dev("a", "longestinterfaceislongerthanshouldbeexpectedanywhereinanormallyfunctioningenvironment", 0, 0, 0, 0);
fake_proc_net_dev("a", "a", 0, 0, 0, 0);
- ck_assert_int_eq(getiflist(&ifacelist, 0), 1);
+ ck_assert_int_eq(getifliststring(&ifacelist, 0), 1);
ck_assert_str_eq(ifacelist, "lo random interfaces having toomuchfun longinterfaceislong a ");
free(ifacelist);
}
END_TEST
-START_TEST(getiflist_sysclassnet_one_interface)
+START_TEST(getifliststring_sysclassnet_one_interface)
{
char *ifacelist;
ck_assert_int_eq(remove_directory(TESTDIR), 1);
fake_sys_class_net("ethunusual", 0, 0, 0, 0, 0);
- ck_assert_int_eq(getiflist(&ifacelist, 1), 1);
+ ck_assert_int_eq(getifliststring(&ifacelist, 1), 1);
ck_assert_str_eq(ifacelist, "ethunusual ");
free(ifacelist);
}
END_TEST
-START_TEST(getiflist_sysclassnet_one_interface_with_speed)
+START_TEST(getifliststring_sysclassnet_one_interface_with_speed)
{
char *ifacelist;
ck_assert_int_eq(remove_directory(TESTDIR), 1);
fake_sys_class_net("ethunusual", 0, 0, 0, 0, 10);
- ck_assert_int_eq(getiflist(&ifacelist, 1), 1);
+ ck_assert_int_eq(getifliststring(&ifacelist, 1), 1);
ck_assert_str_eq(ifacelist, "ethunusual (10 Mbit) ");
free(ifacelist);
}
END_TEST
-START_TEST(getiflist_sysclassnet_multiple_interfaces)
+START_TEST(getifliststring_sysclassnet_multiple_interfaces)
{
char *ifacelist;
fake_sys_class_net("fun", 0, 0, 0, 0, 0);
fake_sys_class_net("i", 0, 0, 0, 0, 0);
- ck_assert_int_eq(getiflist(&ifacelist, 0), 1);
+ ck_assert_int_eq(getifliststring(&ifacelist, 0), 1);
ck_assert_int_eq(strlen(ifacelist), 31);
free(ifacelist);
}
END_TEST
-START_TEST(getiflist_sysclassnet_long_interface_names)
+START_TEST(getifliststring_sysclassnet_long_interface_names)
{
char *ifacelist;
fake_sys_class_net("longestinterfaceislongerthanshouldbeexpectedanywhereinanormallyfunctioningenvironment", 0, 0, 0, 0, 0);
fake_sys_class_net("a", 0, 0, 0, 0, 0);
- ck_assert_int_eq(getiflist(&ifacelist, 0), 1);
+ ck_assert_int_eq(getifliststring(&ifacelist, 0), 1);
ck_assert_int_eq(strlen(ifacelist), 58);
free(ifacelist);
void add_ifinfo_tests(Suite *s)
{
TCase *tc_ifinfo = tcase_create("Ifinfo");
- tcase_add_test(tc_ifinfo, getiflist_no_source);
- tcase_add_test(tc_ifinfo, getiflist_proc_one_interface);
- tcase_add_test(tc_ifinfo, getiflist_proc_one_interface_with_speed);
- tcase_add_test(tc_ifinfo, getiflist_proc_multiple_interfaces);
- tcase_add_test(tc_ifinfo, getiflist_proc_long_interface_names);
- tcase_add_test(tc_ifinfo, getiflist_sysclassnet_one_interface);
- tcase_add_test(tc_ifinfo, getiflist_sysclassnet_one_interface_with_speed);
- tcase_add_test(tc_ifinfo, getiflist_sysclassnet_multiple_interfaces);
- tcase_add_test(tc_ifinfo, getiflist_sysclassnet_long_interface_names);
+ tcase_add_test(tc_ifinfo, getifliststring_no_source);
+ tcase_add_test(tc_ifinfo, getifliststring_proc_one_interface);
+ tcase_add_test(tc_ifinfo, getifliststring_proc_one_interface_with_speed);
+ tcase_add_test(tc_ifinfo, getifliststring_proc_multiple_interfaces);
+ tcase_add_test(tc_ifinfo, getifliststring_proc_long_interface_names);
+ tcase_add_test(tc_ifinfo, getifliststring_sysclassnet_one_interface);
+ tcase_add_test(tc_ifinfo, getifliststring_sysclassnet_one_interface_with_speed);
+ tcase_add_test(tc_ifinfo, getifliststring_sysclassnet_multiple_interfaces);
+ tcase_add_test(tc_ifinfo, getifliststring_sysclassnet_long_interface_names);
tcase_add_test(tc_ifinfo, readproc_no_file);
tcase_add_test(tc_ifinfo, readproc_not_found);
tcase_add_test(tc_ifinfo, readproc_success);