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
19acb84c
Commit
19acb84c
authored
Dec 05, 2019
by
Javier Morgade
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'new_rlc' into develop_integration_2019_w44
parents
95343847
708f67f7
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
281 additions
and
73 deletions
+281
-73
README.txt
README.txt
+1
-0
ci-scripts/Jenkinsfile-gitlab
ci-scripts/Jenkinsfile-gitlab
+1
-1
ci-scripts/buildOnVM.sh
ci-scripts/buildOnVM.sh
+5
-1
ci-scripts/oai-ci-vm-tool
ci-scripts/oai-ci-vm-tool
+1
-1
ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
+2
-2
ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
+1
-1
ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
...s/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
+150
-0
ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml
ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml
+1
-1
openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
+18
-6
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+5
-3
openair2/LAYER2/MAC/pre_processor.c
openair2/LAYER2/MAC/pre_processor.c
+8
-0
openair2/LAYER2/MAC/ue_procedures.c
openair2/LAYER2/MAC/ue_procedures.c
+5
-0
openair2/LAYER2/rlc_v2/rlc_oai_api.c
openair2/LAYER2/rlc_v2/rlc_oai_api.c
+43
-22
openair2/LAYER2/rlc_v2/rlc_ue_manager.h
openair2/LAYER2/rlc_v2/rlc_ue_manager.h
+1
-0
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+39
-35
No files found.
README.txt
View file @
19acb84c
...
...
@@ -43,6 +43,7 @@ openairinterface5g
RELEASE NOTES:
v1.1.1 -> November 2019. Bug fix in the TDD Fair Round-Robin scheduler
v1.1.0 -> July 2019. This version adds the following implemented features:
* Experimental support of LTE-M
- Single LTE-M UE attachment, legacy-LTE UE attachment is disabled
...
...
ci-scripts/Jenkinsfile-gitlab
View file @
19acb84c
...
...
@@ -131,8 +131,8 @@ pipeline {
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.FlexRanRtcGitLabRepository_Credentials}"
,
usernameVariable:
'git_username'
,
passwordVariable:
'git_password'
]
])
{
sh
"git clone https://${git_username}:${git_password}@gitlab.eurecom.fr/flexran/flexran-rtc.git . > ../git_clone.log 2>&1"
sh
"git checkout develop >> ../git_clone.log 2>&1"
}
sh
"sed -i -e 's#add-apt-repository.*cleishm.*neo4j#add-apt-repository ppa:cleishm/neo4j -y#' -e 's#libneo4j-client-dev#libneo4j-client-dev -y#' tools/install_dependencies"
sh
"zip -r -qq flexran.zip ."
}
}
...
...
ci-scripts/buildOnVM.sh
View file @
19acb84c
...
...
@@ -168,8 +168,12 @@ function build_on_vm {
echo
"cp /home/ubuntu/zip-install.txt cmake_targets/log"
>>
$VM_CMDS
echo
"echo
\"
./tools/install_dependencies
\"
"
>>
$VM_CMDS
echo
"./tools/install_dependencies > cmake_targets/log/install-build.txt 2>&1"
>>
$VM_CMDS
echo
"echo
\"
mkdir build
\"
"
>>
$VM_CMDS
echo
"mkdir build"
>>
$VM_CMDS
echo
"echo
\"
cd build
\"
"
>>
$VM_CMDS
echo
"cd build"
>>
$VM_CMDS
echo
"echo
\"
$BUILD_OPTIONS
\"
"
>>
$VM_CMDS
echo
"
$BUILD_OPTIONS
> cmake_targets/log/rt_controller.Rel14.txt 2>&1"
>>
$VM_CMDS
echo
"
$BUILD_OPTIONS
>
../
cmake_targets/log/rt_controller.Rel14.txt 2>&1"
>>
$VM_CMDS
fi
if
[[
"
$VM_NAME
"
!=
*
"-cppcheck"
*
]]
&&
[[
"
$VM_NAME
"
!=
*
"-flexran-rtc"
*
]]
then
...
...
ci-scripts/oai-ci-vm-tool
View file @
19acb84c
...
...
@@ -210,7 +210,7 @@ function variant__v8__ue_ethernet {
function
variant__v10__flexran_rtc
{
ARCHIVES_LOC
=
flexran
NB_PATTERN_FILES
=
1
BUILD_OPTIONS
=
"cmake . && make -j2"
BUILD_OPTIONS
=
"cmake .
.
&& make -j2"
VARIANT_INFO
=
"non-OSA"
}
function
variant__v20__l1_sim
{
...
...
ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
View file @
19acb84c
...
...
@@ -25,7 +25,7 @@
<htmlTabRef>
test-05-tm2
</htmlTabRef>
<htmlTabName>
Test-05MHz-TM2
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
2
</repeatCount>
<repeatCount>
3
</repeatCount>
<TestCaseRequestedList>
030201
040101
...
...
@@ -36,7 +36,7 @@
<testCase
id=
"030105"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize eNB (TDD/Band40/5MHz)
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/enb.band40.tm2.25PRB.FairScheduler.usrpb210.conf
</Initialize_eNB_args>
<Initialize_eNB_args>
-O ci-scripts/conf_files/enb.band40.tm2.25PRB.FairScheduler.usrpb210.conf
--MACRLCs.[0].scheduler_mode default
</Initialize_eNB_args>
</testCase>
<testCase
id=
"030201"
>
...
...
ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
View file @
19acb84c
...
...
@@ -27,7 +27,7 @@
<TestCaseRequestedList>
030201
040101
030124 040301 040521 040622 040621 040623 0406
24 040625 040662 040661 040663 040664 040665
040401 040201 030201
030124 040301 040521 040622 040621 040623 0406
62
040401 040201 030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
...
...
ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
0 → 100644
View file @
19acb84c
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
test-20-tm1-defSched
</htmlTabRef>
<htmlTabName>
Test-20MHz-TM1-default-scheduler
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<TestCaseRequestedList>
030201
040101
030125 040301 040522 040627 040626 040628 040629 040630 040667 040666 040668 040669 040670 040401 040201 030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"030125"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize eNB (TDD/Band40/20MHz/info)
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf --MACRLCs.[0].scheduler_mode default
</Initialize_eNB_args>
</testCase>
<testCase
id=
"030201"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate eNB
</desc>
</testCase>
<testCase
id=
"040101"
>
<class>
Initialize_UE
</class>
<desc>
Initialize UE
</desc>
</testCase>
<testCase
id=
"040201"
>
<class>
Terminate_UE
</class>
<desc>
Terminate UE
</desc>
</testCase>
<testCase
id=
"040301"
>
<class>
Attach_UE
</class>
<desc>
Attach UE
</desc>
</testCase>
<testCase
id=
"040401"
>
<class>
Detach_UE
</class>
<desc>
Detach UE
</desc>
</testCase>
<testCase
id=
"040522"
>
<class>
Ping
</class>
<desc>
ping (20MHz - 20 sec)
</desc>
<ping_args>
-c 20
</ping_args>
<ping_packetloss_threshold>
25
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"040626"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(balanced)
</desc>
<iperf_args>
-u -b 27.5M -t 30 -i 1
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
balanced
</iperf_profile>
</testCase>
<testCase
id=
"040627"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(single-ue)
</desc>
<iperf_args>
-u -b 27.5M -t 30 -i 1
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"040628"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(unbalanced)
</desc>
<iperf_args>
-u -b 27.5M -t 30 -i 1
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
unbalanced
</iperf_profile>
</testCase>
<testCase
id=
"040629"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - DL/TCP)(30 sec)(single-ue)
</desc>
<iperf_args>
-t 30 -i 1 -fm
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"040630"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - DL/TCP)(30 sec)
</desc>
<iperf_args>
-t 30 -i 1 -fm
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040666"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - UL/7Mbps/UDP)(30 sec)(balanced)
</desc>
<iperf_args>
-u -b 7M -t 30 -i 1 -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
balanced
</iperf_profile>
</testCase>
<testCase
id=
"040667"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - UL/7Mbps/UDP)(30 sec)(single-ue)
</desc>
<iperf_args>
-u -b 7M -t 30 -i 1 -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"040668"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - UL/7Mbps/UDP)(30 sec)(unbalanced)
</desc>
<iperf_args>
-u -b 7M -t 30 -i 1 -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
unbalanced
</iperf_profile>
</testCase>
<testCase
id=
"040669"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - UL/TCP)(30 sec)(single-ue)
</desc>
<iperf_args>
-t 30 -i 1 -fm -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"040670"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - UL/TCP)(30 sec)
</desc>
<iperf_args>
-t 30 -i 1 -fm -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
</testCaseList>
ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml
View file @
19acb84c
...
...
@@ -43,7 +43,7 @@
<testCase
id=
"030125"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize RCC (TDD/Band40/20MHz/info)
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/rcc.band40.tm1.100PRB.FairScheduler.usrpb210.conf
</Initialize_eNB_args>
<Initialize_eNB_args>
-O ci-scripts/conf_files/rcc.band40.tm1.100PRB.FairScheduler.usrpb210.conf
--MACRLCs.[0].scheduler_mode default
</Initialize_eNB_args>
<eNB_instance>
1
</eNB_instance>
</testCase>
...
...
openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
View file @
19acb84c
...
...
@@ -2001,6 +2001,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
int
format_flag
;
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
;
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_pdu
;
int
rrc_status
;
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
//save ulsch dci number
...
...
@@ -2096,9 +2097,11 @@ void ulsch_scheduler_pre_ue_select_fairRR(
}
UE_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
rrc_status
=
mac_eNB_get_rrc_status
(
module_idP
,
rnti
);
if
(
((
UE_sched_ctl
->
ul_inactivity_timer
>
20
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
))
||
((
UE_sched_ctl
->
ul_inactivity_timer
>
10
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
)
&&
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
)))
{
((
UE_sched_ctl
->
ul_inactivity_timer
>
10
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
)
&&
(
rrc_status
<
RRC_CONNECTED
))
||
((
UE_sched_ctl
->
cqi_req_timer
>
300
)
&&
((
rrc_status
>=
RRC_CONNECTED
)))
)
{
first_ue_id
[
CC_id
][
ue_first_num
[
CC_id
]]
=
UE_id
;
first_ue_total
[
CC_id
]
[
ue_first_num
[
CC_id
]]
=
0
;
ue_first_num
[
CC_id
]
++
;
...
...
@@ -2203,10 +2206,12 @@ void ulsch_scheduler_pre_ue_select_fairRR(
int
bytes_to_schedule
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
estimated_ul_buffer
-
UE_list
->
UE_template
[
CC_id
][
UE_id
].
scheduled_ul_bytes
;
if
(
bytes_to_schedule
<
0
)
bytes_to_schedule
=
0
;
rrc_status
=
mac_eNB_get_rrc_status
(
module_idP
,
rnti
);
if
(
(
bytes_to_schedule
>
0
)
||
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
ul_SR
>
0
)
||
((
UE_sched_ctl
->
ul_inactivity_timer
>
20
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
))
||
((
UE_sched_ctl
->
ul_inactivity_timer
>
10
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
)
&&
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
))
)
{
((
UE_sched_ctl
->
ul_inactivity_timer
>
10
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
)
&&
(
rrc_status
<
RRC_CONNECTED
))
||
((
UE_sched_ctl
->
cqi_req_timer
>
300
)
&&
((
rrc_status
>=
RRC_CONNECTED
)))
)
{
hi_dci0_pdu
=
&
HI_DCI0_req
->
hi_dci0_pdu_list
[
HI_DCI0_req
->
number_of_dci
+
HI_DCI0_req
->
number_of_hi
];
format_flag
=
2
;
aggregation
=
get_aggregation
(
get_bw_index
(
module_idP
,
CC_id
),
UE_list
->
UE_sched_ctrl
[
UE_id
].
dl_cqi
[
CC_id
],
format0
);
...
...
@@ -2788,19 +2793,25 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
if
(
status
<
RRC_CONNECTED
)
cqi_req
=
0
;
else
if
(
UE_sched_ctrl
->
cqi_req_timer
>
30
)
{
else
if
(
UE_sched_ctrl
->
cqi_received
==
1
){
LOG_D
(
MAC
,
"Clearing CQI request timer
\n
"
);
UE_sched_ctrl
->
cqi_req_flag
=
0
;
UE_sched_ctrl
->
cqi_received
=
0
;
UE_sched_ctrl
->
cqi_req_timer
=
0
;
cqi_req
=
0
;
}
else
if
(
UE_sched_ctrl
->
cqi_req_timer
>
30
)
{
cqi_req
=
1
;
// To be safe , do not ask CQI in special SFs:36.213/7.2.3 CQI definition
if
(
cc
->
tdd_Config
)
{
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
case
1
:
if
(
s
ched_subframeP
==
1
||
sched_
subframeP
==
6
)
cqi_req
=
0
;
if
(
s
ubframeP
==
1
||
subframeP
==
6
)
cqi_req
=
0
;
break
;
case
3
:
if
(
s
ched_s
ubframeP
==
1
)
cqi_req
=
0
;
if
(
subframeP
==
1
)
cqi_req
=
0
;
break
;
...
...
@@ -2811,7 +2822,6 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
}
if
(
cqi_req
==
1
)
{
UE_sched_ctrl
->
cqi_req_timer
=
0
;
UE_sched_ctrl
->
cqi_req_flag
|=
1
<<
sched_subframeP
;
}
}
else
...
...
@@ -2890,6 +2900,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
//store for possible retransmission
UE_template
->
nb_rb_ul
[
harq_pid
]
=
rb_table
[
rb_table_index
];
UE_template
->
first_rb_ul
[
harq_pid
]
=
first_rb
[
CC_id
];
UE_template
->
cqi_req
[
harq_pid
]
=
cqi_req
;
UE_sched_ctrl
->
ul_scheduled
|=
(
1
<<
harq_pid
);
if
(
UE_id
==
UE_list
->
head
)
...
...
@@ -3060,6 +3071,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
//store for possible retransmission
UE_template
->
nb_rb_ul
[
harq_pid
]
=
ulsch_ue_select
[
CC_id
].
list
[
ulsch_ue_num
].
nb_rb
;
UE_template
->
first_rb_ul
[
harq_pid
]
=
ulsch_ue_select
[
CC_id
].
list
[
ulsch_ue_num
].
start_rb
;
cqi_req
=
UE_template
->
cqi_req
[
harq_pid
];
UE_sched_ctrl
->
ul_scheduled
|=
(
1
<<
harq_pid
);
// Cyclic shift for DM RS
cshift
=
0
;
// values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
...
...
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
19acb84c
...
...
@@ -2556,6 +2556,7 @@ UE_is_to_be_scheduled(module_id_t module_idP,
{
UE_TEMPLATE
*
UE_template
=
&
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_template
[
CC_id
][
UE_id
];
UE_sched_ctrl_t
*
UE_sched_ctl
=
&
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
];
int
rrc_status
;
// do not schedule UE if UL is not working
if
(
UE_sched_ctl
->
ul_failure_timer
>
0
||
UE_sched_ctl
->
ul_out_of_sync
>
0
)
...
...
@@ -2568,13 +2569,14 @@ UE_is_to_be_scheduled(module_id_t module_idP,
UE_id
,
ue_rnti
);
rrc_status
=
mac_eNB_get_rrc_status
(
module_idP
,
ue_rnti
);
if
(
UE_template
->
scheduled_ul_bytes
<
UE_template
->
estimated_ul_buffer
||
UE_template
->
ul_SR
>
0
||
// uplink scheduling request
(
UE_sched_ctl
->
ul_inactivity_timer
>
19
&&
UE_sched_ctl
->
ul_scheduled
==
0
)
||
// every 2 frames when RRC_CONNECTED
(
UE_sched_ctl
->
ul_inactivity_timer
>
10
&&
UE_sched_ctl
->
ul_scheduled
==
0
&&
mac_eNB_get_rrc_status
(
module_idP
,
ue_rnti
)
<
RRC_CONNECTED
))
{
// every Frame when not RRC_CONNECTED
UE_sched_ctl
->
ul_scheduled
==
0
&&
rrc_status
<
RRC_CONNECTED
)
||
// every Frame when not RRC_CONNECTED
(
UE_sched_ctl
->
cqi_req_timer
>
300
&&
rrc_status
>=
RRC_CONNECTED
))
{
// cqi req timer expired long ago (do not put too low value)
LOG_D
(
MAC
,
"[eNB %d][PUSCH] UE %d/%x should be scheduled (BSR0 estimated size %d, SR %d)
\n
"
,
module_idP
,
UE_id
,
...
...
openair2/LAYER2/MAC/pre_processor.c
View file @
19acb84c
...
...
@@ -2024,6 +2024,14 @@ static int ue_ul_compare(const void *_a, const void *_b, void *_params) {
UE_list
->
UE_template
[
pCCid2
][
UE_id2
].
pre_assigned_mcs_ul
)
return
1
;
if
(
UE_list
->
UE_sched_ctrl
[
UE_id1
].
cqi_req_timer
>
UE_list
->
UE_sched_ctrl
[
UE_id2
].
cqi_req_timer
)
return
-
1
;
if
(
UE_list
->
UE_sched_ctrl
[
UE_id1
].
cqi_req_timer
<
UE_list
->
UE_sched_ctrl
[
UE_id2
].
cqi_req_timer
)
return
1
;
return
0
;
}
...
...
openair2/LAYER2/MAC/ue_procedures.c
View file @
19acb84c
...
...
@@ -2011,6 +2011,10 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
subframe
,
ENB_FLAG_NO
,
lcid
);
lcid_buffer_occupancy_new
=
lcid_buffer_occupancy_old
;
#if 0
/* TODO: those assert crash the L2 simulator with the new RLC.
* Are they necessary?
*/
AssertFatal(lcid_buffer_occupancy_new ==
UE_mac_inst[module_idP].
scheduling_info.LCID_buffer_remain[lcid],
...
...
@@ -2029,6 +2033,7 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
scheduling_info.BSR_bytes[UE_mac_inst[module_idP].
scheduling_info.LCGID
[lcid]]);
#endif
//Multiplex all available DCCH RLC PDUs considering to multiplex the last PDU each time for maximize the data
//Adjust at the end of the loop
...
...
openair2/LAYER2/rlc_v2/rlc_oai_api.c
View file @
19acb84c
...
...
@@ -53,8 +53,9 @@ void mac_rlc_data_ind (
rlc_ue_t
*
ue
;
rlc_entity_t
*
rb
;
if
(
module_idP
!=
0
||
eNB_index
!=
0
/*|| enb_flagP != 1 || MBMS_flagP != 0*/
)
{
LOG_E
(
RLC
,
"%s:%d:%s: fatal
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
if
(
enb_flagP
==
1
&&
module_idP
!=
0
)
{
LOG_E
(
RLC
,
"%s:%d:%s: fatal, module_id must be 0 for eNB
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
...
...
@@ -69,7 +70,6 @@ void mac_rlc_data_ind (
else
ue
=
rlc_manager_get_ue
(
rlc_ue_manager
,
rntiP
);
switch
(
channel_idP
)
{
case
1
...
2
:
rb
=
ue
->
srb
[
channel_idP
-
1
];
break
;
case
3
...
7
:
rb
=
ue
->
drb
[
channel_idP
-
3
];
break
;
...
...
@@ -357,6 +357,9 @@ void rlc_util_print_hex_octets(comp_name_t componentP, unsigned char *dataP, con
{
}
#include "common/ran_context.h"
extern
RAN_CONTEXT_t
RC
;
static
void
deliver_sdu
(
void
*
_ue
,
rlc_entity_t
*
entity
,
char
*
buf
,
int
size
)
{
rlc_ue_t
*
ue
=
_ue
;
...
...
@@ -401,7 +404,7 @@ rb_found:
memcpy
(
memblock
->
data
,
buf
,
size
);
/* unused fields? */
ctx
.
instance
=
0
;
ctx
.
instance
=
ue
->
module_id
;
ctx
.
frame
=
0
;
ctx
.
subframe
=
0
;
ctx
.
eNB_index
=
0
;
...
...
@@ -409,7 +412,7 @@ rb_found:
ctx
.
brOption
=
0
;
/* used fields? */
ctx
.
module_id
=
0
;
ctx
.
module_id
=
ue
->
module_id
;
ctx
.
rnti
=
ue
->
rnti
;
is_enb
=
rlc_manager_get_enb_flag
(
rlc_ue_manager
);
...
...
@@ -419,9 +422,26 @@ rb_found:
T
(
T_ENB_RLC_UL
,
T_INT
(
0
/*ctxt_pP->module_id*/
),
T_INT
(
ue
->
rnti
),
T_INT
(
rb_id
),
T_INT
(
size
));
//}
//if (!pdcp_data_ind(&ctx, is_srb, (ue->rnti == 0xfffd ? 1 : 0), rb_id, size, memblock)) {
const
ngran_node_t
type
=
RC
.
rrc
[
0
/*ctxt_pP->module_id*/
]
->
node_type
;
AssertFatal
(
type
!=
ngran_eNB_CU
&&
type
!=
ngran_ng_eNB_CU
&&
type
!=
ngran_gNB_CU
,
"Can't be CU, bad node type %d
\n
"
,
type
);
if
(
NODE_IS_DU
(
type
)
&&
is_srb
==
1
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_RLC_ENB
,
F1AP_UL_RRC_MESSAGE
);
F1AP_UL_RRC_MESSAGE
(
msg
).
rnti
=
ue
->
rnti
;
F1AP_UL_RRC_MESSAGE
(
msg
).
srb_id
=
rb_id
;
F1AP_UL_RRC_MESSAGE
(
msg
).
rrc_container
=
(
unsigned
char
*
)
buf
;
F1AP_UL_RRC_MESSAGE
(
msg
).
rrc_container_length
=
size
;
itti_send_msg_to_task
(
TASK_DU_F1
,
ENB_MODULE_ID_TO_INSTANCE
(
0
/*ctxt_pP->module_id*/
),
msg
);
return
;
}
}
if
(
!
pdcp_data_ind
(
&
ctx
,
is_srb
,
(
ue
->
rnti
==
0xfffd
?
1
:
0
),
rb_id
,
size
,
memblock
))
{
if
(
!
get_pdcp_data_ind_func
()(
&
ctx
,
is_srb
,
(
ue
->
rnti
==
0xfffd
?
1
:
0
),
rb_id
,
size
,
memblock
,
NULL
,
NULL
))
{
LOG_E
(
RLC
,
"%s:%d:%s: ERROR: pdcp_data_ind failed
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
/* what to do in case of failure? for the moment: nothing */
}
...
...
@@ -534,7 +554,7 @@ rb_found:
itti_send_msg_to_task
(
TASK_RRC_ENB
,
0
,
msg
);
}
static
void
add_srb
(
int
rnti
,
struct
LTE_SRB_ToAddMod
*
s
)
static
void
add_srb
(
int
rnti
,
int
module_id
,
struct
LTE_SRB_ToAddMod
*
s
)
{
rlc_entity_t
*
rlc_am
;
rlc_ue_t
*
ue
;
...
...
@@ -609,6 +629,7 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s)
rlc_manager_lock
(
rlc_ue_manager
);
ue
=
rlc_manager_get_ue
(
rlc_ue_manager
,
rnti
);
ue
->
module_id
=
module_id
;
if
(
ue
->
srb
[
srb_id
-
1
]
!=
NULL
)
{
LOG_D
(
RLC
,
"%s:%d:%s: warning SRB %d already exist for ue %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
,
rnti
);
...
...
@@ -629,7 +650,7 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s)
rlc_manager_unlock
(
rlc_ue_manager
);
}
static
void
add_drb_am
(
int
rnti
,
struct
LTE_DRB_ToAddMod
*
s
)
static
void
add_drb_am
(
int
rnti
,
int
module_id
,
struct
LTE_DRB_ToAddMod
*
s
)
{
rlc_entity_t
*
rlc_am
;
rlc_ue_t
*
ue
;
...
...
@@ -686,6 +707,7 @@ static void add_drb_am(int rnti, struct LTE_DRB_ToAddMod *s)
rlc_manager_lock
(
rlc_ue_manager
);
ue
=
rlc_manager_get_ue
(
rlc_ue_manager
,
rnti
);
ue
->
module_id
=
module_id
;
if
(
ue
->
drb
[
drb_id
-
1
]
!=
NULL
)
{
LOG_D
(
RLC
,
"%s:%d:%s: warning DRB %d already exist for ue %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
...
...
@@ -706,7 +728,7 @@ static void add_drb_am(int rnti, struct LTE_DRB_ToAddMod *s)
rlc_manager_unlock
(
rlc_ue_manager
);
}
static
void
add_drb_um
(
int
rnti
,
struct
LTE_DRB_ToAddMod
*
s
)
static
void
add_drb_um
(
int
rnti
,
int
module_id
,
struct
LTE_DRB_ToAddMod
*
s
)
{
rlc_entity_t
*
rlc_um
;
rlc_ue_t
*
ue
;
...
...
@@ -759,6 +781,7 @@ static void add_drb_um(int rnti, struct LTE_DRB_ToAddMod *s)
rlc_manager_lock
(
rlc_ue_manager
);
ue
=
rlc_manager_get_ue
(
rlc_ue_manager
,
rnti
);
ue
->
module_id
=
module_id
;
if
(
ue
->
drb
[
drb_id
-
1
]
!=
NULL
)
{
LOG_D
(
RLC
,
"%s:%d:%s: warning DRB %d already exist for ue %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
...
...
@@ -776,14 +799,14 @@ static void add_drb_um(int rnti, struct LTE_DRB_ToAddMod *s)
rlc_manager_unlock
(
rlc_ue_manager
);
}
static
void
add_drb
(
int
rnti
,
struct
LTE_DRB_ToAddMod
*
s
)
static
void
add_drb
(
int
rnti
,
int
module_id
,
struct
LTE_DRB_ToAddMod
*
s
)
{
switch
(
s
->
rlc_Config
->
present
)
{
case
LTE_RLC_Config_PR_am
:
add_drb_am
(
rnti
,
s
);
add_drb_am
(
rnti
,
module_id
,
s
);
break
;
case
LTE_RLC_Config_PR_um_Bi_Directional
:
add_drb_um
(
rnti
,
s
);
add_drb_um
(
rnti
,
module_id
,
s
);
break
;
default:
LOG_E
(
RLC
,
"%s:%d:%s: fatal: unhandled DRB type
\n
"
,
...
...
@@ -806,18 +829,18 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
)
{
int
rnti
=
ctxt_pP
->
rnti
;
int
module_id
=
ctxt_pP
->
module_id
;
int
i
,
j
;
if
(
/*ctxt_pP->enb_flag != 1 ||*/
ctxt_pP
->
module_id
!=
0
/*||
ctxt_pP->instance != 0 || ctxt_pP->eNB_index != 0 ||
ctxt_pP->configured != 1 || ctxt_pP->brOption != 0 */
)
{
LOG_E
(
RLC
,
"%s: ctxt_pP not handled (%d %d %d %d %d %d)
\n
"
,
__FUNCTION__
,
ctxt_pP
->
enb_flag
,
ctxt_pP
->
module_id
,
ctxt_pP
->
instance
,
ctxt_pP
->
eNB_index
,
ctxt_pP
->
configured
,
ctxt_pP
->
brOption
);
if
(
ctxt_pP
->
enb_flag
==
1
&&
(
ctxt_pP
->
module_id
!=
0
||
ctxt_pP
->
instance
!=
0
))
{
LOG_E
(
RLC
,
"%s: module_id != 0 or instance != 0 not handled for eNB
\n
"
,
__FUNCTION__
);
exit
(
1
);
}
if
(
pmch_InfoList_r9_pP
!=
NULL
)
{
LTE_MBMS_SessionInfoList_r9_t
*
mbms_SessionInfoList_r9_p
=
NULL
;
LTE_MBMS_SessionInfo_r9_t
*
MBMS_SessionInfo_p
=
NULL
;
mbms_session_id_t
mbms_session_id
;
...
...
@@ -881,8 +904,6 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
}
rlc_manager_unlock
(
rlc_ue_manager
);
}
if
(
drb2release_listP
!=
NULL
)
{
...
...
@@ -892,13 +913,13 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
if
(
srb2add_listP
!=
NULL
)
{
for
(
i
=
0
;
i
<
srb2add_listP
->
list
.
count
;
i
++
)
{
add_srb
(
rnti
,
srb2add_listP
->
list
.
array
[
i
]);
add_srb
(
rnti
,
module_id
,
srb2add_listP
->
list
.
array
[
i
]);
}
}
if
(
drb2add_listP
!=
NULL
)
{
for
(
i
=
0
;
i
<
drb2add_listP
->
list
.
count
;
i
++
)
{
add_drb
(
rnti
,
drb2add_listP
->
list
.
array
[
i
]);
add_drb
(
rnti
,
module_id
,
drb2add_listP
->
list
.
array
[
i
]);
}
}
...
...
openair2/LAYER2/rlc_v2/rlc_ue_manager.h
View file @
19acb84c
...
...
@@ -28,6 +28,7 @@ typedef void rlc_ue_manager_t;
typedef
struct
rlc_ue_t
{
int
rnti
;
int
module_id
;
/* necesarry for the L2 simulator - not clean, to revise */
/* due to openair calling status_ind/data_req, we need to keep this.
* To be considered 'hackish'.
*/
...
...
openair2/RRC/LTE/rrc_eNB.c
View file @
19acb84c
...
...
@@ -3697,16 +3697,18 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
,
NULL
);
/* Refresh SRBs/DRBs */
rrc_rlc_config_asn1_req
(
ctxt_pP
,
*
SRB_configList2
,
// NULL,
*
DRB_configList
,
NULL
if
(
!
NODE_IS_CU
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
rrc_rlc_config_asn1_req
(
ctxt_pP
,
*
SRB_configList2
,
// NULL,
*
DRB_configList
,
NULL
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
0
,
0
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
0
,
0
#endif
);
);
}
free
(
Sparams
);
Sparams
=
NULL
;
...
...
@@ -4183,10 +4185,6 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
cellsToAddModList
=
(
LTE_CellsToAddModList_t
*
)
CALLOC
(
1
,
sizeof
(
*
CellsToAddModList
));
CellsToAddModList
=
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
cellsToAddModList
;
//=======
// MeasObj->measObject.choice.measObjectEUTRA.offsetFreq = (LTE_Q_OffsetRange_t *) CALLOC(1,sizeof(LTE_Q_OffsetRange_t));
// *(MeasObj->measObject.choice.measObjectEUTRA.offsetFreq) = ue_context_pP->ue_context.measurement_info->offsetFreq; // Default is 15 or 0dB
//>>>>>>> origin/OAI_develop
if
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
num_neigh_cells
>
0
)
{
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
cellsToAddModList
=
...
...
@@ -6384,16 +6382,18 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
,
NULL
);
/* Refresh SRBs/DRBs */
rrc_rlc_config_asn1_req
(
ctxt_pP
,
*
SRB_configList2
,
// NULL,
*
DRB_configList
,
NULL
if
(
!
NODE_IS_CU
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
rrc_rlc_config_asn1_req
(
ctxt_pP
,
*
SRB_configList2
,
// NULL,
*
DRB_configList
,
NULL
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
0
,
0
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
0
,
0
#endif
);
);
}
free
(
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRQ
);
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRQ
=
NULL
;
...
...
@@ -6446,15 +6446,17 @@ rrc_eNB_configure_rbs_handover(struct rrc_eNB_ue_context_s *ue_context_p, protoc
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
#endif
,
NULL
);
rrc_rlc_config_asn1_req
(
ctxt_pP
,
ue_context_p
->
ue_context
.
SRB_configList
,
(
LTE_DRB_ToAddModList_t
*
)
NULL
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
if
(
!
NODE_IS_CU
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
rrc_rlc_config_asn1_req
(
ctxt_pP
,
ue_context_p
->
ue_context
.
SRB_configList
,
(
LTE_DRB_ToAddModList_t
*
)
NULL
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
0
,
0
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
0
,
0
#endif
);
);
}
if
(
EPC_MODE_ENABLED
)
{
rrc_eNB_process_security
(
...
...
@@ -6608,16 +6610,18 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
,
NULL
);
/* Refresh SRBs/DRBs */
rrc_rlc_config_asn1_req
(
ctxt_pP
,
SRB_configList
,
// NULL,
DRB_configList
,
DRB_Release_configList2
if
(
!
NODE_IS_CU
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
rrc_rlc_config_asn1_req
(
ctxt_pP
,
SRB_configList
,
// NULL,
DRB_configList
,
DRB_Release_configList2
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
0
,
0
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
0
,
0
#endif
);
);
}
/* Set the SRB active in UE context */
if
(
SRB_configList
!=
NULL
)
{
...
...
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