@cryptotaxi247 / netdata-1 / commits / 478dad341

Add IPv4 packets, errors and fragments charts to FreeBSD plugin

Vladimir Kobal committed Jan 3, 2017 at 18:40 UTC 478dad3414b89c6517c4022949b24478d7d66dfd
1 file changed +120 -2
src/freebsd_sysctl.c
+120 -2
@@ -20,8 +20,9 @@
20 #include <ifaddrs.h>
21 // NEEDED BY do_tcp...
22 #include <netinet/tcp_var.h>
23 -// NEEDED BY do_udp...
23 +// NEEDED BY do_udp..., do_ip...
24 #include <netinet/ip_var.h>
25 +// NEEDED BY do_udp...
26 #include <netinet/udp.h>
27 #include <netinet/udp_var.h>
28 // NEEDED BY do_icmp...
@@ -47,7 +48,8 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
48 do_dev_intr = -1, do_soft_intr = -1, do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
49 do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
50 do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
50 - do_udp_packets = -1, do_udp_errors = -1, do_icmp_packets = -1, do_icmpmsg = -1;
51 + do_udp_packets = -1, do_udp_errors = -1, do_icmp_packets = -1, do_icmpmsg = -1,
52 + do_ip_packets = -1, do_ip_fragsout = -1, do_ip_fragsin = -1, do_ip_errors = -1;
53
54 if (unlikely(do_cpu == -1)) {
55 do_cpu = config_get_boolean("plugin:freebsd:sysctl", "cpu utilization", 1);
@@ -82,6 +84,10 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
84 do_tcpext_connaborts = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP connection aborts", CONFIG_ONDEMAND_ONDEMAND);
85 do_udp_packets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 UDP packets", 1);
86 do_udp_errors = config_get_boolean("plugin:freebsd:sysctl", "ipv4 UDP errors", 1);
87 + do_ip_packets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 packets", 1);
88 + do_ip_fragsout = config_get_boolean("plugin:freebsd:sysctl", "ipv4 fragments sent", 1);
89 + do_ip_fragsin = config_get_boolean("plugin:freebsd:sysctl", "ipv4 fragments assembly", 1);
90 + do_ip_errors = config_get_boolean("plugin:freebsd:sysctl", "ipv4 errors", 1);
91 }
92
93 RRDSET *st;
@@ -216,6 +222,9 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
222 u_long msgs_out;
223 } icmp_total = {0, 0};
224
225 + // NEEDED BY: do_ip...
226 + struct ipstat ipstat;
227 +
228 // --------------------------------------------------------------------
229
230 if (last_loadavg_usec <= dt) {
@@ -1585,5 +1594,114 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
1594 }
1595 }
1596
1597 + // --------------------------------------------------------------------
1598 +
1599 + // see also http://net-snmp.sourceforge.net/docs/mibs/ip.html
1600 + if (likely(do_ip_packets || do_ip_fragsout || do_ip_fragsin || do_ip_errors)) {
1601 + if (unlikely(GETSYSCTL("net.inet.ip.stats", ipstat))) {
1602 + do_ip_packets = 0;
1603 + error("DISABLED: ipv4.packets");
1604 + do_ip_fragsout = 0;
1605 + error("DISABLED: ipv4.fragsout");
1606 + do_ip_fragsin = 0;
1607 + error("DISABLED: ipv4.fragsin");
1608 + do_ip_errors = 0;
1609 + error("DISABLED: ipv4.errors");
1610 + } else {
1611 + if (likely(do_ip_packets)) {
1612 + st = rrdset_find("ipv4.packets");
1613 + if (unlikely(!st)) {
1614 + st = rrdset_create("ipv4", "packets", NULL, "packets", NULL, "IPv4 Packets", "packets/s",
1615 + 3000, update_every, RRDSET_TYPE_LINE);
1616 +
1617 + rrddim_add(st, "InReceives", "received", 1, 1, RRDDIM_INCREMENTAL);
1618 + rrddim_add(st, "OutRequests", "sent", -1, 1, RRDDIM_INCREMENTAL);
1619 + rrddim_add(st, "ForwDatagrams", "forwarded", 1, 1, RRDDIM_INCREMENTAL);
1620 + rrddim_add(st, "InDelivers", "delivered", 1, 1, RRDDIM_INCREMENTAL);
1621 + } else
1622 + rrdset_next(st);
1623 +
1624 + rrddim_set(st, "OutRequests", ipstat.ips_localout);
1625 + rrddim_set(st, "InReceives", ipstat.ips_total);
1626 + rrddim_set(st, "ForwDatagrams", ipstat.ips_forward);
1627 + rrddim_set(st, "InDelivers", ipstat.ips_delivered);
1628 + rrdset_done(st);
1629 + }
1630 +
1631 + // --------------------------------------------------------------------
1632 +
1633 + if (likely(do_ip_fragsout)) {
1634 + st = rrdset_find("ipv4.fragsout");
1635 + if (unlikely(!st)) {
1636 + st = rrdset_create("ipv4", "fragsout", NULL, "fragments", NULL, "IPv4 Fragments Sent",
1637 + "packets/s", 3010, update_every, RRDSET_TYPE_LINE);
1638 + st->isdetail = 1;
1639 +
1640 + rrddim_add(st, "FragOKs", "ok", 1, 1, RRDDIM_INCREMENTAL);
1641 + rrddim_add(st, "FragFails", "failed", -1, 1, RRDDIM_INCREMENTAL);
1642 + rrddim_add(st, "FragCreates", "created", 1, 1, RRDDIM_INCREMENTAL);
1643 + } else
1644 + rrdset_next(st);
1645 +
1646 + rrddim_set(st, "FragOKs", ipstat.ips_fragmented);
1647 + rrddim_set(st, "FragFails", ipstat.ips_cantfrag);
1648 + rrddim_set(st, "FragCreates", ipstat.ips_ofragments);
1649 + rrdset_done(st);
1650 + }
1651 +
1652 + // --------------------------------------------------------------------
1653 +
1654 + if (likely(do_ip_fragsin)) {
1655 + st = rrdset_find("ipv4.fragsin");
1656 + if (unlikely(!st)) {
1657 + st = rrdset_create("ipv4", "fragsin", NULL, "fragments", NULL,
1658 + "IPv4 Fragments Reassembly",
1659 + "packets/s", 3011, update_every, RRDSET_TYPE_LINE);
1660 + st->isdetail = 1;
1661 +
1662 + rrddim_add(st, "ReasmOKs", "ok", 1, 1, RRDDIM_INCREMENTAL);
1663 + rrddim_add(st, "ReasmFails", "failed", -1, 1, RRDDIM_INCREMENTAL);
1664 + rrddim_add(st, "ReasmReqds", "all", 1, 1, RRDDIM_INCREMENTAL);
1665 + } else
1666 + rrdset_next(st);
1667 +
1668 + rrddim_set(st, "ReasmOKs", ipstat.ips_fragments);
1669 + rrddim_set(st, "ReasmFails", ipstat.ips_fragdropped);
1670 + rrddim_set(st, "ReasmReqds", ipstat.ips_reassembled);
1671 + rrdset_done(st);
1672 + }
1673 +
1674 + // --------------------------------------------------------------------
1675 +
1676 + if (likely(do_ip_errors)) {
1677 + st = rrdset_find("ipv4.errors");
1678 + if (unlikely(!st)) {
1679 + st = rrdset_create("ipv4", "errors", NULL, "errors", NULL, "IPv4 Errors", "packets/s",
1680 + 3002,
1681 + update_every, RRDSET_TYPE_LINE);
1682 + st->isdetail = 1;
1683 +
1684 + rrddim_add(st, "InDiscards", NULL, 1, 1, RRDDIM_INCREMENTAL);
1685 + rrddim_add(st, "OutDiscards", NULL, -1, 1, RRDDIM_INCREMENTAL);
1686 +
1687 + rrddim_add(st, "InHdrErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
1688 + rrddim_add(st, "OutNoRoutes", NULL, -1, 1, RRDDIM_INCREMENTAL);
1689 +
1690 + rrddim_add(st, "InAddrErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
1691 + rrddim_add(st, "InUnknownProtos", NULL, 1, 1, RRDDIM_INCREMENTAL);
1692 + } else
1693 + rrdset_next(st);
1694 +
1695 + rrddim_set(st, "InDiscards", ipstat.ips_badsum + ipstat.ips_tooshort + ipstat.ips_toosmall + ipstat.ips_toolong);
1696 + rrddim_set(st, "OutDiscards", ipstat.ips_odropped);
1697 + rrddim_set(st, "InHdrErrors", ipstat.ips_badhlen + ipstat.ips_badlen + ipstat.ips_badoptions + ipstat.ips_badvers);
1698 + rrddim_set(st, "InAddrErrors", ipstat.ips_badaddr);
1699 + rrddim_set(st, "InUnknownProtos", ipstat.ips_noproto);
1700 + rrddim_set(st, "OutNoRoutes", ipstat.ips_noroute);
1701 + rrdset_done(st);
1702 + }
1703 + }
1704 + }
1705 +
1706 return 0;
1707 }