Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
18f62884
Commit
18f62884
authored
Mar 15, 2017
by
GabrielCouturier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
RLC AM Fix on ReTx
parent
bf71c6f0
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
38 additions
and
29 deletions
+38
-29
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
+3
-0
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
+30
-27
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
+5
-2
No files found.
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
View file @
18f62884
...
...
@@ -1236,6 +1236,8 @@ rlc_am_data_req (
l_rlc_p
->
input_sdus
[
l_rlc_p
->
next_sdu_index
].
flags
.
no_new_sdu_segmented_in_last_pdu
=
0
;
//l_rlc_p->input_sdus[l_rlc_p->next_sdu_index].li_index_for_discard = -1;
l_rlc_p
->
next_sdu_index
=
(
l_rlc_p
->
next_sdu_index
+
1
)
%
RLC_AM_SDU_CONTROL_BUFFER_SIZE
;
if
(
l_rlc_p
->
channel_id
<
3
)
{
LOG_I
(
RLC
,
PROTOCOL_RLC_AM_CTXT_FMT
" RLC_AM_DATA_REQ size %d Bytes, NB SDU %d current_sdu_index=%d next_sdu_index=%d conf %d mui %d
\n
"
,
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
l_rlc_p
),
data_size
,
...
...
@@ -1244,6 +1246,7 @@ rlc_am_data_req (
l_rlc_p
->
next_sdu_index
,
conf
,
mui
);
}
}
else
{
#if MESSAGE_CHART_GENERATOR
mui
=
((
struct
rlc_am_data_req
*
)
(
sdu_pP
->
data
))
->
mui
;
...
...
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
View file @
18f62884
...
...
@@ -375,33 +375,33 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
li_bit_offset
^=
0x4
;
li_jump_offset
^=
0x3
;
data_size
+=
sdu_size
;
sdu_index
=
1
;
/* Loop on all original LIs */
while
((
data_size
<
retx_so_start
+
1
)
&&
(
sdu_index
+
1
<
pdu_mngt
->
nb_sdus
-
1
))
while
((
data_size
<
retx_so_start
+
1
)
&&
(
sdu_index
<
pdu_mngt
->
nb_sdus
))
{
if
(
sdu_index
<
pdu_mngt
->
nb_sdus
-
1
)
{
temp_read
=
((
*
pdu_original_header_p
)
<<
8
)
|
(
*
(
pdu_original_header_p
+
1
));
sdu_size
=
RLC_AM_PDU_GET_LI
(
temp_read
,
li_bit_offset
);
pdu_original_header_p
+=
li_jump_offset
;
li_bit_offset
^=
0x4
;
li_jump_offset
^=
0x3
;
data_size
+=
sdu_size
;
}
else
{
/* if retx_so_start is still not included then set data_size with full original PDU data size */
/* Set fi_start to FALSE in this case */
data_size
=
pdu_mngt
->
payload_size
;
}
sdu_index
++
;
temp_read
=
((
*
pdu_original_header_p
)
<<
8
)
|
(
*
(
pdu_original_header_p
+
1
));
sdu_size
=
RLC_AM_PDU_GET_LI
(
temp_read
,
li_bit_offset
);
pdu_original_header_p
+=
li_jump_offset
;
li_bit_offset
^=
0x4
;
li_jump_offset
^=
0x3
;
data_size
+=
sdu_size
;
}
/* if retx_so_start is still not included then set data_size with full original PDU data size */
/* Set fi_start to FALSE in this case */
if
((
data_size
<
retx_so_start
+
1
)
&&
(
sdu_index
==
pdu_mngt
->
nb_sdus
-
1
))
{
data_size
=
pdu_mngt
->
payload_size
;
fi_start
=
FALSE
;
}
else
if
(
retx_so_start
==
data_size
)
if
(
retx_so_start
==
data_size
)
{
/* Set FI Start if retx_so_start = cumulated data size */
fi_start
=
TRUE
;
/* jump to next SDU */
sdu_index
++
;
/* there must be at least one SDU more */
AssertFatal
(
sdu_index
<
pdu_mngt
->
nb_sdus
,
"RLC AM Tx PDU Segment Error: sdu_index=%d nb_sdus=%d sn=%d LcId=%d !
\n
"
,
sdu_index
,
pdu_mngt
->
nb_sdus
,
sn
,
rlc_pP
->
channel_id
);
...
...
@@ -419,6 +419,8 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
/* It was the last LI, then set data_size to full original PDU size */
data_size
=
pdu_mngt
->
payload_size
;
}
/* Go to next SDU */
sdu_index
++
;
}
else
if
(
retx_so_start
!=
0
)
{
...
...
@@ -449,7 +451,6 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
/* Now look for the end if it was not set previously */
if
(
*
payload_sizeP
==
0
)
{
sdu_index
++
;
sdu_segment_index
++
;
while
((
sdu_index
<
pdu_mngt
->
nb_sdus
)
&&
(
data_size
<
retx_so_stop
+
1
))
{
...
...
@@ -489,16 +490,19 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
sdu_segment_index
=
0
;
while
((
sdu_segment_index
<
num_LIs_pdu_segment
+
1
)
&&
(
rlc_pP
->
nb_bytes_requested_by_mac
>
*
payload_sizeP
+
RLC_AM_PDU_SEGMENT_HEADER_SIZE
(
sdu_segment_index
)))
{
AssertFatal
(
sdus_segment_size
[
sdu_segment_index
]
>
0
,
"RLC AM Tx PDU Segment Data Error: EMpty LI index=%d numLISegment=%d numLIPDU=%d PDULength=%d SOStart=%d SOStop=%d sn=%d LcId=%d !
\n
"
,
sdu_segment_index
,
num_LIs_pdu_segment
,
pdu_mngt
->
nb_sdus
-
1
,
pdu_mngt
->
payload_size
,
retx_so_start
,
retx_so_stop
,
sn
,
rlc_pP
->
channel_id
);
/* Add next sdu_segment_index to data part */
if
(
RLC_AM_PDU_SEGMENT_HEADER_SIZE
(
sdu_segment_index
)
+
sdus_segment_size
[
sdu_segment_index
]
<=
rlc_pP
->
nb_bytes_requested_by_mac
)
if
(
RLC_AM_PDU_SEGMENT_HEADER_SIZE
(
sdu_segment_index
)
+
(
*
payload_sizeP
)
+
sdus_segment_size
[
sdu_segment_index
]
<=
rlc_pP
->
nb_bytes_requested_by_mac
)
{
(
*
payload_sizeP
)
+=
sdus_segment_size
[
sdu_segment_index
];
}
else
{
/* bound to available TBS size */
(
*
payload_sizeP
)
+=
(
rlc_pP
->
nb_bytes_requested_by_mac
-
RLC_AM_PDU_SEGMENT_HEADER_SIZE
(
sdu_segment_index
)
);
sdus_segment_size
[
sdu_segment_index
]
=
rlc_pP
->
nb_bytes_requested_by_mac
-
RLC_AM_PDU_SEGMENT_HEADER_SIZE
(
sdu_segment_index
)
;
sdus_segment_size
[
sdu_segment_index
]
=
rlc_pP
->
nb_bytes_requested_by_mac
-
RLC_AM_PDU_SEGMENT_HEADER_SIZE
(
sdu_segment_index
)
-
(
*
payload_sizeP
);
(
*
payload_sizeP
)
+=
sdus_segment_size
[
sdu_segment_index
]
;
}
header_segment_length
=
RLC_AM_PDU_SEGMENT_HEADER_SIZE
(
sdu_segment_index
);
sdu_segment_index
++
;
...
...
@@ -511,9 +515,9 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
/* update retx_so_stop */
retx_so_stop
=
retx_so_start
+
(
*
payload_sizeP
)
-
1
;
AssertFatal
(
retx_so_stop
<=
pdu_mngt
->
payload_size
-
1
,
"RLC AM Tx PDU Segment Data Error: retx_so_stop=%d OriginalPDUDataLength=%d SOStart=%d SegmentLength=%d numLISegment=%d sn=%d LcId=%d !
\n
"
,
retx_so_stop
,
pdu_mngt
->
payload_size
,
retx_so_start
,
*
payload_sizeP
,
num_LIs_pdu_segment
,
sn
,
rlc_pP
->
channel_id
);
AssertFatal
(
(
retx_so_stop
<=
pdu_mngt
->
payload_size
-
1
)
&&
(
retx_so_stop
-
retx_so_start
+
1
<
pdu_mngt
->
payload_size
)
,
"RLC AM Tx PDU Segment Data Error: retx_so_stop=%d OriginalPDUDataLength=%d SOStart=%d SegmentLength=%d numLISegment=%d
numLIPDU=%d
sn=%d LcId=%d !
\n
"
,
retx_so_stop
,
pdu_mngt
->
payload_size
,
retx_so_start
,
*
payload_sizeP
,
num_LIs_pdu_segment
,
pdu_mngt
->
nb_sdus
-
1
,
sn
,
rlc_pP
->
channel_id
);
/* init FI End to FALSE if retx_so_stop is not end of PDU */
if
(
retx_so_stop
!=
pdu_mngt
->
payload_size
-
1
)
...
...
@@ -526,8 +530,6 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
data_size
=
0
;
for
(
int
i
=
0
;
i
<
num_LIs_pdu_segment
+
1
;
i
++
)
{
AssertFatal
(
sdus_segment_size
[
i
]
>
0
,
"RLC AM Tx PDU Segment Data Error: EMpty LI index=%d numLISegment=%d numLIPDU=%d PDULength=%d SOStart=%d SOStop=%d sn=%d LcId=%d !
\n
"
,
i
,
num_LIs_pdu_segment
,
pdu_mngt
->
nb_sdus
-
1
,
pdu_mngt
->
payload_size
,
retx_so_start
,
retx_so_stop
,
sn
,
rlc_pP
->
channel_id
);
data_size
+=
sdus_segment_size
[
i
];
if
((
retx_so_stop
==
data_size
-
1
)
&&
(
i
<
num_LIs_pdu_segment
))
{
...
...
@@ -573,6 +575,7 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
/* Retx size is reset in the calling function */
pdu_mngt
->
num_holes
=
0
;
pdu_mngt
->
retx_hole_index
=
0
;
pdu_mngt
->
nack_so_start
=
0
;
}
}
else
...
...
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
View file @
18f62884
...
...
@@ -384,8 +384,8 @@ rlc_am_receive_process_control_pdu(
}
else
{
LOG_N
(
RLC
,
PROTOCOL_RLC_AM_CTXT_FMT
" WARNING CONTROL PDU ACK SN
OUT OF WINDOW
\n
"
,
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
rlc_pP
));
LOG_N
(
RLC
,
PROTOCOL_RLC_AM_CTXT_FMT
" WARNING CONTROL PDU ACK SN
%d OUT OF WINDOW vtA=%d vtS=%d
\n
"
,
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
rlc_pP
)
,
ack_sn
,
rlc_pP
->
vt_a
,
rlc_pP
->
vt_s
);
status
=
FALSE
;
}
}
else
{
...
...
@@ -416,6 +416,9 @@ rlc_am_receive_process_control_pdu(
rlc_am_pdu_sdu_data_cnf
(
ctxt_pP
,
rlc_pP
,
sn_data_cnf
);
}
LOG_D
(
RLC
,
PROTOCOL_RLC_AM_CTXT_FMT
" RECEIVE STATUS PDU ACK_SN=%d NewvtA=%d OldvtA=%d SnDataCnf=%d DataCnfSOStop=%d vtS=%d
\n
"
,
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
rlc_pP
),
ack_sn
,
vt_a_new
,
rlc_pP
->
vt_a
,
sn_data_cnf
,
data_cnf_so_stop
,
rlc_pP
->
vt_s
);
/* Update vtA and vtMS */
rlc_pP
->
vt_a
=
vt_a_new
;
rlc_pP
->
vt_ms
=
(
rlc_pP
->
vt_a
+
RLC_AM_WINDOW_SIZE
)
&
RLC_AM_SN_MASK
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment