aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cfile.c23
-rw-r--r--cfile.h2
-rw-r--r--epan/dissectors/packet-frame.c10
-rw-r--r--epan/epan-int.h1
-rw-r--r--epan/epan.c9
-rw-r--r--epan/epan.h2
-rw-r--r--file.c3
-rw-r--r--rawshark.c1
-rw-r--r--tshark.c1
9 files changed, 49 insertions, 3 deletions
diff --git a/cfile.c b/cfile.c
index 8fe484622c..50c532eb62 100644
--- a/cfile.c
+++ b/cfile.c
@@ -31,6 +31,29 @@
#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)
{
diff --git a/cfile.h b/cfile.h
index e9fb2afb99..c1ff88f1b2 100644
--- a/cfile.h
+++ b/cfile.h
@@ -128,6 +128,8 @@ typedef struct _capture_file {
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 */
diff --git a/epan/dissectors/packet-frame.c b/epan/dissectors/packet-frame.c
index c3e40f116d..1abdbe8d88 100644
--- a/epan/dissectors/packet-frame.c
+++ b/epan/dissectors/packet-frame.c
@@ -288,8 +288,14 @@ dissect_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
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;
diff --git a/epan/epan-int.h b/epan/epan-int.h
index 6580c55c26..0fa38d0427 100644
--- a/epan/epan-int.h
+++ b/epan/epan-int.h
@@ -30,6 +30,7 @@ struct epan_session {
void *data;
const nstime_t *(*get_frame_ts)(void *data, guint32 frame_num);
+ const char *(*get_interface_name)(void *data, guint32 interface_id);
};
#endif
diff --git a/epan/epan.c b/epan/epan.c
index e4a7c2dd48..70db022c53 100644
--- a/epan/epan.c
+++ b/epan/epan.c
@@ -146,6 +146,15 @@ epan_new(void)
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)
{
diff --git a/epan/epan.h b/epan/epan.h
index 252d748ee8..63d1e41828 100644
--- a/epan/epan.h
+++ b/epan/epan.h
@@ -129,6 +129,8 @@ typedef struct epan_session epan_t;
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);
diff --git a/file.c b/file.c
index e7c110b7c7..ef28127d52 100644
--- a/file.c
+++ b/file.c
@@ -303,7 +303,7 @@ static void compute_elapsed(GTimeVal *start_time)
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;
@@ -330,6 +330,7 @@ ws_epan_new(capture_file *cf)
epan->data = cf;
epan->get_frame_ts = ws_get_frame_ts;
+ epan->get_interface_name = cap_file_get_interface_name;
return epan;
}
diff --git a/rawshark.c b/rawshark.c
index dcf86b96ea..69e417b495 100644
--- a/rawshark.c
+++ b/rawshark.c
@@ -1594,6 +1594,7 @@ raw_epan_new(capture_file *cf)
epan->data = cf;
epan->get_frame_ts = raw_get_frame_ts;
+ epan->get_interface_name = cap_file_get_interface_name;
return epan;
}
diff --git a/tshark.c b/tshark.c
index 115ecc12ee..0d48f1506b 100644
--- a/tshark.c
+++ b/tshark.c
@@ -2189,6 +2189,7 @@ tshark_epan_new(capture_file *cf)
epan->data = cf;
epan->get_frame_ts = tshark_get_frame_ts;
+ epan->get_interface_name = cap_file_get_interface_name;
return epan;
}