]> granicus.if.org Git - sysstat/commitdiff
sadf: PCP: Add support for A_NET_ICMP6 and A_NET_EICMP6 activities
authorSebastien GODARD <sysstat@users.noreply.github.com>
Tue, 2 Apr 2019 16:40:30 +0000 (18:40 +0200)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Tue, 2 Apr 2019 16:40:30 +0000 (18:40 +0200)
Add metrics displayed by "sar -n ICMP6" and "sar -n EICMP6" (ICMPv6
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 9ebc3fbf27f207b131006bb4f2affdb2d69a5362..4671f4704d8fc24de096934305929986f800472b 100644 (file)
@@ -1296,6 +1296,7 @@ struct activity net_icmp6_act = {
        .f_json_print   = json_print_net_icmp6_stats,
        .f_svg_print    = svg_print_net_icmp6_stats,
        .f_raw_print    = raw_print_net_icmp6_stats,
+       .f_pcp_print    = pcp_print_net_icmp6_stats,
        .f_count_new    = NULL,
        .item_list      = NULL,
        .desc           = "ICMPv6 traffic statistics",
@@ -1342,6 +1343,7 @@ struct activity net_eicmp6_act = {
        .f_json_print   = json_print_net_eicmp6_stats,
        .f_svg_print    = svg_print_net_eicmp6_stats,
        .f_raw_print    = raw_print_net_eicmp6_stats,
+       .f_pcp_print    = pcp_print_net_eicmp6_stats,
        .f_count_new    = NULL,
        .item_list      = NULL,
        .desc           = "ICMPv6 traffic errors statistics",
index eab482b9ac0214529589200935424fb4a8370a9f..87b2bc3cfd97eb90ebaab18f272cd10d2d94ca19 100644 (file)
@@ -1081,6 +1081,138 @@ void pcp_def_net_eip6_metrics(void)
 #endif /* HAVE_PCP */
 }
 
+/*
+ ***************************************************************************
+ * Define PCP metrics for ICMPv6 network statistics.
+ ***************************************************************************
+ */
+void pcp_def_net_icmp6_metrics(void)
+{
+#ifdef HAVE_PCP
+       pmiAddMetric("network.snmp.icmp6.ipv6IfIcmpInMsgs",
+                    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.icmp6.ipv6IfIcmpOutMsgs",
+                    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.icmp6.ipv6IfIcmpInEchos",
+                    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.icmp6.ipv6IfIcmpInEchoReplies",
+                    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.icmp6.ipv6IfIcmpOutEchoReplies",
+                    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.icmp6.ipv6IfIcmpInGroupMembQueries",
+                    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.icmp6.ipv6IfIcmpInGroupMembResponses",
+                    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.icmp6.ipv6IfIcmpOutGroupMembResponses",
+                    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.icmp6.ipv6IfIcmpInGroupMembReductions",
+                    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.icmp6.ipv6IfIcmpOutGroupMembReductions",
+                    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.icmp6.ipv6IfIcmpInRouterSolicits",
+                    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.icmp6.ipv6IfIcmpOutRouterSolicits",
+                    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.icmp6.ipv6IfIcmpInRouterAdvertisements",
+                    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.icmp6.ipv6IfIcmpInNeighborSolicits",
+                    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.icmp6.ipv6IfIcmpOutNeighborSolicits",
+                    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.icmp6.ipv6IfIcmpInNeighborAdvertisements",
+                    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.icmp6.ipv6IfIcmpOutNeighborAdvertisements",
+                    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 ICMPv6 network errors statistics.
+ ***************************************************************************
+ */
+void pcp_def_net_eicmp6_metrics(void)
+{
+#ifdef HAVE_PCP
+       pmiAddMetric("network.snmp.icmp6.ipv6IfIcmpInErrors",
+                    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.icmp6.ipv6IfIcmpInDestUnreachs",
+                    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.icmp6.ipv6IfIcmpOutDestUnreachs",
+                    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.icmp6.ipv6IfIcmpInTimeExcds",
+                    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.icmp6.ipv6IfIcmpOutTimeExcds",
+                    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.icmp6.ipv6IfIcmpInParmProblems",
+                    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.icmp6.ipv6IfIcmpOutParmProblems",
+                    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.icmp6.ipv6IfIcmpInRedirects",
+                    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.icmp6.ipv6IfIcmpOutRedirects",
+                    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.icmp6.ipv6IfIcmpInPktTooBigs",
+                    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.icmp6.ipv6IfIcmpOutPktTooBigs",
+                    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 UDPv6 network statistics.
index 705f2922c9fc10af37e264440b355a87fc8b284d..bd65fc8924d337c4950da885e520f5d5b0c8d2b3 100644 (file)
@@ -34,6 +34,8 @@ 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);
+void pcp_def_net_icmp6_metrics(void);
+void pcp_def_net_eicmp6_metrics(void);
 void pcp_def_net_udp6_metrics(void);
 
 /* Define domains number */
index 81f58f4708c3b988a1f4116d48c8e4f2eb4ce5a5..e39d93942fd6d1c68fc7cb88c7aff0e8dc1a750f 100644 (file)
@@ -1408,6 +1408,162 @@ __print_funct_t pcp_print_net_eip6_stats(struct activity *a, int curr, unsigned
 #endif /* HAVE_PCP */
 }
 
+/*
+ ***************************************************************************
+ * Display ICMPv6 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_icmp6_stats(struct activity *a, int curr, unsigned long long itv,
+                                         struct record_header *record_hdr)
+{
+#ifdef HAVE_PCP
+       char buf[64];
+       struct stats_net_icmp6
+               *snic = (struct stats_net_icmp6 *) a->buf[curr],
+               *snip = (struct stats_net_icmp6 *) a->buf[!curr];
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InMsgs6, snic->InMsgs6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInMsgs", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutMsgs6, snic->OutMsgs6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutMsgs", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InEchos6, snic->InEchos6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInEchos", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InEchoReplies6, snic->InEchoReplies6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInEchoReplies", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutEchoReplies6, snic->OutEchoReplies6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutEchoReplies", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InGroupMembQueries6, snic->InGroupMembQueries6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInGroupMembQueries", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InGroupMembResponses6, snic->InGroupMembResponses6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInGroupMembResponses", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutGroupMembResponses6, snic->OutGroupMembResponses6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutGroupMembResponses", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InGroupMembReductions6, snic->InGroupMembReductions6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInGroupMembReductions", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutGroupMembReductions6, snic->OutGroupMembReductions6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutGroupMembReductions", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InRouterSolicits6, snic->InRouterSolicits6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInRouterSolicits", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutRouterSolicits6, snic->OutRouterSolicits6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutRouterSolicits", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InRouterAdvertisements6, snic->InRouterAdvertisements6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInRouterAdvertisements", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InNeighborSolicits6, snic->InNeighborSolicits6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInNeighborSolicits", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutNeighborSolicits6, snic->OutNeighborSolicits6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutNeighborSolicits", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->InNeighborAdvertisements6, snic->InNeighborAdvertisements6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInNeighborAdvertisements", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snip->OutNeighborAdvertisements6, snic->OutNeighborAdvertisements6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutNeighborAdvertisements", NULL, buf);
+#endif /* HAVE_PCP */
+}
+
+/*
+ ***************************************************************************
+ * Display ICMPv6 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_eicmp6_stats(struct activity *a, int curr, unsigned long long itv,
+                                          struct record_header *record_hdr)
+{
+#ifdef HAVE_PCP
+       char buf[64];
+       struct stats_net_eicmp6
+               *sneic = (struct stats_net_eicmp6 *) a->buf[curr],
+               *sneip = (struct stats_net_eicmp6 *) a->buf[!curr];
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InErrors6, sneic->InErrors6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInErrors", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InDestUnreachs6, sneic->InDestUnreachs6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInDestUnreachs", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->OutDestUnreachs6, sneic->OutDestUnreachs6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutDestUnreachs", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InTimeExcds6, sneic->InTimeExcds6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInTimeExcds", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->OutTimeExcds6, sneic->OutTimeExcds6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutTimeExcds", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InParmProblems6, sneic->InParmProblems6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInParmProblems", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->OutParmProblems6, sneic->OutParmProblems6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutParmProblems", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InRedirects6, sneic->InRedirects6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInRedirects", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->OutRedirects6, sneic->OutRedirects6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutRedirects", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->InPktTooBigs6, sneic->InPktTooBigs6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpInPktTooBigs", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(sneip->OutPktTooBigs6, sneic->OutPktTooBigs6, itv));
+       pmiPutValue("network.snmp.icmp6.ipv6IfIcmpOutPktTooBigs", NULL, buf);
+#endif /* HAVE_PCP */
+}
+
 /*
  ***************************************************************************
  * Display UDPv6 network statistics in PCP format.
index c6526aab5a7ca3a3f79361d1353acad0548d141d..2de47ca335bfd59a4c31f7cbabc8f2db63a55772 100644 (file)
@@ -59,6 +59,10 @@ __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 *);
+__print_funct_t pcp_print_net_icmp6_stats
+       (struct activity *, int, unsigned long long, struct record_header *);
+__print_funct_t pcp_print_net_eicmp6_stats
+       (struct activity *, int, unsigned long long, struct record_header *);
 __print_funct_t pcp_print_net_udp6_stats
        (struct activity *, int, unsigned long long, struct record_header *);
 
index 4d5bf5eef4d611793867f319acc7a5b649f8ac12..72151840f0b520847014933456a00be764263982 100644 (file)
@@ -589,6 +589,14 @@ __printf_funct_t print_pcp_statistics(int *tab, int action, struct activity *act
                                        pcp_def_net_eip6_metrics();
                                        break;
 
+                               case A_NET_ICMP6:
+                                       pcp_def_net_icmp6_metrics();
+                                       break;
+
+                               case A_NET_EICMP6:
+                                       pcp_def_net_eicmp6_metrics();
+                                       break;
+
                                case A_NET_UDP6:
                                        pcp_def_net_udp6_metrics();
                                        break;