#include "cfile.h"
+const char *
+cap_file_get_interface_name(void *data, guint32 interface_id)
+{
+ capture_file *cf = (capture_file *) data;
+ wtapng_iface_descriptions_t *idb_info;
+ const wtapng_if_descr_t *wtapng_if_descr = NULL;
+
+ idb_info = wtap_file_get_idb_info(cf->wth);
+
+ if (interface_id < idb_info->number_of_interfaces)
+ wtapng_if_descr = &g_array_index(idb_info->interface_data, wtapng_if_descr_t, interface_id);
+
+ g_free(idb_info);
+
+ if (wtapng_if_descr) {
+ if (wtapng_if_descr->if_name)
+ return wtapng_if_descr->if_name;
+ else if (wtapng_if_descr->if_description)
+ return wtapng_if_descr->if_description;
+ }
+ return "unknown";
+}
+
void
cap_file_init(capture_file *cf)
{
extern void cap_file_init(capture_file *cf);
+extern const char *cap_file_get_interface_name(void *data, guint32 interface_id);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
fh_tree = proto_item_add_subtree(ti, ett_frame);
- if (pinfo->fd->flags.has_if_id)
- proto_tree_add_uint(fh_tree, hf_frame_interface_id, tvb, 0, 0, pinfo->fd->interface_id);
+ if (pinfo->fd->flags.has_if_id && proto_field_is_referenced(tree, hf_frame_interface_id)) {
+ const char *interface_name = epan_get_interface_name(pinfo->epan, pinfo->fd->interface_id);
+
+ if (interface_name)
+ proto_tree_add_uint_format_value(fh_tree, hf_frame_interface_id, tvb, 0, 0, pinfo->fd->interface_id, "%u (%s)", pinfo->fd->interface_id, interface_name);
+ else
+ proto_tree_add_uint(fh_tree, hf_frame_interface_id, tvb, 0, 0, pinfo->fd->interface_id);
+ }
if (pinfo->fd->flags.has_pack_flags) {
proto_tree *flags_tree;
void *data;
const nstime_t *(*get_frame_ts)(void *data, guint32 frame_num);
+ const char *(*get_interface_name)(void *data, guint32 interface_id);
};
#endif
return session;
}
+const char *
+epan_get_interface_name(const epan_t *session, guint32 interface_id)
+{
+ if (session->get_interface_name)
+ return session->get_interface_name(session->data, interface_id);
+
+ return NULL;
+}
+
const nstime_t *
epan_get_frame_ts(const epan_t *session, guint32 frame_num)
{
WS_DLL_PUBLIC epan_t *epan_new(void);
+const char *epan_get_interface_name(const epan_t *session, guint32 interface_id);
+
const nstime_t *epan_get_frame_ts(const epan_t *session, guint32 frame_num);
WS_DLL_PUBLIC void epan_free(epan_t *session);
computed_elapsed = (gulong) (delta_time / 1000); /* ms */
}
-const nstime_t *
+static const nstime_t *
ws_get_frame_ts(void *data, guint32 frame_num)
{
capture_file *cf = (capture_file *) data;
epan->data = cf;
epan->get_frame_ts = ws_get_frame_ts;
+ epan->get_interface_name = cap_file_get_interface_name;
return epan;
}
epan->data = cf;
epan->get_frame_ts = raw_get_frame_ts;
+ epan->get_interface_name = cap_file_get_interface_name;
return epan;
}
epan->data = cf;
epan->get_frame_ts = tshark_get_frame_ts;
+ epan->get_interface_name = cap_file_get_interface_name;
return epan;
}