Guest User

Untitled

a guest
Jan 17th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 19.24 KB | None | 0 0
  1. diff -rupN vnstat-1.10/src/common.h vnstat-1.10-solaris/src/common.h
  2. --- vnstat-1.10/src/common.h    2010-01-02 02:35:01.000000000 +0200
  3. +++ vnstat-1.10-solaris/src/common.h    2011-02-15 21:58:58.503384071 +0200
  4. @@ -21,15 +21,23 @@
  5.  #include <sys/statvfs.h>
  6.  
  7.  #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
  8. +#include <sys/sysctl.h>
  9. +#endif
  10. +
  11. +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(sun) || defined(__sun__)
  12.  #include <sys/param.h>
  13.  #include <sys/mount.h>
  14.  #include <sys/socket.h>
  15. -#include <sys/sysctl.h>
  16.  #include <sys/time.h>
  17.  #include <net/if.h>
  18.  #include <ifaddrs.h>
  19.  #endif
  20.  
  21. +#if defined(sun) || defined(__sun__)
  22. +#include <sys/fcntl.h>
  23. +#include <kstat.h>
  24. +#endif
  25. +
  26.  /*
  27.  
  28.  Note! These are only the default values for settings
  29. diff -rupN vnstat-1.10/src/dbaccess.c vnstat-1.10-solaris/src/dbaccess.c
  30. --- vnstat-1.10/src/dbaccess.c  2010-01-02 03:13:11.000000000 +0200
  31. +++ vnstat-1.10-solaris/src/dbaccess.c  2011-02-15 21:58:58.501671186 +0200
  32. @@ -1,6 +1,137 @@
  33.  #include "common.h"
  34.  #include "dbaccess.h"
  35.  
  36. +#if defined(sun) || defined(__sun__)
  37. +int readdb(const char *iface, const char *dirname)
  38. +{
  39. +   int db;
  40. +   char file[512], backup[512];
  41. +   int newdb=0;
  42. +
  43. +   snprintf(file, 512, "%s/%s", dirname, iface);
  44. +   snprintf(backup, 512, "%s/.%s", dirname, iface);
  45. +
  46. +   if ((db=open(file, O_RDONLY))!=-1) {
  47. +
  48. +       /* lock file */
  49. +       if (!lockdb(db, 0)) {
  50. +           return -1;
  51. +       }
  52. +
  53. +       //if (fread(&data,sizeof(DATA),1,db)==0) {
  54. +                if(read(db, &data, sizeof(DATA))==-1) {
  55. +           data.version=-1;
  56. +           if (debug) {
  57. +               printf("db: Database read failed for file \"%s\".\n", file);
  58. +           }
  59. +       } else {
  60. +           if (debug) {
  61. +               printf("db: Database loaded for interface \"%s\"...\n", data.interface);
  62. +           }
  63. +       }
  64. +
  65. +       /* convert old database to new format if necessary */
  66. +       if (data.version<DBVERSION) {
  67. +           if (data.version!=-1) {
  68. +               snprintf(errorstring, 512, "Trying to convert database \"%s\" (v%d) to current db format", file, data.version);
  69. +               printe(PT_Info);
  70. +           }
  71. +
  72. +           if ((data.version==-1) || (!convertdb(db))) {
  73. +
  74. +               /* close current db and try using backup if database conversion failed */
  75. +               close(db);
  76. +               if ((db=open(backup, O_RDONLY))!=-1) {
  77. +
  78. +                   /* lock file */
  79. +                   if (!lockdb(db, 0)) {
  80. +                       close(db);
  81. +                       return -1;
  82. +                   }
  83. +
  84. +                   //if (fread(&data,sizeof(DATA),1,db)==0) {
  85. +                                        if(read(db, &data, sizeof(DATA))==-1) {
  86. +                       snprintf(errorstring, 512, "Database load failed even when using backup. Aborting.");
  87. +                       printe(PT_Error);
  88. +                       close(db);
  89. +
  90. +                       if (noexit) {
  91. +                           return -1;
  92. +                       } else {
  93. +                           exit(EXIT_FAILURE);
  94. +                       }
  95. +                   } else {
  96. +                       if (debug) {
  97. +                           printf("db: Database loaded for interface \"%s\"...\n", data.interface);
  98. +                       }
  99. +                   }
  100. +
  101. +                   if (data.version!=DBVERSION) {
  102. +                       if (!convertdb(db)) {
  103. +                           snprintf(errorstring, 512, "Unable to use backup database.");
  104. +                           printe(PT_Error);
  105. +                           close(db);
  106. +
  107. +                           if (noexit) {
  108. +                               return -1;
  109. +                           } else {
  110. +                               exit(EXIT_FAILURE);
  111. +                           }
  112. +                       }
  113. +                   }
  114. +                   snprintf(errorstring, 512, "Database possibly corrupted, using backup instead.");
  115. +                   printe(PT_Info);
  116. +               } else {
  117. +                   snprintf(errorstring, 512, "Unable to open backup database \"%s\".", backup);
  118. +                   printe(PT_Error);
  119. +                   if (noexit) {
  120. +                       return -1;
  121. +                   } else {
  122. +                       exit(EXIT_FAILURE);
  123. +                   }
  124. +               }
  125. +           }
  126. +
  127. +       } else if (data.version>DBVERSION) {
  128. +           snprintf(errorstring, 512, "Downgrading database \"%s\" (v%d) is not supported.", file, data.version);
  129. +           printe(PT_Error);
  130. +           close(db);
  131. +
  132. +           if (noexit) {
  133. +               return -1;
  134. +           } else {
  135. +               exit(EXIT_FAILURE);
  136. +           }
  137. +       }
  138. +
  139. +       close(db);
  140. +
  141. +       if (strcmp(data.interface,iface)) {
  142. +           snprintf(errorstring, 512, "Warning:\nThe previous interface for this file was \"%s\".",data.interface);
  143. +           printe(PT_Multiline);
  144. +           snprintf(errorstring, 512, "It has now been replaced with \"%s\".",iface);
  145. +           printe(PT_Multiline);
  146. +           snprintf(errorstring, 512, "You can ignore this message if you renamed the filename.");
  147. +           printe(PT_Multiline);
  148. +           snprintf(errorstring, 512, "Interface name mismatch, renamed \"%s\" -> \"%s\"", data.interface, iface);
  149. +           printe(PT_ShortMultiline);
  150. +           if (strcmp(data.interface, data.nick)==0) {
  151. +               strncpy(data.nick, iface, 32);
  152. +           }
  153. +           strncpy(data.interface, iface, 32);
  154. +       }
  155. +   } else {
  156. +       snprintf(errorstring, 512, "Unable to read database \"%s\".",file);
  157. +       printe(PT_Error);
  158. +
  159. +       newdb=1;
  160. +       initdb();
  161. +       strncpy(data.interface, iface, 32);
  162. +       strncpy(data.nick, data.interface, 32);
  163. +   }
  164. +   return newdb;
  165. +}
  166. +#else
  167.  int readdb(const char *iface, const char *dirname)
  168.  {
  169.     FILE *db;
  170. @@ -128,6 +259,7 @@ int readdb(const char *iface, const char
  171.     }
  172.     return newdb;
  173.  }
  174. +#endif
  175.  
  176.  void initdb(void)
  177.  {
  178. @@ -204,6 +336,92 @@ void initdb(void)
  179.     data.btime=FP32;
  180.  }
  181.  
  182. +#if defined(sun) || defined(__sun__)
  183. +int writedb(const char *iface, const char *dirname, int newdb)
  184. +{
  185. +   int db;
  186. +   char file[512], backup[512];
  187. +
  188. +   snprintf(file, 512, "%s/%s", dirname, iface);
  189. +   snprintf(backup, 512, "%s/.%s", dirname, iface);
  190. +
  191. +   /* try to make backup of old data if this isn't a new database */
  192. +   if (!newdb && !backupdb(file, backup)) {
  193. +       snprintf(errorstring, 512, "Unable create database backup \"%s\".", backup);
  194. +       printe(PT_Error);
  195. +       return 0;
  196. +   }
  197. +
  198. +   /* make sure version stays correct */
  199. +   data.version=DBVERSION;
  200. +
  201. +   if ((db=open(file, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR))!=-1) {
  202. +
  203. +       /* lock file */
  204. +       if (!lockdb(db, 1)) {
  205. +           return 0;
  206. +       }
  207. +
  208. +       /* update timestamp when not merging */
  209. +       if (newdb!=2) {
  210. +           data.lastupdated=time(NULL);
  211. +       }
  212. +
  213. +                if(write(db, &data, sizeof(DATA))==-1) {
  214. +           snprintf(errorstring, 512, "Unable to write database \"%s\".", file);
  215. +           printe(PT_Error);
  216. +                        close(db);
  217. +           return 0;
  218. +       } else {
  219. +           if (debug) {
  220. +               printf("db: Database \"%s\" saved.\n", file);
  221. +           }
  222. +           close(db);
  223. +           if (newdb) {
  224. +               snprintf(errorstring, 512, "-> A new database has been created.");
  225. +               printe(PT_Info);
  226. +           }
  227. +       }
  228. +   } else {
  229. +       snprintf(errorstring, 512, "Unable to open database for writing \"%s\".", file);
  230. +       printe(PT_Error);
  231. +
  232. +       return 0;
  233. +   }
  234. +
  235. +   return 1;
  236. +}
  237. +
  238. +int backupdb(const char *current, const char *backup)
  239. +{
  240. +   int bf, c, bytes;
  241. +   char buffer[512];
  242. +
  243. +   /* from */
  244. +   if ((c = open(current, O_RDONLY)) == -1) {
  245. +       return 0;
  246. +   }
  247. +
  248. +        if ((bf = open(backup, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) == -1) {
  249. +       close(c);
  250. +       return 0;
  251. +   }
  252. +        
  253. +   /* copy data */
  254. +   while((bytes = (int)read(c, buffer, sizeof(buffer))) > 0) {
  255. +       if (write(bf, buffer, bytes) < 0) {
  256. +           close(c);
  257. +           close(bf);
  258. +           return 0;
  259. +       }
  260. +   }
  261. +
  262. +   close(c);
  263. +   close(bf);
  264. +
  265. +   return 1;
  266. +}
  267. +#else
  268.  int writedb(const char *iface, const char *dirname, int newdb)
  269.  {
  270.     FILE *db;
  271. @@ -290,8 +508,13 @@ int backupdb(const char *current, const
  272.  
  273.     return 1;
  274.  }
  275. +#endif
  276.  
  277. +#if defined(sun) || defined(__sun__)
  278. +int convertdb(int db)
  279. +#else
  280.  int convertdb(FILE *db)
  281. +#endif
  282.  {
  283.     int i, days, mod;
  284.     DATA10 data10;
  285. @@ -315,9 +538,10 @@ int convertdb(FILE *db)
  286.        
  287.         snprintf(errorstring, 512, "Converting to db v2...\n");
  288.         printe(PT_Info);
  289. -      
  290. -       rewind(db);
  291. -       if (fread(&data10, sizeof(DATA10), 1, db)==0) {
  292. +
  293. +                lseek(db, 0, SEEK_SET);
  294. +                
  295. +                if(read(db, &data10, sizeof(DATA10))==-1) {
  296.             snprintf(errorstring, 512, "Unable to convert corrupted database.");
  297.             printe(PT_Error);
  298.             return 0;
  299. @@ -455,8 +679,8 @@ int convertdb(FILE *db)
  300.        
  301.         /* don't read from file if already in memory */
  302.         if (converted==0) {
  303. -           rewind(db);
  304. -           if (fread(&data12, sizeof(DATA12), 1, db)==0) {
  305. +           lseek(db, 0, SEEK_SET);
  306. +                        if(read(db, &data12, sizeof(DATA12))==-1) {
  307.                 snprintf(errorstring, 512, "Unable to convert corrupted database.");
  308.                 printe(PT_Error);
  309.                 return 0;          
  310. @@ -556,20 +780,36 @@ int convertdb(FILE *db)
  311.  
  312.  int lockdb(int fd, int dbwrite)
  313.  {
  314. -   int operation, locktry=1;
  315. +   int locktry=1;
  316.  
  317.     /* lock only if configured to do so */
  318.     if (cfg.flock) {
  319. -
  320. -       if (dbwrite) {
  321. +#if defined(sun) || defined(__sun__)
  322. +            struct flock fl;
  323. +            fl.l_whence = SEEK_SET;
  324. +            fl.l_start = 0;
  325. +            fl.l_len = 0;
  326. +            fl.l_pid = getpid();
  327. +
  328. +            if (dbwrite) {
  329. +                fl.l_type = F_WRLCK;
  330. +            } else {
  331. +       fl.l_type = F_RDLCK;
  332. +            }
  333. +
  334. +            //while (lockf(fd, F_TLOCK, 0)!=0) {
  335. +            while(fcntl(fd, F_SETLK, &fl)==-1) {
  336. +#else
  337. +                int operation;
  338. +               if (dbwrite) {
  339.             operation = LOCK_EX|LOCK_NB;
  340.         } else {
  341.             operation = LOCK_SH|LOCK_NB;
  342.         }
  343.  
  344. -       /* try locking file */
  345. +                /* try locking file */
  346.         while (flock(fd, operation)!=0) {
  347. -      
  348. +#endif
  349.             if (debug) {
  350.                 printf("db: Database access locked (%d, %d)\n", dbwrite, locktry);
  351.             }
  352. diff -rupN vnstat-1.10/src/dbaccess.h vnstat-1.10-solaris/src/dbaccess.h
  353. --- vnstat-1.10/src/dbaccess.h  2009-08-30 18:48:00.000000000 +0300
  354. +++ vnstat-1.10-solaris/src/dbaccess.h  2011-02-15 21:58:58.504166613 +0200
  355. @@ -5,7 +5,13 @@ int readdb(const char *iface, const char
  356.  void initdb(void);
  357.  int writedb(const char *iface, const char *dirname, int newdb);
  358.  int backupdb(const char *current, const char *backup);
  359. +
  360. +#if defined(sun) || defined(__sun__)
  361. +int convertdb(int db);
  362. +#else
  363.  int convertdb(FILE *db);
  364. +#endif
  365. +
  366.  int lockdb(int fd, int dbwrite);
  367.  int checkdb(const char *iface, const char *dirname);
  368.  int removedb(const char *iface, const char *dirname);
  369. diff -rupN vnstat-1.10/src/ifinfo.c vnstat-1.10-solaris/src/ifinfo.c
  370. --- vnstat-1.10/src/ifinfo.c    2009-09-06 18:49:30.000000000 +0300
  371. +++ vnstat-1.10-solaris/src/ifinfo.c    2011-02-15 21:58:58.501457601 +0200
  372. @@ -35,6 +35,12 @@ int getifinfo(const char *iface)
  373.         printe(PT_Error);
  374.         return 0;
  375.     }
  376. +#elif defined(sun) || defined(__sun__)
  377. +        if (readkstat(inface)!=1) {
  378. +            snprintf(errorstring, 512, "Unable to get interface \"%s\" statistics.", inface);
  379. +            printe(PT_Error);
  380. +            return 0;
  381. +        }
  382.  #endif
  383.  
  384.     return 1;
  385. @@ -48,7 +54,7 @@ int getiflist(char **ifacelist)
  386.     DIR *dp;
  387.     struct dirent *di;
  388.     char procline[512], temp[64];
  389. -#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
  390. +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(sun) || defined(__sun__)
  391.     struct ifaddrs *ifap, *ifa;
  392.  #endif
  393.  
  394. @@ -92,7 +98,7 @@ int getiflist(char **ifacelist)
  395.         }  
  396.     }
  397.  
  398. -#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
  399. +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(sun) || defined(__sun__)
  400.     if (getifaddrs(&ifap) >= 0) {
  401.  
  402.         /* make list of interfaces */
  403. @@ -265,7 +271,7 @@ void parseifinfo(int newdb)
  404.     /* count traffic only if previous update wasn't too long ago */
  405.     if ( interval < (60*MAXUPDATEINTERVAL) ) {
  406.  
  407. -       /* btime in /proc/stat seems to vary ±1 second so we use btime-BVAR just to be safe */
  408. +       /* btime in /proc/stat seems to vary �1 second so we use btime-BVAR just to be safe */
  409.         /* the variation is also slightly different between various kernels... */
  410.         if (data.btime < (btime-cfg.bvar)) {
  411.             data.currx=0;
  412. @@ -399,7 +405,7 @@ uint64_t countercalc(uint64_t a, uint64_
  413.     }
  414.  }
  415.  
  416. -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
  417. +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
  418.  int readifaddrs(const char *iface)
  419.  {
  420.     struct ifaddrs *ifap, *ifa;
  421. @@ -436,3 +442,71 @@ int readifaddrs(const char *iface)
  422.     return 1;
  423.  }
  424.  #endif
  425. +
  426. +#if defined(sun) || defined(__sun__)
  427. +int readkstat(const char *iface)
  428. +{
  429. +    kstat_ctl_t *kctl;
  430. +    kstat_t     *ksp;
  431. +    int check = 0;
  432. +
  433. +    if((kctl = kstat_open()) == NULL) {
  434. +        if (debug)
  435. +            printf("Can't open /dev/kstat. exiting.\n");
  436. +        return 0;
  437. +    }
  438. +
  439. +    kstat_chain_update(kctl);
  440. +
  441. +    for (ksp = kctl->kc_chain; ksp != NULL; ksp = ksp->ks_next) {
  442. +        if ((ksp->ks_type == KSTAT_TYPE_NAMED) &&
  443. +            (strcmp(ksp->ks_class, "net") == 0) &&
  444. +            (strcmp(ksp->ks_name, iface) == 0)) {
  445. +
  446. +            if(kstat_read(kctl, ksp, NULL) == -1) {
  447. +                kstat_close(kctl);
  448. +
  449. +                if (debug)
  450. +           printf("Can't read kstat.");
  451. +
  452. +       return 0;
  453. +            }
  454. +
  455. +            check = 1;
  456. +            break;
  457. +        }
  458. +    }
  459. +
  460. +    ;
  461. +
  462. +    if (check == 0) {
  463. +        kstat_close(kctl);
  464. +       if (debug)
  465. +           printf("Requested interface \"%s\" not found.\n", iface);
  466. +
  467. +       return 0;
  468. +    } else {
  469. +        strncpy(ifinfo.name, iface, 32);
  470. +        ifinfo.rx = datalookup6432(ksp, "rbytes64", "rbytes");
  471. +        ifinfo.tx = datalookup6432(ksp, "obytes64", "obytes");
  472. +        ifinfo.rxp = datalookup6432(ksp, "ipackets64", "ipackets");
  473. +        ifinfo.txp = datalookup6432(ksp, "opackets64", "opackets");
  474. +        ifinfo.filled = 1;
  475. +    }
  476. +
  477. +    kstat_close(kctl);
  478. +
  479. +    return 1;
  480. +}
  481. +
  482. +uint64_t datalookup6432(kstat_t *ksp, char *name64, char *name32) {
  483. +    kstat_named_t *knp;
  484. +
  485. +    if((knp = kstat_data_lookup(ksp, name64)) != NULL)
  486. +        return (knp->value.ui64);
  487. +    else if((knp = kstat_data_lookup(ksp, name32)) != NULL)
  488. +        return (knp->value.ui32);
  489. +
  490. +    return 0;
  491. +}
  492. +#endif
  493. diff -rupN vnstat-1.10/src/ifinfo.h vnstat-1.10-solaris/src/ifinfo.h
  494. --- vnstat-1.10/src/ifinfo.h    2009-08-30 18:55:43.000000000 +0300
  495. +++ vnstat-1.10-solaris/src/ifinfo.h    2011-02-15 21:58:58.503966874 +0200
  496. @@ -11,4 +11,9 @@ uint64_t countercalc(uint64_t a, uint64_
  497.  int readifaddrs(const char *iface);
  498.  #endif
  499.  
  500. +#if defined(sun) || defined(__sun__)
  501. +int readkstat(const char *iface);
  502. +uint64_t datalookup6432(kstat_t *ksp, char *name64, char *name32);
  503. +#endif
  504. +
  505.  #endif
  506. diff -rupN vnstat-1.10/src/Makefile vnstat-1.10-solaris/src/Makefile
  507. --- vnstat-1.10/src/Makefile    2009-07-29 14:22:51.000000000 +0300
  508. +++ vnstat-1.10-solaris/src/Makefile    2011-02-15 21:58:58.502558928 +0200
  509. @@ -1,6 +1,6 @@
  510.  CC = gcc
  511.  CFLAGS = -O2
  512. -LDLIBS = -lm
  513. +LDLIBS = -lm -lsocket -lkstat
  514.  OBJS = vnstat.o ifinfo.o dbxml.o dbshow.o dbaccess.o dbmerge.o common.o misc.o cfg.o traffic.o
  515.  DOBJS = vnstatd.o ifinfo.o dbaccess.o dbcache.o common.o misc.o cfg.o
  516.  IOBJS = vnstati.o image.o dbaccess.o dbmerge.o common.o misc.o cfg.o
  517. diff -rupN vnstat-1.10/src/misc.c vnstat-1.10-solaris/src/misc.c
  518. --- vnstat-1.10/src/misc.c  2010-01-02 03:26:14.000000000 +0200
  519. +++ vnstat-1.10-solaris/src/misc.c  2011-02-15 21:58:58.501596041 +0200
  520. @@ -182,6 +182,42 @@ int getbtime(void)
  521.     }
  522.    
  523.     result = btm.tv_sec;
  524. +#elif defined(sun) || defined(__sun__)
  525. +        kstat_ctl_t *kctl;
  526. +        kstat_t     *ksp;
  527. +        kstat_named_t *knp;
  528. +        int check = 0;
  529. +
  530. +        if((kctl = kstat_open()) == NULL) {
  531. +       snprintf(errorstring, 512, "Unable to read /dev/kstat.");
  532. +       printe(PT_Error);
  533. +       if (noexit) {
  534. +           return 0;
  535. +       } else {
  536. +           exit(1);
  537. +       }
  538. +        }
  539. +
  540. +        kstat_chain_update(kctl);
  541. +
  542. +        if((ksp = kstat_lookup(kctl, "unix", 0, "system_misc")) == NULL) {
  543. +            kstat_close(kctl);
  544. +       if (debug)
  545. +           printf("kstat unix:0:system_misc failed.\n");
  546. +       return 0;
  547. +        }
  548. +
  549. +        if((kstat_read(kctl, ksp, NULL) != -1) &&
  550. +           ((knp = kstat_data_lookup(ksp, "boot_time")) != NULL)) {
  551. +       result = knp->value.ui32;
  552. +        } else {
  553. +            kstat_close(kctl);
  554. +       if (debug)
  555. +           printf("kstat unix:0:system_misc:boot_time failed.\n");
  556. +       return 0;
  557. +        }
  558. +
  559. +        kstat_close(kctl);
  560.  #endif
  561.  
  562.     return result;
  563. diff -rupN vnstat-1.10/src/vnstat.conf vnstat-1.10-solaris/src/vnstat.conf
  564. --- vnstat-1.10/src/vnstat.conf 1970-01-01 02:00:00.000000000 +0200
  565. +++ vnstat-1.10-solaris/src/vnstat.conf 2011-02-15 21:58:58.501383594 +0200
  566. @@ -0,0 +1,129 @@
  567. +# vnStat 1.10 config file
  568. +##
  569. +
  570. +# default interface
  571. +Interface "e1000g0"
  572. +
  573. +# location of the database directory
  574. +DatabaseDir "/export/home/janne/db"
  575. +
  576. +# locale (LC_ALL) ("-" = use system locale)
  577. +Locale "-"
  578. +
  579. +# on which day should months change
  580. +MonthRotate 1
  581. +
  582. +# date output formats for -d, -m, -t and -w
  583. +# see 'man date' for control codes
  584. +DayFormat    "%x"
  585. +MonthFormat  "%b '%y"
  586. +TopFormat    "%x"
  587. +
  588. +# characters used for visuals
  589. +RXCharacter       "%"
  590. +TXCharacter       ":"
  591. +RXHourCharacter   "r"
  592. +TXHourCharacter   "t"
  593. +
  594. +# how units are prefixed when traffic is shown
  595. +# 0 = IEC standard prefixes (KiB/MiB/GiB/TiB)
  596. +# 1 = old style binary prefixes (KB/MB/GB/TB)
  597. +UnitMode 0
  598. +
  599. +# output style
  600. +# 0 = minimal & narrow, 1 = bar column visible
  601. +# 2 = same as 1 except rate in summary and weekly
  602. +# 3 = rate column visible
  603. +OutputStyle 3
  604. +
  605. +# used rate unit (0 = bytes, 1 = bits)
  606. +RateUnit 1
  607. +
  608. +# maximum bandwidth (Mbit) for all interfaces, 0 = disable feature
  609. +# (unless interface specific limit is given)
  610. +MaxBandwidth 1000
  611. +
  612. +# interface specific limits
  613. +#  example 8Mbit limit for eth0 (remove # to activate):
  614. +#MaxBWeth0 8
  615. +
  616. +# how many seconds should sampling for -tr take by default
  617. +Sampletime 5
  618. +
  619. +# default query mode
  620. +# 0 = normal, 1 = days, 2 = months, 3 = top10
  621. +# 4 = dumpdb, 5 = short, 6 = weeks, 7 = hours
  622. +QueryMode 0
  623. +
  624. +# filesystem disk space check (1 = enabled, 0 = disabled)
  625. +CheckDiskSpace 1
  626. +
  627. +# database file locking (1 = enabled, 0 = disabled)
  628. +UseFileLocking 1
  629. +
  630. +# how much the boot time can variate between updates (seconds)
  631. +BootVariation 15
  632. +
  633. +# log days without traffic to daily list (1 = enabled, 0 = disabled)
  634. +TrafficlessDays 1
  635. +
  636. +
  637. +# vnstatd
  638. +##
  639. +
  640. +# how often (in seconds) interface data is updated
  641. +UpdateInterval 30
  642. +
  643. +# how often (in seconds) interface status changes are checked
  644. +PollInterval 5
  645. +
  646. +# how often (in minutes) data is saved to file
  647. +SaveInterval 5
  648. +
  649. +# how often (in minutes) data is saved when all interface are offline
  650. +OfflineSaveInterval 30
  651. +
  652. +# force data save when interface status changes (1 = enabled, 0 = disabled)
  653. +SaveOnStatusChange 1
  654. +
  655. +# enable / disable logging (0 = disabled, 1 = logfile, 2 = syslog)
  656. +UseLogging 2
  657. +
  658. +# file used for logging if UseLogging is set to 1
  659. +LogFile "/mypool/share/conf/vnstat/log/vnstat.log"
  660. +
  661. +# file used as daemon pid / lock file
  662. +PidFile "/mypool/share/conf/vnstat/run/vnstat.pid"
  663. +
  664. +
  665. +# vnstati
  666. +##
  667. +
  668. +# title timestamp format
  669. +HeaderFormat "%x %H:%M"
  670. +
  671. +# show hours with rate (1 = enabled, 0 = disabled)
  672. +HourlyRate 1
  673. +
  674. +# show rate in summary (1 = enabled, 0 = disabled)
  675. +SummaryRate 1
  676. +
  677. +# layout of summary (1 = with monthly, 0 = without monthly)
  678. +SummaryLayout 1
  679. +
  680. +# transparent background (1 = enabled, 0 = disabled)
  681. +TransparentBg 0
  682. +
  683. +# image colors
  684. +CBackground     "FFFFFF"
  685. +CEdge           "AEAEAE"
  686. +CHeader         "606060"
  687. +CHeaderTitle    "FFFFFF"
  688. +CHeaderDate     "FFFFFF"
  689. +CText           "000000"
  690. +CLine           "B0B0B0"
  691. +CLineL          "-"
  692. +CRx             "92CF00"
  693. +CTx             "606060"
  694. +CRxD            "-"
  695. +CTxD            "-"
Add Comment
Please, Sign In to add comment