]> granicus.if.org Git - sysstat/commitdiff
sadf: PCP: Add support for A_NET_IP6 and A_NET_EIP6 activities
authorSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 31 Mar 2019 16:43:45 +0000 (18:43 +0200)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 31 Mar 2019 16:43:45 +0000 (18:43 +0200)
Add metrics displayed by "sar -n IP6" and "sar -n EIP6" (IPv6 network
statistics) to PCP archive.

Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
activity.c
pcp_def_metrics.c
pcp_def_metrics.h
pcp_stats.c
pcp_stats.h
sadf_misc.c

index 4c95a069442ff9ad3e4184cd81223fda3dbc0805..6eff06fa88c291acab181ebb4bafbc2279bb2574 100644 (file)
@@ -1201,6 +1201,7 @@ struct activity net_ip6_act = {
        .f_json_print   = json_print_net_ip6_stats,
        .f_svg_print    = svg_print_net_ip6_stats,
        .f_raw_print    = raw_print_net_ip6_stats,
+       .f_pcp_print    = pcp_print_net_ip6_stats,
        .f_count_new    = NULL,
        .item_list      = NULL,
        .desc           = "IPv6 traffic statistics",
@@ -1247,6 +1248,7 @@ struct activity net_eip6_act = {
        .f_json_print   = json_print_net_eip6_stats,
        .f_svg_print    = svg_print_net_eip6_stats,
        .f_raw_print    = raw_print_net_eip6_stats,
+       .f_pcp_print    = pcp_print_net_eip6_stats,
        .f_count_new    = NULL,
        .item_list      = NULL,
        .desc           = "IPv6 traffic errors statistics",
index 59b964229f306d54d5b40861927e7b0512b5de31..e31883562cbc8785fd401416cde991da0f0732f8 100644 (file)
@@ -976,3 +976,107 @@ void pcp_def_net_udp_metrics(void)
                     pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
 #endif /* HAVE_PCP */
 }
+
+/*
+ ***************************************************************************
+ * Define PCP metrics for IPv6 network statistics.
+ ***************************************************************************
+ */
+void pcp_def_net_ip6_metrics(void)
+{
+#ifdef HAVE_PCP
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInReceives",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsOutForwDatagrams",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInDelivers",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsOutRequests",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsReasmReqds",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsReasmOKs",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInMcastPkts",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsOutMcastPkts",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsOutFragOKs",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsOutFragCreates",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+#endif /* HAVE_PCP */
+}
+
+/*
+ ***************************************************************************
+ * Define PCP metrics for IPv6 network errors statistics.
+ ***************************************************************************
+ */
+void pcp_def_net_eip6_metrics(void)
+{
+#ifdef HAVE_PCP
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInHdrErrors",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInAddrErrors",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInUnknownProtos",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInTooBigErrors",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInDiscards",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsOutDiscards",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInNoRoutes",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsOutNoRoutes",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsReasmFails",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsOutFragFails",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+       pmiAddMetric("network.snmp.ip6.ipv6IfStatsInTruncatedPkts",
+                    PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+                    pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+#endif /* HAVE_PCP */
+}
index 84f588211a63221ce6608557b59f7dfafc858a85..1f25cfcf7a70b951a309c15eca4bf7377b61bcc8 100644 (file)
@@ -32,6 +32,8 @@ void pcp_def_net_eicmp_metrics(void);
 void pcp_def_net_tcp_metrics(void);
 void pcp_def_net_etcp_metrics(void);
 void pcp_def_net_udp_metrics(void);
+void pcp_def_net_ip6_metrics(void);
+void pcp_def_net_eip6_metrics(void);
 
 /* Define domains number */
 #define PM_INDOM_CPU           0
index f88294667439808b53ceab5dc64de04ac6471399..da7470193ed4ecb99fac5ef82e1b4d9867966e35 100644 (file)
@@ -1279,3 +1279,131 @@ __print_funct_t pcp_print_net_udp_stats(struct activity *a, int curr, unsigned l
        pmiPutValue("network.snmp.udp.udpInErrors", NULL, buf);
 #endif /* HAVE_PCP */
 }
+
+/*
+ ***************************************************************************
+ * Display IPv6 network statistics in PCP format.
+ *
+ * IN:
+ * @a          Activity structure with statistics.
+ * @curr       Index in array for current sample statistics.
+ * @itv                Interval of time in 1/100th of a second.
+ * @record_hdr Record header for current sample.
+ ***************************************************************************
+ */
+__print_funct_t pcp_print_net_ip6_stats(struct activity *a, int curr, unsigned long long itv,
+                                       struct record_header *record_hdr)
+{
+#ifdef HAVE_PCP
+       char buf[64];
+       struct stats_net_ip6
+               *snic = (struct stats_net_ip6 *) a->buf[curr],
+               *snip = (struct stats_net_ip6 *) a->buf[!curr];
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InReceives6, snic->InReceives6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInReceives", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutForwDatagrams6, snic->OutForwDatagrams6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsOutForwDatagrams", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InDelivers6, snic->InDelivers6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInDelivers", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutRequests6, snic->OutRequests6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsOutRequests", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->ReasmReqds6, snic->ReasmReqds6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsReasmReqds", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->ReasmOKs6, snic->ReasmOKs6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsReasmOKs", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InMcastPkts6, snic->InMcastPkts6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInMcastPkts", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutMcastPkts6, snic->OutMcastPkts6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsOutMcastPkts", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->FragOKs6, snic->FragOKs6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsOutFragOKs", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->FragCreates6, snic->FragCreates6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsOutFragCreates", NULL, buf);
+#endif /* HAVE_PCP */
+}
+
+/*
+ ***************************************************************************
+ * Display IPv6 network errors statistics in PCP format.
+ *
+ * IN:
+ * @a          Activity structure with statistics.
+ * @curr       Index in array for current sample statistics.
+ * @itv                Interval of time in 1/100th of a second.
+ * @record_hdr Record header for current sample.
+ ***************************************************************************
+ */
+__print_funct_t pcp_print_net_eip6_stats(struct activity *a, int curr, unsigned long long itv,
+                                        struct record_header *record_hdr)
+{
+#ifdef HAVE_PCP
+       char buf[64];
+       struct stats_net_eip6
+               *sneic = (struct stats_net_eip6 *) a->buf[curr],
+               *sneip = (struct stats_net_eip6 *) a->buf[!curr];
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InHdrErrors6, sneic->InHdrErrors6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInHdrErrors", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InAddrErrors6, sneic->InAddrErrors6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInAddrErrors", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InUnknownProtos6, sneic->InUnknownProtos6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInUnknownProtos", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InTooBigErrors6, sneic->InTooBigErrors6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInTooBigErrors", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InDiscards6, sneic->InDiscards6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInDiscards", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->OutDiscards6, sneic->OutDiscards6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsOutDiscards", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InNoRoutes6, sneic->InNoRoutes6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInNoRoutes", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->OutNoRoutes6, sneic->OutNoRoutes6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsOutNoRoutes", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->ReasmFails6, sneic->ReasmFails6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsReasmFails", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->FragFails6, sneic->FragFails6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsOutFragFails", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InTruncatedPkts6, sneic->InTruncatedPkts6, itv));
+       pmiPutValue("network.snmp.ip6.ipv6IfStatsInTruncatedPkts", NULL, buf);
+#endif /* HAVE_PCP */
+}
index 6e686f1330085ffc143a248aa804301ecae2ef0a..0f372d78da7a1a4b35642be4cf2afacbe46997f3 100644 (file)
@@ -55,5 +55,9 @@ __print_funct_t pcp_print_net_etcp_stats
        (struct activity *, int, unsigned long long, struct record_header *);
 __print_funct_t pcp_print_net_udp_stats
        (struct activity *, int, unsigned long long, struct record_header *);
+__print_funct_t pcp_print_net_ip6_stats
+       (struct activity *, int, unsigned long long, struct record_header *);
+__print_funct_t pcp_print_net_eip6_stats
+       (struct activity *, int, unsigned long long, struct record_header *);
 
 #endif /* _PCP_STATS_H */
index dad46490193f5d5847bf75eaff7c232c4b3fecf4..e9cd8e5bd42ee91c177c6beea466c8d656eec3e2 100644 (file)
@@ -580,6 +580,14 @@ __printf_funct_t print_pcp_statistics(int *tab, int action, struct activity *act
                                case A_NET_UDP:
                                        pcp_def_net_udp_metrics();
                                        break;
+
+                               case A_NET_IP6:
+                                       pcp_def_net_ip6_metrics();
+                                       break;
+
+                               case A_NET_EIP6:
+                                       pcp_def_net_eip6_metrics();
+                                       break;
                        }
                }
        }