]> arthur.barton.de Git - netdata.git/commitdiff
Separate net.inet6.ip6.stats module
authorVladimir Kobal <vlad@prokk.net>
Tue, 14 Mar 2017 15:51:34 +0000 (17:51 +0200)
committerVladimir Kobal <vlad@prokk.net>
Tue, 14 Mar 2017 15:51:34 +0000 (17:51 +0200)
src/freebsd_sysctl.c
src/plugin_freebsd.c
src/plugin_freebsd.h

index 5323a741bda98be702ad6261138bd3cfcbf40740..76417131f3b311a628a7c22ba0dbb6349196bc09 100644 (file)
@@ -2135,23 +2135,225 @@ int do_net_inet_ip_stats(int update_every, usec_t dt) {
     return 0;
 }
 
+// --------------------------------------------------------------------------------------------------------------------
+// net.inet6.ip6.stats
+
+int do_net_inet6_ip6_stats(int update_every, usec_t dt) {
+    static int do_ip6_packets = -1, do_ip6_fragsout = -1, do_ip6_fragsin = -1, do_ip6_errors = -1;
+
+    if (unlikely(do_ip6_packets == -1)) {
+        do_ip6_packets  = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ipv6 packets",        CONFIG_BOOLEAN_AUTO);
+        do_ip6_fragsout = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ipv6 fragments sent", CONFIG_BOOLEAN_AUTO);
+        do_ip6_fragsin  = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ipv6 fragments assembly",
+                                                      CONFIG_BOOLEAN_AUTO);
+        do_ip6_errors   = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ipv6 errors",         CONFIG_BOOLEAN_AUTO);
+    }
+
+    if (likely(do_ip6_packets || do_ip6_fragsout || do_ip6_fragsin || do_ip6_errors)) {
+        static int mib[4] = {0, 0, 0, 0};
+        struct ip6stat ip6stat;
+
+        if (unlikely(GETSYSCTL_SIMPLE("net.inet6.ip6.stats", mib, ip6stat))) {
+            do_ip6_packets = 0;
+            error("DISABLED: ipv6.packets chart");
+            do_ip6_fragsout = 0;
+            error("DISABLED: ipv6.fragsout chart");
+            do_ip6_fragsin = 0;
+            error("DISABLED: ipv6.fragsin chart");
+            do_ip6_errors = 0;
+            error("DISABLED: ipv6.errors chart");
+            error("DISABLED: net.inet6.ip6.stats module");
+            return 1;
+        } else {
+
+            // --------------------------------------------------------------------
+
+            if (do_ip6_packets == CONFIG_BOOLEAN_YES || (do_ip6_packets == CONFIG_BOOLEAN_AUTO &&
+                                                         (ip6stat.ip6s_localout || ip6stat.ip6s_total ||
+                                                          ip6stat.ip6s_forward || ip6stat.ip6s_delivered))) {
+                do_ip6_packets = CONFIG_BOOLEAN_YES;
+
+                static RRDSET *st = NULL;
+                static RRDDIM *rd_received = NULL, *rd_sent = NULL, *rd_forwarded = NULL, *rd_delivers = NULL;
+
+                if (unlikely(!st)) {
+                    st = rrdset_create_localhost("ipv6",
+                                                 "packets",
+                                                 NULL,
+                                                 "packets",
+                                                 NULL,
+                                                 "IPv6 Packets",
+                                                 "packets/s",
+                                                 3000,
+                                                 update_every,
+                                                 RRDSET_TYPE_LINE
+                    );
+
+                    rd_received  = rrddim_add(st, "received",  NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_sent      = rrddim_add(st, "sent",      NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_forwarded = rrddim_add(st, "forwarded", NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_delivers  = rrddim_add(st, "delivers",  NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+                } else
+                    rrdset_next(st);
+
+                rrddim_set_by_pointer(st, rd_sent,      ip6stat.ip6s_localout);
+                rrddim_set_by_pointer(st, rd_received,  ip6stat.ip6s_total);
+                rrddim_set_by_pointer(st, rd_forwarded, ip6stat.ip6s_forward);
+                rrddim_set_by_pointer(st, rd_delivers,  ip6stat.ip6s_delivered);
+                rrdset_done(st);
+            }
+
+            // --------------------------------------------------------------------
+
+            if (do_ip6_fragsout == CONFIG_BOOLEAN_YES || (do_ip6_fragsout == CONFIG_BOOLEAN_AUTO &&
+                                                          (ip6stat.ip6s_fragmented || ip6stat.ip6s_cantfrag ||
+                                                           ip6stat.ip6s_ofragments))) {
+                do_ip6_fragsout = CONFIG_BOOLEAN_YES;
+
+                static RRDSET *st = NULL;
+                static RRDDIM *rd_ok = NULL, *rd_failed = NULL, *rd_all = NULL;
+
+                if (unlikely(!st)) {
+                    st = rrdset_create_localhost("ipv6",
+                                                 "fragsout",
+                                                 NULL,
+                                                 "fragments",
+                                                 NULL,
+                                                 "IPv6 Fragments Sent",
+                                                 "packets/s",
+                                                 3010,
+                                                 update_every,
+                                                 RRDSET_TYPE_LINE
+                    );
+
+                    rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
+
+                    rd_ok     = rrddim_add(st, "ok",     NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_failed = rrddim_add(st, "failed", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_all    = rrddim_add(st, "all",    NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                } else
+                    rrdset_next(st);
+
+                rrddim_set_by_pointer(st, rd_ok, ip6stat.ip6s_fragmented);
+                rrddim_set_by_pointer(st, rd_failed, ip6stat.ip6s_cantfrag);
+                rrddim_set_by_pointer(st, rd_all, ip6stat.ip6s_ofragments);
+                rrdset_done(st);
+            }
+
+            // --------------------------------------------------------------------
+
+            if (do_ip6_fragsin == CONFIG_BOOLEAN_YES || (do_ip6_fragsin == CONFIG_BOOLEAN_AUTO &&
+                                                         (ip6stat.ip6s_reassembled || ip6stat.ip6s_fragdropped ||
+                                                          ip6stat.ip6s_fragtimeout || ip6stat.ip6s_fragments))) {
+                do_ip6_fragsin = CONFIG_BOOLEAN_YES;
+
+                static RRDSET *st = NULL;
+                static RRDDIM *rd_ok = NULL, *rd_failed = NULL, *rd_timeout = NULL, *rd_all = NULL;
+
+                if (unlikely(!st)) {
+                    st = rrdset_create_localhost("ipv6",
+                                                 "fragsin",
+                                                 NULL,
+                                                 "fragments",
+                                                 NULL,
+                                                 "IPv6 Fragments Reassembly",
+                                                 "packets/s",
+                                                 3011,
+                                                 update_every,
+                                                 RRDSET_TYPE_LINE
+                    );
+
+                    rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
+
+                    rd_ok      = rrddim_add(st, "ok",      NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_failed  = rrddim_add(st, "failed",  NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_timeout = rrddim_add(st, "timeout", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_all     = rrddim_add(st, "all",     NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                } else
+                    rrdset_next(st);
+
+                rrddim_set_by_pointer(st, rd_ok,      ip6stat.ip6s_reassembled);
+                rrddim_set_by_pointer(st, rd_failed,  ip6stat.ip6s_fragdropped);
+                rrddim_set_by_pointer(st, rd_timeout, ip6stat.ip6s_fragtimeout);
+                rrddim_set_by_pointer(st, rd_all,     ip6stat.ip6s_fragments);
+                rrdset_done(st);
+            }
+
+            // --------------------------------------------------------------------
+
+            if (do_ip6_errors == CONFIG_BOOLEAN_YES || (do_ip6_errors == CONFIG_BOOLEAN_AUTO && (
+                    ip6stat.ip6s_toosmall ||
+                    ip6stat.ip6s_odropped ||
+                    ip6stat.ip6s_badoptions ||
+                    ip6stat.ip6s_badvers ||
+                    ip6stat.ip6s_exthdrtoolong ||
+                    ip6stat.ip6s_sources_none ||
+                    ip6stat.ip6s_tooshort ||
+                    ip6stat.ip6s_cantforward ||
+                    ip6stat.ip6s_noroute))) {
+                do_ip6_errors = CONFIG_BOOLEAN_YES;
+
+                static RRDSET *st = NULL;
+                static RRDDIM *rd_in_discards = NULL, *rd_out_discards = NULL,
+                              *rd_in_hdr_errors = NULL, *rd_in_addr_errors = NULL, *rd_in_truncated_pkts = NULL,
+                              *rd_in_no_routes = NULL, *rd_out_no_routes = NULL;
+
+                if (unlikely(!st)) {
+                    st = rrdset_create_localhost("ipv6",
+                                                 "errors",
+                                                 NULL,
+                                                 "errors",
+                                                 NULL,
+                                                 "IPv6 Errors",
+                                                 "packets/s",
+                                                 3002,
+                                                 update_every,
+                                                 RRDSET_TYPE_LINE
+                    );
+
+                    rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
+
+                    rd_in_discards       = rrddim_add(st, "InDiscards",      NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_out_discards      = rrddim_add(st, "OutDiscards",     NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_in_hdr_errors     = rrddim_add(st, "InHdrErrors",     NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_in_addr_errors    = rrddim_add(st, "InAddrErrors",    NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_in_truncated_pkts = rrddim_add(st, "InTruncatedPkts", NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_in_no_routes      = rrddim_add(st, "InNoRoutes",      NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+                    rd_out_no_routes     = rrddim_add(st, "OutNoRoutes",     NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+                } else
+                    rrdset_next(st);
+
+                rrddim_set_by_pointer(st, rd_in_discards,       ip6stat.ip6s_toosmall);
+                rrddim_set_by_pointer(st, rd_out_discards,      ip6stat.ip6s_odropped);
+                rrddim_set_by_pointer(st, rd_in_hdr_errors,     ip6stat.ip6s_badoptions + ip6stat.ip6s_badvers +
+                                                                ip6stat.ip6s_exthdrtoolong);
+                rrddim_set_by_pointer(st, rd_in_addr_errors,    ip6stat.ip6s_sources_none);
+                rrddim_set_by_pointer(st, rd_in_truncated_pkts, ip6stat.ip6s_tooshort);
+                rrddim_set_by_pointer(st, rd_in_no_routes,      ip6stat.ip6s_cantforward);
+                rrddim_set_by_pointer(st, rd_out_no_routes,     ip6stat.ip6s_noroute);
+                rrdset_done(st);
+            }
+        }
+    } else {
+        error("DISABLED: net.inet6.ip6.stats module");
+        return 1;
+    }
+
+    return 0;
+}
+
 // --------------------------------------------------------------------------------------------------------------------
 // old sources
 
 int do_freebsd_sysctl_old(int update_every, usec_t dt) {
     static int do_disk_io = -1,
         do_bandwidth = -1,
-        do_ip6_packets = -1, do_ip6_fragsout = -1, do_ip6_fragsin = -1, do_ip6_errors = -1,
         do_icmp6 = -1, do_icmp6_redir = -1, do_icmp6_errors = -1, do_icmp6_echos = -1, do_icmp6_router = -1,
         do_icmp6_neighbor = -1, do_icmp6_types = -1, do_space = -1, do_inodes = -1;
 
     if (unlikely(do_disk_io == -1)) {
         do_disk_io              = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1);
         do_bandwidth            = config_get_boolean("plugin:freebsd:sysctl", "bandwidth", 1);
-        do_ip6_packets          = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ipv6 packets", CONFIG_BOOLEAN_AUTO);
-        do_ip6_fragsout         = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ipv6 fragments sent", CONFIG_BOOLEAN_AUTO);
-        do_ip6_fragsin          = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ipv6 fragments assembly", CONFIG_BOOLEAN_AUTO);
-        do_ip6_errors           = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ipv6 errors", CONFIG_BOOLEAN_AUTO);
         do_icmp6                = config_get_boolean_ondemand("plugin:freebsd:sysctl", "icmp", CONFIG_BOOLEAN_AUTO);
         do_icmp6_redir          = config_get_boolean_ondemand("plugin:freebsd:sysctl", "icmp redirects", CONFIG_BOOLEAN_AUTO);
         do_icmp6_errors         = config_get_boolean_ondemand("plugin:freebsd:sysctl", "icmp errors", CONFIG_BOOLEAN_AUTO);
@@ -2198,9 +2400,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
         u_long  ift_obytes;
     } iftot = {0, 0};
 
-    // NEEDED BY: do_ip6...
-    struct ip6stat ip6stat;
-
     // NEEDED BY: do_icmp6...
     struct icmp6stat icmp6stat;
     struct icmp6_total {
@@ -2541,138 +2740,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
 
     // --------------------------------------------------------------------
 
-    if (likely(do_ip6_packets || do_ip6_fragsout || do_ip6_fragsin || do_ip6_errors)) {
-        if (unlikely(GETSYSCTL_BY_NAME("net.inet6.ip6.stats", ip6stat))) {
-            do_ip6_packets = 0;
-            error("DISABLED: ipv6.packets");
-            do_ip6_fragsout = 0;
-            error("DISABLED: ipv6.fragsout");
-            do_ip6_fragsin = 0;
-            error("DISABLED: ipv6.fragsin");
-            do_ip6_errors = 0;
-            error("DISABLED: ipv6.errors");
-        } else {
-            if (do_ip6_packets == CONFIG_BOOLEAN_YES || (do_ip6_packets == CONFIG_BOOLEAN_AUTO &&
-                                                          (ip6stat.ip6s_localout || ip6stat.ip6s_total ||
-                                                           ip6stat.ip6s_forward || ip6stat.ip6s_delivered))) {
-                do_ip6_packets = CONFIG_BOOLEAN_YES;
-                st = rrdset_find_localhost("ipv6.packets");
-                if (unlikely(!st)) {
-                    st = rrdset_create_localhost("ipv6", "packets", NULL, "packets", NULL, "IPv6 Packets", "packets/s", 3000,
-                                       update_every, RRDSET_TYPE_LINE);
-
-                    rrddim_add(st, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "forwarded", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "delivers", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-                } else
-                    rrdset_next(st);
-
-                rrddim_set(st, "sent", ip6stat.ip6s_localout);
-                rrddim_set(st, "received", ip6stat.ip6s_total);
-                rrddim_set(st, "forwarded", ip6stat.ip6s_forward);
-                rrddim_set(st, "delivers", ip6stat.ip6s_delivered);
-                rrdset_done(st);
-            }
-
-            // --------------------------------------------------------------------
-
-            if (do_ip6_fragsout == CONFIG_BOOLEAN_YES || (do_ip6_fragsout == CONFIG_BOOLEAN_AUTO &&
-                                                           (ip6stat.ip6s_fragmented || ip6stat.ip6s_cantfrag ||
-                                                            ip6stat.ip6s_ofragments))) {
-                do_ip6_fragsout = CONFIG_BOOLEAN_YES;
-                st = rrdset_find_localhost("ipv6.fragsout");
-                if (unlikely(!st)) {
-                    st = rrdset_create_localhost("ipv6", "fragsout", NULL, "fragments", NULL, "IPv6 Fragments Sent",
-                                       "packets/s", 3010, update_every, RRDSET_TYPE_LINE);
-                    rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
-
-                    rrddim_add(st, "ok", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "failed", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "all", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                } else
-                    rrdset_next(st);
-
-                rrddim_set(st, "ok", ip6stat.ip6s_fragmented);
-                rrddim_set(st, "failed", ip6stat.ip6s_cantfrag);
-                rrddim_set(st, "all", ip6stat.ip6s_ofragments);
-                rrdset_done(st);
-            }
-
-            // --------------------------------------------------------------------
-
-            if (do_ip6_fragsin == CONFIG_BOOLEAN_YES || (do_ip6_fragsin == CONFIG_BOOLEAN_AUTO &&
-                                                          (ip6stat.ip6s_reassembled || ip6stat.ip6s_fragdropped ||
-                                                           ip6stat.ip6s_fragtimeout || ip6stat.ip6s_fragments))) {
-                do_ip6_fragsin = CONFIG_BOOLEAN_YES;
-                st = rrdset_find_localhost("ipv6.fragsin");
-                if (unlikely(!st)) {
-                    st = rrdset_create_localhost("ipv6", "fragsin", NULL, "fragments", NULL, "IPv6 Fragments Reassembly",
-                                       "packets/s", 3011, update_every, RRDSET_TYPE_LINE);
-                    rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
-
-                    rrddim_add(st, "ok", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "failed", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "timeout", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "all", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                } else
-                    rrdset_next(st);
-
-                rrddim_set(st, "ok", ip6stat.ip6s_reassembled);
-                rrddim_set(st, "failed", ip6stat.ip6s_fragdropped);
-                rrddim_set(st, "timeout", ip6stat.ip6s_fragtimeout);
-                rrddim_set(st, "all", ip6stat.ip6s_fragments);
-                rrdset_done(st);
-            }
-
-            // --------------------------------------------------------------------
-
-            if (do_ip6_errors == CONFIG_BOOLEAN_YES || (do_ip6_errors == CONFIG_BOOLEAN_AUTO && (
-                    ip6stat.ip6s_toosmall ||
-                    ip6stat.ip6s_odropped ||
-                    ip6stat.ip6s_badoptions ||
-                    ip6stat.ip6s_badvers ||
-                    ip6stat.ip6s_exthdrtoolong ||
-                    ip6stat.ip6s_sources_none ||
-                    ip6stat.ip6s_tooshort ||
-                    ip6stat.ip6s_cantforward ||
-                    ip6stat.ip6s_noroute))) {
-                do_ip6_errors = CONFIG_BOOLEAN_YES;
-                st = rrdset_find_localhost("ipv6.errors");
-                if (unlikely(!st)) {
-                    st = rrdset_create_localhost("ipv6", "errors", NULL, "errors", NULL, "IPv6 Errors", "packets/s", 3002,
-                                       update_every, RRDSET_TYPE_LINE);
-                    rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
-
-                    rrddim_add(st, "InDiscards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "OutDiscards", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-
-                    rrddim_add(st, "InHdrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "InAddrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "InTruncatedPkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-                    rrddim_add(st, "InNoRoutes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-
-                    rrddim_add(st, "OutNoRoutes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-                } else
-                    rrdset_next(st);
-
-                rrddim_set(st, "InDiscards", ip6stat.ip6s_toosmall);
-                rrddim_set(st, "OutDiscards", ip6stat.ip6s_odropped);
-
-                rrddim_set(st, "InHdrErrors",
-                           ip6stat.ip6s_badoptions + ip6stat.ip6s_badvers + ip6stat.ip6s_exthdrtoolong);
-                rrddim_set(st, "InAddrErrors", ip6stat.ip6s_sources_none);
-                rrddim_set(st, "InTruncatedPkts", ip6stat.ip6s_tooshort);
-                rrddim_set(st, "InNoRoutes", ip6stat.ip6s_cantforward);
-
-                rrddim_set(st, "OutNoRoutes", ip6stat.ip6s_noroute);
-                rrdset_done(st);
-            }
-        }
-    }
-
-    // --------------------------------------------------------------------
-
     if (likely(do_icmp6 || do_icmp6_redir || do_icmp6_errors || do_icmp6_echos || do_icmp6_router || do_icmp6_neighbor || do_icmp6_types)) {
         if (unlikely(GETSYSCTL_BY_NAME("net.inet6.icmp6.stats", icmp6stat))) {
             do_icmp6 = 0;
index 47eeefa34fedec45bd06b50d3d3d41f2b8979675..1e9466c4d7527456d88f8863274624244ebecf61 100644 (file)
@@ -39,6 +39,7 @@ static struct freebsd_module {
         { .name = "net.inet.udp.stats",   .dim = "udp_stats",  .enabled = 1, .func = do_net_inet_udp_stats },
         { .name = "net.inet.icmp.stats",  .dim = "icmp_stats", .enabled = 1, .func = do_net_inet_icmp_stats },
         { .name = "net.inet.ip.stats",    .dim = "ip_stats",   .enabled = 1, .func = do_net_inet_ip_stats },
+        { .name = "net.inet6.ip6.stats",  .dim = "ip6_stats",  .enabled = 1, .func = do_net_inet6_ip6_stats },
 
         // CPU metrics
         { .name = "kern.cp_times", .dim = "cp_times", .enabled = 1, .func = do_kern_cp_times },
index 30913a9778b99d5282ae65fb65522780e3fc4275..1398151a8b475fde14d1d7a68cd93dc6bc92e18c 100644 (file)
@@ -30,6 +30,7 @@ extern int do_net_inet_tcp_stats(int update_every, usec_t dt);
 extern int do_net_inet_udp_stats(int update_every, usec_t dt);
 extern int do_net_inet_icmp_stats(int update_every, usec_t dt);
 extern int do_net_inet_ip_stats(int update_every, usec_t dt);
+extern int do_net_inet6_ip6_stats(int update_every, usec_t dt);
 
 extern int do_freebsd_sysctl_old(int update_every, usec_t dt);