Prefix all global variables to aid debugging.
authorMalte S. Stretz <mss@apache.org>
Tue, 31 May 2011 13:22:49 +0000 (15:22 +0200)
committerEmil Mikulic <emikulic@gmail.com>
Sat, 4 Jun 2011 14:00:31 +0000 (00:00 +1000)
* Also move all options which are set in darkstat.c to a new
  header opt.h and prefix options with opt_.
* Declare all opt_* stuff in darkstat.c.
* Prefix globals from acct.c with acct_.
* Prefix globals from cap.c with cap_.
* Prefix globals from hosts_db.c with hosts_db_.
* Prefix globals from http.c with http_.

16 files changed:
acct.c
acct.h
cap.c
cap.h
darkstat.c
darkstat.h
decode.c
err.c
err.h
graph_db.c
hosts_db.c
hosts_db.h
html.c
http.c
http.h
opt.h [new file with mode: 0644]

diff --git a/acct.c b/acct.c
index e245e36..062d1e0 100644 (file)
--- a/acct.c
+++ b/acct.c
@@ -36,7 +36,7 @@
 #include <stdlib.h> /* for free */
 #include <string.h> /* for memcpy */
 
-uint64_t total_packets = 0, total_bytes = 0;
+uint64_t acct_total_packets = 0, acct_total_bytes = 0;
 
 static int using_localnet4 = 0, using_localnet6 = 0;
 static struct addr localnet4, localmask4, localnet6, localmask6;
@@ -182,8 +182,8 @@ acct_for(const struct pktsummary * const sm)
 #endif
 
    /* Totals. */
-   total_packets++;
-   total_bytes += sm->len;
+   acct_total_packets++;
+   acct_total_bytes += sm->len;
 
    /* Graphs. */
    dir_out = addr_is_local(&(sm->src));
@@ -202,7 +202,7 @@ acct_for(const struct pktsummary * const sm)
       graph_acct((uint64_t)sm->len, GRAPH_IN);
    }
 
-   if (hosts_max == 0) return; /* skip per-host accounting */
+   if (opt_hosts_max == 0) return; /* skip per-host accounting */
 
    /* Hosts. */
    hosts_db_reduce();
@@ -229,18 +229,18 @@ acct_for(const struct pktsummary * const sm)
       pd->total += sm->len;
    }
 
-   if (ports_max == 0) return; /* skip ports accounting */
+   if (opt_ports_max == 0) return; /* skip ports accounting */
 
    /* Ports. */
    switch (sm->proto) {
    case IPPROTO_TCP:
-      if (sm->src_port <= highest_port) {
+      if (sm->src_port <= opt_highest_port) {
          ps = host_get_port_tcp(hs, sm->src_port);
          ps->out   += sm->len;
          ps->total += sm->len;
       }
 
-      if (sm->dst_port <= highest_port) {
+      if (sm->dst_port <= opt_highest_port) {
          pd = host_get_port_tcp(hd, sm->dst_port);
          pd->in    += sm->len;
          pd->total += sm->len;
@@ -250,13 +250,13 @@ acct_for(const struct pktsummary * const sm)
       break;
 
    case IPPROTO_UDP:
-      if (sm->src_port <= highest_port) {
+      if (sm->src_port <= opt_highest_port) {
          ps = host_get_port_udp(hs, sm->src_port);
          ps->out   += sm->len;
          ps->total += sm->len;
       }
 
-      if (sm->dst_port <= highest_port) {
+      if (sm->dst_port <= opt_highest_port) {
          pd = host_get_port_udp(hd, sm->dst_port);
          pd->in    += sm->len;
          pd->total += sm->len;
diff --git a/acct.h b/acct.h
index c0434ed..f8822a7 100644 (file)
--- a/acct.h
+++ b/acct.h
@@ -8,11 +8,9 @@
 
 struct pktsummary;
 
-extern uint64_t total_packets, total_bytes;
+extern uint64_t acct_total_packets, acct_total_bytes;
 
 void acct_init_localnet(const char *spec);
 void acct_for(const struct pktsummary * const sm);
 
-extern unsigned int highest_port;
-
 /* vim:set ts=3 sw=3 tw=78 expandtab: */
diff --git a/cap.c b/cap.c
index 39630e9..e72a8be 100644 (file)
--- a/cap.c
+++ b/cap.c
@@ -28,8 +28,6 @@
 #include <string.h>
 #include <unistd.h>
 
-extern int want_pppoe, want_macs, want_hexdump, want_snaplen, wait_secs;
-
 /* The cap process life-cycle:
  *
  * Init           - cap_init()
@@ -69,8 +67,8 @@ cap_init(const char *device, const char *filter, int promisc)
          errbuf);
       if (pcap != NULL) break; /* success! */
 
-      if ((wait_secs != -1) && strstr(errbuf, "device is not up")) {
-         if ((wait_secs > 0) && (waited >= wait_secs))
+      if ((opt_wait_secs != -1) && strstr(errbuf, "device is not up")) {
+         if ((opt_wait_secs > 0) && (waited >= opt_wait_secs))
             errx(1, "waited %d secs, giving up: pcap_open_live(): %s",
                waited, errbuf);
 
@@ -84,15 +82,15 @@ cap_init(const char *device, const char *filter, int promisc)
    /* Work out the linktype and what snaplen we need. */
    linktype = pcap_datalink(pcap);
    verbosef("linktype is %d", linktype);
-   if ((linktype == DLT_EN10MB) && want_macs)
-      show_mac_addrs = 1;
+   if ((linktype == DLT_EN10MB) && opt_want_macs)
+      hosts_db_show_macs = 1;
    linkhdr = getlinkhdr(linktype);
    if (linkhdr == NULL)
       errx(1, "unknown linktype %d", linktype);
    if (linkhdr->handler == NULL)
       errx(1, "no handler for linktype %d", linktype);
    snaplen = getsnaplen(linkhdr);
-   if (want_pppoe) {
+   if (opt_want_pppoe) {
       snaplen += PPPOE_HDR_LEN;
       if (linktype != DLT_EN10MB)
          errx(1, "can't do PPPoE decoding on a non-Ethernet linktype");
@@ -106,8 +104,8 @@ cap_init(const char *device, const char *filter, int promisc)
     */
    snaplen = max(snaplen, 96);
 #endif
-   if (want_snaplen > -1)
-      snaplen = want_snaplen;
+   if (opt_want_snaplen > -1)
+      snaplen = opt_want_snaplen;
    verbosef("using snaplen %d", snaplen);
 
    /* Close and re-open pcap to use the new snaplen. */
@@ -222,7 +220,7 @@ cap_fd_set(
 #endif
 }
 
-unsigned int pkts_recv = 0, pkts_drop = 0;
+unsigned int cap_pkts_recv = 0, cap_pkts_drop = 0;
 
 static void
 cap_stats_update(void)
@@ -234,8 +232,8 @@ cap_stats_update(void)
       return;
    }
 
-   pkts_recv = ps.ps_recv;
-   pkts_drop = ps.ps_drop;
+   cap_pkts_recv = ps.ps_recv;
+   cap_pkts_drop = ps.ps_drop;
 }
 
 /*
@@ -272,7 +270,7 @@ hexdump(const u_char *buf, const uint32_t len)
 static void
 callback(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes)
 {
-   if (want_hexdump) hexdump(bytes, h->caplen);
+   if (opt_want_hexdump) hexdump(bytes, h->caplen);
    linkhdr->handler(user, h, bytes);
 }
 
@@ -376,7 +374,7 @@ cap_from_file(const char *capfile, const char *filter)
    if (linkhdr->handler == NULL)
       errx(1, "no handler for linktype %d", linktype);
    if (linktype == DLT_EN10MB) /* FIXME: impossible with capfile? */
-      show_mac_addrs = 1;
+      hosts_db_show_macs = 1;
 
    /* Set filter expression, if any. */ /* FIXME: factor! */
    if (filter != NULL)
diff --git a/cap.h b/cap.h
index 7353484..9a13214 100644 (file)
--- a/cap.h
+++ b/cap.h
@@ -8,7 +8,7 @@
 #include <sys/time.h> /* FreeBSD 4 needs this for struct timeval */
 #include <sys/select.h>
 
-extern unsigned int pkts_recv, pkts_drop;
+extern unsigned int cap_pkts_recv, cap_pkts_drop;
 
 void cap_init(const char *device, const char *filter, int promisc);
 void cap_fd_set(fd_set *read_set, int *max_fd,
index 7c8f19d..3a0ca08 100644 (file)
@@ -72,43 +72,45 @@ parsenum(const char *str, unsigned long max /* 0 for no max */)
    return n;
 }
 
-const char *interface = NULL;
-static void cb_interface(const char *arg) { interface = arg; }
+const char *opt_interface = NULL;
+static void cb_interface(const char *arg) { opt_interface = arg; }
 
-const char *capfile = NULL;
-static void cb_capfile(const char *arg) { capfile = arg; }
+const char *opt_capfile = NULL;
+static void cb_capfile(const char *arg) { opt_capfile = arg; }
 
-int want_snaplen = -1;
+int opt_want_snaplen = -1;
 static void cb_snaplen(const char *arg)
-{ want_snaplen = (int)parsenum(arg, 0); }
+{ opt_want_snaplen = (int)parsenum(arg, 0); }
 
-int want_pppoe = 0;
-static void cb_pppoe(const char *arg _unused_) { want_pppoe = 1; }
+int opt_want_pppoe = 0;
+static void cb_pppoe(const char *arg _unused_) { opt_want_pppoe = 1; }
 
-static void cb_syslog(const char *arg _unused_) { want_syslog = 1; }
+int opt_want_syslog = 0;
+static void cb_syslog(const char *arg _unused_) { opt_want_syslog = 1; }
 
-static void cb_verbose(const char *arg _unused_) { want_verbose = 1; }
+int opt_want_verbose = 0;
+static void cb_verbose(const char *arg _unused_) { opt_want_verbose = 1; }
 
-int want_daemonize = 1;
-static void cb_no_daemon(const char *arg _unused_) { want_daemonize = 0; }
+int opt_want_daemonize = 1;
+static void cb_no_daemon(const char *arg _unused_) { opt_want_daemonize = 0; }
 
-int want_promisc = 1;
-static void cb_no_promisc(const char *arg _unused_) { want_promisc = 0; }
+int opt_want_promisc = 1;
+static void cb_no_promisc(const char *arg _unused_) { opt_want_promisc = 0; }
 
-int want_dns = 1;
-static void cb_no_dns(const char *arg _unused_) { want_dns = 0; }
+int opt_want_dns = 1;
+static void cb_no_dns(const char *arg _unused_) { opt_want_dns = 0; }
 
-int want_macs = 1;
-static void cb_no_macs(const char *arg _unused_) { want_macs = 0; }
+int opt_want_macs = 1;
+static void cb_no_macs(const char *arg _unused_) { opt_want_macs = 0; }
 
-int want_lastseen = 1;
-static void cb_no_lastseen(const char *arg _unused_) { want_lastseen = 0; }
+int opt_want_lastseen = 1;
+static void cb_no_lastseen(const char *arg _unused_) { opt_want_lastseen = 0; }
 
-unsigned short bindport = 667;
+unsigned short opt_bindport = 667;
 static void cb_port(const char *arg)
-{ bindport = (unsigned short)parsenum(arg, 65536); }
+{ opt_bindport = (unsigned short)parsenum(arg, 65536); }
 
-const char *bindaddr = NULL;
+const char *opt_bindaddr = NULL;
 static void cb_bindaddr(const char *arg)
 {
    struct addrinfo hints, *ai;
@@ -125,27 +127,27 @@ static void cb_bindaddr(const char *arg)
       errx(1, "malformed address \"%s\"", arg);
 
    freeaddrinfo(ai);
-   bindaddr = arg;
+   opt_bindaddr = arg;
 }
 
-const char *filter = NULL;
-static void cb_filter(const char *arg) { filter = arg; }
+const char *opt_filter = NULL;
+static void cb_filter(const char *arg) { opt_filter = arg; }
 
 static void cb_local(const char *arg) { acct_init_localnet(arg); }
 
-const char *chroot_dir = NULL;
-static void cb_chroot(const char *arg) { chroot_dir = arg; }
+const char *opt_chroot_dir = NULL;
+static void cb_chroot(const char *arg) { opt_chroot_dir = arg; }
 
-const char *base = NULL;
-static void cb_base(const char *arg) { base = arg; }
+const char *opt_base = NULL;
+static void cb_base(const char *arg) { opt_base = arg; }
 
-const char *privdrop_user = NULL;
-static void cb_user(const char *arg) { privdrop_user = arg; }
+const char *opt_privdrop_user = NULL;
+static void cb_user(const char *arg) { opt_privdrop_user = arg; }
 
 const char *daylog_fn = NULL;
 static void cb_daylog(const char *arg)
 {
-   if (chroot_dir == NULL)
+   if (opt_chroot_dir == NULL)
       errx(1, "the daylog file is relative to the chroot.\n"
       "You must specify a --chroot dir before you can use --daylog.");
    else
@@ -155,7 +157,7 @@ static void cb_daylog(const char *arg)
 const char *import_fn = NULL;
 static void cb_import(const char *arg)
 {
-   if (chroot_dir == NULL)
+   if (opt_chroot_dir == NULL)
       errx(1, "the import file is relative to the chroot.\n"
       "You must specify a --chroot dir before you can use --import.");
    else
@@ -165,7 +167,7 @@ static void cb_import(const char *arg)
 const char *export_fn = NULL;
 static void cb_export(const char *arg)
 {
-   if ((chroot_dir == NULL) && (capfile == NULL))
+   if ((opt_chroot_dir == NULL) && (opt_capfile == NULL))
       errx(1, "the export file is relative to the chroot.\n"
       "You must specify a --chroot dir before you can use --export.");
    else
@@ -175,39 +177,39 @@ static void cb_export(const char *arg)
 static const char *pid_fn = NULL;
 static void cb_pidfile(const char *arg)
 {
-   if (chroot_dir == NULL)
+   if (opt_chroot_dir == NULL)
       errx(1, "the pidfile is relative to the chroot.\n"
       "You must specify a --chroot dir before you can use --pidfile.");
    else
       pid_fn = arg;
 }
 
-unsigned int hosts_max = 1000;
+unsigned int opt_hosts_max = 1000;
 static void cb_hosts_max(const char *arg)
-{ hosts_max = parsenum(arg, 0); }
+{ opt_hosts_max = parsenum(arg, 0); }
 
-unsigned int hosts_keep = 500;
+unsigned int opt_hosts_keep = 500;
 static void cb_hosts_keep(const char *arg)
-{ hosts_keep = parsenum(arg, 0); }
+{ opt_hosts_keep = parsenum(arg, 0); }
 
-unsigned int ports_max = 200;
+unsigned int opt_ports_max = 200;
 static void cb_ports_max(const char *arg)
-{ ports_max = parsenum(arg, 65536); }
+{ opt_ports_max = parsenum(arg, 65536); }
 
-unsigned int ports_keep = 30;
+unsigned int opt_ports_keep = 30;
 static void cb_ports_keep(const char *arg)
-{ ports_keep = parsenum(arg, 65536); }
+{ opt_ports_keep = parsenum(arg, 65536); }
 
-unsigned int highest_port = 65535;
+unsigned int opt_highest_port = 65535;
 static void cb_highest_port(const char *arg)
-{ highest_port = parsenum(arg, 65535); }
+{ opt_highest_port = parsenum(arg, 65535); }
 
-int wait_secs = -1;
+int opt_wait_secs = -1;
 static void cb_wait_secs(const char *arg)
-{ wait_secs = (int)parsenum(arg, 0); }
+{ opt_wait_secs = (int)parsenum(arg, 0); }
 
-int want_hexdump = 0;
-static void cb_hexdump(const char *arg _unused_) { want_hexdump = 1; }
+int opt_want_hexdump = 0;
+static void cb_hexdump(const char *arg _unused_) { opt_want_hexdump = 1; }
 
 /* --- */
 
@@ -334,42 +336,42 @@ parse_cmdline(const int argc, char * const *argv)
    parse_sub_cmdline(argc, argv);
 
    /* start syslogging as early as possible */
-   if (want_syslog) openlog("darkstat", LOG_NDELAY | LOG_PID, LOG_DAEMON);
+   if (opt_want_syslog) openlog("darkstat", LOG_NDELAY | LOG_PID, LOG_DAEMON);
 
    /* some default values */
-   if (chroot_dir == NULL) chroot_dir = CHROOT_DIR;
-   if (privdrop_user == NULL) privdrop_user = PRIVDROP_USER;
+   if (opt_chroot_dir == NULL) opt_chroot_dir = CHROOT_DIR;
+   if (opt_privdrop_user == NULL) opt_privdrop_user = PRIVDROP_USER;
 
    /* sanity check args */
-   if ((interface == NULL) && (capfile == NULL))
+   if ((opt_interface == NULL) && (opt_capfile == NULL))
       errx(1, "must specify either interface (-i) or capture file (-r)");
 
-   if ((interface != NULL) && (capfile != NULL))
+   if ((opt_interface != NULL) && (opt_capfile != NULL))
       errx(1, "can't specify both interface (-i) and capture file (-r)");
 
-   if ((hosts_max != 0) && (hosts_keep >= hosts_max)) {
-      hosts_keep = hosts_max / 2;
+   if ((opt_hosts_max != 0) && (opt_hosts_keep >= opt_hosts_max)) {
+      opt_hosts_keep = opt_hosts_max / 2;
       warnx("reducing --hosts-keep to %u, to be under --hosts-max (%u)",
-         hosts_keep, hosts_max);
+         opt_hosts_keep, opt_hosts_max);
    }
    verbosef("max %u hosts, cutting down to %u when exceeded",
-      hosts_max, hosts_keep);
+      opt_hosts_max, opt_hosts_keep);
 
-   if ((ports_max != 0) && (ports_keep >= ports_max)) {
-      ports_keep = ports_max / 2;
+   if ((opt_ports_max != 0) && (opt_ports_keep >= opt_ports_max)) {
+      opt_ports_keep = opt_ports_max / 2;
       warnx("reducing --ports-keep to %u, to be under --ports-max (%u)",
-         ports_keep, ports_max);
+         opt_ports_keep, opt_ports_max);
    }
    verbosef("max %u ports per host, cutting down to %u when exceeded",
-      ports_max, ports_keep);
+      opt_ports_max, opt_ports_keep);
 
-   if (want_hexdump && !want_verbose) {
-      want_verbose = 1;
+   if (opt_want_hexdump && !opt_want_verbose) {
+      opt_want_verbose = 1;
       verbosef("--hexdump implies --verbose");
    }
 
-   if (want_hexdump && want_daemonize) {
-      want_daemonize = 0;
+   if (opt_want_hexdump && opt_want_daemonize) {
+      opt_want_daemonize = 0;
       verbosef("--hexdump implies --no-daemon");
    }
 }
@@ -379,12 +381,13 @@ run_from_capfile(void)
 {
    graph_init();
    hosts_db_init();
-   cap_from_file(capfile, filter);
+   cap_from_file(opt_capfile, opt_filter);
    cap_stop();
    if (export_fn != NULL) db_export(export_fn);
    hosts_db_free();
    graph_free();
-   verbosef("Total packets: %qu, bytes: %qu", total_packets, total_bytes);
+   verbosef("Total packets: %qu, bytes: %qu",
+      acct_total_packets, acct_total_bytes);
 }
 
 /* --- Program body --- */
@@ -394,7 +397,7 @@ main(int argc, char **argv)
    test_64order();
    parse_cmdline(argc-1, argv+1);
 
-   if (capfile) {
+   if (opt_capfile) {
       /*
        * This is very different from a regular run against a network
        * interface.
@@ -405,9 +408,9 @@ main(int argc, char **argv)
 
    /* must verbosef() before first fork to init lock */
    verbosef("starting up");
-   if (pid_fn) pidfile_create(chroot_dir, pid_fn, privdrop_user);
+   if (pid_fn) pidfile_create(opt_chroot_dir, pid_fn, opt_privdrop_user);
 
-   if (want_daemonize) {
+   if (opt_want_daemonize) {
       verbosef("daemonizing to run in the background!");
       daemonize_start();
       verbosef("I am the main process");
@@ -415,12 +418,12 @@ main(int argc, char **argv)
    if (pid_fn) pidfile_write_close();
 
    /* do this first as it forks - minimize memory use */
-   if (want_dns) dns_init(privdrop_user);
-   cap_init(interface, filter, want_promisc); /* needs root */
-   http_init(base, bindaddr, bindport, /*maxconn=*/-1);
+   if (opt_want_dns) dns_init(opt_privdrop_user);
+   cap_init(opt_interface, opt_filter, opt_want_promisc); /* needs root */
+   http_init(opt_base, opt_bindaddr, opt_bindport, /*maxconn=*/-1);
    ncache_init(); /* must do before chroot() */
 
-   privdrop(chroot_dir, privdrop_user);
+   privdrop(opt_chroot_dir, opt_privdrop_user);
 
    /* Don't need root privs for these: */
    now = time(NULL);
@@ -428,7 +431,7 @@ main(int argc, char **argv)
    graph_init();
    hosts_db_init();
    if (import_fn != NULL) db_import(import_fn);
-   localip_init(interface);
+   localip_init(opt_interface);
 
    if (signal(SIGTERM, sig_shutdown) == SIG_ERR)
       errx(1, "signal(SIGTERM) failed");
@@ -489,7 +492,7 @@ main(int argc, char **argv)
 
    verbosef("shutting down");
    verbosef("pcap stats: %u packets received, %u packets dropped",
-      pkts_recv, pkts_drop);
+      cap_pkts_recv, cap_pkts_drop);
    http_stop();
    cap_stop();
    dns_stop();
index 0124cdc..b0f7532 100644 (file)
@@ -11,6 +11,7 @@
  * - PACKAGE_STRING
  */
 #include "config.h"
+#include "opt.h"
 
 #ifdef __GNUC__
 # define _unused_ __attribute__((__unused__))
index b6f0449..1d1c13c 100644 (file)
--- a/decode.c
+++ b/decode.c
@@ -64,8 +64,6 @@
 #include <netinet/tcp.h> /* struct tcphdr */
 #include <netinet/udp.h> /* struct udphdr */
 
-extern int want_pppoe;
-
 static void decode_ether(u_char *, const struct pcap_pkthdr *,
    const u_char *);
 static void decode_loop(u_char *, const struct pcap_pkthdr *,
@@ -159,7 +157,7 @@ decode_ether(u_char *user _unused_,
    switch (type) {
    case ETHERTYPE_IP:
    case ETHERTYPE_IPV6:
-      if (!want_pppoe) {
+      if (!opt_want_pppoe) {
          decode_ip(pdata + ETHER_HDR_LEN,
                    pheader->caplen - ETHER_HDR_LEN, &sm);
          acct_for(&sm);
@@ -170,7 +168,7 @@ decode_ether(u_char *user _unused_,
       /* known protocol, don't complain about it. */
       break;
    case ETHERTYPE_PPPOE:
-      if (want_pppoe)
+      if (opt_want_pppoe)
          decode_pppoe_real(pdata + ETHER_HDR_LEN,
                            pheader->caplen - ETHER_HDR_LEN, &sm);
       else
diff --git a/err.c b/err.c
index 6c6ecfd..5e37793 100644 (file)
--- a/err.c
+++ b/err.c
@@ -59,7 +59,7 @@ err(const int code, const char *format, ...)
    va_list va;
 
    va_start(va, format);
-   if (want_syslog)
+   if (opt_want_syslog)
       to_syslog("ERROR: ", 1, format, va);
    else {
       fprintf(stderr, "%5d: error: ", (int)getpid());
@@ -77,7 +77,7 @@ errx(const int code, const char *format, ...)
    va_list va;
 
    va_start(va, format);
-   if (want_syslog)
+   if (opt_want_syslog)
       to_syslog("ERROR: ", 0, format, va);
    else {
       fprintf(stderr, "%5d: error: ", (int)getpid());
@@ -95,7 +95,7 @@ warn(const char *format, ...)
    va_list va;
 
    va_start(va, format);
-   if (want_syslog)
+   if (opt_want_syslog)
       to_syslog("WARNING: ", 1, format, va);
    else {
       fprintf(stderr, "%5d: warning: ", (int)getpid());
@@ -111,7 +111,7 @@ warnx(const char *format, ...)
    va_list va;
 
    va_start(va, format);
-   if (want_syslog)
+   if (opt_want_syslog)
       to_syslog("WARNING: ", 0, format, va);
    else {
       fprintf(stderr, "%5d: warning: ", (int)getpid());
@@ -168,16 +168,14 @@ unlock(void)
    }
 }
 
-int want_verbose = 0, want_syslog = 0;
-
 void
 verbosef(const char *format, ...)
 {
    va_list va;
 
-   if (!want_verbose) return;
+   if (!opt_want_verbose) return;
    va_start(va, format);
-   if (want_syslog)
+   if (opt_want_syslog)
       to_syslog(NULL, 0, format, va);
    else {
       lock();
diff --git a/err.h b/err.h
index 92cb079..5ec6831 100644 (file)
--- a/err.h
+++ b/err.h
@@ -26,7 +26,6 @@ void errx(const int code, const char *format, ...)
 void warn(const char *format, ...) _printflike_(1, 2);
 void warnx(const char *format, ...) _printflike_(1, 2);
 
-extern int want_verbose, want_syslog;
 void verbosef(const char *format, ...) _printflike_(1, 2);
 void dverbosef(const char *format _unused_, ...);
 
index 6b01791..e2424f4 100644 (file)
@@ -28,8 +28,6 @@
 #define GRAPH_WIDTH "320"
 #define GRAPH_HEIGHT "200"
 
-extern const char *interface;
-
 struct graph {
    uint64_t *in, *out;
    unsigned int offset; /* i.e. seconds start at 0, days start at 1 */
@@ -313,7 +311,7 @@ html_front_page(void)
    char start_when[100];
 
    buf = str_make();
-   html_open(buf, "Graphs", interface, /*want_graph_js=*/1);
+   html_open(buf, "Graphs", opt_interface, /*want_graph_js=*/1);
 
    str_append(buf, "<p>\n");
    str_append(buf, "<b>Running for</b> <span id=\"rf\">");
@@ -333,9 +331,9 @@ html_front_page(void)
       "(<span id=\"pc\">%'u</span> <b>captured,</b> "
       "<span id=\"pd\">%'u</span> <b>dropped)</b><br>\n"
       "</p>\n",
-      total_bytes,
-      total_packets,
-      pkts_recv, pkts_drop);
+      acct_total_bytes,
+      acct_total_packets,
+      cap_pkts_recv, cap_pkts_drop);
 
    str_append(buf,
       "<div id=\"graphs\">\n"
@@ -382,7 +380,7 @@ xml_graphs(void)
    struct str *buf = str_make(), *rf;
 
    str_appendf(buf, "<graphs tp=\"%qu\" tb=\"%qu\" pc=\"%u\" pd=\"%u\" rf=\"",
-      total_packets, total_bytes, pkts_recv, pkts_drop);
+      acct_total_packets, acct_total_bytes, cap_pkts_recv, cap_pkts_drop);
    rf = length_of_time(now - start_time);
    str_appendstr(buf, rf);
    str_free(rf);
index 10f8a9a..a469137 100644 (file)
@@ -15,7 +15,7 @@
 #include "hosts_db.h"
 #include "db.h"
 #include "html.h"
-#include "http.h" /* for base_url */
+#include "http.h" /* for http_base_url */
 #include "ncache.h"
 #include "now.h"
 #include "str.h"
@@ -29,9 +29,7 @@
 #include <string.h> /* memset(), strcmp() */
 #include <unistd.h>
 
-extern int want_lastseen;
-int show_mac_addrs = 0;
-extern const char *interface;
+int hosts_db_show_macs = 0;
 
 /* FIXME: specify somewhere more sane/tunable */
 #define MAX_ENTRIES 30 /* in an HTML table rendered from a hashtable */
@@ -297,13 +295,13 @@ format_cols_host(struct str *buf)
       "<tr>\n"
       " <th>IP</th>\n"
       " <th>Hostname</th>\n");
-   if (show_mac_addrs) str_append(buf,
+   if (hosts_db_show_macs) str_append(buf,
       " <th>MAC Address</th>\n");
    str_append(buf,
       " <th><a href=\"?sort=in\">In</a></th>\n"
       " <th><a href=\"?sort=out\">Out</a></th>\n"
       " <th><a href=\"?sort=total\">Total</a></th>\n");
-   if (want_lastseen) str_append(buf,
+   if (opt_want_lastseen) str_append(buf,
       " <th><a href=\"?sort=lastseen\">Last seen</a></th>\n");
    str_append(buf,
       "</tr>\n");
@@ -320,10 +318,10 @@ format_row_host(struct str *buf, const struct bucket *b,
       " <td><a href=\"%shosts/%s/\">%s</a></td>\n"
       " <td>%s</td>\n",
       css_class,
-      base_url, ip, ip,
+      http_base_url, ip, ip,
       (b->u.host.dns == NULL) ? "" : b->u.host.dns);
 
-   if (show_mac_addrs)
+   if (hosts_db_show_macs)
       str_appendf(buf,
          " <td><tt>%x:%x:%x:%x:%x:%x</tt></td>\n",
          b->u.host.mac_addr[0],
@@ -339,7 +337,7 @@ format_row_host(struct str *buf, const struct bucket *b,
       " <td class=\"num\">%'qu</td>\n",
       b->in, b->out, b->total);
 
-   if (want_lastseen) {
+   if (opt_want_lastseen) {
       time_t last_t = b->u.host.last_seen;
       struct str *lastseen = NULL;
 
@@ -516,7 +514,7 @@ void
 hosts_db_init(void)
 {
    assert(hosts_db == NULL);
-   hosts_db = hashtable_make(HOST_BITS, hosts_max, hosts_keep,
+   hosts_db = hashtable_make(HOST_BITS, opt_hosts_max, opt_hosts_keep,
       hash_func_host, free_func_host, key_func_host, find_func_host,
       make_func_host, format_cols_host, format_row_host);
 }
@@ -807,7 +805,7 @@ host_get_port_tcp(struct bucket *host, const uint16_t port)
    struct host *h = &host->u.host;
    assert(h != NULL);
    if (h->ports_tcp == NULL)
-      h->ports_tcp = hashtable_make(PORT_BITS, ports_max, ports_keep,
+      h->ports_tcp = hashtable_make(PORT_BITS, opt_ports_max, opt_ports_keep,
          hash_func_short, free_func_simple, key_func_port_tcp,
          find_func_port_tcp, make_func_port_tcp,
          format_cols_port_tcp, format_row_port_tcp);
@@ -823,7 +821,7 @@ host_get_port_udp(struct bucket *host, const uint16_t port)
    struct host *h = &host->u.host;
    assert(h != NULL);
    if (h->ports_udp == NULL)
-      h->ports_udp = hashtable_make(PORT_BITS, ports_max, ports_keep,
+      h->ports_udp = hashtable_make(PORT_BITS, opt_ports_max, opt_ports_keep,
          hash_func_short, free_func_simple, key_func_port_udp,
          find_func_port_udp, make_func_port_udp,
          format_cols_port_udp, format_row_port_udp);
@@ -975,7 +973,7 @@ html_hosts_main(const char *qs)
 #define NEXT "next page &gt;&gt;&gt;"
 #define FULL "full table"
 
-   html_open(buf, "Hosts", interface, /*want_graph_js=*/0);
+   html_open(buf, "Hosts", opt_interface, /*want_graph_js=*/0);
    format_table(buf, hosts_db, start, sort, full);
 
    /* <prev | full | stats | next> */
@@ -1034,7 +1032,7 @@ html_hosts_detail(const char *ip)
 
    /* Overview. */
    buf = str_make();
-   html_open(buf, ip, interface, /*want_graph_js=*/0);
+   html_open(buf, ip, opt_interface, /*want_graph_js=*/0);
    if (strcmp(ip, canonical) != 0)
       str_appendf(buf, "(canonically <b>%s</b>)\n", canonical);
    str_appendf(buf,
@@ -1046,7 +1044,7 @@ html_hosts_detail(const char *ip)
    if (h->u.host.dns == NULL)
       dns_queue(&(h->u.host.addr));
 
-   if (show_mac_addrs)
+   if (hosts_db_show_macs)
       str_appendf(buf,
          "<b>MAC Address:</b> "
          "<tt>%x:%x:%x:%x:%x:%x</tt><br>\n",
index 69d6544..041a200 100644 (file)
@@ -49,13 +49,7 @@ struct bucket {
 
 enum sort_dir { IN, OUT, TOTAL, LASTSEEN };
 
-extern int show_mac_addrs;
-
-/*
- * Table reduction - when the number of entries is about to exceed <max>, we
- * reduce the table to the top <keep> entries.
- */
-extern unsigned int hosts_max, hosts_keep, ports_max, ports_keep;
+extern int hosts_db_show_macs;
 
 void hosts_db_init(void);
 void hosts_db_reduce(void);
diff --git a/html.c b/html.c
index 0c5c418..4a16862 100644 (file)
--- a/html.c
+++ b/html.c
@@ -11,7 +11,7 @@
 #include "config.h" /* for PACKAGE_STRING, PACKAGE_URL */
 #include "str.h"
 #include "html.h"
-#include "http.h" /* for base_url */
+#include "http.h" /* for http_base_url */
 
 void html_open(struct str *buf, const char *title, const char *interface,
     const int want_graph_js)
@@ -24,12 +24,12 @@ void html_open(struct str *buf, const char *title, const char *interface,
          "<meta name=\"generator\" content=\"" PACKAGE_STRING "\">\n"
          "<meta name=\"robots\" content=\"noindex, noarchive\">\n"
          "<link rel=\"stylesheet\" href=\"%sstyle.css\" type=\"text/css\">\n"
-        , title, interface, base_url);
+        , title, interface, http_base_url);
 
     if (want_graph_js)
         str_appendf(buf,
             "<script src=\"%sgraph.js\" type=\"text/javascript\"></script>\n"
-            , base_url);
+            , http_base_url);
 
     str_appendf(buf,
         "</head>\n"
@@ -44,7 +44,7 @@ void html_open(struct str *buf, const char *title, const char *interface,
         "</div>\n"
         "<div class=\"content\">\n"
          "<h2 class=\"pageheader\">%s</h2>\n"
-        , base_url, base_url, title);
+        , http_base_url, http_base_url, title);
 }
 
 void html_close(struct str *buf)
diff --git a/http.c b/http.c
index c2122c9..7a4826c 100644 (file)
--- a/http.c
+++ b/http.c
@@ -35,7 +35,7 @@
 #include <unistd.h>
 #include <zlib.h>
 
-char *base_url = NULL;
+char *http_base_url = NULL;
 
 static const char mime_type_xml[] = "text/xml";
 static const char mime_type_html[] = "text/html; charset=us-ascii";
@@ -620,14 +620,14 @@ static void process_get(struct connection *conn)
 
     /* make relative (or fail) */
     decoded_url = safe_url;
-    if (!str_starts_with(decoded_url, base_url))
+    if (!str_starts_with(decoded_url, http_base_url))
     {
         default_reply(conn, 404, "Not Found",
             "The page you requested could not be found.");
         free(decoded_url);
         return;
     }
-    safe_url = decoded_url + strlen(base_url) - 1;
+    safe_url = decoded_url + strlen(http_base_url) - 1;
 
     if (strcmp(safe_url, "/") == 0) {
         struct str *buf = html_front_page();
@@ -889,7 +889,7 @@ static void http_init_base(const char *url)
     size_t urllen;
 
     if (url == NULL) {
-        base_url = strdup("/");
+        http_base_url = strdup("/");
         return;
     }
 
@@ -906,11 +906,11 @@ static void http_init_base(const char *url)
     free(slashed_url);
     if (safe_url == NULL) {
         verbosef("invalid base \"%s\", ignored", url);
-        base_url = strdup("/"); /* set to default */
+        http_base_url = strdup("/"); /* set to default */
         return;
     }
     else
-        base_url = safe_url;
+        http_base_url = safe_url;
 }
 
 /* Use getaddrinfo to figure out what type of socket to create and
@@ -989,7 +989,7 @@ void http_init(const char *base, const char *bindaddr,
         (ai->ai_family == AF_INET6) ? "[" : "",
         ipaddr,
         (ai->ai_family == AF_INET6) ? "]" : "",
-        bindport, base_url);
+        bindport, http_base_url);
 
     freeaddrinfo(ai);
 
@@ -1111,7 +1111,7 @@ void http_poll(fd_set *recv_set, fd_set *send_set)
 }
 
 void http_stop(void) {
-    free(base_url);
+    free(http_base_url);
     close(sockin);
 }
 
diff --git a/http.h b/http.h
index a3cbf5a..b57e101 100644 (file)
--- a/http.h
+++ b/http.h
@@ -8,7 +8,7 @@
 #include <sys/select.h>
 #include <netinet/in.h>
 
-extern char *base_url;
+extern char *http_base_url;
 
 void http_init(const char *base, const char * bindaddr,
    const unsigned short bindport, const int max_conn);
diff --git a/opt.h b/opt.h
new file mode 100644 (file)
index 0000000..d7cbd10
--- /dev/null
+++ b/opt.h
@@ -0,0 +1,42 @@
+/* darkstat 3
+ * copyright (c) 2001-2011 Emil Mikulic.
+ *
+ * opt.h: global options
+ */
+
+/*
+ * Capture options.
+ */
+extern int opt_want_pppoe;
+extern int opt_want_macs;
+extern int opt_want_hexdump;
+extern int opt_want_snaplen;
+extern int opt_wait_secs;
+
+/*
+ * Error/logging options.
+ */
+extern int opt_want_verbose;
+extern int opt_want_syslog;
+
+/*
+ * Accounting options.
+ */
+extern unsigned int opt_highest_port;
+
+/*
+ * Hosts table reduction - when the number of entries is about to exceed
+ * <max>, we reduce the table to the top <keep> entries.
+ */
+extern unsigned int opt_hosts_max;
+extern unsigned int opt_hosts_keep;
+extern unsigned int opt_ports_max;
+extern unsigned int opt_ports_keep;
+
+/*
+ * Hosts output options.
+ */
+extern int opt_want_lastseen;
+extern const char *opt_interface;
+
+