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