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