14#ifndef __IO_GRAPH_ITEM_H__
15#define __IO_GRAPH_ITEM_H__
28 IOG_ITEM_UNIT_PACKETS = IOG_ITEM_UNIT_FIRST,
31 IOG_ITEM_UNIT_CALC_SUM,
32 IOG_ITEM_UNIT_CALC_FRAMES,
33 IOG_ITEM_UNIT_CALC_FIELDS,
34 IOG_ITEM_UNIT_CALC_MAX,
35 IOG_ITEM_UNIT_CALC_MIN,
36 IOG_ITEM_UNIT_CALC_AVERAGE,
37 IOG_ITEM_UNIT_CALC_THROUGHPUT,
38 IOG_ITEM_UNIT_CALC_LOAD,
39 IOG_ITEM_UNIT_LAST = IOG_ITEM_UNIT_CALC_LOAD,
41} io_graph_item_unit_t;
69 uint32_t first_frame_in_invl;
70 uint32_t min_frame_in_invl;
71 uint32_t max_frame_in_invl;
72 uint32_t last_frame_in_invl;
81reset_io_graph_items(
io_graph_item_t *items,
size_t count,
int hf_index _U_) {
85 for (i = 0; i < count; i++) {
91 item->first_frame_in_invl = 0;
92 item->min_frame_in_invl = 0;
93 item->max_frame_in_invl = 0;
94 item->last_frame_in_invl = 0;
96 nstime_set_zero(&item->time_max);
97 nstime_set_zero(&item->time_min);
98 nstime_set_zero(&item->time_tot);
121 item->double_tot = 0;
134 item->double_tot = 0;
139 item->double_max = 0;
140 item->double_min = 0;
141 item->double_tot = 0;
144 case FT_RELATIVE_TIME:
145 nstime_set_zero(&item->time_max);
146 nstime_set_zero(&item->time_min);
147 nstime_set_zero(&item->time_tot);
180GString *
check_field_unit(
const char *field_name,
int *hf_index, io_graph_item_unit_t item_unit);
214 if (item->first_frame_in_invl == 0) {
215 item->first_frame_in_invl = pinfo->
num;
217 item->last_frame_in_invl = pinfo->
num;
219 if (edt && hf_index >= 0) {
230 for (i=0; i < gp->len; i++) {
242 new_uint64 = fvalue_get_uinteger(((
field_info *)gp->pdata[i])->value);
244 if ((new_uint64 > item->uint_max) || (item->fields == 0)) {
245 item->uint_max = new_uint64;
246 item->max_frame_in_invl = pinfo->
num;
248 if ((new_uint64 < item->uint_min) || (item->fields == 0)) {
249 item->uint_min = new_uint64;
250 item->min_frame_in_invl = pinfo->
num;
252 item->double_tot += (double)new_uint64;
259 new_int64 = fvalue_get_sinteger(((
field_info *)gp->pdata[i])->value);
260 if ((new_int64 > item->int_max) || (item->fields == 0)) {
261 item->int_max = new_int64;
262 item->max_frame_in_invl = pinfo->
num;
264 if ((new_int64 < item->int_min) || (item->fields == 0)) {
265 item->int_min = new_int64;
266 item->min_frame_in_invl = pinfo->
num;
268 item->double_tot += (double)new_int64;
275 new_uint64 = fvalue_get_uinteger64(((
field_info *)gp->pdata[i])->value);
276 if ((new_uint64 > item->uint_max) || (item->fields == 0)) {
277 item->uint_max = new_uint64;
278 item->max_frame_in_invl = pinfo->
num;
280 if ((new_uint64 < item->uint_min) || (item->fields == 0)) {
281 item->uint_min = new_uint64;
282 item->min_frame_in_invl = pinfo->
num;
284 item->double_tot += (double)new_uint64;
291 new_int64 = fvalue_get_sinteger64(((
field_info *)gp->pdata[i])->value);
292 if ((new_int64 > item->int_max) || (item->fields == 0)) {
293 item->int_max = new_int64;
294 item->max_frame_in_invl = pinfo->
num;
296 if ((new_int64 < item->int_min) || (item->fields == 0)) {
297 item->int_min = new_int64;
298 item->min_frame_in_invl = pinfo->
num;
300 item->double_tot += (double)new_int64;
304 new_float = (float)fvalue_get_floating(((
field_info *)gp->pdata[i])->value);
305 if ((new_float > item->double_max) || (item->fields == 0)) {
306 item->double_max = new_float;
307 item->max_frame_in_invl = pinfo->
num;
309 if ((new_float < item->double_min) || (item->fields == 0)) {
310 item->double_min = new_float;
311 item->min_frame_in_invl = pinfo->
num;
313 item->double_tot += new_float;
317 new_double = fvalue_get_floating(((
field_info *)gp->pdata[i])->value);
318 if ((new_double > item->double_max) || (item->fields == 0)) {
319 item->double_max = new_double;
320 item->max_frame_in_invl = pinfo->
num;
322 if ((new_double < item->double_min) || (item->fields == 0)) {
323 item->double_min = new_double;
324 item->min_frame_in_invl = pinfo->
num;
326 item->double_tot += new_double;
329 case FT_RELATIVE_TIME:
330 new_time = fvalue_get_time(((
field_info *)gp->pdata[i])->value);
333 case IOG_ITEM_UNIT_CALC_LOAD:
343 const nstime_t time_zero = NSTIME_INIT_ZERO;
344 if (nstime_cmp(new_time, &time_zero) < 0) {
348 t = t * 1000000 + new_time->nsecs / 1000;
355 pt = pinfo->
rel_ts.secs * 1000000 + pinfo->
rel_ts.nsecs / 1000;
363 load_item = &items[j];
364 load_item->time_tot.nsecs += (int) (pt * 1000);
365 if (load_item->time_tot.nsecs > 1000000000) {
366 load_item->time_tot.secs++;
367 load_item->time_tot.nsecs -= 1000000000;
376 if (t > (uint64_t) interval) {
377 pt = (uint64_t) interval;
385 if ( (nstime_cmp(new_time, &item->time_max) > 0)
386 || (item->fields == 0)) {
387 item->time_max = *new_time;
388 item->max_frame_in_invl = pinfo->
num;
390 if ( (nstime_cmp(new_time, &item->time_min) < 0)
391 || (item->fields == 0)) {
392 item->time_min = *new_time;
393 item->min_frame_in_invl = pinfo->
num;
400 if ((item_unit == IOG_ITEM_UNIT_CALC_FRAMES) ||
401 (item_unit == IOG_ITEM_UNIT_CALC_FIELDS)) {
415 ws_assert_not_reached();
423 item->bytes += pinfo->fd->pkt_len;
enum ftenum proto_registrar_get_ftype(const int n)
Definition proto.c:11213
GPtrArray * proto_get_finfo_ptr_array(const proto_tree *tree, const int id)
Definition proto.c:11273
int64_t get_io_graph_index(packet_info *pinfo, int interval)
Definition io_graph_item.c:25
GString * check_field_unit(const char *field_name, int *hf_index, io_graph_item_unit_t item_unit)
Definition io_graph_item.c:44
double get_io_graph_item(const io_graph_item_t *items, io_graph_item_unit_t val_units, int idx, int hf_index, const capture_file *cap_file, int interval, int cur_idx, bool asAOT)
Definition io_graph_item.c:143
#define nstime_add(sum, a)
Definition nstime.h:96
Definition io_graph_item.h:43
Definition packet_info.h:43
uint32_t num
Definition packet_info.h:47
nstime_t rel_ts
Definition packet_info.h:49
Definition epan_dissect.h:28