2 * A counter tree API for Wireshark dissectors
3 * 2005, Luis E. G. Ontanon
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 #ifndef __STATS_TREE_H
26 #define __STATS_TREE_H
29 #include <epan/epan.h>
30 #include <epan/packet_info.h>
31 #include <epan/to_str.h>
33 #include "../stat_menu.h"
34 #include "../register.h"
36 #define STAT_TREE_ROOT "root"
38 /* obscure information regarding the stats_tree */
39 typedef struct _stats_tree stats_tree;
41 /* tap packet callback for stats_tree */
42 typedef int (*stat_tree_packet_cb)(stats_tree*,
47 /* stats_tree initialization callback */
48 typedef void (*stat_tree_init_cb)(stats_tree*);
50 /* stats_tree cleanup callback */
51 typedef void (*stat_tree_cleanup_cb)(stats_tree*);
53 /* registers a new stats tree with default group REGISTER_STAT_GROUP_UNSORTED
55 * name: protocol display name
56 * flags: tap listener flags for per-packet callback
57 * packet: per packet callback
58 * init: tree initialization callback
59 * cleanup: cleanup callback
61 extern void stats_tree_register(const gchar *tapname,
65 stat_tree_packet_cb packet,
66 stat_tree_init_cb init,
67 stat_tree_cleanup_cb cleanup);
69 /* registers a new stats tree
71 * name: protocol display name
72 * flags: tap listener flags for per-packet callback
73 * packet: per packet callback
74 * init: tree initialization callback
75 * cleanup: cleanup callback
76 * stat_group: the group this stat belongs to
78 extern void stats_tree_register_with_group(const gchar *tapname,
82 stat_tree_packet_cb packet,
83 stat_tree_init_cb init,
84 stat_tree_cleanup_cb cleanup,
85 register_stat_group_t stat_group);
87 extern int stats_tree_parent_id_by_name(stats_tree *st, const gchar *parent_name);
89 /* Creates a node in the tree (to be used in the in init_cb)
90 * st: the stats_tree in which to create it
91 * name: the name of the new node
92 * parent_name: the name of the parent_node (NULL for root)
93 * with_children: TRUE if this node will have "dynamically created" children
95 extern int stats_tree_create_node(stats_tree *st,
98 gboolean with_children);
100 /* creates a node using it's parent's tree name */
101 extern int stats_tree_create_node_by_pname(stats_tree *st,
103 const gchar *parent_name,
104 gboolean with_children);
106 /* creates a node in the tree, that will contain a ranges list.
108 stats_tree_create_range_node(st,name,parent,
109 "-99","100-199","200-299","300-399","400-", NULL);
111 extern int stats_tree_create_range_node(stats_tree *st,
116 extern int stats_tree_range_node_with_pname(stats_tree *st,
118 const gchar *parent_name,
121 /* increases by one the ranged node and the sub node to whose range the value belongs */
122 extern int stats_tree_tick_range(stats_tree *st,
127 #define stats_tree_tick_range_by_pname(st,name,parent_name,value_in_range) \
128 stats_tree_tick_range((st),(name),stats_tree_parent_id_by_name((st),(parent_name),(value_in_range))
131 extern int stats_tree_create_pivot(stats_tree *st,
135 extern int stats_tree_create_pivot_by_pname(stats_tree *st,
137 const gchar *parent_name);
139 extern int stats_tree_tick_pivot(stats_tree *st,
141 const gchar *pivot_value);
144 * manipulates the value of the node whose name is given
145 * if the node does not exist yet it's created (with counter=1)
146 * using parent_name as parent node (NULL for root).
147 * with_children=TRUE to indicate that the created node will be a parent
149 typedef enum _manip_node_mode { MN_INCREASE, MN_SET } manip_node_mode;
150 extern int stats_tree_manip_node(manip_node_mode mode,
154 gboolean with_children,
157 #define increase_stat_node(st,name,parent_id,with_children,value) \
158 (stats_tree_manip_node(MN_INCREASE,(st),(name),(parent_id),(with_children),(value)))
160 #define tick_stat_node(st,name,parent_id,with_children) \
161 (stats_tree_manip_node(MN_INCREASE,(st),(name),(parent_id),(with_children),1))
163 #define set_stat_node(st,name,parent_id,with_children,value) \
164 (stats_tree_manip_node(MN_SET,(st),(name),(parent_id),(with_children),value))
166 #define zero_stat_node(st,name,parent_id,with_children) \
167 (stats_tree_manip_node(MN_SET,(st),(name),(parent_id),(with_children),0))
169 #endif /* __STATS_TREE_H */