Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -rupN vnstat-1.10/src/common.h vnstat-1.10-solaris/src/common.h
- --- vnstat-1.10/src/common.h 2010-01-02 02:35:01.000000000 +0200
- +++ vnstat-1.10-solaris/src/common.h 2011-02-15 21:58:58.503384071 +0200
- @@ -21,15 +21,23 @@
- #include <sys/statvfs.h>
- #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
- +#include <sys/sysctl.h>
- +#endif
- +
- +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(sun) || defined(__sun__)
- #include <sys/param.h>
- #include <sys/mount.h>
- #include <sys/socket.h>
- -#include <sys/sysctl.h>
- #include <sys/time.h>
- #include <net/if.h>
- #include <ifaddrs.h>
- #endif
- +#if defined(sun) || defined(__sun__)
- +#include <sys/fcntl.h>
- +#include <kstat.h>
- +#endif
- +
- /*
- Note! These are only the default values for settings
- diff -rupN vnstat-1.10/src/dbaccess.c vnstat-1.10-solaris/src/dbaccess.c
- --- vnstat-1.10/src/dbaccess.c 2010-01-02 03:13:11.000000000 +0200
- +++ vnstat-1.10-solaris/src/dbaccess.c 2011-02-15 21:58:58.501671186 +0200
- @@ -1,6 +1,137 @@
- #include "common.h"
- #include "dbaccess.h"
- +#if defined(sun) || defined(__sun__)
- +int readdb(const char *iface, const char *dirname)
- +{
- + int db;
- + char file[512], backup[512];
- + int newdb=0;
- +
- + snprintf(file, 512, "%s/%s", dirname, iface);
- + snprintf(backup, 512, "%s/.%s", dirname, iface);
- +
- + if ((db=open(file, O_RDONLY))!=-1) {
- +
- + /* lock file */
- + if (!lockdb(db, 0)) {
- + return -1;
- + }
- +
- + //if (fread(&data,sizeof(DATA),1,db)==0) {
- + if(read(db, &data, sizeof(DATA))==-1) {
- + data.version=-1;
- + if (debug) {
- + printf("db: Database read failed for file \"%s\".\n", file);
- + }
- + } else {
- + if (debug) {
- + printf("db: Database loaded for interface \"%s\"...\n", data.interface);
- + }
- + }
- +
- + /* convert old database to new format if necessary */
- + if (data.version<DBVERSION) {
- + if (data.version!=-1) {
- + snprintf(errorstring, 512, "Trying to convert database \"%s\" (v%d) to current db format", file, data.version);
- + printe(PT_Info);
- + }
- +
- + if ((data.version==-1) || (!convertdb(db))) {
- +
- + /* close current db and try using backup if database conversion failed */
- + close(db);
- + if ((db=open(backup, O_RDONLY))!=-1) {
- +
- + /* lock file */
- + if (!lockdb(db, 0)) {
- + close(db);
- + return -1;
- + }
- +
- + //if (fread(&data,sizeof(DATA),1,db)==0) {
- + if(read(db, &data, sizeof(DATA))==-1) {
- + snprintf(errorstring, 512, "Database load failed even when using backup. Aborting.");
- + printe(PT_Error);
- + close(db);
- +
- + if (noexit) {
- + return -1;
- + } else {
- + exit(EXIT_FAILURE);
- + }
- + } else {
- + if (debug) {
- + printf("db: Database loaded for interface \"%s\"...\n", data.interface);
- + }
- + }
- +
- + if (data.version!=DBVERSION) {
- + if (!convertdb(db)) {
- + snprintf(errorstring, 512, "Unable to use backup database.");
- + printe(PT_Error);
- + close(db);
- +
- + if (noexit) {
- + return -1;
- + } else {
- + exit(EXIT_FAILURE);
- + }
- + }
- + }
- + snprintf(errorstring, 512, "Database possibly corrupted, using backup instead.");
- + printe(PT_Info);
- + } else {
- + snprintf(errorstring, 512, "Unable to open backup database \"%s\".", backup);
- + printe(PT_Error);
- + if (noexit) {
- + return -1;
- + } else {
- + exit(EXIT_FAILURE);
- + }
- + }
- + }
- +
- + } else if (data.version>DBVERSION) {
- + snprintf(errorstring, 512, "Downgrading database \"%s\" (v%d) is not supported.", file, data.version);
- + printe(PT_Error);
- + close(db);
- +
- + if (noexit) {
- + return -1;
- + } else {
- + exit(EXIT_FAILURE);
- + }
- + }
- +
- + close(db);
- +
- + if (strcmp(data.interface,iface)) {
- + snprintf(errorstring, 512, "Warning:\nThe previous interface for this file was \"%s\".",data.interface);
- + printe(PT_Multiline);
- + snprintf(errorstring, 512, "It has now been replaced with \"%s\".",iface);
- + printe(PT_Multiline);
- + snprintf(errorstring, 512, "You can ignore this message if you renamed the filename.");
- + printe(PT_Multiline);
- + snprintf(errorstring, 512, "Interface name mismatch, renamed \"%s\" -> \"%s\"", data.interface, iface);
- + printe(PT_ShortMultiline);
- + if (strcmp(data.interface, data.nick)==0) {
- + strncpy(data.nick, iface, 32);
- + }
- + strncpy(data.interface, iface, 32);
- + }
- + } else {
- + snprintf(errorstring, 512, "Unable to read database \"%s\".",file);
- + printe(PT_Error);
- +
- + newdb=1;
- + initdb();
- + strncpy(data.interface, iface, 32);
- + strncpy(data.nick, data.interface, 32);
- + }
- + return newdb;
- +}
- +#else
- int readdb(const char *iface, const char *dirname)
- {
- FILE *db;
- @@ -128,6 +259,7 @@ int readdb(const char *iface, const char
- }
- return newdb;
- }
- +#endif
- void initdb(void)
- {
- @@ -204,6 +336,92 @@ void initdb(void)
- data.btime=FP32;
- }
- +#if defined(sun) || defined(__sun__)
- +int writedb(const char *iface, const char *dirname, int newdb)
- +{
- + int db;
- + char file[512], backup[512];
- +
- + snprintf(file, 512, "%s/%s", dirname, iface);
- + snprintf(backup, 512, "%s/.%s", dirname, iface);
- +
- + /* try to make backup of old data if this isn't a new database */
- + if (!newdb && !backupdb(file, backup)) {
- + snprintf(errorstring, 512, "Unable create database backup \"%s\".", backup);
- + printe(PT_Error);
- + return 0;
- + }
- +
- + /* make sure version stays correct */
- + data.version=DBVERSION;
- +
- + if ((db=open(file, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR))!=-1) {
- +
- + /* lock file */
- + if (!lockdb(db, 1)) {
- + return 0;
- + }
- +
- + /* update timestamp when not merging */
- + if (newdb!=2) {
- + data.lastupdated=time(NULL);
- + }
- +
- + if(write(db, &data, sizeof(DATA))==-1) {
- + snprintf(errorstring, 512, "Unable to write database \"%s\".", file);
- + printe(PT_Error);
- + close(db);
- + return 0;
- + } else {
- + if (debug) {
- + printf("db: Database \"%s\" saved.\n", file);
- + }
- + close(db);
- + if (newdb) {
- + snprintf(errorstring, 512, "-> A new database has been created.");
- + printe(PT_Info);
- + }
- + }
- + } else {
- + snprintf(errorstring, 512, "Unable to open database for writing \"%s\".", file);
- + printe(PT_Error);
- +
- + return 0;
- + }
- +
- + return 1;
- +}
- +
- +int backupdb(const char *current, const char *backup)
- +{
- + int bf, c, bytes;
- + char buffer[512];
- +
- + /* from */
- + if ((c = open(current, O_RDONLY)) == -1) {
- + return 0;
- + }
- +
- + if ((bf = open(backup, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) == -1) {
- + close(c);
- + return 0;
- + }
- +
- + /* copy data */
- + while((bytes = (int)read(c, buffer, sizeof(buffer))) > 0) {
- + if (write(bf, buffer, bytes) < 0) {
- + close(c);
- + close(bf);
- + return 0;
- + }
- + }
- +
- + close(c);
- + close(bf);
- +
- + return 1;
- +}
- +#else
- int writedb(const char *iface, const char *dirname, int newdb)
- {
- FILE *db;
- @@ -290,8 +508,13 @@ int backupdb(const char *current, const
- return 1;
- }
- +#endif
- +#if defined(sun) || defined(__sun__)
- +int convertdb(int db)
- +#else
- int convertdb(FILE *db)
- +#endif
- {
- int i, days, mod;
- DATA10 data10;
- @@ -315,9 +538,10 @@ int convertdb(FILE *db)
- snprintf(errorstring, 512, "Converting to db v2...\n");
- printe(PT_Info);
- -
- - rewind(db);
- - if (fread(&data10, sizeof(DATA10), 1, db)==0) {
- +
- + lseek(db, 0, SEEK_SET);
- +
- + if(read(db, &data10, sizeof(DATA10))==-1) {
- snprintf(errorstring, 512, "Unable to convert corrupted database.");
- printe(PT_Error);
- return 0;
- @@ -455,8 +679,8 @@ int convertdb(FILE *db)
- /* don't read from file if already in memory */
- if (converted==0) {
- - rewind(db);
- - if (fread(&data12, sizeof(DATA12), 1, db)==0) {
- + lseek(db, 0, SEEK_SET);
- + if(read(db, &data12, sizeof(DATA12))==-1) {
- snprintf(errorstring, 512, "Unable to convert corrupted database.");
- printe(PT_Error);
- return 0;
- @@ -556,20 +780,36 @@ int convertdb(FILE *db)
- int lockdb(int fd, int dbwrite)
- {
- - int operation, locktry=1;
- + int locktry=1;
- /* lock only if configured to do so */
- if (cfg.flock) {
- -
- - if (dbwrite) {
- +#if defined(sun) || defined(__sun__)
- + struct flock fl;
- + fl.l_whence = SEEK_SET;
- + fl.l_start = 0;
- + fl.l_len = 0;
- + fl.l_pid = getpid();
- +
- + if (dbwrite) {
- + fl.l_type = F_WRLCK;
- + } else {
- + fl.l_type = F_RDLCK;
- + }
- +
- + //while (lockf(fd, F_TLOCK, 0)!=0) {
- + while(fcntl(fd, F_SETLK, &fl)==-1) {
- +#else
- + int operation;
- + if (dbwrite) {
- operation = LOCK_EX|LOCK_NB;
- } else {
- operation = LOCK_SH|LOCK_NB;
- }
- - /* try locking file */
- + /* try locking file */
- while (flock(fd, operation)!=0) {
- -
- +#endif
- if (debug) {
- printf("db: Database access locked (%d, %d)\n", dbwrite, locktry);
- }
- diff -rupN vnstat-1.10/src/dbaccess.h vnstat-1.10-solaris/src/dbaccess.h
- --- vnstat-1.10/src/dbaccess.h 2009-08-30 18:48:00.000000000 +0300
- +++ vnstat-1.10-solaris/src/dbaccess.h 2011-02-15 21:58:58.504166613 +0200
- @@ -5,7 +5,13 @@ int readdb(const char *iface, const char
- void initdb(void);
- int writedb(const char *iface, const char *dirname, int newdb);
- int backupdb(const char *current, const char *backup);
- +
- +#if defined(sun) || defined(__sun__)
- +int convertdb(int db);
- +#else
- int convertdb(FILE *db);
- +#endif
- +
- int lockdb(int fd, int dbwrite);
- int checkdb(const char *iface, const char *dirname);
- int removedb(const char *iface, const char *dirname);
- diff -rupN vnstat-1.10/src/ifinfo.c vnstat-1.10-solaris/src/ifinfo.c
- --- vnstat-1.10/src/ifinfo.c 2009-09-06 18:49:30.000000000 +0300
- +++ vnstat-1.10-solaris/src/ifinfo.c 2011-02-15 21:58:58.501457601 +0200
- @@ -35,6 +35,12 @@ int getifinfo(const char *iface)
- printe(PT_Error);
- return 0;
- }
- +#elif defined(sun) || defined(__sun__)
- + if (readkstat(inface)!=1) {
- + snprintf(errorstring, 512, "Unable to get interface \"%s\" statistics.", inface);
- + printe(PT_Error);
- + return 0;
- + }
- #endif
- return 1;
- @@ -48,7 +54,7 @@ int getiflist(char **ifacelist)
- DIR *dp;
- struct dirent *di;
- char procline[512], temp[64];
- -#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
- +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(sun) || defined(__sun__)
- struct ifaddrs *ifap, *ifa;
- #endif
- @@ -92,7 +98,7 @@ int getiflist(char **ifacelist)
- }
- }
- -#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
- +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(sun) || defined(__sun__)
- if (getifaddrs(&ifap) >= 0) {
- /* make list of interfaces */
- @@ -265,7 +271,7 @@ void parseifinfo(int newdb)
- /* count traffic only if previous update wasn't too long ago */
- if ( interval < (60*MAXUPDATEINTERVAL) ) {
- - /* btime in /proc/stat seems to vary ±1 second so we use btime-BVAR just to be safe */
- + /* btime in /proc/stat seems to vary �1 second so we use btime-BVAR just to be safe */
- /* the variation is also slightly different between various kernels... */
- if (data.btime < (btime-cfg.bvar)) {
- data.currx=0;
- @@ -399,7 +405,7 @@ uint64_t countercalc(uint64_t a, uint64_
- }
- }
- -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
- +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
- int readifaddrs(const char *iface)
- {
- struct ifaddrs *ifap, *ifa;
- @@ -436,3 +442,71 @@ int readifaddrs(const char *iface)
- return 1;
- }
- #endif
- +
- +#if defined(sun) || defined(__sun__)
- +int readkstat(const char *iface)
- +{
- + kstat_ctl_t *kctl;
- + kstat_t *ksp;
- + int check = 0;
- +
- + if((kctl = kstat_open()) == NULL) {
- + if (debug)
- + printf("Can't open /dev/kstat. exiting.\n");
- + return 0;
- + }
- +
- + kstat_chain_update(kctl);
- +
- + for (ksp = kctl->kc_chain; ksp != NULL; ksp = ksp->ks_next) {
- + if ((ksp->ks_type == KSTAT_TYPE_NAMED) &&
- + (strcmp(ksp->ks_class, "net") == 0) &&
- + (strcmp(ksp->ks_name, iface) == 0)) {
- +
- + if(kstat_read(kctl, ksp, NULL) == -1) {
- + kstat_close(kctl);
- +
- + if (debug)
- + printf("Can't read kstat.");
- +
- + return 0;
- + }
- +
- + check = 1;
- + break;
- + }
- + }
- +
- + ;
- +
- + if (check == 0) {
- + kstat_close(kctl);
- + if (debug)
- + printf("Requested interface \"%s\" not found.\n", iface);
- +
- + return 0;
- + } else {
- + strncpy(ifinfo.name, iface, 32);
- + ifinfo.rx = datalookup6432(ksp, "rbytes64", "rbytes");
- + ifinfo.tx = datalookup6432(ksp, "obytes64", "obytes");
- + ifinfo.rxp = datalookup6432(ksp, "ipackets64", "ipackets");
- + ifinfo.txp = datalookup6432(ksp, "opackets64", "opackets");
- + ifinfo.filled = 1;
- + }
- +
- + kstat_close(kctl);
- +
- + return 1;
- +}
- +
- +uint64_t datalookup6432(kstat_t *ksp, char *name64, char *name32) {
- + kstat_named_t *knp;
- +
- + if((knp = kstat_data_lookup(ksp, name64)) != NULL)
- + return (knp->value.ui64);
- + else if((knp = kstat_data_lookup(ksp, name32)) != NULL)
- + return (knp->value.ui32);
- +
- + return 0;
- +}
- +#endif
- diff -rupN vnstat-1.10/src/ifinfo.h vnstat-1.10-solaris/src/ifinfo.h
- --- vnstat-1.10/src/ifinfo.h 2009-08-30 18:55:43.000000000 +0300
- +++ vnstat-1.10-solaris/src/ifinfo.h 2011-02-15 21:58:58.503966874 +0200
- @@ -11,4 +11,9 @@ uint64_t countercalc(uint64_t a, uint64_
- int readifaddrs(const char *iface);
- #endif
- +#if defined(sun) || defined(__sun__)
- +int readkstat(const char *iface);
- +uint64_t datalookup6432(kstat_t *ksp, char *name64, char *name32);
- +#endif
- +
- #endif
- diff -rupN vnstat-1.10/src/Makefile vnstat-1.10-solaris/src/Makefile
- --- vnstat-1.10/src/Makefile 2009-07-29 14:22:51.000000000 +0300
- +++ vnstat-1.10-solaris/src/Makefile 2011-02-15 21:58:58.502558928 +0200
- @@ -1,6 +1,6 @@
- CC = gcc
- CFLAGS = -O2
- -LDLIBS = -lm
- +LDLIBS = -lm -lsocket -lkstat
- OBJS = vnstat.o ifinfo.o dbxml.o dbshow.o dbaccess.o dbmerge.o common.o misc.o cfg.o traffic.o
- DOBJS = vnstatd.o ifinfo.o dbaccess.o dbcache.o common.o misc.o cfg.o
- IOBJS = vnstati.o image.o dbaccess.o dbmerge.o common.o misc.o cfg.o
- diff -rupN vnstat-1.10/src/misc.c vnstat-1.10-solaris/src/misc.c
- --- vnstat-1.10/src/misc.c 2010-01-02 03:26:14.000000000 +0200
- +++ vnstat-1.10-solaris/src/misc.c 2011-02-15 21:58:58.501596041 +0200
- @@ -182,6 +182,42 @@ int getbtime(void)
- }
- result = btm.tv_sec;
- +#elif defined(sun) || defined(__sun__)
- + kstat_ctl_t *kctl;
- + kstat_t *ksp;
- + kstat_named_t *knp;
- + int check = 0;
- +
- + if((kctl = kstat_open()) == NULL) {
- + snprintf(errorstring, 512, "Unable to read /dev/kstat.");
- + printe(PT_Error);
- + if (noexit) {
- + return 0;
- + } else {
- + exit(1);
- + }
- + }
- +
- + kstat_chain_update(kctl);
- +
- + if((ksp = kstat_lookup(kctl, "unix", 0, "system_misc")) == NULL) {
- + kstat_close(kctl);
- + if (debug)
- + printf("kstat unix:0:system_misc failed.\n");
- + return 0;
- + }
- +
- + if((kstat_read(kctl, ksp, NULL) != -1) &&
- + ((knp = kstat_data_lookup(ksp, "boot_time")) != NULL)) {
- + result = knp->value.ui32;
- + } else {
- + kstat_close(kctl);
- + if (debug)
- + printf("kstat unix:0:system_misc:boot_time failed.\n");
- + return 0;
- + }
- +
- + kstat_close(kctl);
- #endif
- return result;
- diff -rupN vnstat-1.10/src/vnstat.conf vnstat-1.10-solaris/src/vnstat.conf
- --- vnstat-1.10/src/vnstat.conf 1970-01-01 02:00:00.000000000 +0200
- +++ vnstat-1.10-solaris/src/vnstat.conf 2011-02-15 21:58:58.501383594 +0200
- @@ -0,0 +1,129 @@
- +# vnStat 1.10 config file
- +##
- +
- +# default interface
- +Interface "e1000g0"
- +
- +# location of the database directory
- +DatabaseDir "/export/home/janne/db"
- +
- +# locale (LC_ALL) ("-" = use system locale)
- +Locale "-"
- +
- +# on which day should months change
- +MonthRotate 1
- +
- +# date output formats for -d, -m, -t and -w
- +# see 'man date' for control codes
- +DayFormat "%x"
- +MonthFormat "%b '%y"
- +TopFormat "%x"
- +
- +# characters used for visuals
- +RXCharacter "%"
- +TXCharacter ":"
- +RXHourCharacter "r"
- +TXHourCharacter "t"
- +
- +# how units are prefixed when traffic is shown
- +# 0 = IEC standard prefixes (KiB/MiB/GiB/TiB)
- +# 1 = old style binary prefixes (KB/MB/GB/TB)
- +UnitMode 0
- +
- +# output style
- +# 0 = minimal & narrow, 1 = bar column visible
- +# 2 = same as 1 except rate in summary and weekly
- +# 3 = rate column visible
- +OutputStyle 3
- +
- +# used rate unit (0 = bytes, 1 = bits)
- +RateUnit 1
- +
- +# maximum bandwidth (Mbit) for all interfaces, 0 = disable feature
- +# (unless interface specific limit is given)
- +MaxBandwidth 1000
- +
- +# interface specific limits
- +# example 8Mbit limit for eth0 (remove # to activate):
- +#MaxBWeth0 8
- +
- +# how many seconds should sampling for -tr take by default
- +Sampletime 5
- +
- +# default query mode
- +# 0 = normal, 1 = days, 2 = months, 3 = top10
- +# 4 = dumpdb, 5 = short, 6 = weeks, 7 = hours
- +QueryMode 0
- +
- +# filesystem disk space check (1 = enabled, 0 = disabled)
- +CheckDiskSpace 1
- +
- +# database file locking (1 = enabled, 0 = disabled)
- +UseFileLocking 1
- +
- +# how much the boot time can variate between updates (seconds)
- +BootVariation 15
- +
- +# log days without traffic to daily list (1 = enabled, 0 = disabled)
- +TrafficlessDays 1
- +
- +
- +# vnstatd
- +##
- +
- +# how often (in seconds) interface data is updated
- +UpdateInterval 30
- +
- +# how often (in seconds) interface status changes are checked
- +PollInterval 5
- +
- +# how often (in minutes) data is saved to file
- +SaveInterval 5
- +
- +# how often (in minutes) data is saved when all interface are offline
- +OfflineSaveInterval 30
- +
- +# force data save when interface status changes (1 = enabled, 0 = disabled)
- +SaveOnStatusChange 1
- +
- +# enable / disable logging (0 = disabled, 1 = logfile, 2 = syslog)
- +UseLogging 2
- +
- +# file used for logging if UseLogging is set to 1
- +LogFile "/mypool/share/conf/vnstat/log/vnstat.log"
- +
- +# file used as daemon pid / lock file
- +PidFile "/mypool/share/conf/vnstat/run/vnstat.pid"
- +
- +
- +# vnstati
- +##
- +
- +# title timestamp format
- +HeaderFormat "%x %H:%M"
- +
- +# show hours with rate (1 = enabled, 0 = disabled)
- +HourlyRate 1
- +
- +# show rate in summary (1 = enabled, 0 = disabled)
- +SummaryRate 1
- +
- +# layout of summary (1 = with monthly, 0 = without monthly)
- +SummaryLayout 1
- +
- +# transparent background (1 = enabled, 0 = disabled)
- +TransparentBg 0
- +
- +# image colors
- +CBackground "FFFFFF"
- +CEdge "AEAEAE"
- +CHeader "606060"
- +CHeaderTitle "FFFFFF"
- +CHeaderDate "FFFFFF"
- +CText "000000"
- +CLine "B0B0B0"
- +CLineL "-"
- +CRx "92CF00"
- +CTx "606060"
- +CRxD "-"
- +CTxD "-"
Add Comment
Please, Sign In to add comment