diff options
author | martinm <martinm@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-02-28 12:26:26 +0000 |
---|---|---|
committer | martinm <martinm@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-02-28 12:26:26 +0000 |
commit | 3bfed4e7993700374bc01a43d519dac70bcde23e (patch) | |
tree | 34a8ee9226e35eec78154e56f0ee8a6e187f31f8 /epan/dissectors/packet-rlc-lte.c | |
parent | 36551f51b0eec92b01ea6b4459cddec4c48cf893 (diff) |
When doing sequence analysis, allow for the first SN to be seen not to be 0.
This will happen if the capture doesn't include the start of this channel.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@36091 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-rlc-lte.c')
-rw-r--r-- | epan/dissectors/packet-rlc-lte.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/epan/dissectors/packet-rlc-lte.c b/epan/dissectors/packet-rlc-lte.c index e8ad4142cc..dd60bc3fe6 100644 --- a/epan/dissectors/packet-rlc-lte.c +++ b/epan/dissectors/packet-rlc-lte.c @@ -941,14 +941,20 @@ static void checkChannelSequenceInfo(packet_info *pinfo, tvbuff_t *tvb, /* Frames are not missing if we get an earlier sequence number again */ else if (((snLimit + expectedSequenceNumber - sequenceNumber) % snLimit) > 40) { - p_report_in_frame->state = SN_Missing; - tap_info->missingSNs = (snLimit + sequenceNumber - expectedSequenceNumber) % snLimit; - p_report_in_frame->firstSN = expectedSequenceNumber; - p_report_in_frame->lastSN = (snLimit + sequenceNumber - 1) % snLimit; - - p_report_in_frame->sequenceExpected = expectedSequenceNumber; - p_report_in_frame->previousFrameNum = p_channel_status->previousFrameNum; - p_report_in_frame->previousSegmentIncomplete = p_channel_status->previousSegmentIncomplete; + if (!createdChannel) { + p_report_in_frame->state = SN_Missing; + tap_info->missingSNs = (snLimit + sequenceNumber - expectedSequenceNumber) % snLimit; + p_report_in_frame->firstSN = expectedSequenceNumber; + p_report_in_frame->lastSN = (snLimit + sequenceNumber - 1) % snLimit; + + p_report_in_frame->sequenceExpected = expectedSequenceNumber; + p_report_in_frame->previousFrameNum = p_channel_status->previousFrameNum; + p_report_in_frame->previousSegmentIncomplete = p_channel_status->previousSegmentIncomplete; + } + else { + /* The log may not contain the very first SNs for this channel, so be forgiving... */ + p_report_in_frame->state = SN_OK; + } /* Update channel status to remember *this* frame */ p_channel_status->previousFrameNum = pinfo->fd->num; @@ -1049,11 +1055,17 @@ static void checkChannelSequenceInfo(packet_info *pinfo, tvbuff_t *tvb, } else { - /* Ahead of expected SN. Assume frames have been missed */ - p_report_in_frame->state = SN_Missing; - - p_report_in_frame->firstSN = expectedSequenceNumber; - p_report_in_frame->lastSN = (1024 + sequenceNumber-1) % 1024; + if (!createdChannel) { + /* Ahead of expected SN. Assume frames have been missed */ + p_report_in_frame->state = SN_Missing; + + p_report_in_frame->firstSN = expectedSequenceNumber; + p_report_in_frame->lastSN = (1024 + sequenceNumber-1) % 1024; + } + else { + /* The log may not contain the very first SNs for this channel, so be forgiving... */ + p_report_in_frame->state = SN_OK; + } /* Update channel state - forget about missed SNs */ p_report_in_frame->sequenceExpected = expectedSequenceNumber; |