diff options
author | Jim Young <jyoung@gsu.edu> | 2017-01-30 02:45:15 -0500 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2017-02-09 11:31:59 +0000 |
commit | 520a1b20660f6ce071d8b4e535f12c93a5699d6f (patch) | |
tree | 35caae71ed8b96b055aa13ed060230e0ee33c8d1 /cfile.c | |
parent | 9e2366a2e505791a5dde59f5563aaad68af71885 (diff) |
Make the capture file's interface description filterable
This patch introduces the frame.interface_description field.
While testing this new functionality it became obvious that we have
a non-optimal interaction between the existing cfile.c's
cap_file_get_interface_name(), the recently added frame.interface_name
field and this new frame.interface_description field.
The string returned from cap_file_get_interface_name() may in fact
come from one of three different sources: the idb's interface name
(if it exists) or the idb's interface description (if that exists)
or a default text of "unknown". The string ultimately becomes the
rame.interface_name whether or not the idb had an interface name
option to begin with. This behavior does not allow one to test for
the simple presence of frame.interface_name. The new peer function
cap_file_get_interface_description() added by this patch returns
NULL instead of "unknown" if the idb does not have an interface
description. Should cap_file_get_interface_name() be similarly
modified to return NULL if the idb does not have an interface name?
Bug: 9781
Change-Id: Ie479f373c5080c004dd22bd88919838feca71e95
Reviewed-on: https://code.wireshark.org/review/19861
Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'cfile.c')
-rw-r--r-- | cfile.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -54,6 +54,28 @@ cap_file_get_interface_name(void *data, guint32 interface_id) return "unknown"; } +const char * +cap_file_get_interface_description(void *data, guint32 interface_id) +{ + capture_file *cf = (capture_file *) data; + wtapng_iface_descriptions_t *idb_info; + wtap_block_t wtapng_if_descr = NULL; + char* interface_name; + + idb_info = wtap_file_get_idb_info(cf->wth); + + if (interface_id < idb_info->interface_data->len) + wtapng_if_descr = g_array_index(idb_info->interface_data, wtap_block_t, interface_id); + + g_free(idb_info); + + if (wtapng_if_descr) { + if (wtap_block_get_string_option_value(wtapng_if_descr, OPT_IDB_DESCR, &interface_name) == WTAP_OPTTYPE_SUCCESS) + return interface_name; + } + return NULL; +} + void cap_file_init(capture_file *cf) { |