nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /* io_graph_item.h
2 * Definitions and functions for IO graph items
3 *
4 * Copied from gtk/io_stat.c, (c) 2002 Ronnie Sahlberg
5 *
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version 2
13 * of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 */
24  
25 #include "config.h"
26  
27  
28 #include <epan/epan_dissect.h>
29  
30 #include "ui/io_graph_item.h"
31  
32 int get_io_graph_index(packet_info *pinfo, int interval) {
33 nstime_t time_delta;
34  
35 /*
36 * Find in which interval this is supposed to go and store the interval index as idx
37 */
38 time_delta = pinfo->rel_ts;
39 if (time_delta.nsecs<0) {
40 time_delta.secs--;
41 time_delta.nsecs += 1000000000;
42 }
43 if (time_delta.secs<0) {
44 return -1;
45 }
46 return (int) ((time_delta.secs*1000 + time_delta.nsecs/1000000) / interval);
47 }
48  
49 GString *check_field_unit(const char *field_name, int *hf_index, io_graph_item_unit_t item_unit)
50 {
51 GString *err_str = NULL;
52 if (item_unit >= IOG_ITEM_UNIT_CALC_SUM) {
53 header_field_info *hfi;
54  
55 const char *item_unit_names[NUM_IOG_ITEM_UNITS] = {
56 "Packets",
57 "Bytes",
58 "Bits",
59 "SUM",
60 "COUNT FRAMES",
61 "COUNT FIELDS",
62 "MAX",
63 "MIN",
64 "AVG",
65 "LOAD"
66 };
67  
68 /* There was no field specified */
69 if ((field_name == NULL) || (field_name[0] == 0)) {
70 err_str = g_string_new("You didn't specify a field name.");
71 return err_str;
72 }
73  
74 /* The field could not be found */
75 hfi = proto_registrar_get_byname(field_name);
76 if (hfi == NULL) {
77 err_str = g_string_new("");
78 g_string_printf(err_str, "There is no field named '%s'.", field_name);
79 return err_str;
80 }
81  
82 if (hf_index) *hf_index = hfi->id;
83  
84 /* Check that the type is compatible */
85 switch (hfi->type) {
86 case FT_UINT8:
87 case FT_UINT16:
88 case FT_UINT24:
89 case FT_UINT32:
90 case FT_UINT64:
91 case FT_INT8:
92 case FT_INT16:
93 case FT_INT24:
94 case FT_INT32:
95 case FT_INT64:
96 case FT_FLOAT:
97 case FT_DOUBLE:
98 /* These values support all calculations except LOAD */
99 switch (item_unit) {
100 case IOG_ITEM_UNIT_CALC_LOAD:
101 err_str = g_string_new("LOAD is only supported for relative-time fields.");
102 default:
103 break;
104 }
105 /* These types support all calculations */
106 break;
107 case FT_RELATIVE_TIME:
108 /* This type only supports COUNT, MAX, MIN, AVG */
109 switch (item_unit) {
110 case IOG_ITEM_UNIT_CALC_SUM:
111 case IOG_ITEM_UNIT_CALC_FRAMES:
112 case IOG_ITEM_UNIT_CALC_FIELDS:
113 case IOG_ITEM_UNIT_CALC_MAX:
114 case IOG_ITEM_UNIT_CALC_MIN:
115 case IOG_ITEM_UNIT_CALC_AVERAGE:
116 case IOG_ITEM_UNIT_CALC_LOAD:
117 break;
118 default:
119 err_str = g_string_new("");
120 g_string_printf(err_str, "\"%s\" is a relative-time field. %s calculations are not supported on it.",
121 field_name,
122 item_unit_names[item_unit]);
123 }
124 break;
125 default:
126 if ((item_unit != IOG_ITEM_UNIT_CALC_FRAMES) &&
127 (item_unit != IOG_ITEM_UNIT_CALC_FIELDS)) {
128 err_str = g_string_new("");
129 g_string_printf(err_str, "\"%s\" doesn't have integral or float values. %s calculations are not supported on it.",
130 field_name,
131 item_unit_names[item_unit]);
132 }
133 break;
134 }
135 }
136 return err_str;
137 }
138  
139 /*
140 * Editor modelines
141 *
142 * Local Variables:
143 * c-basic-offset: 4
144 * tab-width: 8
145 * indent-tabs-mode: nil
146 * End:
147 *
148 * ex: set shiftwidth=4 tabstop=8 expandtab:
149 * :indentSize=4:tabSize=8:noTabs=true:
150 */