diff options
author | Guy Harris <guy@alum.mit.edu> | 2019-05-10 15:21:41 -0700 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2019-05-10 23:14:44 +0000 |
commit | 16ca1b5aca2fbb3bce20b644173eaa7e42ca5901 (patch) | |
tree | 6aed75d17926c05ab1a9de6d93e34673fc76c218 /wiretap | |
parent | c2dc13873f31fbe61d8f67a541d4a25a68954e38 (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.c | 28 | ||||
-rw-r--r-- | wiretap/peektagged.c | 11 |
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; |