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