Fix test for AM Rx window, and add a seqnum.analysis.ok field.

svn path=/trunk/; revision=32051
This commit is contained in:
Martin Mathieson 2010-02-28 20:43:04 +00:00
parent cd55a9d56e
commit 58edf76433
1 changed files with 32 additions and 12 deletions

View File

@ -124,6 +124,7 @@ static int hf_rlc_lte_header_only = -1;
/* Sequence Analysis */
static int hf_rlc_lte_sequence_analysis = -1;
static int hf_rlc_lte_sequence_analysis_ok = -1;
static int hf_rlc_lte_sequence_analysis_previous_frame = -1;
static int hf_rlc_lte_sequence_analysis_expected_sn = -1;
static int hf_rlc_lte_sequence_analysis_framing_info_correct = -1;
@ -541,10 +542,16 @@ static void addChannelSequenceInfo(state_report_in_frame *p,
/********************************************/
switch (p->amState) {
case SN_OK:
ti = proto_tree_add_boolean(seqnum_tree, hf_rlc_lte_sequence_analysis_ok,
tvb, 0, 0, TRUE);
PROTO_ITEM_SET_GENERATED(ti);
proto_item_append_text(seqnum_ti, " - OK");
break;
case SN_Retx:
ti = proto_tree_add_boolean(seqnum_tree, hf_rlc_lte_sequence_analysis_ok,
tvb, 0, 0, FALSE);
PROTO_ITEM_SET_GENERATED(ti);
ti = proto_tree_add_boolean(seqnum_tree, hf_rlc_lte_sequence_analysis_retx,
tvb, 0, 0, TRUE);
PROTO_ITEM_SET_GENERATED(ti);
@ -555,6 +562,9 @@ static void addChannelSequenceInfo(state_report_in_frame *p,
break;
case SN_Repeated:
ti = proto_tree_add_boolean(seqnum_tree, hf_rlc_lte_sequence_analysis_ok,
tvb, 0, 0, FALSE);
PROTO_ITEM_SET_GENERATED(ti);
ti = proto_tree_add_boolean(seqnum_tree, hf_rlc_lte_sequence_analysis_repeated,
tvb, 0, 0, TRUE);
PROTO_ITEM_SET_GENERATED(ti);
@ -566,6 +576,9 @@ static void addChannelSequenceInfo(state_report_in_frame *p,
break;
case SN_Missing:
ti = proto_tree_add_boolean(seqnum_tree, hf_rlc_lte_sequence_analysis_ok,
tvb, 0, 0, FALSE);
PROTO_ITEM_SET_GENERATED(ti);
ti = proto_tree_add_boolean(seqnum_tree, hf_rlc_lte_sequence_analysis_skipped,
tvb, 0, 0, TRUE);
PROTO_ITEM_SET_GENERATED(ti);
@ -794,11 +807,19 @@ static void checkChannelSequenceInfo(packet_info *pinfo, tvbuff_t *tvb,
}
else {
/* Need to work out if new (with skips, or likely a retx (due to NACK) */
int delta;
delta = (sequenceNumber - expectedSequenceNumber);
if (delta > 0) {
/* Need to work out if new (with skips, or likely a retx (due to NACK)) */
int delta = (1024 + expectedSequenceNumber - sequenceNumber) % 1024;
/* Rx window is 512, so check to see if this is a retx */
if (delta < 512) {
/* Probably a retx due to receiving NACK */
p_report_in_frame->amState = SN_Retx;
p_report_in_frame->firstSN = sequenceNumber;
/* Don't update anything in channel state */
}
else {
/* Ahead of expected SN. Assume frames have been missed */
p_report_in_frame->amState = SN_Missing;
@ -811,13 +832,6 @@ static void checkChannelSequenceInfo(packet_info *pinfo, tvbuff_t *tvb,
p_channel_status->previousFrameNum = pinfo->fd->num;
p_channel_status->previousSegmentIncomplete = !last_includes_end;
}
else {
/* Probably a retx due to receiving NACK */
p_report_in_frame->amState = SN_Retx;
p_report_in_frame->firstSN = sequenceNumber;
/* Don't update anything in channel state */
}
}
break;
@ -1943,6 +1957,12 @@ void proto_register_rlc_lte(void)
NULL, HFILL
}
},
{ &hf_rlc_lte_sequence_analysis_ok,
{ "OK",
"rlc-lte.sequence-analysis.ok", FT_BOOLEAN, BASE_NONE, 0, 0x0,
NULL, HFILL
}
},
{ &hf_rlc_lte_sequence_analysis_previous_frame,
{ "Previous frame for channel",
"rlc-lte.sequence-analysis.previous-frame", FT_FRAMENUM, BASE_NONE, 0, 0x0,