aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rlc-lte.c
diff options
context:
space:
mode:
authormartinm <martinm@f5534014-38df-0310-8fa8-9805f1628bb7>2011-02-28 12:26:26 +0000
committermartinm <martinm@f5534014-38df-0310-8fa8-9805f1628bb7>2011-02-28 12:26:26 +0000
commit3bfed4e7993700374bc01a43d519dac70bcde23e (patch)
tree34a8ee9226e35eec78154e56f0ee8a6e187f31f8 /epan/dissectors/packet-rlc-lte.c
parent36551f51b0eec92b01ea6b4459cddec4c48cf893 (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.c38
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;