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
常顺宇
OpenXG-RAN
Commits
bb6d1165
Commit
bb6d1165
authored
May 10, 2018
by
Haruki NAOI
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'remotes/origin/rm902_bugfix_sp3_master_base' into sp3_master
parents
54a36ff5
7807e677
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
121 additions
and
30 deletions
+121
-30
openair2/COMMON/mac_rlc_primitives.h
openair2/COMMON/mac_rlc_primitives.h
+0
-1
openair2/LAYER2/MAC/defs.h
openair2/LAYER2/MAC/defs.h
+6
-0
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+35
-18
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+45
-3
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+3
-2
openair2/LAYER2/MAC/extern.h
openair2/LAYER2/MAC/extern.h
+1
-1
openair2/LAYER2/MAC/pre_processor.c
openair2/LAYER2/MAC/pre_processor.c
+15
-0
openair2/LAYER2/MAC/vars.h
openair2/LAYER2/MAC/vars.h
+1
-1
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
+0
-1
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c
+10
-0
openair2/LAYER2/RLC/rlc.h
openair2/LAYER2/RLC/rlc.h
+0
-1
openair2/LAYER2/RLC/rlc_mac.c
openair2/LAYER2/RLC/rlc_mac.c
+1
-1
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+4
-1
No files found.
openair2/COMMON/mac_rlc_primitives.h
View file @
bb6d1165
...
@@ -191,7 +191,6 @@ struct mac_status_resp {
...
@@ -191,7 +191,6 @@ struct mac_status_resp {
uint32_t
head_sdu_remaining_size_to_send
;
uint32_t
head_sdu_remaining_size_to_send
;
unsigned
char
head_sdu_is_segmented
;
unsigned
char
head_sdu_is_segmented
;
struct
rlc_entity_info
rlc_info
;
/*!< xxx*/
struct
rlc_entity_info
rlc_info
;
/*!< xxx*/
mui_t
rrc_mui
;
};
};
struct
mac_tb_ind
{
struct
mac_tb_ind
{
...
...
openair2/LAYER2/MAC/defs.h
View file @
bb6d1165
...
@@ -1413,6 +1413,12 @@ typedef struct {
...
@@ -1413,6 +1413,12 @@ typedef struct {
uint16_t
num_UEs
;
uint16_t
num_UEs
;
RRC_release_ctrl
RRC_release_ctrl
[
NUMBER_OF_UE_MAX
];
RRC_release_ctrl
RRC_release_ctrl
[
NUMBER_OF_UE_MAX
];
}
RRC_release_list_t
;
}
RRC_release_list_t
;
typedef
struct
{
uint8_t
rrc_mui_num
;
mui_t
rrc_mui
[
128
];
}
mac_rlc_am_muilist_t
;
#include "proto.h"
#include "proto.h"
/*@}*/
/*@}*/
#endif
/*__LAYER2_MAC_DEFS_H__ */
#endif
/*__LAYER2_MAC_DEFS_H__ */
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
bb6d1165
...
@@ -988,22 +988,36 @@ schedule_ue_spec(module_id_t module_idP,
...
@@ -988,22 +988,36 @@ schedule_ue_spec(module_id_t module_idP,
&
dlsch_buffer
&
dlsch_buffer
[
0
]);
[
0
]);
pthread_mutex_lock
(
&
rrc_release_freelist
);
pthread_mutex_lock
(
&
rrc_release_freelist
);
if
(
rrc_release_info
.
num_UEs
>
0
){
if
(
(
rrc_release_info
.
num_UEs
>
0
)
&&
(
rlc_am_mui
.
rrc_mui_num
>
0
)
){
uint16_t
release_total
=
0
;
uint16_t
release_total
=
0
;
for
(
uint16_t
release_num
=
0
;
release_num
<
NUMBER_OF_UE_MAX
;
release_num
++
){
for
(
uint16_t
release_num
=
0
;
release_num
<
NUMBER_OF_UE_MAX
;
release_num
++
){
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
>
0
){
release_total
++
;
}
else
{
continue
;
}
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
==
1
){
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
==
1
){
release_total
++
;
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rnti
==
rnti
){
if
(
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rnti
==
rnti
)
&&
for
(
uint16_t
mui_num
=
0
;
mui_num
<
rlc_am_mui
.
rrc_mui_num
;
mui_num
++
){
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rrc_eNB_mui
==
rlc_status
.
rrc_mui
)){
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rrc_eNB_mui
==
rlc_am_mui
.
rrc_mui
[
mui_num
]){
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
=
3
;
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
=
3
;
LOG_D
(
MAC
,
"DLSCH Release send:index %d rnti %x mui %d mui_num %d flag 1->3
\n
"
,
release_num
,
rnti
,
rlc_am_mui
.
rrc_mui
[
mui_num
],
mui_num
);
break
;
}
}
}
}
}
}
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
==
2
){
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
==
2
){
release_total
++
;
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rnti
==
rnti
){
if
(
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rnti
==
rnti
)
&&
for
(
uint16_t
mui_num
=
0
;
mui_num
<
rlc_am_mui
.
rrc_mui_num
;
mui_num
++
){
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rrc_eNB_mui
==
rlc_status
.
rrc_mui
)){
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rrc_eNB_mui
==
rlc_am_mui
.
rrc_mui
[
mui_num
]){
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
=
4
;
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
=
4
;
LOG_D
(
MAC
,
"DLSCH Release send:index %d rnti %x mui %d mui_num %d flag 2->4
\n
"
,
release_num
,
rnti
,
rlc_am_mui
.
rrc_mui
[
mui_num
],
mui_num
);
break
;
}
}
}
}
}
}
if
(
release_total
>=
rrc_release_info
.
num_UEs
)
if
(
release_total
>=
rrc_release_info
.
num_UEs
)
break
;
break
;
...
@@ -1013,21 +1027,24 @@ schedule_ue_spec(module_id_t module_idP,
...
@@ -1013,21 +1027,24 @@ schedule_ue_spec(module_id_t module_idP,
RA_t
*
ra
=
&
eNB
->
common_channels
[
CC_id
].
ra
[
0
];
RA_t
*
ra
=
&
eNB
->
common_channels
[
CC_id
].
ra
[
0
];
for
(
uint8_t
ra_ii
=
0
;
ra_ii
<
NB_RA_PROC_MAX
;
ra_ii
++
)
{
for
(
uint8_t
ra_ii
=
0
;
ra_ii
<
NB_RA_PROC_MAX
;
ra_ii
++
)
{
if
((
ra
[
ra_ii
].
rnti
==
rnti
)
&&
(
ra
[
ra_ii
].
state
==
MSGCRNTI
)
&&
if
((
ra
[
ra_ii
].
rnti
==
rnti
)
&&
(
ra
[
ra_ii
].
state
==
MSGCRNTI
)){
(
ra
[
ra_ii
].
crnti_rrc_mui
==
rlc_status
.
rrc_mui
)){
for
(
uint16_t
mui_num
=
0
;
mui_num
<
rlc_am_mui
.
rrc_mui_num
;
mui_num
++
){
ra
[
ra_ii
].
crnti_harq_pid
=
harq_pid
;
if
(
ra
[
ra_ii
].
crnti_rrc_mui
==
rlc_am_mui
.
rrc_mui
[
mui_num
]){
ra
[
ra_ii
].
state
=
MSGCRNTI_ACK
;
ra
[
ra_ii
].
crnti_harq_pid
=
harq_pid
;
break
;
ra
[
ra_ii
].
state
=
MSGCRNTI_ACK
;
break
;
}
}
}
}
}
}
T
(
T_ENB_MAC_UE_DL_SDU
,
T_INT
(
module_idP
),
T
(
T_ENB_MAC_UE_DL_SDU
,
T_INT
(
module_idP
),
T_INT
(
CC_id
),
T_INT
(
rnti
),
T_INT
(
frameP
),
T_INT
(
CC_id
),
T_INT
(
rnti
),
T_INT
(
frameP
),
T_INT
(
subframeP
),
T_INT
(
harq_pid
),
T_INT
(
DCCH
),
T_INT
(
subframeP
),
T_INT
(
harq_pid
),
T_INT
(
DCCH
),
T_INT
(
sdu_lengths
[
0
]));
T_INT
(
sdu_lengths
[
0
]));
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"[eNB %d][DCCH] CC_id %d frame %d subframe %d UE_id %d/%x Got %d bytes bytes_in_buffer %d from release_num %d
\n
"
,
"[eNB %d][DCCH] CC_id %d Got %d bytes from RLC
\n
"
,
module_idP
,
CC_id
,
frameP
,
subframeP
,
UE_id
,
rnti
,
sdu_lengths
[
0
],
rlc_status
.
bytes_in_buffer
,
rrc_release_info
.
num_UEs
);
module_idP
,
CC_id
,
sdu_lengths
[
0
]);
sdu_length_total
=
sdu_lengths
[
0
];
sdu_length_total
=
sdu_lengths
[
0
];
sdu_lcids
[
0
]
=
DCCH
;
sdu_lcids
[
0
]
=
DCCH
;
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
...
...
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
bb6d1165
...
@@ -2277,6 +2277,27 @@ int rrc_mac_remove_ue(module_id_t mod_idP, rnti_t rntiP)
...
@@ -2277,6 +2277,27 @@ int rrc_mac_remove_ue(module_id_t mod_idP, rnti_t rntiP)
cancel_ra_proc
(
mod_idP
,
pCC_id
,
0
,
rntiP
);
cancel_ra_proc
(
mod_idP
,
pCC_id
,
0
,
rntiP
);
}
}
pthread_mutex_lock
(
&
rrc_release_freelist
);
if
(
rrc_release_info
.
num_UEs
>
0
){
uint16_t
release_total
=
0
;
for
(
uint16_t
release_num
=
0
;
release_num
<
NUMBER_OF_UE_MAX
;
release_num
++
){
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
>
0
){
release_total
++
;
}
else
{
continue
;
}
if
(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rnti
==
rntiP
){
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
=
0
;
rrc_release_info
.
num_UEs
--
;
release_total
--
;
}
if
(
release_total
>=
rrc_release_info
.
num_UEs
){
break
;
}
}
}
pthread_mutex_unlock
(
&
rrc_release_freelist
);
return
0
;
return
0
;
}
}
...
@@ -3456,7 +3477,7 @@ allocate_CCEs(int module_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP,
...
@@ -3456,7 +3477,7 @@ allocate_CCEs(int module_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP,
for
(
j
=
0
;
j
<=
i
;
j
++
)
{
for
(
j
=
0
;
j
<=
i
;
j
++
)
{
if
(
dl_config_pdu
[
j
].
pdu_type
==
if
(
dl_config_pdu
[
j
].
pdu_type
==
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
)
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
)
LOG_
I
(
MAC
,
LOG_
D
(
MAC
,
"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
j
,
j
,
DL_req
->
number_dci
+
DL_req
->
number_dci
+
...
@@ -3850,6 +3871,7 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
...
@@ -3850,6 +3871,7 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
else
else
frame_tx
=
subframeP
<
4
?
frameP
-
1
:
frameP
;
frame_tx
=
subframeP
<
4
?
frameP
-
1
:
frameP
;
harq_pid
=
frame_subframe2_dl_harq_pid
(
cc
->
tdd_Config
,
frame_tx
,
subframe_tx
);
harq_pid
=
frame_subframe2_dl_harq_pid
(
cc
->
tdd_Config
,
frame_tx
,
subframe_tx
);
RA_t
*
ra
=
&
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
].
ra
[
0
];
if
(
num_ack_nak
==
1
){
if
(
num_ack_nak
==
1
){
if
(
harq_indication_tdd
->
harq_data
[
0
].
bundling
.
value_0
==
1
){
//ack
if
(
harq_indication_tdd
->
harq_data
[
0
].
bundling
.
value_0
==
1
){
//ack
...
@@ -3860,9 +3882,18 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
...
@@ -3860,9 +3882,18 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
if
(
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
<
8
)
if
(
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
<
8
)
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
++
;
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
++
;
LOG_D
(
MAC
,
"frame %d subframe %d Nacking (%d,%d) harq_pid %d round %d
\n
"
,
frameP
,
subframeP
,
frame_tx
,
subframe_tx
,
harq_pid
,
sched_ctl
->
round
[
CC_idP
][
harq_pid
]);
LOG_D
(
MAC
,
"frame %d subframe %d Nacking (%d,%d) harq_pid %d round %d
\n
"
,
frameP
,
subframeP
,
frame_tx
,
subframe_tx
,
harq_pid
,
sched_ctl
->
round
[
CC_idP
][
harq_pid
]);
if
(
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
==
8
){
for
(
uint8_t
ra_i
=
0
;
ra_i
<
NB_RA_PROC_MAX
;
ra_i
++
)
{
if
((
ra
[
ra_i
].
rnti
==
rnti
)
&&
(
ra
[
ra_i
].
state
==
WAITMSG4ACK
)){
//Msg NACK num to MAC ,remove UE
// add UE info to freeList
LOG_I
(
RRC
,
"put UE %x into freeList
\n
"
,
rnti
);
put_UE_in_freelist
(
mod_idP
,
rnti
,
1
);
}
}
}
}
}
}
}
RA_t
*
ra
=
&
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
].
ra
[
0
];
for
(
uint8_t
ra_i
=
0
;
ra_i
<
NB_RA_PROC_MAX
;
ra_i
++
)
{
for
(
uint8_t
ra_i
=
0
;
ra_i
<
NB_RA_PROC_MAX
;
ra_i
++
)
{
if
((
ra
[
ra_i
].
rnti
==
rnti
)
&&
(
ra
[
ra_i
].
state
==
MSGCRNTI_ACK
)
&&
(
ra
[
ra_i
].
crnti_harq_pid
==
harq_pid
))
{
if
((
ra
[
ra_i
].
rnti
==
rnti
)
&&
(
ra
[
ra_i
].
state
==
MSGCRNTI_ACK
)
&&
(
ra
[
ra_i
].
crnti_harq_pid
==
harq_pid
))
{
LOG_D
(
MAC
,
"CRNTI Reconfiguration: ACK %d rnti %x round %d frame %d subframe %d
\n
"
,
harq_indication_tdd
->
harq_data
[
0
].
bundling
.
value_0
,
rnti
,
sched_ctl
->
round
[
CC_idP
][
harq_pid
],
frameP
,
subframeP
);
LOG_D
(
MAC
,
"CRNTI Reconfiguration: ACK %d rnti %x round %d frame %d subframe %d
\n
"
,
harq_indication_tdd
->
harq_data
[
0
].
bundling
.
value_0
,
rnti
,
sched_ctl
->
round
[
CC_idP
][
harq_pid
],
frameP
,
subframeP
);
...
@@ -3936,8 +3967,19 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
...
@@ -3936,8 +3967,19 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
if
(
pdu
[
0
]
==
1
)
{
// ACK
if
(
pdu
[
0
]
==
1
)
{
// ACK
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
=
8
;
// release HARQ process
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
=
8
;
// release HARQ process
sched_ctl
->
tbcnt
[
CC_idP
][
harq_pid
]
=
0
;
sched_ctl
->
tbcnt
[
CC_idP
][
harq_pid
]
=
0
;
}
else
if
(
pdu
[
0
]
==
2
||
pdu
[
0
]
==
4
)
// NAK (treat DTX as NAK)
}
else
if
(
pdu
[
0
]
==
2
||
pdu
[
0
]
==
4
)
{
// NAK (treat DTX as NAK)
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
++
;
// increment round
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
++
;
// increment round
if
(
sched_ctl
->
round
[
CC_idP
][
harq_pid
]
==
8
){
for
(
uint8_t
ra_i
=
0
;
ra_i
<
NB_RA_PROC_MAX
;
ra_i
++
)
{
if
((
ra
[
ra_i
].
rnti
==
rnti
)
&&
(
ra
[
ra_i
].
state
==
WAITMSG4ACK
)){
//Msg NACK num to MAC ,remove UE
// add UE info to freeList
LOG_I
(
RRC
,
"put UE %x into freeList
\n
"
,
rnti
);
put_UE_in_freelist
(
mod_idP
,
rnti
,
1
);
}
}
}
}
}
else
{
}
else
{
// one or two ACK/NAK bits
// one or two ACK/NAK bits
AssertFatal
(
num_ack_nak
>
2
,
AssertFatal
(
num_ack_nak
>
2
,
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
bb6d1165
...
@@ -629,8 +629,9 @@ rx_sdu(const module_id_t enb_mod_idP,
...
@@ -629,8 +629,9 @@ rx_sdu(const module_id_t enb_mod_idP,
ra
[
ii
].
rach_resource_type
ra
[
ii
].
rach_resource_type
#endif
#endif
))
==
-
1
)
{
))
==
-
1
)
{
AssertFatal
(
1
==
0
,
LOG_E
(
MAC
,
"[MAC][eNB] Max user count reached
\n
"
);
"[MAC][eNB] Max user count reached
\n
"
);
cancel_ra_proc
(
enb_mod_idP
,
CC_idP
,
frameP
,
current_rnti
);
break
;
// kill RA procedure
// kill RA procedure
}
else
}
else
LOG_D
(
MAC
,
LOG_D
(
MAC
,
...
...
openair2/LAYER2/MAC/extern.h
View file @
bb6d1165
...
@@ -110,5 +110,5 @@ extern uint8_t new_dlsch_ue_select_tbl_in_use;
...
@@ -110,5 +110,5 @@ extern uint8_t new_dlsch_ue_select_tbl_in_use;
extern
boolean_t
pre_scd_activeUE
[
NUMBER_OF_UE_MAX
];
extern
boolean_t
pre_scd_activeUE
[
NUMBER_OF_UE_MAX
];
extern
eNB_UE_STATS
pre_scd_eNB_UE_stats
[
MAX_NUM_CCs
][
NUMBER_OF_UE_MAX
];
extern
eNB_UE_STATS
pre_scd_eNB_UE_stats
[
MAX_NUM_CCs
][
NUMBER_OF_UE_MAX
];
#endif
#endif
extern
mac_rlc_am_muilist_t
rlc_am_mui
;
#endif //DEF_H
#endif //DEF_H
openair2/LAYER2/MAC/pre_processor.c
View file @
bb6d1165
...
@@ -668,6 +668,10 @@ void dlsch_scheduler_pre_ue_select(
...
@@ -668,6 +668,10 @@ void dlsch_scheduler_pre_ue_select(
continue
;
continue
;
}
}
if
(
mac_eNB_get_rrc_status
(
module_idP
,
rnti
)
<
RRC_CONNECTED
){
continue
;
}
ue_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
ue_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
#if 0
#if 0
if (ue_sched_ctl->ul_out_of_sync == 1) {
if (ue_sched_ctl->ul_out_of_sync == 1) {
...
@@ -774,6 +778,10 @@ void dlsch_scheduler_pre_ue_select(
...
@@ -774,6 +778,10 @@ void dlsch_scheduler_pre_ue_select(
if
(
rnti
==
NOT_A_RNTI
)
if
(
rnti
==
NOT_A_RNTI
)
continue
;
continue
;
if
(
mac_eNB_get_rrc_status
(
module_idP
,
rnti
)
<
RRC_CONNECTED
){
continue
;
}
ue_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
ue_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
#if 0
#if 0
if (ue_sched_ctl->ul_out_of_sync == 1) {
if (ue_sched_ctl->ul_out_of_sync == 1) {
...
@@ -887,6 +895,10 @@ void dlsch_scheduler_pre_ue_select(
...
@@ -887,6 +895,10 @@ void dlsch_scheduler_pre_ue_select(
if
(
rnti
==
NOT_A_RNTI
)
if
(
rnti
==
NOT_A_RNTI
)
continue
;
continue
;
if
(
mac_eNB_get_rrc_status
(
module_idP
,
rnti
)
<
RRC_CONNECTED
){
continue
;
}
ue_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
ue_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
#if 0
#if 0
if (ue_sched_ctl->ul_out_of_sync == 1) {
if (ue_sched_ctl->ul_out_of_sync == 1) {
...
@@ -1159,6 +1171,9 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id,
...
@@ -1159,6 +1171,9 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id,
dlsch_ue_select
[
CC_id
].
ue_num
=
i
+
1
;
dlsch_ue_select
[
CC_id
].
ue_num
=
i
+
1
;
break
;
break
;
}
}
LOG_D
(
MAC
,
"DLSCH UE Select: frame %d subframe %d pre_nb_available_rbs %d(i %d UE_id %d nb_rbs_required %d nb_rbs_required_remaining %d average_rbs_per_user %d (temp_total rbs_count %d ue_num %d) available_prbs %d)
\n
"
,
frameP
,
subframeP
,
ue_sched_ctl
->
pre_nb_available_rbs
[
CC_id
],
i
,
UE_id
,
nb_rbs_required
[
CC_id
][
UE_id
],
nb_rbs_required_remaining
[
CC_id
][
UE_id
],
average_rbs_per_user
[
CC_id
],
temp_total_rbs_count
,
temp_total_ue_count
,
RC
.
mac
[
Mod_id
]
->
eNB_stats
[
CC_id
].
available_prbs
);
#ifdef TM5
#ifdef TM5
// TODO: data channel TM5: to be re-visited
// TODO: data channel TM5: to be re-visited
#endif
#endif
...
...
openair2/LAYER2/MAC/vars.h
View file @
bb6d1165
...
@@ -155,5 +155,5 @@ uint8_t new_dlsch_ue_select_tbl_in_use;
...
@@ -155,5 +155,5 @@ uint8_t new_dlsch_ue_select_tbl_in_use;
boolean_t
pre_scd_activeUE
[
NUMBER_OF_UE_MAX
];
boolean_t
pre_scd_activeUE
[
NUMBER_OF_UE_MAX
];
eNB_UE_STATS
pre_scd_eNB_UE_stats
[
MAX_NUM_CCs
][
NUMBER_OF_UE_MAX
];
eNB_UE_STATS
pre_scd_eNB_UE_stats
[
MAX_NUM_CCs
][
NUMBER_OF_UE_MAX
];
#endif
#endif
mac_rlc_am_muilist_t
rlc_am_mui
;
#endif
#endif
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
View file @
bb6d1165
...
@@ -588,7 +588,6 @@ rlc_am_mac_status_indication (
...
@@ -588,7 +588,6 @@ rlc_am_mac_status_indication (
sdu_size
=
((
rlc_am_tx_sdu_management_t
*
)
(
rlc
->
input_sdus
[
rlc
->
current_sdu_index
].
mem_block
->
data
))
->
sdu_size
;
sdu_size
=
((
rlc_am_tx_sdu_management_t
*
)
(
rlc
->
input_sdus
[
rlc
->
current_sdu_index
].
mem_block
->
data
))
->
sdu_size
;
sdu_remaining_size
=
((
rlc_am_tx_sdu_management_t
*
)
(
rlc
->
input_sdus
[
rlc
->
current_sdu_index
].
mem_block
->
data
))
->
sdu_remaining_size
;
sdu_remaining_size
=
((
rlc_am_tx_sdu_management_t
*
)
(
rlc
->
input_sdus
[
rlc
->
current_sdu_index
].
mem_block
->
data
))
->
sdu_remaining_size
;
status_resp
.
rrc_mui
=
rlc
->
input_sdus
[
rlc
->
current_sdu_index
].
mui
;
status_resp
.
head_sdu_remaining_size_to_send
=
sdu_remaining_size
;
status_resp
.
head_sdu_remaining_size_to_send
=
sdu_remaining_size
;
if
(
sdu_size
==
sdu_remaining_size
)
{
if
(
sdu_size
==
sdu_remaining_size
)
{
...
...
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c
View file @
bb6d1165
...
@@ -358,6 +358,8 @@ void rlc_am_segment_10 (
...
@@ -358,6 +358,8 @@ void rlc_am_segment_10 (
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
rlc_pP
),
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
rlc_pP
),
pdu_remaining_size
);
pdu_remaining_size
);
//msg ("[FRAME %05d][%s][RLC_AM][MOD %u/%u][RB %u][SEGMENT] pdu_mem_p %p pdu_p %p pdu_p->data %p data %p data_sdu_p %p pdu_remaining_size %d\n", rlc_pP->module_id, rlc_pP->rb_id, ctxt_pP->frame, pdu_mem_p, pdu_p, pdu_p->data, data, data_sdu_p,pdu_remaining_size);
//msg ("[FRAME %05d][%s][RLC_AM][MOD %u/%u][RB %u][SEGMENT] pdu_mem_p %p pdu_p %p pdu_p->data %p data %p data_sdu_p %p pdu_remaining_size %d\n", rlc_pP->module_id, rlc_pP->rb_id, ctxt_pP->frame, pdu_mem_p, pdu_p, pdu_p->data, data, data_sdu_p,pdu_remaining_size);
rlc_am_mui
.
rrc_mui
[
rlc_am_mui
.
rrc_mui_num
]
=
sdu_mngt_p
->
mui
;
rlc_am_mui
.
rrc_mui_num
++
;
memcpy
(
data
,
data_sdu_p
,
pdu_remaining_size
);
memcpy
(
data
,
data_sdu_p
,
pdu_remaining_size
);
pdu_mngt_p
->
payload_size
+=
pdu_remaining_size
;
pdu_mngt_p
->
payload_size
+=
pdu_remaining_size
;
...
@@ -376,6 +378,9 @@ void rlc_am_segment_10 (
...
@@ -376,6 +378,9 @@ void rlc_am_segment_10 (
LOG_T
(
RLC
,
PROTOCOL_RLC_AM_CTXT_FMT
"[SEGMENT] Exactly Filling remaining PDU with %d remaining bytes of SDU
\n
"
,
LOG_T
(
RLC
,
PROTOCOL_RLC_AM_CTXT_FMT
"[SEGMENT] Exactly Filling remaining PDU with %d remaining bytes of SDU
\n
"
,
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
rlc_pP
),
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
rlc_pP
),
pdu_remaining_size
);
pdu_remaining_size
);
rlc_am_mui
.
rrc_mui
[
rlc_am_mui
.
rrc_mui_num
]
=
sdu_mngt_p
->
mui
;
rlc_am_mui
.
rrc_mui_num
++
;
memcpy
(
data
,
data_sdu_p
,
pdu_remaining_size
);
memcpy
(
data
,
data_sdu_p
,
pdu_remaining_size
);
pdu_mngt_p
->
payload_size
+=
pdu_remaining_size
;
pdu_mngt_p
->
payload_size
+=
pdu_remaining_size
;
...
@@ -392,6 +397,8 @@ void rlc_am_segment_10 (
...
@@ -392,6 +397,8 @@ void rlc_am_segment_10 (
continue_fill_pdu_with_sdu
=
0
;
continue_fill_pdu_with_sdu
=
0
;
pdu_remaining_size
=
0
;
pdu_remaining_size
=
0
;
}
else
if
((
sdu_mngt_p
->
sdu_remaining_size
+
(
li_length_in_bytes
^
3
))
<
pdu_remaining_size
)
{
}
else
if
((
sdu_mngt_p
->
sdu_remaining_size
+
(
li_length_in_bytes
^
3
))
<
pdu_remaining_size
)
{
rlc_am_mui
.
rrc_mui
[
rlc_am_mui
.
rrc_mui_num
]
=
sdu_mngt_p
->
mui
;
rlc_am_mui
.
rrc_mui_num
++
;
if
(
fill_num_li
==
(
RLC_AM_MAX_SDU_IN_PDU
-
1
))
{
if
(
fill_num_li
==
(
RLC_AM_MAX_SDU_IN_PDU
-
1
))
{
LOG_T
(
RLC
,
PROTOCOL_RLC_AM_CTXT_FMT
"[SEGMENT] [SIZE %d] REACHING RLC_AM_MAX_SDU_IN_PDU LIs -> STOP SEGMENTATION FOR THIS PDU SDU
\n
"
,
LOG_T
(
RLC
,
PROTOCOL_RLC_AM_CTXT_FMT
"[SEGMENT] [SIZE %d] REACHING RLC_AM_MAX_SDU_IN_PDU LIs -> STOP SEGMENTATION FOR THIS PDU SDU
\n
"
,
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
rlc_pP
),
PROTOCOL_RLC_AM_CTXT_ARGS
(
ctxt_pP
,
rlc_pP
),
...
@@ -472,6 +479,9 @@ void rlc_am_segment_10 (
...
@@ -472,6 +479,9 @@ void rlc_am_segment_10 (
sdu_mngt_p
->
sdu_remaining_size
,
sdu_mngt_p
->
sdu_remaining_size
,
pdu_remaining_size
-
sdu_mngt_p
->
sdu_remaining_size
);
pdu_remaining_size
-
sdu_mngt_p
->
sdu_remaining_size
);
//assert(1!=1);
//assert(1!=1);
rlc_am_mui
.
rrc_mui
[
rlc_am_mui
.
rrc_mui_num
]
=
sdu_mngt_p
->
mui
;
rlc_am_mui
.
rrc_mui_num
++
;
memcpy
(
data
,
data_sdu_p
,
sdu_mngt_p
->
sdu_remaining_size
);
memcpy
(
data
,
data_sdu_p
,
sdu_mngt_p
->
sdu_remaining_size
);
pdu_mngt_p
->
payload_size
+=
sdu_mngt_p
->
sdu_remaining_size
;
pdu_mngt_p
->
payload_size
+=
sdu_mngt_p
->
sdu_remaining_size
;
pdu_remaining_size
=
pdu_remaining_size
-
sdu_mngt_p
->
sdu_remaining_size
;
pdu_remaining_size
=
pdu_remaining_size
-
sdu_mngt_p
->
sdu_remaining_size
;
...
...
openair2/LAYER2/RLC/rlc.h
View file @
bb6d1165
...
@@ -151,7 +151,6 @@ typedef struct {
...
@@ -151,7 +151,6 @@ typedef struct {
frame_t
head_sdu_creation_time
;
/*!< \brief Head SDU creation time. */
frame_t
head_sdu_creation_time
;
/*!< \brief Head SDU creation time. */
sdu_size_t
head_sdu_remaining_size_to_send
;
/*!< \brief remaining size of sdu: could be the total size or the remaining size of already segmented sdu */
sdu_size_t
head_sdu_remaining_size_to_send
;
/*!< \brief remaining size of sdu: could be the total size or the remaining size of already segmented sdu */
boolean_t
head_sdu_is_segmented
;
/*!< \brief 0 if head SDU has not been segmented, 1 if already segmented */
boolean_t
head_sdu_is_segmented
;
/*!< \brief 0 if head SDU has not been segmented, 1 if already segmented */
mui_t
rrc_mui
;
}
mac_rlc_status_resp_t
;
}
mac_rlc_status_resp_t
;
...
...
openair2/LAYER2/RLC/rlc_mac.c
View file @
bb6d1165
...
@@ -192,6 +192,7 @@ tbs_size_t mac_rlc_data_req(
...
@@ -192,6 +192,7 @@ tbs_size_t mac_rlc_data_req(
break
;
break
;
case
RLC_MODE_AM
:
case
RLC_MODE_AM
:
rlc_am_mui
.
rrc_mui_num
=
0
;
if
(
!
enb_flagP
)
rlc_am_set_nb_bytes_requested_by_mac
(
&
rlc_union_p
->
rlc
.
am
,
tb_sizeP
);
if
(
!
enb_flagP
)
rlc_am_set_nb_bytes_requested_by_mac
(
&
rlc_union_p
->
rlc
.
am
,
tb_sizeP
);
data_request
=
rlc_am_mac_data_request
(
&
ctxt
,
&
rlc_union_p
->
rlc
.
am
,
enb_flagP
);
data_request
=
rlc_am_mac_data_request
(
&
ctxt
,
&
rlc_union_p
->
rlc
.
am
,
enb_flagP
);
ret_tb_size
=
mac_rlc_serialize_tb
(
buffer_pP
,
data_request
.
data
);
ret_tb_size
=
mac_rlc_serialize_tb
(
buffer_pP
,
data_request
.
data
);
...
@@ -372,7 +373,6 @@ mac_rlc_status_resp_t mac_rlc_status_ind(
...
@@ -372,7 +373,6 @@ mac_rlc_status_resp_t mac_rlc_status_ind(
mac_rlc_status_resp
.
head_sdu_creation_time
=
status_resp
.
head_sdu_creation_time
;
mac_rlc_status_resp
.
head_sdu_creation_time
=
status_resp
.
head_sdu_creation_time
;
mac_rlc_status_resp
.
head_sdu_remaining_size_to_send
=
status_resp
.
head_sdu_remaining_size_to_send
;
mac_rlc_status_resp
.
head_sdu_remaining_size_to_send
=
status_resp
.
head_sdu_remaining_size_to_send
;
mac_rlc_status_resp
.
head_sdu_is_segmented
=
status_resp
.
head_sdu_is_segmented
;
mac_rlc_status_resp
.
head_sdu_is_segmented
=
status_resp
.
head_sdu_is_segmented
;
mac_rlc_status_resp
.
rrc_mui
=
status_resp
.
rrc_mui
;
//return mac_rlc_status_resp;
//return mac_rlc_status_resp;
break
;
break
;
...
...
openair2/RRC/LITE/rrc_eNB.c
View file @
bb6d1165
...
@@ -831,7 +831,8 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s*
...
@@ -831,7 +831,8 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s*
LOG_W
(
RRC
,
"[eNB %d] Removing UE RNTI %x
\n
"
,
enb_mod_idP
,
rnti
);
LOG_W
(
RRC
,
"[eNB %d] Removing UE RNTI %x
\n
"
,
enb_mod_idP
,
rnti
);
#if defined(ENABLE_USE_MME)
#if defined(ENABLE_USE_MME)
if
(
ue_context_pP
->
ue_context
.
ul_failure_timer
>=
20000
)
{
if
((
ue_context_pP
->
ue_context
.
ul_failure_timer
>=
20000
)
&&
(
mac_eNB_get_rrc_status
(
enb_mod_idP
,
rnti
)
>=
RRC_CONNECTED
))
{
LOG_I
(
RRC
,
"[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x
\n
"
,
enb_mod_idP
,
rnti
);
LOG_I
(
RRC
,
"[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x
\n
"
,
enb_mod_idP
,
rnti
);
rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ
(
enb_mod_idP
,
ue_context_pP
,
S1AP_CAUSE_RADIO_NETWORK
,
21
);
// send cause 21: connection with ue lost
rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ
(
enb_mod_idP
,
ue_context_pP
,
S1AP_CAUSE_RADIO_NETWORK
,
21
);
// send cause 21: connection with ue lost
/* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered)
/* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered)
...
@@ -2100,6 +2101,8 @@ rrc_eNB_generate_RRCConnectionRelease(
...
@@ -2100,6 +2101,8 @@ rrc_eNB_generate_RRCConnectionRelease(
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rnti
=
ctxt_pP
->
rnti
;
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rnti
=
ctxt_pP
->
rnti
;
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rrc_eNB_mui
=
rrc_eNB_mui
;
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
rrc_eNB_mui
=
rrc_eNB_mui
;
rrc_release_info
.
num_UEs
++
;
rrc_release_info
.
num_UEs
++
;
LOG_D
(
RRC
,
"Generate DLSCH Release send: index %d rnti %x mui %d flag %d
\n
"
,
release_num
,
ctxt_pP
->
rnti
,
rrc_eNB_mui
,
rrc_release_info
.
RRC_release_ctrl
[
release_num
].
flag
);
break
;
break
;
}
}
}
}
...
...
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