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
zzha zzha
OpenXG-RAN
Commits
d1ac08ff
Commit
d1ac08ff
authored
Aug 18, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/nr-rlc-retx-modification' into integration_2023_w33
parents
c3e04b65
3f8c8b73
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
30 additions
and
24 deletions
+30
-24
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
+30
-24
No files found.
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
View file @
d1ac08ff
...
@@ -1759,7 +1759,7 @@ static void check_t_poll_retransmit(nr_rlc_entity_am_t *entity)
...
@@ -1759,7 +1759,7 @@ static void check_t_poll_retransmit(nr_rlc_entity_am_t *entity)
if
(
!
check_poll_after_pdu_assembly
(
entity
))
if
(
!
check_poll_after_pdu_assembly
(
entity
))
return
;
return
;
/* retransmit the head of wait list, this is the case
/* retransmit the
SDU at the
head of wait list, this is the case
* "consider any RLC SDU which has not been positively acknowledged for
* "consider any RLC SDU which has not been positively acknowledged for
* retransmission" of 36.322 5.3.3.4.
* retransmission" of 36.322 5.3.3.4.
* We don't search for the highest SN, it's simpler to just take the head
* We don't search for the highest SN, it's simpler to just take the head
...
@@ -1771,39 +1771,45 @@ static void check_t_poll_retransmit(nr_rlc_entity_am_t *entity)
...
@@ -1771,39 +1771,45 @@ static void check_t_poll_retransmit(nr_rlc_entity_am_t *entity)
* It seems that no, the wait list should not be empty here, but not sure.
* It seems that no, the wait list should not be empty here, but not sure.
*/
*/
entity
->
wait_list
=
cur
->
next
;
if
(
entity
->
wait_list
==
NULL
)
entity
->
wait_end
=
NULL
;
/* 38.322 says "SDU", not "SDU segment", but let's retransmit only
* the 'cur' SDU segment. To be changed if needed. (Maybe we have
* to retransmit all SDU segments with the same SN that are in the
* wait list.)
*/
/* increase retx count. Don't care about segmentation, so maybe we
/* increase retx count. Don't care about segmentation, so maybe we
* increase too much.
* increase too much.
*/
*/
cur
->
sdu
->
retx_count
++
;
cur
->
sdu
->
retx_count
++
;
int
sdu_retx_count
=
cur
->
sdu
->
retx_count
;
int
retransmit_sn
=
cur
->
sdu
->
sn
;
/* 38.322 says "SDU", not "SDU segment", so let's retransmit all
* SDU segments with the retransmit SN in the wait list.
*/
do
{
entity
->
wait_list
=
cur
->
next
;
if
(
entity
->
wait_list
==
NULL
)
entity
->
wait_end
=
NULL
;
/* update buffer status */
entity
->
common
.
bstatus
.
retx_size
+=
compute_pdu_header_size
(
entity
,
cur
)
+
cur
->
size
;
LOG_D
(
RLC
,
"put sn %d so %d size %d in retx list (retx_count %d)
\n
"
,
cur
->
sdu
->
sn
,
cur
->
so
,
cur
->
size
,
cur
->
sdu
->
retx_count
);
/* put in retransmit list */
entity
->
retransmit_list
=
nr_rlc_sdu_segment_list_add
(
sn_compare_tx
,
entity
,
entity
->
retransmit_list
,
cur
);
cur
=
entity
->
wait_list
;
}
while
(
cur
!=
NULL
&&
cur
->
sdu
->
sn
==
retransmit_sn
);
/* report max RETX reached for all retx_count >= max_retx_threshold
/* report max RETX reached for all retx_count >= max_retx_threshold
* (specs say to report if retx_count == max_retx_threshold).
* (specs say to report if retx_count == max_retx_threshold).
* Upper layers should react (radio link failure), so no big deal.
* Upper layers should react (radio link failure), so no big deal.
* We deal with segmentation by requiring
* Because of segmentation, we may report too early/too late, not
* retx_count >= max_retx_threshold * number of segments.
* very clear. To refine if needed.
* We may report max RETX reached too late/early. To be refined if
* this is a problem.
*/
*/
if
(
cur
->
sdu
->
retx_count
if
(
sdu_retx_count
>=
entity
->
max_retx_threshold
)
>=
entity
->
max_retx_threshold
*
cur
->
sdu
->
ref_count
)
entity
->
common
.
max_retx_reached
(
entity
->
common
.
max_retx_reached_data
,
entity
->
common
.
max_retx_reached
(
entity
->
common
.
max_retx_reached_data
,
(
nr_rlc_entity_t
*
)
entity
);
(
nr_rlc_entity_t
*
)
entity
);
/* update buffer status */
entity
->
common
.
bstatus
.
retx_size
+=
compute_pdu_header_size
(
entity
,
cur
)
+
cur
->
size
;
/* put in retransmit list */
entity
->
retransmit_list
=
nr_rlc_sdu_segment_list_add
(
sn_compare_tx
,
entity
,
entity
->
retransmit_list
,
cur
);
}
}
static
void
check_t_reassembly
(
nr_rlc_entity_am_t
*
entity
)
static
void
check_t_reassembly
(
nr_rlc_entity_am_t
*
entity
)
...
...
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