aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2019-05-15 18:25:42 -0700
committerGuy Harris <guy@alum.mit.edu>2019-05-16 03:06:30 +0000
commitf8ac57a2c4d3b0bab160dc5da925c1bb83e39444 (patch)
tree619b3a17683d028060f7c985a2c733bad66fca40 /wiretap
parent5fd947d20bea17e901e99ca9fe5cf3d4f1592245 (diff)
Keep and use per-interface, not per-file, FCS length information.
There is no FCS length information for a pcapng file; there's FCS length information for each interface. Change-Id: I3abb1a35b28475aa3ad6f126060140d0a524bbca Reviewed-on: https://code.wireshark.org/review/33215 Petri-Dish: Guy Harris <guy@alum.mit.edu> Tested-by: Petri Dish Buildbot Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/pcapng.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/wiretap/pcapng.c b/wiretap/pcapng.c
index 1627bede61..e6b7e46f0e 100644
--- a/wiretap/pcapng.c
+++ b/wiretap/pcapng.c
@@ -209,6 +209,7 @@ typedef struct interface_info_s {
guint32 snap_len;
guint64 time_units_per_second;
int tsprecision;
+ int fcslen;
} interface_info_t;
typedef struct {
@@ -217,7 +218,6 @@ typedef struct {
guint16 version_major;
guint16 version_minor;
GArray *interfaces; /**< Interfaces found in the capture file. */
- gint8 if_fcslen;
wtap_new_ipv4_callback_t add_new_ipv4;
wtap_new_ipv6_callback_t add_new_ipv6;
} pcapng_t;
@@ -956,8 +956,7 @@ pcapng_read_if_descr_block(wtap *wth, FILE_T fh, pcapng_block_header_t *bh,
if (oh.option_length == 1) {
/* Fails with multiple options; we silently ignore the failure */
wtap_block_add_uint8_option(wblock->block, oh.option_code, option_content[0]);
- pn->if_fcslen = option_content[0];
- pcapng_debug("pcapng_read_if_descr_block: if_fcslen %u", pn->if_fcslen);
+ pcapng_debug("pcapng_read_if_descr_block: if_fcslen %u", option_content[0]);
/* XXX - add sanity check */
} else {
pcapng_debug("pcapng_read_if_descr_block: if_fcslen length %u not 1 as expected", oh.option_length);
@@ -1329,7 +1328,7 @@ pcapng_read_packet_block(FILE_T fh, pcapng_block_header_t *bh, pcapng_t *pn, wta
wblock->rec->rec_header.packet_header.pack_flags = 0;
/* FCS length default */
- fcslen = pn->if_fcslen;
+ fcslen = iface_info.fcslen;
/* Options
* opt_comment 1
@@ -1607,7 +1606,7 @@ pcapng_read_simple_packet_block(FILE_T fh, pcapng_block_header_t *bh, pcapng_t *
pcap_read_post_process(WTAP_FILE_TYPE_SUBTYPE_PCAPNG, iface_info.wtap_encap,
wblock->rec, ws_buffer_start_ptr(wblock->frame_buffer),
- pn->byte_swapped, pn->if_fcslen);
+ pn->byte_swapped, iface_info.fcslen);
/*
* We return these to the caller in pcapng_read().
@@ -2631,6 +2630,7 @@ pcapng_process_idb(wtap *wth, pcapng_t *pcapng, wtapng_block_t *wblock)
interface_info_t iface_info;
wtapng_if_descr_mandatory_t *if_descr_mand = (wtapng_if_descr_mandatory_t*)wtap_block_get_mandatory_data(int_data),
*wblock_if_descr_mand = (wtapng_if_descr_mandatory_t*)wtap_block_get_mandatory_data(wblock->block);
+ guint8 if_fcslen;
wtap_block_copy(int_data, wblock->block);
@@ -2646,6 +2646,12 @@ pcapng_process_idb(wtap *wth, pcapng_t *pcapng, wtapng_block_t *wblock)
iface_info.time_units_per_second = wblock_if_descr_mand->time_units_per_second;
iface_info.tsprecision = wblock_if_descr_mand->tsprecision;
+ if (wtap_block_get_uint8_option_value(wblock->block, OPT_IDB_FCSLEN,
+ &if_fcslen) == WTAP_OPTTYPE_SUCCESS)
+ iface_info.fcslen = if_fcslen;
+ else
+ iface_info.fcslen = -1;
+
g_array_append_val(pcapng->interfaces, iface_info);
}
@@ -2672,7 +2678,6 @@ pcapng_open(wtap *wth, int *err, gchar **err_info)
pn.shb_read = FALSE;
/* we don't know the byte swapping of the file yet */
pn.byte_swapped = FALSE;
- pn.if_fcslen = -1;
pn.version_major = -1;
pn.version_minor = -1;
pn.interfaces = NULL;