]> granicus.if.org Git - sysstat/blob - activity.c
sadf: PCP: Add support for A_PCSW activity
[sysstat] / activity.c
1 /*
2  * activity.c: Define system activities available for sar/sadc.
3  * (C) 1999-2019 by Sebastien GODARD (sysstat <at> orange.fr)
4  *
5  ***************************************************************************
6  * This program is free software; you can redistribute it and/or modify it *
7  * under the terms of the GNU General Public License as published  by  the *
8  * Free Software Foundation; either version 2 of the License, or (at  your *
9  * option) any later version.                                              *
10  *                                                                         *
11  * This program is distributed in the hope that it  will  be  useful,  but *
12  * WITHOUT ANY WARRANTY; without the implied warranty  of  MERCHANTABILITY *
13  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
14  * for more details.                                                       *
15  *                                                                         *
16  * You should have received a copy of the GNU General Public License along *
17  * with this program; if not, write to the Free Software Foundation, Inc., *
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA              *
19  ***************************************************************************
20  */
21
22 #include "sa.h"
23
24 #ifdef SOURCE_SAR
25 #include "pr_stats.h"
26 #endif
27
28 #ifdef SOURCE_SADF
29 #include "rndr_stats.h"
30 #include "xml_stats.h"
31 #include "json_stats.h"
32 #include "svg_stats.h"
33 #include "raw_stats.h"
34 #include "pcp_stats.h"
35 #endif
36
37 /*
38  ***************************************************************************
39  * Definitions of system activities.
40  * See sa.h file for activity structure definition.
41  * Activity structure doesn't matter for daily data files.
42  ***************************************************************************
43  */
44
45 /*
46  * Bitmaps needed by activities.
47  * Remember to allocate them before use!
48  */
49
50 /* CPU bitmap */
51 struct act_bitmap cpu_bitmap = {
52         .b_array        = NULL,
53         .b_size         = NR_CPUS
54 };
55
56 /* Interrupts bitmap */
57 struct act_bitmap irq_bitmap = {
58         .b_array        = NULL,
59         .b_size         = NR_IRQS
60 };
61
62
63 /*
64  * CPU statistics.
65  * This is the only activity which *must* be collected by sadc
66  * so that uptime can be filled.
67  */
68 struct activity cpu_act = {
69         .id             = A_CPU,
70         .options        = AO_COLLECTED + AO_COUNTED + AO_PERSISTENT +
71                           AO_MULTIPLE_OUTPUTS + AO_GRAPH_PER_ITEM,
72         .magic          = ACTIVITY_MAGIC_BASE + 1,
73         .group          = G_DEFAULT,
74 #ifdef SOURCE_SADC
75         .f_count_index  = 0,    /* wrap_get_cpu_nr() */
76         .f_count2       = NULL,
77         .f_read         = wrap_read_stat_cpu,
78 #endif
79 #ifdef SOURCE_SAR
80         .f_print        = print_cpu_stats,
81         .f_print_avg    = print_cpu_stats,
82 #endif
83 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
84         .hdr_line       = "CPU;%user;%nice;%system;%iowait;%steal;%idle|"
85                           "CPU;%usr;%nice;%sys;%iowait;%steal;%irq;%soft;%guest;%gnice;%idle",
86 #endif
87         .gtypes_nr      = {STATS_CPU_ULL, STATS_CPU_UL, STATS_CPU_U},
88         .ftypes_nr      = {0, 0, 0},
89 #ifdef SOURCE_SADF
90         .f_render       = render_cpu_stats,
91         .f_xml_print    = xml_print_cpu_stats,
92         .f_json_print   = json_print_cpu_stats,
93         .f_svg_print    = svg_print_cpu_stats,
94         .f_raw_print    = raw_print_cpu_stats,
95         .f_count_new    = NULL,
96         .item_list      = NULL,
97         .desc           = "CPU utilization",
98 #endif
99         .name           = "A_CPU",
100         .item_list_sz   = 0,
101         .g_nr           = 1,
102         .nr_ini         = -1,
103         .nr2            = 1,
104         .nr_max         = NR_CPUS + 1,
105         .nr             = {-1, -1, -1},
106         .nr_allocated   = 0,
107         .fsize          = STATS_CPU_SIZE,
108         .msize          = STATS_CPU_SIZE,
109         .opt_flags      = AO_F_CPU_DEF,
110         .buf            = {NULL, NULL, NULL},
111         .bitmap         = &cpu_bitmap
112 };
113
114 /* Process (task) creation and context switch activity */
115 struct activity pcsw_act = {
116         .id             = A_PCSW,
117         .options        = AO_COLLECTED,
118         .magic          = ACTIVITY_MAGIC_BASE + 1,
119         .group          = G_DEFAULT,
120 #ifdef SOURCE_SADC
121         .f_count_index  = -1,
122         .f_count2       = NULL,
123         .f_read         = wrap_read_stat_pcsw,
124 #endif
125 #ifdef SOURCE_SAR
126         .f_print        = print_pcsw_stats,
127         .f_print_avg    = print_pcsw_stats,
128 #endif
129 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
130         .hdr_line       = "proc/s;cswch/s",
131 #endif
132         .gtypes_nr      = {STATS_PCSW_ULL, STATS_PCSW_UL, STATS_PCSW_U},
133         .ftypes_nr      = {0, 0, 0},
134 #ifdef SOURCE_SADF
135         .f_render       = render_pcsw_stats,
136         .f_xml_print    = xml_print_pcsw_stats,
137         .f_json_print   = json_print_pcsw_stats,
138         .f_svg_print    = svg_print_pcsw_stats,
139         .f_raw_print    = raw_print_pcsw_stats,
140         .f_pcp_print    = pcp_print_pcsw_stats,
141         .f_count_new    = NULL,
142         .item_list      = NULL,
143         .desc           = "Task creation and switching activity",
144 #endif
145         .name           = "A_PCSW",
146         .item_list_sz   = 0,
147         .g_nr           = 2,
148         .nr_ini         = 1,
149         .nr2            = 1,
150         .nr_max         = 1,
151         .nr             = {1, 1, 1},
152         .nr_allocated   = 0,
153         .fsize          = STATS_PCSW_SIZE,
154         .msize          = STATS_PCSW_SIZE,
155         .opt_flags      = 0,
156         .buf            = {NULL, NULL, NULL},
157         .bitmap         = NULL
158 };
159
160 /* Interrupts statistics */
161 struct activity irq_act = {
162         .id             = A_IRQ,
163         .options        = AO_COUNTED,
164         .magic          = ACTIVITY_MAGIC_BASE + 1,
165         .group          = G_INT,
166 #ifdef SOURCE_SADC
167         .f_count_index  = 1,    /* wrap_get_irq_nr() */
168         .f_count2       = NULL,
169         .f_read         = wrap_read_stat_irq,
170 #endif
171 #ifdef SOURCE_SAR
172         .f_print        = print_irq_stats,
173         .f_print_avg    = print_irq_stats,
174 #endif
175 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
176         .hdr_line       = "INTR;intr/s",
177 #endif
178         .gtypes_nr      = {STATS_IRQ_ULL, STATS_IRQ_UL, STATS_IRQ_U},
179         .ftypes_nr      = {0, 0, 0},
180 #ifdef SOURCE_SADF
181         .f_render       = render_irq_stats,
182         .f_xml_print    = xml_print_irq_stats,
183         .f_json_print   = json_print_irq_stats,
184         .f_svg_print    = NULL,
185         .f_raw_print    = raw_print_irq_stats,
186         .f_count_new    = NULL,
187         .item_list      = NULL,
188         .desc           = "Interrupts statistics",
189 #endif
190         .name           = "A_IRQ",
191         .item_list_sz   = 0,
192         .g_nr           = 0,
193         .nr_ini         = -1,
194         .nr2            = 1,
195         .nr_max         = NR_IRQS + 1,
196         .nr             = {-1, -1, -1},
197         .nr_allocated   = 0,
198         .fsize          = STATS_IRQ_SIZE,
199         .msize          = STATS_IRQ_SIZE,
200         .opt_flags      = 0,
201         .buf            = {NULL, NULL, NULL},
202         .bitmap         = &irq_bitmap
203 };
204
205 /* Swapping activity */
206 struct activity swap_act = {
207         .id             = A_SWAP,
208         .options        = AO_COLLECTED,
209         .magic          = ACTIVITY_MAGIC_BASE,
210         .group          = G_DEFAULT,
211 #ifdef SOURCE_SADC
212         .f_count_index  = -1,
213         .f_count2       = NULL,
214         .f_read         = wrap_read_swap,
215 #endif
216 #ifdef SOURCE_SAR
217         .f_print        = print_swap_stats,
218         .f_print_avg    = print_swap_stats,
219 #endif
220 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
221         .hdr_line       = "pswpin/s;pswpout/s",
222 #endif
223         .gtypes_nr      = {STATS_SWAP_ULL, STATS_SWAP_UL, STATS_SWAP_U},
224         .ftypes_nr      = {0, 0, 0},
225 #ifdef SOURCE_SADF
226         .f_render       = render_swap_stats,
227         .f_xml_print    = xml_print_swap_stats,
228         .f_json_print   = json_print_swap_stats,
229         .f_svg_print    = svg_print_swap_stats,
230         .f_raw_print    = raw_print_swap_stats,
231         .f_count_new    = NULL,
232         .item_list      = NULL,
233         .desc           = "Swap activity",
234 #endif
235         .name           = "A_SWAP",
236         .item_list_sz   = 0,
237         .g_nr           = 1,
238         .nr_ini         = 1,
239         .nr2            = 1,
240         .nr_max         = 1,
241         .nr             = {1, 1, 1},
242         .nr_allocated   = 0,
243         .fsize          = STATS_SWAP_SIZE,
244         .msize          = STATS_SWAP_SIZE,
245         .opt_flags      = 0,
246         .buf            = {NULL, NULL, NULL},
247         .bitmap         = NULL
248 };
249
250 /* Paging activity */
251 struct activity paging_act = {
252         .id             = A_PAGE,
253         .options        = AO_COLLECTED,
254         .magic          = ACTIVITY_MAGIC_BASE,
255         .group          = G_DEFAULT,
256 #ifdef SOURCE_SADC
257         .f_count_index  = -1,
258         .f_count2       = NULL,
259         .f_read         = wrap_read_paging,
260 #endif
261 #ifdef SOURCE_SAR
262         .f_print        = print_paging_stats,
263         .f_print_avg    = print_paging_stats,
264 #endif
265 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
266         .hdr_line       = "pgpgin/s;pgpgout/s;fault/s;majflt/s;"
267                           "pgfree/s;pgscank/s;pgscand/s;pgsteal/s;%vmeff",
268 #endif
269         .gtypes_nr      = {STATS_PAGING_ULL, STATS_PAGING_UL, STATS_PAGING_U},
270         .ftypes_nr      = {0, 0, 0},
271 #ifdef SOURCE_SADF
272         .f_render       = render_paging_stats,
273         .f_xml_print    = xml_print_paging_stats,
274         .f_json_print   = json_print_paging_stats,
275         .f_svg_print    = svg_print_paging_stats,
276         .f_raw_print    = raw_print_paging_stats,
277         .f_count_new    = NULL,
278         .item_list      = NULL,
279         .desc           = "Paging activity",
280 #endif
281         .name           = "A_PAGE",
282         .item_list_sz   = 0,
283         .g_nr           = 3,
284         .nr_ini         = 1,
285         .nr2            = 1,
286         .nr_max         = 1,
287         .nr             = {1, 1, 1},
288         .nr_allocated   = 0,
289         .fsize          = STATS_PAGING_SIZE,
290         .msize          = STATS_PAGING_SIZE,
291         .opt_flags      = 0,
292         .buf            = {NULL, NULL, NULL},
293         .bitmap         = NULL
294 };
295
296 /* I/O and transfer rate activity */
297 struct activity io_act = {
298         .id             = A_IO,
299         .options        = AO_COLLECTED,
300         .magic          = ACTIVITY_MAGIC_BASE + 1,
301         .group          = G_DEFAULT,
302 #ifdef SOURCE_SADC
303         .f_count_index  = -1,
304         .f_count2       = NULL,
305         .f_read         = wrap_read_io,
306 #endif
307 #ifdef SOURCE_SAR
308         .f_print        = print_io_stats,
309         .f_print_avg    = print_io_stats,
310 #endif
311 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
312         .hdr_line       = "tps;rtps;wtps;dtps;bread/s;bwrtn/s;bdscd/s",
313 #endif
314         .gtypes_nr      = {STATS_IO_ULL, STATS_IO_UL, STATS_IO_U},
315         .ftypes_nr      = {0, 0, 0},
316 #ifdef SOURCE_SADF
317         .f_render       = render_io_stats,
318         .f_xml_print    = xml_print_io_stats,
319         .f_json_print   = json_print_io_stats,
320         .f_svg_print    = svg_print_io_stats,
321         .f_raw_print    = raw_print_io_stats,
322         .f_count_new    = NULL,
323         .item_list      = NULL,
324         .desc           = "I/O and transfer rate statistics",
325 #endif
326         .name           = "A_IO",
327         .item_list_sz   = 0,
328         .g_nr           = 2,
329         .nr_ini         = 1,
330         .nr2            = 1,
331         .nr_max         = 1,
332         .nr             = {1, 1, 1},
333         .nr_allocated   = 0,
334         .fsize          = STATS_IO_SIZE,
335         .msize          = STATS_IO_SIZE,
336         .opt_flags      = 0,
337         .buf            = {NULL, NULL, NULL},
338         .bitmap         = NULL
339 };
340
341 /* Memory and swap space utilization activity */
342 struct activity memory_act = {
343         .id             = A_MEMORY,
344         .options        = AO_COLLECTED + AO_MULTIPLE_OUTPUTS,
345         .magic          = ACTIVITY_MAGIC_BASE + 1,
346         .group          = G_DEFAULT,
347 #ifdef SOURCE_SADC
348         .f_count_index  = -1,
349         .f_count2       = NULL,
350         .f_read         = wrap_read_meminfo,
351 #endif
352 #ifdef SOURCE_SAR
353         .f_print        = print_memory_stats,
354         .f_print_avg    = print_avg_memory_stats,
355 #endif
356 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
357         .hdr_line       = "kbmemfree;kbavail;kbmemused;%memused;kbbuffers;kbcached;kbcommit;%commit;kbactive;kbinact;kbdirty&kbanonpg;kbslab;kbkstack;kbpgtbl;kbvmused|"
358                           "kbswpfree;kbswpused;%swpused;kbswpcad;%swpcad",
359 #endif
360         .gtypes_nr      = {STATS_MEMORY_ULL, STATS_MEMORY_UL, STATS_MEMORY_U},
361         .ftypes_nr      = {0, 0, 0},
362 #ifdef SOURCE_SADF
363         .f_render       = render_memory_stats,
364         .f_xml_print    = xml_print_memory_stats,
365         .f_json_print   = json_print_memory_stats,
366         .f_svg_print    = svg_print_memory_stats,
367         .f_raw_print    = raw_print_memory_stats,
368         .f_count_new    = NULL,
369         .item_list      = NULL,
370         .desc           = "Memory and/or swap utilization",
371 #endif
372         .name           = "A_MEMORY",
373         .item_list_sz   = 0,
374         .g_nr           = 9,
375         .nr_ini         = 1,
376         .nr2            = 1,
377         .nr_max         = 1,
378         .nr             = {1, 1, 1},
379         .nr_allocated   = 0,
380         .fsize          = STATS_MEMORY_SIZE,
381         .msize          = STATS_MEMORY_SIZE,
382         .opt_flags      = 0,
383         .buf            = {NULL, NULL, NULL},
384         .bitmap         = NULL
385 };
386
387 /* Kernel tables activity */
388 struct activity ktables_act = {
389         .id             = A_KTABLES,
390         .options        = AO_COLLECTED,
391         .magic          = ACTIVITY_MAGIC_BASE + 1,
392         .group          = G_DEFAULT,
393 #ifdef SOURCE_SADC
394         .f_count_index  = -1,
395         .f_count2       = NULL,
396         .f_read         = wrap_read_kernel_tables,
397 #endif
398 #ifdef SOURCE_SAR
399         .f_print        = print_ktables_stats,
400         .f_print_avg    = print_avg_ktables_stats,
401 #endif
402 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
403         .hdr_line       = "dentunusd;file-nr;inode-nr;pty-nr",
404 #endif
405         .gtypes_nr      = {STATS_KTABLES_ULL, STATS_KTABLES_UL, STATS_KTABLES_U},
406         .ftypes_nr      = {0, 0, 0},
407 #ifdef SOURCE_SADF
408         .f_render       = render_ktables_stats,
409         .f_xml_print    = xml_print_ktables_stats,
410         .f_json_print   = json_print_ktables_stats,
411         .f_svg_print    = svg_print_ktables_stats,
412         .f_raw_print    = raw_print_ktables_stats,
413         .f_count_new    = NULL,
414         .item_list      = NULL,
415         .desc           = "Kernel tables statistics",
416 #endif
417         .name           = "A_KTABLES",
418         .item_list_sz   = 0,
419         .g_nr           = 2,
420         .nr_ini         = 1,
421         .nr2            = 1,
422         .nr_max         = 1,
423         .nr             = {1, 1, 1},
424         .nr_allocated   = 0,
425         .fsize          = STATS_KTABLES_SIZE,
426         .msize          = STATS_KTABLES_SIZE,
427         .opt_flags      = 0,
428         .buf            = {NULL, NULL, NULL},
429         .bitmap         = NULL
430 };
431
432 /* Queue and load activity */
433 struct activity queue_act = {
434         .id             = A_QUEUE,
435         .options        = AO_COLLECTED,
436         .magic          = ACTIVITY_MAGIC_BASE + 2,
437         .group          = G_DEFAULT,
438 #ifdef SOURCE_SADC
439         .f_count_index  = -1,
440         .f_count2       = NULL,
441         .f_read         = wrap_read_loadavg,
442 #endif
443 #ifdef SOURCE_SAR
444         .f_print        = print_queue_stats,
445         .f_print_avg    = print_avg_queue_stats,
446 #endif
447 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
448         .hdr_line       = "runq-sz;plist-sz;ldavg-1;ldavg-5;ldavg-15;blocked",
449 #endif
450         .gtypes_nr      = {STATS_QUEUE_ULL, STATS_QUEUE_UL, STATS_QUEUE_U},
451         .ftypes_nr      = {0, 0, 0},
452 #ifdef SOURCE_SADF
453         .f_render       = render_queue_stats,
454         .f_xml_print    = xml_print_queue_stats,
455         .f_json_print   = json_print_queue_stats,
456         .f_svg_print    = svg_print_queue_stats,
457         .f_raw_print    = raw_print_queue_stats,
458         .f_pcp_print    = pcp_print_queue_stats,
459         .f_count_new    = NULL,
460         .item_list      = NULL,
461         .desc           = "Queue length and load average statistics",
462 #endif
463         .name           = "A_QUEUE",
464         .item_list_sz   = 0,
465         .g_nr           = 3,
466         .nr_ini         = 1,
467         .nr2            = 1,
468         .nr_max         = 1,
469         .nr             = {1, 1, 1},
470         .nr_allocated   = 0,
471         .fsize          = STATS_QUEUE_SIZE,
472         .msize          = STATS_QUEUE_SIZE,
473         .opt_flags      = 0,
474         .buf            = {NULL, NULL, NULL},
475         .bitmap         = NULL
476 };
477
478 /* Serial lines activity */
479 struct activity serial_act = {
480         .id             = A_SERIAL,
481         .options        = AO_COLLECTED + AO_COUNTED,
482         .magic          = ACTIVITY_MAGIC_BASE + 1,
483         .group          = G_DEFAULT,
484 #ifdef SOURCE_SADC
485         .f_count_index  = 2,    /* wrap_get_serial_nr() */
486         .f_count2       = NULL,
487         .f_read         = wrap_read_tty_driver_serial,
488 #endif
489 #ifdef SOURCE_SAR
490         .f_print        = print_serial_stats,
491         .f_print_avg    = print_serial_stats,
492 #endif
493 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
494         .hdr_line       = "TTY;rcvin/s;txmtin/s;framerr/s;prtyerr/s;brk/s;ovrun/s",
495 #endif
496         .gtypes_nr      = {STATS_SERIAL_ULL, STATS_SERIAL_UL, STATS_SERIAL_U},
497         .ftypes_nr      = {0, 0, 0},
498 #ifdef SOURCE_SADF
499         .f_render       = render_serial_stats,
500         .f_xml_print    = xml_print_serial_stats,
501         .f_json_print   = json_print_serial_stats,
502         .f_svg_print    = NULL,
503         .f_raw_print    = raw_print_serial_stats,
504         .f_count_new    = NULL,
505         .item_list      = NULL,
506         .desc           = "TTY devices statistics",
507 #endif
508         .name           = "A_SERIAL",
509         .item_list_sz   = 0,
510         .g_nr           = 0,
511         .nr_ini         = -1,
512         .nr2            = 1,
513         .nr_max         = MAX_NR_SERIAL_LINES,
514         .nr             = {-1, -1, -1},
515         .nr_allocated   = 0,
516         .fsize          = STATS_SERIAL_SIZE,
517         .msize          = STATS_SERIAL_SIZE,
518         .opt_flags      = 0,
519         .buf            = {NULL, NULL, NULL},
520         .bitmap         = NULL
521 };
522
523 /* Block devices activity */
524 struct activity disk_act = {
525         .id             = A_DISK,
526         .options        = AO_COUNTED + AO_GRAPH_PER_ITEM,
527         .magic          = ACTIVITY_MAGIC_BASE + 2,
528         .group          = G_DISK,
529 #ifdef SOURCE_SADC
530         .f_count_index  = 3,    /* wrap_get_disk_nr() */
531         .f_count2       = NULL,
532         .f_read         = wrap_read_disk,
533 #endif
534 #ifdef SOURCE_SAR
535         .f_print        = print_disk_stats,
536         .f_print_avg    = print_disk_stats,
537 #endif
538 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
539         .hdr_line       = "DEV;tps;rkB/s;wkB/s;dkB/s;areq-sz;aqu-sz;await;%util",
540 #endif
541         .gtypes_nr      = {STATS_DISK_ULL, STATS_DISK_UL, STATS_DISK_U},
542         .ftypes_nr      = {0, 0, 0},
543 #ifdef SOURCE_SADF
544         .f_render       = render_disk_stats,
545         .f_xml_print    = xml_print_disk_stats,
546         .f_json_print   = json_print_disk_stats,
547         .f_svg_print    = svg_print_disk_stats,
548         .f_raw_print    = raw_print_disk_stats,
549         .f_count_new    = count_new_disk,
550         .item_list      = NULL,
551         .desc           = "Block devices statistics",
552 #endif
553         .name           = "A_DISK",
554         .item_list_sz   = 0,
555         .g_nr           = 5,
556         .nr_ini         = -1,
557         .nr2            = 1,
558         .nr_max         = MAX_NR_DISKS,
559         .nr             = {-1, -1, -1},
560         .nr_allocated   = 0,
561         .fsize          = STATS_DISK_SIZE,
562         .msize          = STATS_DISK_SIZE,
563         .opt_flags      = 0,
564         .buf            = {NULL, NULL, NULL},
565         .bitmap         = NULL
566 };
567
568 /* Network interfaces activity */
569 struct activity net_dev_act = {
570         .id             = A_NET_DEV,
571         .options        = AO_COLLECTED + AO_COUNTED + AO_GRAPH_PER_ITEM,
572         .magic          = ACTIVITY_MAGIC_BASE + 3,
573         .group          = G_DEFAULT,
574 #ifdef SOURCE_SADC
575         .f_count_index  = 4,    /* wrap_get_iface_nr() */
576         .f_count2       = NULL,
577         .f_read         = wrap_read_net_dev,
578 #endif
579 #ifdef SOURCE_SAR
580         .f_print        = print_net_dev_stats,
581         .f_print_avg    = print_net_dev_stats,
582 #endif
583 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
584         .hdr_line       = "IFACE;rxpck/s;txpck/s;rxkB/s;txkB/s;rxcmp/s;txcmp/s;rxmcst/s;%ifutil",
585 #endif
586         .gtypes_nr      = {STATS_NET_DEV_ULL, STATS_NET_DEV_UL, STATS_NET_DEV_U},
587         .ftypes_nr      = {0, 0, 0},
588 #ifdef SOURCE_SADF
589         .f_render       = render_net_dev_stats,
590         .f_xml_print    = xml_print_net_dev_stats,
591         .f_json_print   = json_print_net_dev_stats,
592         .f_svg_print    = svg_print_net_dev_stats,
593         .f_raw_print    = raw_print_net_dev_stats,
594         .f_count_new    = count_new_net_dev,
595         .item_list      = NULL,
596         .desc           = "Network interfaces statistics",
597 #endif
598         .name           = "A_NET_DEV",
599         .item_list_sz   = 0,
600         .g_nr           = 4,
601         .nr_ini         = -1,
602         .nr2            = 1,
603         .nr_max         = MAX_NR_IFACES,
604         .nr             = {-1, -1, -1},
605         .nr_allocated   = 0,
606         .fsize          = STATS_NET_DEV_SIZE,
607         .msize          = STATS_NET_DEV_SIZE,
608         .opt_flags      = 0,
609         .buf            = {NULL, NULL, NULL},
610         .bitmap         = NULL
611 };
612
613 /* Network interfaces (errors) activity */
614 struct activity net_edev_act = {
615         .id             = A_NET_EDEV,
616         .options        = AO_COLLECTED + AO_COUNTED + AO_GRAPH_PER_ITEM,
617         .magic          = ACTIVITY_MAGIC_BASE + 2,
618         .group          = G_DEFAULT,
619 #ifdef SOURCE_SADC
620         .f_count_index  = 4,    /* wrap_get_iface_nr() */
621         .f_count2       = NULL,
622         .f_read         = wrap_read_net_edev,
623 #endif
624 #ifdef SOURCE_SAR
625         .f_print        = print_net_edev_stats,
626         .f_print_avg    = print_net_edev_stats,
627 #endif
628 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
629         .hdr_line       = "IFACE;rxerr/s;txerr/s;coll/s;rxdrop/s;txdrop/s;"
630                           "txcarr/s;rxfram/s;rxfifo/s;txfifo/s",
631 #endif
632         .gtypes_nr      = {STATS_NET_EDEV_ULL, STATS_NET_EDEV_UL, STATS_NET_EDEV_U},
633         .ftypes_nr      = {0, 0, 0},
634 #ifdef SOURCE_SADF
635         .f_render       = render_net_edev_stats,
636         .f_xml_print    = xml_print_net_edev_stats,
637         .f_json_print   = json_print_net_edev_stats,
638         .f_svg_print    = svg_print_net_edev_stats,
639         .f_raw_print    = raw_print_net_edev_stats,
640         .f_count_new    = count_new_net_edev,
641         .item_list      = NULL,
642         .desc           = "Network interfaces errors statistics",
643 #endif
644         .name           = "A_NET_EDEV",
645         .item_list_sz   = 0,
646         .g_nr           = 4,
647         .nr_ini         = -1,
648         .nr2            = 1,
649         .nr_max         = MAX_NR_IFACES,
650         .nr             = {-1, -1, -1},
651         .nr_allocated   = 0,
652         .fsize          = STATS_NET_EDEV_SIZE,
653         .msize          = STATS_NET_EDEV_SIZE,
654         .opt_flags      = 0,
655         .buf            = {NULL, NULL, NULL},
656         .bitmap         = NULL
657 };
658
659 /* NFS client activity */
660 struct activity net_nfs_act = {
661         .id             = A_NET_NFS,
662         .options        = AO_COLLECTED,
663         .magic          = ACTIVITY_MAGIC_BASE,
664         .group          = G_DEFAULT,
665 #ifdef SOURCE_SADC
666         .f_count_index  = -1,
667         .f_count2       = NULL,
668         .f_read         = wrap_read_net_nfs,
669 #endif
670 #ifdef SOURCE_SAR
671         .f_print        = print_net_nfs_stats,
672         .f_print_avg    = print_net_nfs_stats,
673 #endif
674 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
675         .hdr_line       = "call/s;retrans/s;read/s;write/s;access/s;getatt/s",
676 #endif
677         .gtypes_nr      = {STATS_NET_NFS_ULL, STATS_NET_NFS_UL, STATS_NET_NFS_U},
678         .ftypes_nr      = {0, 0, 0},
679 #ifdef SOURCE_SADF
680         .f_render       = render_net_nfs_stats,
681         .f_xml_print    = xml_print_net_nfs_stats,
682         .f_json_print   = json_print_net_nfs_stats,
683         .f_svg_print    = svg_print_net_nfs_stats,
684         .f_raw_print    = raw_print_net_nfs_stats,
685         .f_count_new    = NULL,
686         .item_list      = NULL,
687         .desc           = "NFS client statistics",
688 #endif
689         .name           = "A_NET_NFS",
690         .item_list_sz   = 0,
691         .g_nr           = 3,
692         .nr_ini         = 1,
693         .nr2            = 1,
694         .nr_max         = 1,
695         .nr             = {1, 1, 1},
696         .nr_allocated   = 0,
697         .fsize          = STATS_NET_NFS_SIZE,
698         .msize          = STATS_NET_NFS_SIZE,
699         .opt_flags      = 0,
700         .buf            = {NULL, NULL, NULL},
701         .bitmap         = NULL
702 };
703
704 /* NFS server activity */
705 struct activity net_nfsd_act = {
706         .id             = A_NET_NFSD,
707         .options        = AO_COLLECTED,
708         .magic          = ACTIVITY_MAGIC_BASE,
709         .group          = G_DEFAULT,
710 #ifdef SOURCE_SADC
711         .f_count_index  = -1,
712         .f_count2       = NULL,
713         .f_read         = wrap_read_net_nfsd,
714 #endif
715 #ifdef SOURCE_SAR
716         .f_print        = print_net_nfsd_stats,
717         .f_print_avg    = print_net_nfsd_stats,
718 #endif
719 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
720         .hdr_line       = "scall/s;badcall/s;packet/s;udp/s;tcp/s;hit/s;miss/s;"
721                           "sread/s;swrite/s;saccess/s;sgetatt/s",
722 #endif
723         .gtypes_nr      = {STATS_NET_NFSD_ULL, STATS_NET_NFSD_UL, STATS_NET_NFSD_U},
724         .ftypes_nr      = {0, 0, 0},
725 #ifdef SOURCE_SADF
726         .f_render       = render_net_nfsd_stats,
727         .f_xml_print    = xml_print_net_nfsd_stats,
728         .f_json_print   = json_print_net_nfsd_stats,
729         .f_svg_print    = svg_print_net_nfsd_stats,
730         .f_raw_print    = raw_print_net_nfsd_stats,
731         .f_count_new    = NULL,
732         .item_list      = NULL,
733         .desc           = "NFS server statistics",
734 #endif
735         .name           = "A_NET_NFSD",
736         .item_list_sz   = 0,
737         .g_nr           = 5,
738         .nr_ini         = 1,
739         .nr2            = 1,
740         .nr_max         = 1,
741         .nr             = {1, 1, 1},
742         .nr_allocated   = 0,
743         .fsize          = STATS_NET_NFSD_SIZE,
744         .msize          = STATS_NET_NFSD_SIZE,
745         .opt_flags      = 0,
746         .buf            = {NULL, NULL, NULL},
747         .bitmap         = NULL
748 };
749
750 /* Network sockets activity */
751 struct activity net_sock_act = {
752         .id             = A_NET_SOCK,
753         .options        = AO_COLLECTED,
754         .magic          = ACTIVITY_MAGIC_BASE,
755         .group          = G_DEFAULT,
756 #ifdef SOURCE_SADC
757         .f_count_index  = -1,
758         .f_count2       = NULL,
759         .f_read         = wrap_read_net_sock,
760 #endif
761 #ifdef SOURCE_SAR
762         .f_print        = print_net_sock_stats,
763         .f_print_avg    = print_avg_net_sock_stats,
764 #endif
765 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
766         .hdr_line       = "totsck;tcpsck;udpsck;rawsck;ip-frag;tcp-tw",
767 #endif
768         .gtypes_nr      = {STATS_NET_SOCK_ULL, STATS_NET_SOCK_UL, STATS_NET_SOCK_U},
769         .ftypes_nr      = {0, 0, 0},
770 #ifdef SOURCE_SADF
771         .f_render       = render_net_sock_stats,
772         .f_xml_print    = xml_print_net_sock_stats,
773         .f_json_print   = json_print_net_sock_stats,
774         .f_svg_print    = svg_print_net_sock_stats,
775         .f_raw_print    = raw_print_net_sock_stats,
776         .f_count_new    = NULL,
777         .item_list      = NULL,
778         .desc           = "IPv4 sockets statistics",
779 #endif
780         .name           = "A_NET_SOCK",
781         .item_list_sz   = 0,
782         .g_nr           = 2,
783         .nr_ini         = 1,
784         .nr2            = 1,
785         .nr_max         = 1,
786         .nr             = {1, 1, 1},
787         .nr_allocated   = 0,
788         .fsize          = STATS_NET_SOCK_SIZE,
789         .msize          = STATS_NET_SOCK_SIZE,
790         .opt_flags      = 0,
791         .buf            = {NULL, NULL, NULL},
792         .bitmap         = NULL
793 };
794
795 /* IP network traffic activity */
796 struct activity net_ip_act = {
797         .id             = A_NET_IP,
798         .options        = AO_NULL,
799         .magic          = ACTIVITY_MAGIC_BASE + 2,
800         .group          = G_SNMP,
801 #ifdef SOURCE_SADC
802         .f_count_index  = -1,
803         .f_count2       = NULL,
804         .f_read         = wrap_read_net_ip,
805 #endif
806 #ifdef SOURCE_SAR
807         .f_print        = print_net_ip_stats,
808         .f_print_avg    = print_net_ip_stats,
809 #endif
810 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
811         .hdr_line       = "irec/s;fwddgm/s;idel/s;orq/s;asmrq/s;asmok/s;fragok/s;fragcrt/s",
812 #endif
813         .gtypes_nr      = {STATS_NET_IP_ULL, STATS_NET_IP_UL, STATS_NET_IP_U},
814         .ftypes_nr      = {0, 0, 0},
815 #ifdef SOURCE_SADF
816         .f_render       = render_net_ip_stats,
817         .f_xml_print    = xml_print_net_ip_stats,
818         .f_json_print   = json_print_net_ip_stats,
819         .f_svg_print    = svg_print_net_ip_stats,
820         .f_raw_print    = raw_print_net_ip_stats,
821         .f_count_new    = NULL,
822         .item_list      = NULL,
823         .desc           = "IPv4 traffic statistics",
824 #endif
825         .name           = "A_NET_IP",
826         .item_list_sz   = 0,
827         .g_nr           = 3,
828         .nr_ini         = 1,
829         .nr2            = 1,
830         .nr_max         = 1,
831         .nr             = {1, 1, 1},
832         .nr_allocated   = 0,
833         .fsize          = STATS_NET_IP_SIZE,
834         .msize          = STATS_NET_IP_SIZE,
835         .opt_flags      = 0,
836         .buf            = {NULL, NULL, NULL},
837         .bitmap         = NULL
838 };
839
840 /* IP network traffic (errors) activity */
841 struct activity net_eip_act = {
842         .id             = A_NET_EIP,
843         .options        = AO_NULL,
844         .magic          = ACTIVITY_MAGIC_BASE + 2,
845         .group          = G_SNMP,
846 #ifdef SOURCE_SADC
847         .f_count_index  = -1,
848         .f_count2       = NULL,
849         .f_read         = wrap_read_net_eip,
850 #endif
851 #ifdef SOURCE_SAR
852         .f_print        = print_net_eip_stats,
853         .f_print_avg    = print_net_eip_stats,
854 #endif
855 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
856         .hdr_line       = "ihdrerr/s;iadrerr/s;iukwnpr/s;idisc/s;odisc/s;onort/s;asmf/s;fragf/s",
857 #endif
858         .gtypes_nr      = {STATS_NET_EIP_ULL, STATS_NET_EIP_UL, STATS_NET_EIP_U},
859         .ftypes_nr      = {0, 0, 0},
860 #ifdef SOURCE_SADF
861         .f_render       = render_net_eip_stats,
862         .f_xml_print    = xml_print_net_eip_stats,
863         .f_json_print   = json_print_net_eip_stats,
864         .f_svg_print    = svg_print_net_eip_stats,
865         .f_raw_print    = raw_print_net_eip_stats,
866         .f_count_new    = NULL,
867         .item_list      = NULL,
868         .desc           = "IPv4 traffic errors statistics",
869 #endif
870         .name           = "A_NET_EIP",
871         .item_list_sz   = 0,
872         .g_nr           = 3,
873         .nr_ini         = 1,
874         .nr2            = 1,
875         .nr_max         = 1,
876         .nr             = {1, 1, 1},
877         .nr_allocated   = 0,
878         .fsize          = STATS_NET_EIP_SIZE,
879         .msize          = STATS_NET_EIP_SIZE,
880         .opt_flags      = 0,
881         .buf            = {NULL, NULL, NULL},
882         .bitmap         = NULL
883 };
884
885 /* ICMP network traffic activity */
886 struct activity net_icmp_act = {
887         .id             = A_NET_ICMP,
888         .options        = AO_NULL,
889         .magic          = ACTIVITY_MAGIC_BASE,
890         .group          = G_SNMP,
891 #ifdef SOURCE_SADC
892         .f_count_index  = -1,
893         .f_count2       = NULL,
894         .f_read         = wrap_read_net_icmp,
895 #endif
896 #ifdef SOURCE_SAR
897         .f_print        = print_net_icmp_stats,
898         .f_print_avg    = print_net_icmp_stats,
899 #endif
900 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
901         .hdr_line       = "imsg/s;omsg/s;iech/s;iechr/s;oech/s;oechr/s;itm/s;itmr/s;otm/s;"
902                           "otmr/s;iadrmk/s;iadrmkr/s;oadrmk/s;oadrmkr/s",
903 #endif
904         .gtypes_nr      = {STATS_NET_ICMP_ULL, STATS_NET_ICMP_UL, STATS_NET_ICMP_U},
905         .ftypes_nr      = {0, 0, 0},
906 #ifdef SOURCE_SADF
907         .f_render       = render_net_icmp_stats,
908         .f_xml_print    = xml_print_net_icmp_stats,
909         .f_json_print   = json_print_net_icmp_stats,
910         .f_svg_print    = svg_print_net_icmp_stats,
911         .f_raw_print    = raw_print_net_icmp_stats,
912         .f_count_new    = NULL,
913         .item_list      = NULL,
914         .desc           = "ICMPv4 traffic statistics",
915 #endif
916         .name           = "A_NET_ICMP",
917         .item_list_sz   = 0,
918         .g_nr           = 4,
919         .nr_ini         = 1,
920         .nr2            = 1,
921         .nr_max         = 1,
922         .nr             = {1, 1, 1},
923         .nr_allocated   = 0,
924         .fsize          = STATS_NET_ICMP_SIZE,
925         .msize          = STATS_NET_ICMP_SIZE,
926         .opt_flags      = 0,
927         .buf            = {NULL, NULL, NULL},
928         .bitmap         = NULL
929 };
930
931 /* ICMP network traffic (errors) activity */
932 struct activity net_eicmp_act = {
933         .id             = A_NET_EICMP,
934         .options        = AO_NULL,
935         .magic          = ACTIVITY_MAGIC_BASE,
936         .group          = G_SNMP,
937 #ifdef SOURCE_SADC
938         .f_count_index  = -1,
939         .f_count2       = NULL,
940         .f_read         = wrap_read_net_eicmp,
941 #endif
942 #ifdef SOURCE_SAR
943         .f_print        = print_net_eicmp_stats,
944         .f_print_avg    = print_net_eicmp_stats,
945 #endif
946 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
947         .hdr_line       = "ierr/s;oerr/s;idstunr/s;odstunr/s;itmex/s;otmex/s;"
948                           "iparmpb/s;oparmpb/s;isrcq/s;osrcq/s;iredir/s;oredir/s",
949 #endif
950         .gtypes_nr      = {STATS_NET_EICMP_ULL, STATS_NET_EICMP_UL, STATS_NET_EICMP_U},
951         .ftypes_nr      = {0, 0, 0},
952 #ifdef SOURCE_SADF
953         .f_render       = render_net_eicmp_stats,
954         .f_xml_print    = xml_print_net_eicmp_stats,
955         .f_json_print   = json_print_net_eicmp_stats,
956         .f_svg_print    = svg_print_net_eicmp_stats,
957         .f_raw_print    = raw_print_net_eicmp_stats,
958         .f_count_new    = NULL,
959         .item_list      = NULL,
960         .desc           = "ICMPv4 traffic errors statistics",
961 #endif
962         .name           = "A_NET_EICMP",
963         .item_list_sz   = 0,
964         .g_nr           = 6,
965         .nr_ini         = 1,
966         .nr2            = 1,
967         .nr_max         = 1,
968         .nr             = {1, 1, 1},
969         .nr_allocated   = 0,
970         .fsize          = STATS_NET_EICMP_SIZE,
971         .msize          = STATS_NET_EICMP_SIZE,
972         .opt_flags      = 0,
973         .buf            = {NULL, NULL, NULL},
974         .bitmap         = NULL
975 };
976
977 /* TCP network traffic activity */
978 struct activity net_tcp_act = {
979         .id             = A_NET_TCP,
980         .options        = AO_NULL,
981         .magic          = ACTIVITY_MAGIC_BASE,
982         .group          = G_SNMP,
983 #ifdef SOURCE_SADC
984         .f_count_index  = -1,
985         .f_count2       = NULL,
986         .f_read         = wrap_read_net_tcp,
987 #endif
988 #ifdef SOURCE_SAR
989         .f_print        = print_net_tcp_stats,
990         .f_print_avg    = print_net_tcp_stats,
991 #endif
992 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
993         .hdr_line       = "active/s;passive/s;iseg/s;oseg/s",
994 #endif
995         .gtypes_nr      = {STATS_NET_TCP_ULL, STATS_NET_TCP_UL, STATS_NET_TCP_U},
996         .ftypes_nr      = {0, 0, 0},
997 #ifdef SOURCE_SADF
998         .f_render       = render_net_tcp_stats,
999         .f_xml_print    = xml_print_net_tcp_stats,
1000         .f_json_print   = json_print_net_tcp_stats,
1001         .f_svg_print    = svg_print_net_tcp_stats,
1002         .f_raw_print    = raw_print_net_tcp_stats,
1003         .f_count_new    = NULL,
1004         .item_list      = NULL,
1005         .desc           = "TCPv4 traffic statistics",
1006 #endif
1007         .name           = "A_NET_TCP",
1008         .item_list_sz   = 0,
1009         .g_nr           = 2,
1010         .nr_ini         = 1,
1011         .nr2            = 1,
1012         .nr_max         = 1,
1013         .nr             = {1, 1, 1},
1014         .nr_allocated   = 0,
1015         .fsize          = STATS_NET_TCP_SIZE,
1016         .msize          = STATS_NET_TCP_SIZE,
1017         .opt_flags      = 0,
1018         .buf            = {NULL, NULL, NULL},
1019         .bitmap         = NULL
1020 };
1021
1022 /* TCP network traffic (errors) activity */
1023 struct activity net_etcp_act = {
1024         .id             = A_NET_ETCP,
1025         .options        = AO_NULL,
1026         .magic          = ACTIVITY_MAGIC_BASE,
1027         .group          = G_SNMP,
1028 #ifdef SOURCE_SADC
1029         .f_count_index  = -1,
1030         .f_count2       = NULL,
1031         .f_read         = wrap_read_net_etcp,
1032 #endif
1033 #ifdef SOURCE_SAR
1034         .f_print        = print_net_etcp_stats,
1035         .f_print_avg    = print_net_etcp_stats,
1036 #endif
1037 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1038         .hdr_line       = "atmptf/s;estres/s;retrans/s;isegerr/s;orsts/s",
1039 #endif
1040         .gtypes_nr      = {STATS_NET_ETCP_ULL, STATS_NET_ETCP_UL, STATS_NET_ETCP_U},
1041         .ftypes_nr      = {0, 0, 0},
1042 #ifdef SOURCE_SADF
1043         .f_render       = render_net_etcp_stats,
1044         .f_xml_print    = xml_print_net_etcp_stats,
1045         .f_json_print   = json_print_net_etcp_stats,
1046         .f_svg_print    = svg_print_net_etcp_stats,
1047         .f_raw_print    = raw_print_net_etcp_stats,
1048         .f_count_new    = NULL,
1049         .item_list      = NULL,
1050         .desc           = "TCPv4 traffic errors statistics",
1051 #endif
1052         .name           = "A_NET_ETCP",
1053         .item_list_sz   = 0,
1054         .g_nr           = 2,
1055         .nr_ini         = 1,
1056         .nr2            = 1,
1057         .nr_max         = 1,
1058         .nr             = {1, 1, 1},
1059         .nr_allocated   = 0,
1060         .fsize          = STATS_NET_ETCP_SIZE,
1061         .msize          = STATS_NET_ETCP_SIZE,
1062         .opt_flags      = 0,
1063         .buf            = {NULL, NULL, NULL},
1064         .bitmap         = NULL
1065 };
1066
1067 /* UDP network traffic activity */
1068 struct activity net_udp_act = {
1069         .id             = A_NET_UDP,
1070         .options        = AO_NULL,
1071         .magic          = ACTIVITY_MAGIC_BASE,
1072         .group          = G_SNMP,
1073 #ifdef SOURCE_SADC
1074         .f_count_index  = -1,
1075         .f_count2       = NULL,
1076         .f_read         = wrap_read_net_udp,
1077 #endif
1078 #ifdef SOURCE_SAR
1079         .f_print        = print_net_udp_stats,
1080         .f_print_avg    = print_net_udp_stats,
1081 #endif
1082 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1083         .hdr_line       = "idgm/s;odgm/s;noport/s;idgmerr/s",
1084 #endif
1085         .gtypes_nr      = {STATS_NET_UDP_ULL, STATS_NET_UDP_UL, STATS_NET_UDP_U},
1086         .ftypes_nr      = {0, 0, 0},
1087 #ifdef SOURCE_SADF
1088         .f_render       = render_net_udp_stats,
1089         .f_xml_print    = xml_print_net_udp_stats,
1090         .f_json_print   = json_print_net_udp_stats,
1091         .f_svg_print    = svg_print_net_udp_stats,
1092         .f_raw_print    = raw_print_net_udp_stats,
1093         .f_count_new    = NULL,
1094         .item_list      = NULL,
1095         .desc           = "UDPv4 traffic statistics",
1096 #endif
1097         .name           = "A_NET_UDP",
1098         .item_list_sz   = 0,
1099         .g_nr           = 2,
1100         .nr_ini         = 1,
1101         .nr2            = 1,
1102         .nr_max         = 1,
1103         .nr             = {1, 1, 1},
1104         .nr_allocated   = 0,
1105         .fsize          = STATS_NET_UDP_SIZE,
1106         .msize          = STATS_NET_UDP_SIZE,
1107         .opt_flags      = 0,
1108         .buf            = {NULL, NULL, NULL},
1109         .bitmap         = NULL
1110 };
1111
1112 /* IPv6 sockets activity */
1113 struct activity net_sock6_act = {
1114         .id             = A_NET_SOCK6,
1115         .options        = AO_NULL,
1116         .magic          = ACTIVITY_MAGIC_BASE,
1117         .group          = G_IPV6,
1118 #ifdef SOURCE_SADC
1119         .f_count_index  = -1,
1120         .f_count2       = NULL,
1121         .f_read         = wrap_read_net_sock6,
1122 #endif
1123 #ifdef SOURCE_SAR
1124         .f_print        = print_net_sock6_stats,
1125         .f_print_avg    = print_avg_net_sock6_stats,
1126 #endif
1127 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1128         .hdr_line       = "tcp6sck;udp6sck;raw6sck;ip6-frag",
1129 #endif
1130         .gtypes_nr      = {STATS_NET_SOCK6_ULL, STATS_NET_SOCK6_UL, STATS_NET_SOCK6_U},
1131         .ftypes_nr      = {0, 0, 0},
1132 #ifdef SOURCE_SADF
1133         .f_render       = render_net_sock6_stats,
1134         .f_xml_print    = xml_print_net_sock6_stats,
1135         .f_json_print   = json_print_net_sock6_stats,
1136         .f_svg_print    = svg_print_net_sock6_stats,
1137         .f_raw_print    = raw_print_net_sock6_stats,
1138         .f_count_new    = NULL,
1139         .item_list      = NULL,
1140         .desc           = "IPv6 sockets statistics",
1141 #endif
1142         .name           = "A_NET_SOCK6",
1143         .item_list_sz   = 0,
1144         .g_nr           = 1,
1145         .nr_ini         = 1,
1146         .nr2            = 1,
1147         .nr_max         = 1,
1148         .nr             = {1, 1, 1},
1149         .nr_allocated   = 0,
1150         .fsize          = STATS_NET_SOCK6_SIZE,
1151         .msize          = STATS_NET_SOCK6_SIZE,
1152         .opt_flags      = 0,
1153         .buf            = {NULL, NULL, NULL},
1154         .bitmap         = NULL
1155 };
1156
1157 /* IPv6 network traffic activity */
1158 struct activity net_ip6_act = {
1159         .id             = A_NET_IP6,
1160         .options        = AO_NULL,
1161         .magic          = ACTIVITY_MAGIC_BASE + 2,
1162         .group          = G_IPV6,
1163 #ifdef SOURCE_SADC
1164         .f_count_index  = -1,
1165         .f_count2       = NULL,
1166         .f_read         = wrap_read_net_ip6,
1167 #endif
1168 #ifdef SOURCE_SAR
1169         .f_print        = print_net_ip6_stats,
1170         .f_print_avg    = print_net_ip6_stats,
1171 #endif
1172 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1173         .hdr_line       = "irec6/s;fwddgm6/s;idel6/s;orq6/s;asmrq6/s;asmok6/s;"
1174                           "imcpck6/s;omcpck6/s;fragok6/s;fragcr6/s",
1175 #endif
1176         .gtypes_nr      = {STATS_NET_IP6_ULL, STATS_NET_IP6_UL, STATS_NET_IP6_U},
1177         .ftypes_nr      = {0, 0, 0},
1178 #ifdef SOURCE_SADF
1179         .f_render       = render_net_ip6_stats,
1180         .f_xml_print    = xml_print_net_ip6_stats,
1181         .f_json_print   = json_print_net_ip6_stats,
1182         .f_svg_print    = svg_print_net_ip6_stats,
1183         .f_raw_print    = raw_print_net_ip6_stats,
1184         .f_count_new    = NULL,
1185         .item_list      = NULL,
1186         .desc           = "IPv6 traffic statistics",
1187 #endif
1188         .name           = "A_NET_IP6",
1189         .item_list_sz   = 0,
1190         .g_nr           = 4,
1191         .nr_ini         = 1,
1192         .nr2            = 1,
1193         .nr_max         = 1,
1194         .nr             = {1, 1, 1},
1195         .nr_allocated   = 0,
1196         .fsize          = STATS_NET_IP6_SIZE,
1197         .msize          = STATS_NET_IP6_SIZE,
1198         .opt_flags      = 0,
1199         .buf            = {NULL, NULL, NULL},
1200         .bitmap         = NULL
1201 };
1202
1203 /* IPv6 network traffic (errors) activity */
1204 struct activity net_eip6_act = {
1205         .id             = A_NET_EIP6,
1206         .options        = AO_NULL,
1207         .magic          = ACTIVITY_MAGIC_BASE + 2,
1208         .group          = G_IPV6,
1209 #ifdef SOURCE_SADC
1210         .f_count_index  = -1,
1211         .f_count2       = NULL,
1212         .f_read         = wrap_read_net_eip6,
1213 #endif
1214 #ifdef SOURCE_SAR
1215         .f_print        = print_net_eip6_stats,
1216         .f_print_avg    = print_net_eip6_stats,
1217 #endif
1218 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1219         .hdr_line       = "ihdrer6/s;iadrer6/s;iukwnp6/s;i2big6/s;idisc6/s;odisc6/s;"
1220                           "inort6/s;onort6/s;asmf6/s;fragf6/s;itrpck6/s",
1221 #endif
1222         .gtypes_nr      = {STATS_NET_EIP6_ULL, STATS_NET_EIP6_UL, STATS_NET_EIP6_U},
1223         .ftypes_nr      = {0, 0, 0},
1224 #ifdef SOURCE_SADF
1225         .f_render       = render_net_eip6_stats,
1226         .f_xml_print    = xml_print_net_eip6_stats,
1227         .f_json_print   = json_print_net_eip6_stats,
1228         .f_svg_print    = svg_print_net_eip6_stats,
1229         .f_raw_print    = raw_print_net_eip6_stats,
1230         .f_count_new    = NULL,
1231         .item_list      = NULL,
1232         .desc           = "IPv6 traffic errors statistics",
1233 #endif
1234         .name           = "A_NET_EIP6",
1235         .item_list_sz   = 0,
1236         .g_nr           = 4,
1237         .nr_ini         = 1,
1238         .nr2            = 1,
1239         .nr_max         = 1,
1240         .nr             = {1, 1, 1},
1241         .nr_allocated   = 0,
1242         .fsize          = STATS_NET_EIP6_SIZE,
1243         .msize          = STATS_NET_EIP6_SIZE,
1244         .opt_flags      = 0,
1245         .buf            = {NULL, NULL, NULL},
1246         .bitmap         = NULL
1247 };
1248
1249 /* ICMPv6 network traffic activity */
1250 struct activity net_icmp6_act = {
1251         .id             = A_NET_ICMP6,
1252         .options        = AO_NULL,
1253         .magic          = ACTIVITY_MAGIC_BASE,
1254         .group          = G_IPV6,
1255 #ifdef SOURCE_SADC
1256         .f_count_index  = -1,
1257         .f_count2       = NULL,
1258         .f_read         = wrap_read_net_icmp6,
1259 #endif
1260 #ifdef SOURCE_SAR
1261         .f_print        = print_net_icmp6_stats,
1262         .f_print_avg    = print_net_icmp6_stats,
1263 #endif
1264 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1265         .hdr_line       = "imsg6/s;omsg6/s;iech6/s;iechr6/s;oechr6/s;igmbq6/s;igmbr6/s;ogmbr6/s;"
1266                           "igmbrd6/s;ogmbrd6/s;irtsol6/s;ortsol6/s;irtad6/s;inbsol6/s;onbsol6/s;"
1267                           "inbad6/s;onbad6/s",
1268 #endif
1269         .gtypes_nr      = {STATS_NET_ICMP6_ULL, STATS_NET_ICMP6_UL, STATS_NET_ICMP6_U},
1270         .ftypes_nr      = {0, 0, 0},
1271 #ifdef SOURCE_SADF
1272         .f_render       = render_net_icmp6_stats,
1273         .f_xml_print    = xml_print_net_icmp6_stats,
1274         .f_json_print   = json_print_net_icmp6_stats,
1275         .f_svg_print    = svg_print_net_icmp6_stats,
1276         .f_raw_print    = raw_print_net_icmp6_stats,
1277         .f_count_new    = NULL,
1278         .item_list      = NULL,
1279         .desc           = "ICMPv6 traffic statistics",
1280 #endif
1281         .name           = "A_NET_ICMP6",
1282         .item_list_sz   = 0,
1283         .g_nr           = 5,
1284         .nr_ini         = 1,
1285         .nr2            = 1,
1286         .nr_max         = 1,
1287         .nr             = {1, 1, 1},
1288         .nr_allocated   = 0,
1289         .fsize          = STATS_NET_ICMP6_SIZE,
1290         .msize          = STATS_NET_ICMP6_SIZE,
1291         .opt_flags      = 0,
1292         .buf            = {NULL, NULL, NULL},
1293         .bitmap         = NULL
1294 };
1295
1296 /* ICMPv6 network traffic (errors) activity */
1297 struct activity net_eicmp6_act = {
1298         .id             = A_NET_EICMP6,
1299         .options        = AO_NULL,
1300         .magic          = ACTIVITY_MAGIC_BASE,
1301         .group          = G_IPV6,
1302 #ifdef SOURCE_SADC
1303         .f_count_index  = -1,
1304         .f_count2       = NULL,
1305         .f_read         = wrap_read_net_eicmp6,
1306 #endif
1307 #ifdef SOURCE_SAR
1308         .f_print        = print_net_eicmp6_stats,
1309         .f_print_avg    = print_net_eicmp6_stats,
1310 #endif
1311 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1312         .hdr_line       = "ierr6/s;idtunr6/s;odtunr6/s;itmex6/s;otmex6/s;"
1313                           "iprmpb6/s;oprmpb6/s;iredir6/s;oredir6/s;ipck2b6/s;opck2b6/s",
1314 #endif
1315         .gtypes_nr      = {STATS_NET_EICMP6_ULL, STATS_NET_EICMP6_UL, STATS_NET_EICMP6_U},
1316         .ftypes_nr      = {0, 0, 0},
1317 #ifdef SOURCE_SADF
1318         .f_render       = render_net_eicmp6_stats,
1319         .f_xml_print    = xml_print_net_eicmp6_stats,
1320         .f_json_print   = json_print_net_eicmp6_stats,
1321         .f_svg_print    = svg_print_net_eicmp6_stats,
1322         .f_raw_print    = raw_print_net_eicmp6_stats,
1323         .f_count_new    = NULL,
1324         .item_list      = NULL,
1325         .desc           = "ICMPv6 traffic errors statistics",
1326 #endif
1327         .name           = "A_NET_EICMP6",
1328         .item_list_sz   = 0,
1329         .g_nr           = 6,
1330         .nr_ini         = 1,
1331         .nr2            = 1,
1332         .nr_max         = 1,
1333         .nr             = {1, 1, 1},
1334         .nr_allocated   = 0,
1335         .fsize          = STATS_NET_EICMP6_SIZE,
1336         .msize          = STATS_NET_EICMP6_SIZE,
1337         .opt_flags      = 0,
1338         .buf            = {NULL, NULL, NULL},
1339         .bitmap         = NULL
1340 };
1341
1342 /* UDPv6 network traffic activity */
1343 struct activity net_udp6_act = {
1344         .id             = A_NET_UDP6,
1345         .options        = AO_NULL,
1346         .magic          = ACTIVITY_MAGIC_BASE,
1347         .group          = G_IPV6,
1348 #ifdef SOURCE_SADC
1349         .f_count_index  = -1,
1350         .f_count2       = NULL,
1351         .f_read         = wrap_read_net_udp6,
1352 #endif
1353 #ifdef SOURCE_SAR
1354         .f_print        = print_net_udp6_stats,
1355         .f_print_avg    = print_net_udp6_stats,
1356 #endif
1357 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1358         .hdr_line       = "idgm6/s;odgm6/s;noport6/s;idgmer6/s",
1359 #endif
1360         .gtypes_nr      = {STATS_NET_UDP6_ULL, STATS_NET_UDP6_UL, STATS_NET_UDP6_U},
1361         .ftypes_nr      = {0, 0, 0},
1362 #ifdef SOURCE_SADF
1363         .f_render       = render_net_udp6_stats,
1364         .f_xml_print    = xml_print_net_udp6_stats,
1365         .f_json_print   = json_print_net_udp6_stats,
1366         .f_svg_print    = svg_print_net_udp6_stats,
1367         .f_raw_print    = raw_print_net_udp6_stats,
1368         .f_count_new    = NULL,
1369         .item_list      = NULL,
1370         .desc           = "UDPv6 traffic statistics",
1371 #endif
1372         .name           = "A_NET_UDP6",
1373         .item_list_sz   = 0,
1374         .g_nr           = 2,
1375         .nr_ini         = 1,
1376         .nr2            = 1,
1377         .nr_max         = 1,
1378         .nr             = {1, 1, 1},
1379         .nr_allocated   = 0,
1380         .fsize          = STATS_NET_UDP6_SIZE,
1381         .msize          = STATS_NET_UDP6_SIZE,
1382         .opt_flags      = 0,
1383         .buf            = {NULL, NULL, NULL},
1384         .bitmap         = NULL
1385 };
1386
1387 /* CPU frequency */
1388 struct activity pwr_cpufreq_act = {
1389         .id             = A_PWR_CPU,
1390         .options        = AO_COUNTED + AO_GRAPH_PER_ITEM,
1391         .magic          = ACTIVITY_MAGIC_BASE,
1392         .group          = G_POWER,
1393 #ifdef SOURCE_SADC
1394         .f_count_index  = 0,    /* wrap_get_cpu_nr() */
1395         .f_count2       = NULL,
1396         .f_read         = wrap_read_cpuinfo,
1397 #endif
1398 #ifdef SOURCE_SAR
1399         .f_print        = print_pwr_cpufreq_stats,
1400         .f_print_avg    = print_avg_pwr_cpufreq_stats,
1401 #endif
1402 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1403         .hdr_line       = "CPU;MHz",
1404 #endif
1405         .gtypes_nr      = {STATS_PWR_CPUFREQ_ULL, STATS_PWR_CPUFREQ_UL, STATS_PWR_CPUFREQ_U},
1406         .ftypes_nr      = {0, 0, 0},
1407 #ifdef SOURCE_SADF
1408         .f_render       = render_pwr_cpufreq_stats,
1409         .f_xml_print    = xml_print_pwr_cpufreq_stats,
1410         .f_json_print   = json_print_pwr_cpufreq_stats,
1411         .f_svg_print    = svg_print_pwr_cpufreq_stats,
1412         .f_raw_print    = raw_print_pwr_cpufreq_stats,
1413         .f_count_new    = NULL,
1414         .item_list      = NULL,
1415         .desc           = "CPU clock frequency",
1416 #endif
1417         .name           = "A_PWR_CPU",
1418         .item_list_sz   = 0,
1419         .g_nr           = 1,
1420         .nr_ini         = -1,
1421         .nr2            = 1,
1422         .nr_max         = NR_CPUS + 1,
1423         .nr             = {-1, -1, -1},
1424         .nr_allocated   = 0,
1425         .fsize          = STATS_PWR_CPUFREQ_SIZE,
1426         .msize          = STATS_PWR_CPUFREQ_SIZE,
1427         .opt_flags      = 0,
1428         .buf            = {NULL, NULL, NULL},
1429         .bitmap         = &cpu_bitmap
1430 };
1431
1432 /* Fan */
1433 struct activity pwr_fan_act = {
1434         .id             = A_PWR_FAN,
1435         .options        = AO_COUNTED + AO_GRAPH_PER_ITEM,
1436         .magic          = ACTIVITY_MAGIC_BASE,
1437         .group          = G_POWER,
1438 #ifdef SOURCE_SADC
1439         .f_count_index  = 5,    /* wrap_get_fan_nr() */
1440         .f_count2       = NULL,
1441         .f_read         = wrap_read_fan,
1442 #endif
1443 #ifdef SOURCE_SAR
1444         .f_print        = print_pwr_fan_stats,
1445         .f_print_avg    = print_avg_pwr_fan_stats,
1446 #endif
1447 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1448         .hdr_line       = "FAN;DEVICE;rpm;drpm",
1449 #endif
1450         .gtypes_nr      = {STATS_PWR_FAN_ULL, STATS_PWR_FAN_UL, STATS_PWR_FAN_U},
1451         .ftypes_nr      = {0, 0, 0},
1452 #ifdef SOURCE_SADF
1453         .f_render       = render_pwr_fan_stats,
1454         .f_xml_print    = xml_print_pwr_fan_stats,
1455         .f_json_print   = json_print_pwr_fan_stats,
1456         .f_svg_print    = svg_print_pwr_fan_stats,
1457         .f_raw_print    = raw_print_pwr_fan_stats,
1458         .f_count_new    = NULL,
1459         .item_list      = NULL,
1460         .desc           = "Fans speed",
1461 #endif
1462         .name           = "A_PWR_FAN",
1463         .item_list_sz   = 0,
1464         .g_nr           = 1,
1465         .nr_ini         = -1,
1466         .nr2            = 1,
1467         .nr_max         = MAX_NR_FANS,
1468         .nr             = {-1, -1, -1},
1469         .nr_allocated   = 0,
1470         .fsize          = STATS_PWR_FAN_SIZE,
1471         .msize          = STATS_PWR_FAN_SIZE,
1472         .opt_flags      = 0,
1473         .buf            = {NULL, NULL, NULL},
1474         .bitmap         = NULL
1475 };
1476
1477 /* Temperature */
1478 struct activity pwr_temp_act = {
1479         .id             = A_PWR_TEMP,
1480         .options        = AO_COUNTED + AO_GRAPH_PER_ITEM,
1481         .magic          = ACTIVITY_MAGIC_BASE,
1482         .group          = G_POWER,
1483 #ifdef SOURCE_SADC
1484         .f_count_index  = 6,    /* wrap_get_temp_nr() */
1485         .f_count2       = NULL,
1486         .f_read         = wrap_read_temp,
1487 #endif
1488 #ifdef SOURCE_SAR
1489         .f_print        = print_pwr_temp_stats,
1490         .f_print_avg    = print_avg_pwr_temp_stats,
1491 #endif
1492 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1493         .hdr_line       = "TEMP;DEVICE;degC;%temp",
1494 #endif
1495         .gtypes_nr      = {STATS_PWR_TEMP_ULL, STATS_PWR_TEMP_UL, STATS_PWR_TEMP_U},
1496         .ftypes_nr      = {0, 0, 0},
1497 #ifdef SOURCE_SADF
1498         .f_render       = render_pwr_temp_stats,
1499         .f_xml_print    = xml_print_pwr_temp_stats,
1500         .f_json_print   = json_print_pwr_temp_stats,
1501         .f_svg_print    = svg_print_pwr_temp_stats,
1502         .f_raw_print    = raw_print_pwr_temp_stats,
1503         .f_count_new    = NULL,
1504         .item_list      = NULL,
1505         .desc           = "Devices temperature",
1506 #endif
1507         .name           = "A_PWR_TEMP",
1508         .item_list_sz   = 0,
1509         .g_nr           = 2,
1510         .nr_ini         = -1,
1511         .nr2            = 1,
1512         .nr_max         = MAX_NR_TEMP_SENSORS,
1513         .nr             = {-1, -1, -1},
1514         .nr_allocated   = 0,
1515         .fsize          = STATS_PWR_TEMP_SIZE,
1516         .msize          = STATS_PWR_TEMP_SIZE,
1517         .opt_flags      = 0,
1518         .buf            = {NULL, NULL, NULL},
1519         .bitmap         = NULL
1520 };
1521
1522 /* Voltage inputs */
1523 struct activity pwr_in_act = {
1524         .id             = A_PWR_IN,
1525         .options        = AO_COUNTED + AO_GRAPH_PER_ITEM,
1526         .magic          = ACTIVITY_MAGIC_BASE,
1527         .group          = G_POWER,
1528 #ifdef SOURCE_SADC
1529         .f_count_index  = 7,    /* wrap_get_in_nr() */
1530         .f_count2       = NULL,
1531         .f_read         = wrap_read_in,
1532 #endif
1533 #ifdef SOURCE_SAR
1534         .f_print        = print_pwr_in_stats,
1535         .f_print_avg    = print_avg_pwr_in_stats,
1536 #endif
1537 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1538         .hdr_line       = "IN;DEVICE;inV;%in",
1539 #endif
1540         .gtypes_nr      = {STATS_PWR_IN_ULL, STATS_PWR_IN_UL, STATS_PWR_IN_U},
1541         .ftypes_nr      = {0, 0, 0},
1542 #ifdef SOURCE_SADF
1543         .f_render       = render_pwr_in_stats,
1544         .f_xml_print    = xml_print_pwr_in_stats,
1545         .f_json_print   = json_print_pwr_in_stats,
1546         .f_svg_print    = svg_print_pwr_in_stats,
1547         .f_raw_print    = raw_print_pwr_in_stats,
1548         .f_count_new    = NULL,
1549         .item_list      = NULL,
1550         .desc           = "Voltage inputs statistics",
1551 #endif
1552         .name           = "A_PWR_IN",
1553         .item_list_sz   = 0,
1554         .g_nr           = 2,
1555         .nr_ini         = -1,
1556         .nr2            = 1,
1557         .nr_max         = MAX_NR_IN_SENSORS,
1558         .nr             = {-1, -1, -1},
1559         .nr_allocated   = 0,
1560         .fsize          = STATS_PWR_IN_SIZE,
1561         .msize          = STATS_PWR_IN_SIZE,
1562         .opt_flags      = 0,
1563         .buf            = {NULL, NULL, NULL},
1564         .bitmap         = NULL
1565 };
1566
1567 /* Hugepages activity */
1568 struct activity huge_act = {
1569         .id             = A_HUGE,
1570         .options        = AO_COLLECTED,
1571         .magic          = ACTIVITY_MAGIC_BASE + 1,
1572         .group          = G_DEFAULT,
1573 #ifdef SOURCE_SADC
1574         .f_count_index  = -1,
1575         .f_count2       = NULL,
1576         .f_read         = wrap_read_meminfo_huge,
1577 #endif
1578 #ifdef SOURCE_SAR
1579         .f_print        = print_huge_stats,
1580         .f_print_avg    = print_avg_huge_stats,
1581 #endif
1582 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1583         .hdr_line       = "kbhugfree;kbhugused;%hugused;kbhugrsvd;kbhugsurp",
1584 #endif
1585         .gtypes_nr      = {STATS_HUGE_ULL, STATS_HUGE_UL, STATS_HUGE_U},
1586         .ftypes_nr      = {0, 0, 0},
1587 #ifdef SOURCE_SADF
1588         .f_render       = render_huge_stats,
1589         .f_xml_print    = xml_print_huge_stats,
1590         .f_json_print   = json_print_huge_stats,
1591         .f_svg_print    = svg_print_huge_stats,
1592         .f_raw_print    = raw_print_huge_stats,
1593         .f_count_new    = NULL,
1594         .item_list      = NULL,
1595         .desc           = "Huge pages utilization",
1596 #endif
1597         .name           = "A_HUGE",
1598         .item_list_sz   = 0,
1599         .g_nr           = 2,
1600         .nr_ini         = 1,
1601         .nr2            = 1,
1602         .nr_max         = 1,
1603         .nr             = {1, 1, 1},
1604         .nr_allocated   = 0,
1605         .fsize          = STATS_HUGE_SIZE,
1606         .msize          = STATS_HUGE_SIZE,
1607         .opt_flags      = 0,
1608         .buf            = {NULL, NULL, NULL},
1609         .bitmap         = NULL
1610 };
1611
1612 /* CPU weighted frequency */
1613 struct activity pwr_wghfreq_act = {
1614         .id             = A_PWR_FREQ,
1615         .options        = AO_COUNTED + AO_MATRIX,
1616         .magic          = ACTIVITY_MAGIC_BASE + 1,
1617         .group          = G_POWER,
1618 #ifdef SOURCE_SADC
1619         .f_count_index  = 0,    /* wrap_get_cpu_nr() */
1620         .f_count2       = wrap_get_freq_nr,
1621         .f_read         = wrap_read_cpu_wghfreq,
1622 #endif
1623 #ifdef SOURCE_SAR
1624         .f_print        = print_pwr_wghfreq_stats,
1625         .f_print_avg    = print_pwr_wghfreq_stats,
1626 #endif
1627 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1628         .hdr_line       = "CPU;wghMHz",
1629 #endif
1630         .gtypes_nr      = {STATS_PWR_WGHFREQ_ULL, STATS_PWR_WGHFREQ_UL, STATS_PWR_WGHFREQ_U},
1631         .ftypes_nr      = {0, 0, 0},
1632 #ifdef SOURCE_SADF
1633         .f_render       = render_pwr_wghfreq_stats,
1634         .f_xml_print    = xml_print_pwr_wghfreq_stats,
1635         .f_json_print   = json_print_pwr_wghfreq_stats,
1636         .f_svg_print    = NULL,
1637         .f_raw_print    = raw_print_pwr_wghfreq_stats,
1638         .f_count_new    = NULL,
1639         .item_list      = NULL,
1640         .desc           = "CPU weighted frequency",
1641 #endif
1642         .name           = "A_PWR_FREQ",
1643         .item_list_sz   = 0,
1644         .g_nr           = 0,
1645         .nr_ini         = -1,
1646         .nr2            = -1,
1647         .nr_max         = NR_CPUS + 1,
1648         .nr             = {-1, -1, -1},
1649         .nr_allocated   = 0,
1650         .fsize          = STATS_PWR_WGHFREQ_SIZE,
1651         .msize          = STATS_PWR_WGHFREQ_SIZE,
1652         .opt_flags      = 0,
1653         .buf            = {NULL, NULL, NULL},
1654         .bitmap         = &cpu_bitmap
1655 };
1656
1657 /* USB devices plugged into the system */
1658 struct activity pwr_usb_act = {
1659         .id             = A_PWR_USB,
1660         .options        = AO_COUNTED + AO_CLOSE_MARKUP,
1661         .magic          = ACTIVITY_MAGIC_BASE,
1662         .group          = G_POWER,
1663 #ifdef SOURCE_SADC
1664         .f_count_index  = 8,    /* wrap_get_usb_nr() */
1665         .f_count2       = NULL,
1666         .f_read         = wrap_read_bus_usb_dev,
1667 #endif
1668 #ifdef SOURCE_SAR
1669         .f_print        = print_pwr_usb_stats,
1670         .f_print_avg    = print_avg_pwr_usb_stats,
1671 #endif
1672 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1673         .hdr_line       = "manufact;product;BUS;idvendor;idprod;maxpower",
1674 #endif
1675         .gtypes_nr      = {STATS_PWR_USB_ULL, STATS_PWR_USB_UL, STATS_PWR_USB_U},
1676         .ftypes_nr      = {0, 0, 0},
1677 #ifdef SOURCE_SADF
1678         .f_render       = render_pwr_usb_stats,
1679         .f_xml_print    = xml_print_pwr_usb_stats,
1680         .f_json_print   = json_print_pwr_usb_stats,
1681         .f_svg_print    = NULL,
1682         .f_raw_print    = raw_print_pwr_usb_stats,
1683         .f_count_new    = NULL,
1684         .item_list      = NULL,
1685         .desc           = "USB devices",
1686 #endif
1687         .name           = "A_PWR_USB",
1688         .item_list_sz   = 0,
1689         .g_nr           = 0,
1690         .nr_ini         = -1,
1691         .nr2            = 1,
1692         .nr_max         = MAX_NR_USB,
1693         .nr             = {-1, -1, -1},
1694         .nr_allocated   = 0,
1695         .fsize          = STATS_PWR_USB_SIZE,
1696         .msize          = STATS_PWR_USB_SIZE,
1697         .opt_flags      = 0,
1698         .buf            = {NULL, NULL, NULL},
1699         .bitmap         = NULL
1700 };
1701
1702 /* Filesystem usage activity */
1703 struct activity filesystem_act = {
1704         .id             = A_FS,
1705         .options        = AO_COUNTED + AO_GRAPH_PER_ITEM + AO_MULTIPLE_OUTPUTS,
1706         .magic          = ACTIVITY_MAGIC_BASE + 1,
1707         .group          = G_XDISK,
1708 #ifdef SOURCE_SADC
1709         .f_count_index  = 9,    /* wrap_get_filesystem_nr() */
1710         .f_count2       = NULL,
1711         .f_read         = wrap_read_filesystem,
1712 #endif
1713 #ifdef SOURCE_SAR
1714         .f_print        = print_filesystem_stats,
1715         .f_print_avg    = print_avg_filesystem_stats,
1716 #endif
1717 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1718         .hdr_line       = "FILESYSTEM;MBfsfree;MBfsused;%fsused;%ufsused;Ifree;Iused;%Iused|"
1719                           "MOUNTPOINT;MBfsfree;MBfsused;%fsused;%ufsused;Ifree;Iused;%Iused",
1720 #endif
1721         .gtypes_nr      = {STATS_FILESYSTEM_ULL, STATS_FILESYSTEM_UL, STATS_FILESYSTEM_U},
1722         .ftypes_nr      = {0, 0, 0},
1723 #ifdef SOURCE_SADF
1724         .f_render       = render_filesystem_stats,
1725         .f_xml_print    = xml_print_filesystem_stats,
1726         .f_json_print   = json_print_filesystem_stats,
1727         .f_svg_print    = svg_print_filesystem_stats,
1728         .f_raw_print    = raw_print_filesystem_stats,
1729         .f_count_new    = count_new_filesystem,
1730         .item_list      = NULL,
1731         .desc           = "Filesystems statistics",
1732 #endif
1733         .name           = "A_FS",
1734         .item_list_sz   = 0,
1735         .g_nr           = 4,
1736         .nr_ini         = -1,
1737         .nr2            = 1,
1738         .nr_max         = MAX_NR_FS,
1739         .nr             = {-1, -1, -1},
1740         .nr_allocated   = 0,
1741         .fsize          = STATS_FILESYSTEM_SIZE,
1742         .msize          = STATS_FILESYSTEM_SIZE,
1743         .opt_flags      = 0,
1744         .buf            = {NULL, NULL, NULL},
1745         .bitmap         = NULL
1746 };
1747
1748 /* Fibre Channel HBA usage activity */
1749 struct activity fchost_act = {
1750         .id             = A_NET_FC,
1751         .options        = AO_COUNTED + AO_GRAPH_PER_ITEM,
1752         .magic          = ACTIVITY_MAGIC_BASE,
1753         .group          = G_DISK,
1754 #ifdef SOURCE_SADC
1755         .f_count_index  = 10,   /* wrap_get_fchost_nr() */
1756         .f_count2       = NULL,
1757         .f_read         = wrap_read_fchost,
1758 #endif
1759 #ifdef SOURCE_SAR
1760         .f_print        = print_fchost_stats,
1761         .f_print_avg    = print_fchost_stats,
1762 #endif
1763 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1764         .hdr_line       = "FCHOST;fch_rxf/s;fch_txf/s;fch_rxw/s;fch_txw/s",
1765 #endif
1766         .gtypes_nr      = {STATS_FCHOST_ULL, STATS_FCHOST_UL, STATS_FCHOST_U},
1767         .ftypes_nr      = {0, 0, 0},
1768 #ifdef SOURCE_SADF
1769         .f_render       = render_fchost_stats,
1770         .f_xml_print    = xml_print_fchost_stats,
1771         .f_json_print   = json_print_fchost_stats,
1772         .f_svg_print    = svg_print_fchost_stats,
1773         .f_raw_print    = raw_print_fchost_stats,
1774         .f_count_new    = count_new_fchost,
1775         .item_list      = NULL,
1776         .desc           = "Fibre Channel HBA statistics",
1777 #endif
1778         .name           = "A_NET_FC",
1779         .item_list_sz   = 0,
1780         .g_nr           = 2,
1781         .nr_ini         = -1,
1782         .nr2            = 1,
1783         .nr_max         = MAX_NR_FCHOSTS,
1784         .nr             = {-1, -1, -1},
1785         .nr_allocated   = 0,
1786         .fsize          = STATS_FCHOST_SIZE,
1787         .msize          = STATS_FCHOST_SIZE,
1788         .opt_flags      = 0,
1789         .buf            = {NULL, NULL, NULL},
1790         .bitmap         = NULL
1791 };
1792
1793 /* Softnet activity */
1794 struct activity softnet_act = {
1795         .id             = A_NET_SOFT,
1796         .options        = AO_COLLECTED + AO_COUNTED + AO_CLOSE_MARKUP +
1797                           AO_GRAPH_PER_ITEM + AO_PERSISTENT,
1798         .magic          = ACTIVITY_MAGIC_BASE,
1799         .group          = G_DEFAULT,
1800 #ifdef SOURCE_SADC
1801         .f_count_index  = 0,    /* wrap_get_cpu_nr() */
1802         .f_count2       = NULL,
1803         .f_read         = wrap_read_softnet,
1804 #endif
1805 #ifdef SOURCE_SAR
1806         .f_print        = print_softnet_stats,
1807         .f_print_avg    = print_softnet_stats,
1808 #endif
1809 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1810         .hdr_line       = "CPU;total/s;dropd/s;squeezd/s;rx_rps/s;flw_lim/s",
1811 #endif
1812         .gtypes_nr      = {STATS_SOFTNET_ULL, STATS_SOFTNET_UL, STATS_SOFTNET_U},
1813         .ftypes_nr      = {0, 0, 0},
1814 #ifdef SOURCE_SADF
1815         .f_render       = render_softnet_stats,
1816         .f_xml_print    = xml_print_softnet_stats,
1817         .f_json_print   = json_print_softnet_stats,
1818         .f_svg_print    = svg_print_softnet_stats,
1819         .f_raw_print    = raw_print_softnet_stats,
1820         .f_count_new    = NULL,
1821         .item_list      = NULL,
1822         .desc           = "Software-based network processing statistics",
1823 #endif
1824         .name           = "A_NET_SOFT",
1825         .item_list_sz   = 0,
1826         .g_nr           = 2,
1827         .nr_ini         = -1,
1828         .nr2            = 1,
1829         .nr_max         = NR_CPUS + 1,
1830         .nr             = {-1, -1, -1},
1831         .nr_allocated   = 0,
1832         .fsize          = STATS_SOFTNET_SIZE,
1833         .msize          = STATS_SOFTNET_SIZE,
1834         .opt_flags      = 0,
1835         .buf            = {NULL, NULL, NULL},
1836         .bitmap         = &cpu_bitmap
1837 };
1838
1839 #ifdef SOURCE_SADC
1840 /*
1841  * Array of functions used to count number of items.
1842  */
1843 __nr_t (*f_count[NR_F_COUNT]) (struct activity *) = {
1844         wrap_get_cpu_nr,
1845         wrap_get_irq_nr,
1846         wrap_get_serial_nr,
1847         wrap_get_disk_nr,
1848         wrap_get_iface_nr,
1849         wrap_get_fan_nr,
1850         wrap_get_temp_nr,
1851         wrap_get_in_nr,
1852         wrap_get_usb_nr,
1853         wrap_get_filesystem_nr,
1854         wrap_get_fchost_nr
1855 };
1856 #endif
1857
1858 /*
1859  * Array of activities.
1860  * (Order of activities doesn't matter for daily data files).
1861  */
1862 struct activity *act[NR_ACT] = {
1863         &cpu_act,
1864         &pcsw_act,
1865         &irq_act,
1866         &swap_act,
1867         &paging_act,
1868         &io_act,
1869         &memory_act,
1870         &huge_act,
1871         &ktables_act,
1872         &queue_act,
1873         &serial_act,
1874         &disk_act,
1875         /* <network> */
1876         &net_dev_act,
1877         &net_edev_act,
1878         &net_nfs_act,
1879         &net_nfsd_act,
1880         &net_sock_act,
1881         &net_ip_act,
1882         &net_eip_act,
1883         &net_icmp_act,
1884         &net_eicmp_act,
1885         &net_tcp_act,
1886         &net_etcp_act,
1887         &net_udp_act,
1888         &net_sock6_act,
1889         &net_ip6_act,
1890         &net_eip6_act,
1891         &net_icmp6_act,
1892         &net_eicmp6_act,
1893         &net_udp6_act,
1894         &fchost_act,
1895         &softnet_act,   /* AO_CLOSE_MARKUP */
1896         /* </network> */
1897         /* <power-management> */
1898         &pwr_cpufreq_act,
1899         &pwr_fan_act,
1900         &pwr_temp_act,
1901         &pwr_in_act,
1902         &pwr_wghfreq_act,
1903         &pwr_usb_act,           /* AO_CLOSE_MARKUP */
1904         /* </power-management> */
1905         &filesystem_act
1906 };