aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2019-05-10 15:21:41 -0700
committerGuy Harris <guy@alum.mit.edu>2019-05-10 23:14:44 +0000
commit16ca1b5aca2fbb3bce20b644173eaa7e42ca5901 (patch)
tree6aed75d17926c05ab1a9de6d93e34673fc76c218 /wiretap
parentc2dc13873f31fbe61d8f67a541d4a25a68954e38 (diff)
Fill in the packet flags for *Peek classic and tagged files.
Change-Id: I0f075c5bc7bb177a23be11e23e3701a7412a6e3d Reviewed-on: https://code.wireshark.org/review/33153 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/peekclassic.c28
-rw-r--r--wiretap/peektagged.c11
2 files changed, 29 insertions, 10 deletions
diff --git a/wiretap/peekclassic.c b/wiretap/peekclassic.c
index 24cf512abc..020139d2e8 100644
--- a/wiretap/peekclassic.c
+++ b/wiretap/peekclassic.c
@@ -113,7 +113,7 @@ typedef struct peekclassic_utime {
* Flag bits.
*/
#define FLAGS_CONTROL_FRAME 0x01 /* Frame is a control frame */
-#define FLAGS_HAS_CRC_ERROR 0x02 /* Frame has aCRC error */
+#define FLAGS_HAS_CRC_ERROR 0x02 /* Frame has a CRC error */
#define FLAGS_HAS_FRAME_ERROR 0x04 /* Frame has a frame error */
#define FLAGS_ROUTE_INFO 0x08 /* Frame has token ring routing information */
#define FLAGS_FRAME_TOO_LONG 0x10 /* Frame too long */
@@ -401,9 +401,7 @@ static int peekclassic_read_packet_v7(wtap *wth, FILE_T fh,
#endif
guint16 length;
guint16 sliceLength;
-#if 0
guint8 flags;
-#endif
guint8 status;
guint64 timestamp;
time_t tsecs;
@@ -419,9 +417,7 @@ static int peekclassic_read_packet_v7(wtap *wth, FILE_T fh,
#endif
length = pntoh16(&ep_pkt[PEEKCLASSIC_V7_LENGTH_OFFSET]);
sliceLength = pntoh16(&ep_pkt[PEEKCLASSIC_V7_SLICE_LENGTH_OFFSET]);
-#if 0
flags = ep_pkt[PEEKCLASSIC_V7_FLAGS_OFFSET];
-#endif
status = ep_pkt[PEEKCLASSIC_V7_STATUS_OFFSET];
timestamp = pntoh64(&ep_pkt[PEEKCLASSIC_V7_TIMESTAMP_OFFSET]);
@@ -437,13 +433,20 @@ static int peekclassic_read_packet_v7(wtap *wth, FILE_T fh,
/* fill in packet header values */
rec->rec_type = REC_TYPE_PACKET;
- rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
+ rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN|WTAP_HAS_PACK_FLAGS;
tsecs = (time_t) (timestamp/1000000);
tusecs = (guint32) (timestamp - tsecs*1000000);
rec->ts.secs = tsecs - mac2unix;
rec->ts.nsecs = tusecs * 1000;
rec->rec_header.packet_header.len = length;
rec->rec_header.packet_header.caplen = sliceLength;
+ rec->rec_header.packet_header.pack_flags = 0;
+ if (flags & FLAGS_HAS_CRC_ERROR)
+ rec->rec_header.packet_header.pack_flags |= PACK_FLAGS_CRC_ERROR;
+ if (flags & FLAGS_FRAME_TOO_LONG)
+ rec->rec_header.packet_header.pack_flags |= PACK_FLAGS_PACKET_TOO_LONG;
+ if (flags & FLAGS_FRAME_TOO_SHORT)
+ rec->rec_header.packet_header.pack_flags |= PACK_FLAGS_PACKET_TOO_SHORT;
switch (wth->file_encap) {
@@ -568,8 +571,8 @@ static gboolean peekclassic_read_packet_v56(wtap *wth, FILE_T fh,
guint8 ep_pkt[PEEKCLASSIC_V56_PKT_SIZE];
guint16 length;
guint16 sliceLength;
-#if 0
guint8 flags;
+#if 0
guint8 status;
#endif
guint32 timestamp;
@@ -588,8 +591,8 @@ static gboolean peekclassic_read_packet_v56(wtap *wth, FILE_T fh,
/* Extract the fields from the packet */
length = pntoh16(&ep_pkt[PEEKCLASSIC_V56_LENGTH_OFFSET]);
sliceLength = pntoh16(&ep_pkt[PEEKCLASSIC_V56_SLICE_LENGTH_OFFSET]);
-#if 0
flags = ep_pkt[PEEKCLASSIC_V56_FLAGS_OFFSET];
+#if 0
status = ep_pkt[PEEKCLASSIC_V56_STATUS_OFFSET];
#endif
timestamp = pntoh32(&ep_pkt[PEEKCLASSIC_V56_TIMESTAMP_OFFSET]);
@@ -618,12 +621,19 @@ static gboolean peekclassic_read_packet_v56(wtap *wth, FILE_T fh,
/* fill in packet header values */
rec->rec_type = REC_TYPE_PACKET;
- rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
+ rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN|WTAP_HAS_PACK_FLAGS;
/* timestamp is in milliseconds since reference_time */
rec->ts.secs = peekclassic->reference_time + (timestamp / 1000);
rec->ts.nsecs = 1000 * (timestamp % 1000) * 1000;
rec->rec_header.packet_header.len = length;
rec->rec_header.packet_header.caplen = sliceLength;
+ rec->rec_header.packet_header.pack_flags = 0;
+ if (flags & FLAGS_HAS_CRC_ERROR)
+ rec->rec_header.packet_header.pack_flags |= PACK_FLAGS_CRC_ERROR;
+ if (flags & FLAGS_FRAME_TOO_LONG)
+ rec->rec_header.packet_header.pack_flags |= PACK_FLAGS_PACKET_TOO_LONG;
+ if (flags & FLAGS_FRAME_TOO_SHORT)
+ rec->rec_header.packet_header.pack_flags |= PACK_FLAGS_PACKET_TOO_SHORT;
switch (wth->file_encap) {
diff --git a/wiretap/peektagged.c b/wiretap/peektagged.c
index c45580ccd8..27b32f54b8 100644
--- a/wiretap/peektagged.c
+++ b/wiretap/peektagged.c
@@ -419,7 +419,9 @@ peektagged_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
guint32 sliceLength = 0;
gboolean saw_timestamp_lower = FALSE;
gboolean saw_timestamp_upper = FALSE;
+ gboolean saw_flags_and_status = FALSE;
peektagged_utime timestamp;
+ guint32 flags_and_status = 0;
guint32 ext_flags = 0;
gboolean saw_data_rate_or_mcs_index = FALSE;
guint32 data_rate_or_mcs_index = 0;
@@ -488,7 +490,8 @@ peektagged_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
break;
case TAG_PEEKTAGGED_FLAGS_AND_STATUS:
- /* XXX - not used yet */
+ saw_flags_and_status = TRUE;
+ flags_and_status = pletoh32(&tag_value[2]);
break;
case TAG_PEEKTAGGED_CHANNEL:
@@ -720,6 +723,12 @@ peektagged_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
rec->rec_header.packet_header.len = length;
rec->rec_header.packet_header.caplen = sliceLength;
+ if (saw_flags_and_status) {
+ rec->presence_flags |= WTAP_HAS_PACK_FLAGS;
+ rec->rec_header.packet_header.pack_flags = 0;
+ if (flags_and_status & FLAGS_HAS_CRC_ERROR)
+ rec->rec_header.packet_header.pack_flags |= PACK_FLAGS_CRC_ERROR;
+ }
/* calculate and fill in packet time stamp */
t = (((guint64) timestamp.upper) << 32) + timestamp.lower;