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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG-RAN
Commits
d4e31183
Commit
d4e31183
authored
Dec 06, 2021
by
luis_pereira87
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into Fix_Msg4_segfault
parents
27c68b2b
142451e7
Changes
43
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
43 changed files
with
874 additions
and
495 deletions
+874
-495
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
+49
-3
ci-scripts/Jenkinsfile-trig-nsa
ci-scripts/Jenkinsfile-trig-nsa
+17
-0
ci-scripts/cls_oaicitest.py
ci-scripts/cls_oaicitest.py
+2
-2
ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
+1
-0
ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
+343
-320
ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
+5
-4
ci-scripts/conf_files/ue.sa.conf
ci-scripts/conf_files/ue.sa.conf
+8
-0
ci-scripts/datalog_rt_stats.yaml
ci-scripts/datalog_rt_stats.yaml
+1
-1
ci-scripts/epc.py
ci-scripts/epc.py
+1
-1
ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml
ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml
+10
-0
ci-scripts/xml_files/fr1_gnb_build.xml
ci-scripts/xml_files/fr1_gnb_build.xml
+0
-7
ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
+1
-1
ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml
ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml
+1
-1
ci-scripts/xml_files/fr1_sa_oaiue_b200.xml
ci-scripts/xml_files/fr1_sa_oaiue_b200.xml
+123
-0
ci-scripts/xml_files/fr1_sa_oaiue_n310.xml
ci-scripts/xml_files/fr1_sa_oaiue_n310.xml
+123
-0
ci-scripts/xml_files/fr1_sa_quectel.xml
ci-scripts/xml_files/fr1_sa_quectel.xml
+1
-1
ci-scripts/xml_files/fr1_sa_quectel_stages.xml
ci-scripts/xml_files/fr1_sa_quectel_stages.xml
+1
-1
openair1/PHY/NR_TRANSPORT/nr_dci.c
openair1/PHY/NR_TRANSPORT/nr_dci.c
+2
-2
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+4
-3
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
+1
-0
openair1/SCHED_NR_UE/harq_nr.c
openair1/SCHED_NR_UE/harq_nr.c
+6
-7
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+1
-2
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+1
-1
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+1
-1
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+2
-0
openair2/GNB_APP/gnb_paramdef.h
openair2/GNB_APP/gnb_paramdef.h
+1
-1
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+0
-3
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+16
-28
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+2
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+1
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+20
-12
openair2/LAYER2/nr_rlc/nr_rlc_entity.h
openair2/LAYER2/nr_rlc/nr_rlc_entity.h
+2
-0
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
+49
-35
openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.c
openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.c
+9
-14
openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c
openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c
+33
-34
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+20
-1
openair2/RRC/NR/nr_rrc_proto.h
openair2/RRC/NR/nr_rrc_proto.h
+2
-0
openair2/RRC/NR/rrc_gNB_nsa.c
openair2/RRC/NR/rrc_gNB_nsa.c
+2
-0
openair2/RRC/NR/rrc_gNB_reconfig.c
openair2/RRC/NR/rrc_gNB_reconfig.c
+4
-1
openair2/X2AP/x2ap_eNB_handler.c
openair2/X2AP/x2ap_eNB_handler.c
+5
-4
No files found.
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
View file @
d4e31183
...
@@ -117,6 +117,15 @@ pipeline {
...
@@ -117,6 +117,15 @@ pipeline {
if
(
params
.
eNB2_Credentials
==
null
)
{
if
(
params
.
eNB2_Credentials
==
null
)
{
allParametersPresent
=
false
allParametersPresent
=
false
}
}
if
(
params
.
UE_IPAddress
==
null
)
{
allParametersPresent
=
false
}
if
(
params
.
UE_SourceCodePath
==
null
)
{
allParametersPresent
=
false
}
if
(
params
.
UE_Credentials
==
null
)
{
allParametersPresent
=
false
}
// the following 4 parameters should be pushed by the master trigger
// the following 4 parameters should be pushed by the master trigger
// if not present, take the job GIT variables (used for developing)
// if not present, take the job GIT variables (used for developing)
if
(
params
.
eNB_Repository
==
null
)
{
if
(
params
.
eNB_Repository
==
null
)
{
...
@@ -213,21 +222,22 @@ pipeline {
...
@@ -213,21 +222,22 @@ pipeline {
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.eNB1_Credentials}"
,
usernameVariable:
'eNB1_Username'
,
passwordVariable:
'eNB1_Password'
],
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.eNB1_Credentials}"
,
usernameVariable:
'eNB1_Username'
,
passwordVariable:
'eNB1_Password'
],
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.eNB2_Credentials}"
,
usernameVariable:
'eNB2_Username'
,
passwordVariable:
'eNB2_Password'
],
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.eNB2_Credentials}"
,
usernameVariable:
'eNB2_Username'
,
passwordVariable:
'eNB2_Password'
],
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.EPC_Credentials}"
,
usernameVariable:
'EPC_Username'
,
passwordVariable:
'EPC_Password'
],
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.EPC_Credentials}"
,
usernameVariable:
'EPC_Username'
,
passwordVariable:
'EPC_Password'
],
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.ADB_Credentials}"
,
usernameVariable:
'ADB_Username'
,
passwordVariable:
'ADB_Password'
]
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.ADB_Credentials}"
,
usernameVariable:
'ADB_Username'
,
passwordVariable:
'ADB_Password'
],
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.UE_Credentials}"
,
usernameVariable:
'UE_Username'
,
passwordVariable:
'UE_Password'
]
])
{
])
{
sh
"python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} ${mainPythonAllXmlFiles}"
sh
"python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} ${mainPythonAllXmlFiles}"
String
[]
myXmlTestSuite
=
testXMLFile
.
split
(
"\\r?\\n"
)
String
[]
myXmlTestSuite
=
testXMLFile
.
split
(
"\\r?\\n"
)
for
(
xmlFile
in
myXmlTestSuite
)
{
for
(
xmlFile
in
myXmlTestSuite
)
{
if
(
fileExists
(
xmlFile
))
{
if
(
fileExists
(
xmlFile
))
{
try
{
try
{
sh
"python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${xmlFile}"
sh
"python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_SourceCodePath} --
UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --
EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${xmlFile}"
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
currentBuild
.
result
=
'FAILURE'
currentBuild
.
result
=
'FAILURE'
buildStageStatus
=
false
buildStageStatus
=
false
}
}
}
}
}
}
sh
"python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
sh
"python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}
--UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password}
"
}
}
}
}
}
}
...
@@ -253,6 +263,24 @@ pipeline {
...
@@ -253,6 +263,24 @@ pipeline {
}
}
}
}
}
}
stage
(
'Log Collection (OAI UE - Build)'
)
{
steps
{
echo
'\u2705 \u001B[32mLog Collection (OAI UE - Build)\u001B[0m'
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.UE_Credentials}"
,
usernameVariable:
'UE_Username'
,
passwordVariable:
'UE_Password'
]
])
{
sh
"python3 ci-scripts/main.py --mode=LogCollectBuild --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath}"
echo
'\u2705 \u001B[32mLog Transfer (UE - Build)\u001B[0m'
sh
"sshpass -p \'${UE_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${UE_Username}@${params.UE_IPAddress}:${UE_SourceCodePath}/cmake_targets/build.log.zip ./build.log.${env.BUILD_ID}.zip || true"
}
script
{
if
(
fileExists
(
"build.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"build.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (eNB - Run)'
)
{
stage
(
'Log Collection (eNB - Run)'
)
{
steps
{
steps
{
withCredentials
([
withCredentials
([
...
@@ -271,6 +299,24 @@ pipeline {
...
@@ -271,6 +299,24 @@ pipeline {
}
}
}
}
}
}
stage
(
'Log Collection (OAI UE - Run)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.UE_Credentials}"
,
usernameVariable:
'UE_Username'
,
passwordVariable:
'UE_Password'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (OAI UE - Run)\u001B[0m'
sh
"python3 ci-scripts/main.py --mode=LogCollectOAIUE --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath}"
echo
'\u2705 \u001B[32mLog Transfer (OAI UE - Run)\u001B[0m'
sh
"sshpass -p \'${UE_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${UE_Username}@${params.UE_IPAddress}:${UE_SourceCodePath}/cmake_targets/ue.log.zip ./ue.log.${env.BUILD_ID}.zip || true"
}
script
{
if
(
fileExists
(
"ue.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"ue.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (CN)'
)
{
stage
(
'Log Collection (CN)'
)
{
// Bypassing this stage if EPC server is not defined
// Bypassing this stage if EPC server is not defined
when
{
when
{
...
...
ci-scripts/Jenkinsfile-trig-nsa
View file @
d4e31183
...
@@ -79,6 +79,23 @@ pipeline {
...
@@ -79,6 +79,23 @@ pipeline {
string
(
name:
'eNB_TargetBranch'
,
value:
String
.
valueOf
(
TARGET_BRANCH
)),
string
(
name:
'eNB_TargetBranch'
,
value:
String
.
valueOf
(
TARGET_BRANCH
)),
booleanParam
(
name:
'eNB_mergeRequest'
,
value:
Boolean
.
valueOf
(
ALLOW_MERGE
))
booleanParam
(
name:
'eNB_mergeRequest'
,
value:
Boolean
.
valueOf
(
ALLOW_MERGE
))
]
]
//calling OAIUE B200
build
job:
"RAN-SA-OAIUE-B200-CN5G"
,
wait
:
true
,
propagate
:
false
,
parameters:
[
string
(
name:
'eNB_MR'
,
value:
String
.
valueOf
(
MR
)),
string
(
name:
'eNB_Branch'
,
value:
String
.
valueOf
(
SRC_BRANCH
)),
string
(
name:
'eNB_CommitID'
,
value:
String
.
valueOf
(
COMMIT_ID
)),
string
(
name:
'eNB_TargetBranch'
,
value:
String
.
valueOf
(
TARGET_BRANCH
)),
booleanParam
(
name:
'eNB_mergeRequest'
,
value:
Boolean
.
valueOf
(
ALLOW_MERGE
))
]
//calling OAIUE N310
build
job:
"RAN-SA-OAIUE-N310-CN5G"
,
wait
:
true
,
propagate
:
false
,
parameters:
[
string
(
name:
'eNB_MR'
,
value:
String
.
valueOf
(
MR
)),
string
(
name:
'eNB_Branch'
,
value:
String
.
valueOf
(
SRC_BRANCH
)),
string
(
name:
'eNB_CommitID'
,
value:
String
.
valueOf
(
COMMIT_ID
)),
string
(
name:
'eNB_TargetBranch'
,
value:
String
.
valueOf
(
TARGET_BRANCH
)),
booleanParam
(
name:
'eNB_mergeRequest'
,
value:
Boolean
.
valueOf
(
ALLOW_MERGE
))
]
}
}
}
}
...
...
ci-scripts/cls_oaicitest.py
View file @
d4e31183
...
@@ -1552,7 +1552,7 @@ class OaiCiTest():
...
@@ -1552,7 +1552,7 @@ class OaiCiTest():
SSH
.
command
(
'cd scripts'
,
'\$'
,
5
)
SSH
.
command
(
'cd scripts'
,
'\$'
,
5
)
# In case of a docker-based deployment, we need to ping from the trf-gen container
# In case of a docker-based deployment, we need to ping from the trf-gen container
launchFromTrfContainer
=
False
launchFromTrfContainer
=
False
if
re
.
match
(
'OAI-Rel14-Docker'
,
EPC
.
Type
,
re
.
IGNORECASE
):
if
(
re
.
match
(
'OAI-Rel14-Docker'
,
EPC
.
Type
,
re
.
IGNORECASE
))
or
(
re
.
match
(
'OAICN5G'
,
EPC
.
Type
,
re
.
IGNORECASE
)
):
launchFromTrfContainer
=
True
launchFromTrfContainer
=
True
if
launchFromTrfContainer
:
if
launchFromTrfContainer
:
ping_status
=
SSH
.
command
(
'docker exec -it prod-trf-gen /bin/bash -c "ping '
+
self
.
ping_args
+
' '
+
UE_IPAddress
+
'" 2>&1 | tee ping_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
ping_time
[
0
])
*
1.5
)
ping_status
=
SSH
.
command
(
'docker exec -it prod-trf-gen /bin/bash -c "ping '
+
self
.
ping_args
+
' '
+
UE_IPAddress
+
'" 2>&1 | tee ping_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
ping_time
[
0
])
*
1.5
)
...
@@ -3348,7 +3348,7 @@ class OaiCiTest():
...
@@ -3348,7 +3348,7 @@ class OaiCiTest():
self
.
desc
=
'Automatic Termination of OAI-UE'
self
.
desc
=
'Automatic Termination of OAI-UE'
HTML
.
desc
=
self
.
desc
HTML
.
desc
=
self
.
desc
self
.
ShowTestID
()
self
.
ShowTestID
()
self
.
TerminateOAIUE
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
)
self
.
TerminateOAIUE
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
if
(
RAN
.
Initialize_eNB_args
!=
''
):
if
(
RAN
.
Initialize_eNB_args
!=
''
):
self
.
testCase_id
=
'AUTO-KILL-RAN'
self
.
testCase_id
=
'AUTO-KILL-RAN'
HTML
.
testCase_id
=
self
.
testCase_id
HTML
.
testCase_id
=
self
.
testCase_id
...
...
ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
View file @
d4e31183
...
@@ -24,6 +24,7 @@ gNBs =
...
@@ -24,6 +24,7 @@ gNBs =
ssb_SubcarrierOffset
=
0
;
ssb_SubcarrierOffset
=
0
;
pdsch_AntennaPorts
=
1
;
pdsch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
min_rxtxtime_pdsch
=
6
;
servingCellConfigCommon
= (
servingCellConfigCommon
= (
{
{
...
...
ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
View file @
d4e31183
This diff is collapsed.
Click to expand it.
ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
View file @
d4e31183
...
@@ -21,9 +21,10 @@ gNBs =
...
@@ -21,9 +21,10 @@ gNBs =
//////////
Physical
parameters
:
//////////
Physical
parameters
:
ssb_SubcarrierOffset
=
0
;
ssb_SubcarrierOffset
=
0
;
pdsch_AntennaPorts
=
1
;
pdsch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
min_rxtxtime_pdsch
=
6
;
servingCellConfigCommon
= (
servingCellConfigCommon
= (
{
{
...
@@ -124,7 +125,7 @@ gNBs =
...
@@ -124,7 +125,7 @@ gNBs =
initialULBWPk2_1
=
6
;
# used for mixed slot
initialULBWPk2_1
=
6
;
# used for mixed slot
initialULBWPmappingType_1
=
1
;
initialULBWPmappingType_1
=
1
;
initialULBWPstartSymbolAndLength_1
=
69
;
# this is SS=10 L=2
initialULBWPstartSymbolAndLength_1
=
38
;
# this is SS=10 L=3
initialULBWPk2_2
=
7
;
# used for Msg.3 during RA
initialULBWPk2_2
=
7
;
# used for Msg.3 during RA
initialULBWPmappingType_2
=
1
;
initialULBWPmappingType_2
=
1
;
...
...
ci-scripts/conf_files/ue.sa.conf
0 → 100644
View file @
d4e31183
uicc0
= {
imsi
=
"208970100001127"
;
key
=
"fec86ba6eb707ed08905757b1bb44b8f"
;
opc
=
"c42449363bbad02b66d16bc975d77cc1"
;
dnn
=
"oai"
;
nssai_sst
=
1
;
nssai_sd
=
66051
;
}
ci-scripts/datalog_rt_stats.yaml
View file @
d4e31183
...
@@ -17,7 +17,7 @@ Ref :
...
@@ -17,7 +17,7 @@ Ref :
DLSCH encoding
:
230.0
DLSCH encoding
:
230.0
L1 Rx processing
:
175.0
L1 Rx processing
:
175.0
PUSCH inner-receiver
:
100.0
PUSCH inner-receiver
:
100.0
PUSCH decoding
:
1
4
0.0
PUSCH decoding
:
1
8
0.0
DL & UL scheduling timing stats
:
37.0
DL & UL scheduling timing stats
:
37.0
UL Indication
:
38.0
UL Indication
:
38.0
Threshold
:
Threshold
:
...
...
ci-scripts/epc.py
View file @
d4e31183
...
@@ -773,7 +773,7 @@ class EPCManagement():
...
@@ -773,7 +773,7 @@ class EPCManagement():
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
1
,
html_queue
)
else
:
else
:
logging
.
debug
(
'Undeployment went wrong'
)
logging
.
debug
(
'Undeployment went wrong'
)
HTML
.
CreateHtmlTestRowQueu
(
self
.
Type
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueu
e
(
self
.
Type
,
'KO'
,
1
,
html_queue
)
def
LogCollectHSS
(
self
):
def
LogCollectHSS
(
self
):
mySSH
=
SSH
.
SSHConnection
()
mySSH
=
SSH
.
SSHConnection
()
...
...
ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml
View file @
d4e31183
...
@@ -18,4 +18,14 @@ SA-N310 :
...
@@ -18,4 +18,14 @@ SA-N310 :
link
:
'
https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-Module-CN5G'
link
:
'
https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-Module-CN5G'
bench
:
'
Asterix-N310-OAICN5G-Quectel(nrmodule2)'
bench
:
'
Asterix-N310-OAICN5G-Quectel(nrmodule2)'
test
:
'
TDD,
40MHz,
60Mb
DL,
3Mb
UL'
test
:
'
TDD,
40MHz,
60Mb
DL,
3Mb
UL'
SA-OAIUE-B200
:
job
:
'
RAN-SA-OAIUE-B200-CN5G'
link
:
'
https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-OAIUE-B200-CN5G/'
bench
:
'
Asterix-N310-OAICN5G-OAIUE-B200'
test
:
'
TDD,
40MHz,
Ping,
(to
be
implemented
:
iperf)'
SA-OAIUE-N310
:
job
:
'
RAN-SA-OAIUE-N310-CN5G'
link
:
'
https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-OAIUE-N310-CN5G/'
bench
:
'
Asterix-N310-OAICN5G-OAIUE-N310'
test
:
'
TDD,
40MHz,
Ping,
(to
be
implemented
:
iperf)'
ci-scripts/xml_files/fr1_gnb_build.xml
View file @
d4e31183
...
@@ -38,11 +38,4 @@
...
@@ -38,11 +38,4 @@
<forced_workspace_cleanup>
True
</forced_workspace_cleanup>
<forced_workspace_cleanup>
True
</forced_workspace_cleanup>
</testCase>
</testCase>
<testCase
id=
"000002"
>
<class>
WaitEndBuild_eNB
</class>
<desc>
Wait for end of Build gNB
</desc>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
</testCase>
</testCaseList>
</testCaseList>
ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
View file @
d4e31183
...
@@ -74,7 +74,7 @@
...
@@ -74,7 +74,7 @@
<testCase
id=
"040000"
>
<testCase
id=
"040000"
>
<class>
Initialize_eNB
</class>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf -q --usrp-tx-thread-config 1
--thread-pool 0,2,4,6
</Initialize_eNB_args>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf -q --usrp-tx-thread-config 1
</Initialize_eNB_args>
<eNB_instance>
1
</eNB_instance>
<eNB_instance>
1
</eNB_instance>
<eNB_serverId>
1
</eNB_serverId>
<eNB_serverId>
1
</eNB_serverId>
<air_interface>
nr
</air_interface>
<air_interface>
nr
</air_interface>
...
...
ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml
View file @
d4e31183
...
@@ -94,7 +94,7 @@
...
@@ -94,7 +94,7 @@
<testCase
id=
"041000"
>
<testCase
id=
"041000"
>
<class>
Initialize_eNB
</class>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf -q --usrp-tx-thread-config 1
--thread-pool 0,2,4,6
</Initialize_eNB_args>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf -q --usrp-tx-thread-config 1
</Initialize_eNB_args>
<eNB_instance>
1
</eNB_instance>
<eNB_instance>
1
</eNB_instance>
<eNB_serverId>
1
</eNB_serverId>
<eNB_serverId>
1
</eNB_serverId>
<air_interface>
nr
</air_interface>
<air_interface>
nr
</air_interface>
...
...
ci-scripts/xml_files/fr1_sa_oaiue_b200.xml
0 → 100644
View file @
d4e31183
<!--
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-SA-FR1-Tab1
</htmlTabRef>
<htmlTabName>
SA Ping DL UL with OAI NR UE
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
1
</repeatCount>
<TestCaseRequestedList>
040000
000002
010000
000002
050000
050001
000001
010002
080000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"010000"
>
<class>
Initialize_OAI_UE
</class>
<desc>
Initialize OAI UE
</desc>
<air_interface>
nr
</air_interface>
<Initialize_OAI_UE_args>
--sa -O ../../../ci-scripts/conf_files/ue.sa.conf --usrp-args "serial=30C51D1" --numerology 1 -r 106 --band 78 -C 3319680000 --nokrnmod 1 --ue-txgain 0 -E
</Initialize_OAI_UE_args>
</testCase>
<testCase
id=
"010002"
>
<class>
Terminate_OAI_UE
</class>
<desc>
Terminate OAI UE
</desc>
</testCase>
<testCase
id=
"040000"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf --sa -q --usrp-tx-thread-config 1
</Initialize_eNB_args>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
nr
</air_interface>
<eNB_Trace>
yes
</eNB_Trace>
<eNB_Stats>
yes
</eNB_Stats>
<USRP_IPAddress>
192.168.18.240
</USRP_IPAddress>
</testCase>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
5
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"000002"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
20
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"050000"
>
<class>
Ping
</class>
<desc>
Ping from CN to UE: 20pings in 20sec
</desc>
<ping_args>
-c 20
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"050001"
>
<class>
Ping
</class>
<desc>
Ping from CN to UE: 100pings in 20sec
</desc>
<ping_args>
-c 100 -i 0.2
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<desc>
iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 60M -t 60
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070001"
>
<class>
Iperf
</class>
<desc>
iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 3M -t 60
</iperf_args>
<direction>
UL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"080000"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate gNB
</desc>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
nr
</air_interface>
</testCase>
</testCaseList>
ci-scripts/xml_files/fr1_sa_oaiue_n310.xml
0 → 100644
View file @
d4e31183
<!--
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-SA-FR1-Tab1
</htmlTabRef>
<htmlTabName>
SA Ping DL UL with OAI NR UE
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
1
</repeatCount>
<TestCaseRequestedList>
040000
000002
010000
000002
050000
050001
000001
010002
080000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"010000"
>
<class>
Initialize_OAI_UE
</class>
<desc>
Initialize OAI UE
</desc>
<air_interface>
nr
</air_interface>
<Initialize_OAI_UE_args>
--sa -O ../../../ci-scripts/conf_files/ue.sa.conf --usrp-args "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2" --numerology 1 -r 106 --band 78 -C 3319680000 --nokrnmod 1 --ue-txgain 0 --ue-rxgain 70 --ue-fo-compensation
</Initialize_OAI_UE_args>
</testCase>
<testCase
id=
"010002"
>
<class>
Terminate_OAI_UE
</class>
<desc>
Terminate OAI UE
</desc>
</testCase>
<testCase
id=
"040000"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf --sa --usrp-tx-thread-config 1
</Initialize_eNB_args>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
nr
</air_interface>
<eNB_Trace>
yes
</eNB_Trace>
<eNB_Stats>
yes
</eNB_Stats>
<USRP_IPAddress>
192.168.18.240
</USRP_IPAddress>
</testCase>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
5
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"000002"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
20
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"050000"
>
<class>
Ping
</class>
<desc>
Ping from CN to UE: 20pings in 20sec
</desc>
<ping_args>
-c 20
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"050001"
>
<class>
Ping
</class>
<desc>
Ping from CN to UE: 100pings in 20sec
</desc>
<ping_args>
-c 100 -i 0.2
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<desc>
iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 60M -t 60
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070001"
>
<class>
Iperf
</class>
<desc>
iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 3M -t 60
</iperf_args>
<direction>
UL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"080000"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate gNB
</desc>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
nr
</air_interface>
</testCase>
</testCaseList>
ci-scripts/xml_files/fr1_sa_quectel.xml
View file @
d4e31183
...
@@ -58,7 +58,7 @@
...
@@ -58,7 +58,7 @@
<testCase
id=
"040000"
>
<testCase
id=
"040000"
>
<class>
Initialize_eNB
</class>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1
--thread-pool 0,2,4,6
</Initialize_eNB_args>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1
</Initialize_eNB_args>
<eNB_instance>
0
</eNB_instance>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
nr
</air_interface>
<air_interface>
nr
</air_interface>
...
...
ci-scripts/xml_files/fr1_sa_quectel_stages.xml
View file @
d4e31183
...
@@ -65,7 +65,7 @@
...
@@ -65,7 +65,7 @@
<testCase
id=
"040000"
>
<testCase
id=
"040000"
>
<class>
Initialize_eNB
</class>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1
--thread-pool 0,2,4,6
</Initialize_eNB_args>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1
</Initialize_eNB_args>
<eNB_instance>
0
</eNB_instance>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
nr
</air_interface>
<air_interface>
nr
</air_interface>
...
...
openair1/PHY/NR_TRANSPORT/nr_dci.c
View file @
d4e31183
...
@@ -135,8 +135,8 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
...
@@ -135,8 +135,8 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
dci_pdu
->
AggregationLevel
,
dci_pdu
->
AggregationLevel
,
0
,
NULL
);
0
,
NULL
);
polar_encoder_fast
((
uint64_t
*
)
dci_pdu
->
Payload
,
(
void
*
)
encoder_output
,
n_RNTI
,
1
,
currentPtr
);
polar_encoder_fast
((
uint64_t
*
)
dci_pdu
->
Payload
,
(
void
*
)
encoder_output
,
n_RNTI
,
1
,
currentPtr
);
#if DEBUG_CHANNEL_CODING
#if
def
DEBUG_CHANNEL_CODING
printf
(
"polar rnti %x,length %d, L %d
\n
"
,
n_RNTI
,
dci_pdu
->
PayloadSizeBits
,
dci_pdu
->
AggregationLevel
);
printf
(
"polar rnti %x,length %d, L %d
\n
"
,
n_RNTI
,
dci_pdu
->
PayloadSizeBits
,
pdcch_pdu_rel15
->
dci_pdu
->
AggregationLevel
);
printf
(
"DCI PDU: [0]->0x%lx
\t
[1]->0x%lx
\n
"
,
printf
(
"DCI PDU: [0]->0x%lx
\t
[1]->0x%lx
\n
"
,
((
uint64_t
*
)
dci_pdu
->
Payload
)[
0
],
((
uint64_t
*
)
dci_pdu
->
Payload
)[
1
]);
((
uint64_t
*
)
dci_pdu
->
Payload
)[
0
],
((
uint64_t
*
)
dci_pdu
->
Payload
)[
1
]);
printf
(
"Encoded Payload (length:%d dwords):
\n
"
,
encoded_length
>>
5
);
printf
(
"Encoded Payload (length:%d dwords):
\n
"
,
encoded_length
>>
5
);
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
d4e31183
...
@@ -105,7 +105,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
...
@@ -105,7 +105,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
dlsch0
->
active
=
1
;
dlsch0
->
active
=
1
;
dlsch0
->
rnti
=
dl_config
->
dl_config_list
[
i
].
dlsch_config_pdu
.
rnti
;
dlsch0
->
rnti
=
dl_config
->
dl_config_list
[
i
].
dlsch_config_pdu
.
rnti
;
LOG_D
(
PHY
,
"
current_harq_pid = %d
\n
"
,
current_harq_pid
);
LOG_D
(
PHY
,
"
slot %d current_harq_pid = %d
\n
"
,
slot
,
current_harq_pid
);
NR_DL_UE_HARQ_t
*
dlsch0_harq
=
dlsch0
->
harq_processes
[
current_harq_pid
];
NR_DL_UE_HARQ_t
*
dlsch0_harq
=
dlsch0
->
harq_processes
[
current_harq_pid
];
if
(
dlsch0_harq
){
if
(
dlsch0_harq
){
...
@@ -131,9 +131,10 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
...
@@ -131,9 +131,10 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
dlsch0_harq
->
mcs_table
=
dlsch_config_pdu
->
mcs_table
;
dlsch0_harq
->
mcs_table
=
dlsch_config_pdu
->
mcs_table
;
downlink_harq_process
(
dlsch0_harq
,
dlsch0
->
current_harq_pid
,
dlsch_config_pdu
->
ndi
,
dlsch_config_pdu
->
rv
,
dlsch0
->
rnti_type
);
downlink_harq_process
(
dlsch0_harq
,
dlsch0
->
current_harq_pid
,
dlsch_config_pdu
->
ndi
,
dlsch_config_pdu
->
rv
,
dlsch0
->
rnti_type
);
if
(
dlsch0_harq
->
status
!=
ACTIVE
)
{
if
(
dlsch0_harq
->
status
!=
ACTIVE
)
{
// dlsch0_harq->status not ACTIVE
may be due to false retransmission. Reset the
// dlsch0_harq->status not ACTIVE
due to false retransmission
//
following flag to skip PDSCH procedures in that case.
//
Reset the following flag to skip PDSCH procedures in that case and retrasmit harq status
dlsch0
->
active
=
0
;
dlsch0
->
active
=
0
;
update_harq_status
(
module_id
,
dlsch0
->
current_harq_pid
,
dlsch0_harq
->
ack
);
}
}
/* PTRS */
/* PTRS */
dlsch0_harq
->
PTRSFreqDensity
=
dlsch_config_pdu
->
PTRSFreqDensity
;
dlsch0_harq
->
PTRSFreqDensity
=
dlsch_config_pdu
->
PTRSFreqDensity
;
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
View file @
d4e31183
...
@@ -43,5 +43,6 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response);
...
@@ -43,5 +43,6 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response);
\param scheduled_response including transmission config(dl_config, ul_config) and data transmission (tx_req)*/
\param scheduled_response including transmission config(dl_config, ul_config) and data transmission (tx_req)*/
int8_t
nr_ue_phy_config_request
(
nr_phy_config_t
*
phy_config
);
int8_t
nr_ue_phy_config_request
(
nr_phy_config_t
*
phy_config
);
void
update_harq_status
(
module_id_t
module_id
,
uint8_t
harq_pid
,
uint8_t
ack_nack
);
#endif
#endif
openair1/SCHED_NR_UE/harq_nr.c
View file @
d4e31183
...
@@ -331,7 +331,6 @@ void init_downlink_harq_status(NR_DL_UE_HARQ_t *dl_harq)
...
@@ -331,7 +331,6 @@ void init_downlink_harq_status(NR_DL_UE_HARQ_t *dl_harq)
void
downlink_harq_process
(
NR_DL_UE_HARQ_t
*
dl_harq
,
int
harq_pid
,
int
ndi
,
int
rv
,
uint8_t
rnti_type
)
{
void
downlink_harq_process
(
NR_DL_UE_HARQ_t
*
dl_harq
,
int
harq_pid
,
int
ndi
,
int
rv
,
uint8_t
rnti_type
)
{
if
(
rnti_type
==
_SI_RNTI_
||
if
(
rnti_type
==
_SI_RNTI_
||
rnti_type
==
_P_RNTI_
||
rnti_type
==
_P_RNTI_
||
rnti_type
==
_RA_RNTI_
)
{
rnti_type
==
_RA_RNTI_
)
{
...
@@ -351,38 +350,38 @@ void downlink_harq_process(NR_DL_UE_HARQ_t *dl_harq, int harq_pid, int ndi, int
...
@@ -351,38 +350,38 @@ void downlink_harq_process(NR_DL_UE_HARQ_t *dl_harq, int harq_pid, int ndi, int
break
;
break
;
case
1
:
case
1
:
dl_harq
->
round
=
2
;
dl_harq
->
round
=
2
;
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
0
;
dl_harq
->
first_rx
=
0
;
if
(
dl_harq
->
DCINdi
!=
ndi
)
{
if
(
dl_harq
->
DCINdi
!=
ndi
)
{
LOG_E
(
PHY
,
"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception
\n
"
,
rv
);
LOG_E
(
PHY
,
"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception
\n
"
,
rv
);
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
1
;
dl_harq
->
first_rx
=
1
;
dl_harq
->
DCINdi
=
ndi
;
dl_harq
->
DCINdi
=
ndi
;
}
}
else
if
(
dl_harq
->
ack
)
else
if
(
dl_harq
->
ack
==
1
)
dl_harq
->
status
=
SCH_IDLE
;
dl_harq
->
status
=
SCH_IDLE
;
break
;
break
;
case
2
:
case
2
:
dl_harq
->
round
=
1
;
dl_harq
->
round
=
1
;
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
0
;
dl_harq
->
first_rx
=
0
;
if
(
dl_harq
->
DCINdi
!=
ndi
)
{
if
(
dl_harq
->
DCINdi
!=
ndi
)
{
LOG_E
(
PHY
,
"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception
\n
"
,
rv
);
LOG_E
(
PHY
,
"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception
\n
"
,
rv
);
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
1
;
dl_harq
->
first_rx
=
1
;
dl_harq
->
DCINdi
=
ndi
;
dl_harq
->
DCINdi
=
ndi
;
}
}
else
if
(
dl_harq
->
ack
)
else
if
(
dl_harq
->
ack
==
1
)
dl_harq
->
status
=
SCH_IDLE
;
dl_harq
->
status
=
SCH_IDLE
;
break
;
break
;
case
3
:
case
3
:
dl_harq
->
round
=
3
;
dl_harq
->
round
=
3
;
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
0
;
dl_harq
->
first_rx
=
0
;
if
(
dl_harq
->
DCINdi
!=
ndi
)
{
if
(
dl_harq
->
DCINdi
!=
ndi
)
{
LOG_E
(
PHY
,
"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception
\n
"
,
rv
);
LOG_E
(
PHY
,
"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception
\n
"
,
rv
);
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
1
;
dl_harq
->
first_rx
=
1
;
dl_harq
->
DCINdi
=
ndi
;
dl_harq
->
DCINdi
=
ndi
;
}
}
else
if
(
dl_harq
->
ack
)
else
if
(
dl_harq
->
ack
==
1
)
dl_harq
->
status
=
SCH_IDLE
;
dl_harq
->
status
=
SCH_IDLE
;
break
;
break
;
default:
default:
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
d4e31183
...
@@ -1861,11 +1861,10 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1861,11 +1861,10 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA
,
VCD_FUNCTION_OUT
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA
,
VCD_FUNCTION_OUT
);
}
}
// do procedures for C-RNTI
// do procedures for C-RNTI
if
(
ue
->
dlsch
[
proc
->
thread_id
][
gNB_id
][
0
]
->
active
==
1
)
{
if
(
ue
->
dlsch
[
proc
->
thread_id
][
gNB_id
][
0
]
->
active
==
1
)
{
LOG_D
(
PHY
,
"DLSCH data reception at nr_slot_rx: %d
\n
\n
"
,
nr_slot_rx
);
LOG_D
(
PHY
,
"DLSCH data reception at nr_slot_rx: %d
\n
"
,
nr_slot_rx
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC
,
VCD_FUNCTION_IN
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC
,
VCD_FUNCTION_IN
);
start_meas
(
&
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
]);
start_meas
(
&
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
]);
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
d4e31183
...
@@ -768,7 +768,7 @@ int main(int argc, char **argv)
...
@@ -768,7 +768,7 @@ int main(int argc, char **argv)
prepare_scd
(
scd
);
prepare_scd
(
scd
);
fill_default_secondaryCellGroup
(
scc
,
scd
,
secondaryCellGroup
,
0
,
1
,
n_tx
,
0
,
0
,
0
);
fill_default_secondaryCellGroup
(
scc
,
scd
,
secondaryCellGroup
,
0
,
1
,
n_tx
,
6
,
0
,
0
,
0
);
/* RRC parameter validation for secondaryCellGroup */
/* RRC parameter validation for secondaryCellGroup */
fix_scd
(
scd
);
fix_scd
(
scd
);
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
d4e31183
...
@@ -713,7 +713,7 @@ int main(int argc, char **argv)
...
@@ -713,7 +713,7 @@ int main(int argc, char **argv)
prepare_scd
(
scd
);
prepare_scd
(
scd
);
fill_default_secondaryCellGroup
(
scc
,
scd
,
secondaryCellGroup
,
0
,
1
,
n_tx
,
0
,
0
,
0
);
fill_default_secondaryCellGroup
(
scc
,
scd
,
secondaryCellGroup
,
0
,
1
,
n_tx
,
0
,
0
,
0
,
0
);
// xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, (const void*)secondaryCellGroup);
// xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, (const void*)secondaryCellGroup);
...
...
openair2/GNB_APP/gnb_config.c
View file @
d4e31183
...
@@ -1110,6 +1110,8 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
...
@@ -1110,6 +1110,8 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
printf
(
"minTXRXTIMEpdsch %d
\n
"
,
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
);
printf
(
"minTXRXTIMEpdsch %d
\n
"
,
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
);
NRRRC_CONFIGURATION_REQ
(
msg_p
).
minRXTXTIMEpdsch
=
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
;
NRRRC_CONFIGURATION_REQ
(
msg_p
).
minRXTXTIMEpdsch
=
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
;
NRRRC_CONFIGURATION_REQ
(
msg_p
).
sib1_tda
=
*
GNBParamList
.
paramarray
[
i
][
GNB_SIB1_TDA_IDX
].
iptr
;
NRRRC_CONFIGURATION_REQ
(
msg_p
).
sib1_tda
=
*
GNBParamList
.
paramarray
[
i
][
GNB_SIB1_TDA_IDX
].
iptr
;
printf
(
"minTXRXTIMEpdsch %d
\n
"
,
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
);
NRRRC_CONFIGURATION_REQ
(
msg_p
).
minRXTXTIMEpdsch
=
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
;
printf
(
"Do CSI-RS %d
\n
"
,
*
GNBParamList
.
paramarray
[
i
][
GNB_DO_CSIRS_IDX
].
iptr
);
printf
(
"Do CSI-RS %d
\n
"
,
*
GNBParamList
.
paramarray
[
i
][
GNB_DO_CSIRS_IDX
].
iptr
);
NRRRC_CONFIGURATION_REQ
(
msg_p
).
do_CSIRS
=
*
GNBParamList
.
paramarray
[
i
][
GNB_DO_CSIRS_IDX
].
iptr
;
NRRRC_CONFIGURATION_REQ
(
msg_p
).
do_CSIRS
=
*
GNBParamList
.
paramarray
[
i
][
GNB_DO_CSIRS_IDX
].
iptr
;
NRRRC_CONFIGURATION_REQ
(
msg_p
).
scc
=
scc
;
NRRRC_CONFIGURATION_REQ
(
msg_p
).
scc
=
scc
;
...
...
openair2/GNB_APP/gnb_paramdef.h
View file @
d4e31183
...
@@ -149,7 +149,7 @@ typedef enum {
...
@@ -149,7 +149,7 @@ typedef enum {
{GNB_CONFIG_STRING_DOCSIRS, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_DOCSIRS, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_NRCELLID, NULL, 0, u64ptr:NULL, defint64val:1, TYPE_UINT64, 0}, \
{GNB_CONFIG_STRING_NRCELLID, NULL, 0, u64ptr:NULL, defint64val:1, TYPE_UINT64, 0}, \
{GNB_CONFIG_STRING_MINRXTXTIMEPDSCH, NULL, 0, iptr:NULL, defintval:2, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_MINRXTXTIMEPDSCH, NULL, 0, iptr:NULL, defintval:2, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_ULPRBBLACKLIST, NULL, 0, strptr:NULL, defstrval:"",
TYPE_STRING,
0} \
{GNB_CONFIG_STRING_ULPRBBLACKLIST, NULL, 0, strptr:NULL, defstrval:"",
TYPE_STRING,
0} \
}
}
#define GNB_GNB_ID_IDX 0
#define GNB_GNB_ID_IDX 0
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
d4e31183
...
@@ -299,9 +299,6 @@ void set_harq_status(NR_UE_MAC_INST_t *mac,
...
@@ -299,9 +299,6 @@ void set_harq_status(NR_UE_MAC_INST_t *mac,
frame_t
frame
,
frame_t
frame
,
int
slot
);
int
slot
);
void
update_harq_status
(
nr_downlink_indication_t
*
dl_info
,
int
pdu_id
);
uint8_t
get_downlink_ack
(
NR_UE_MAC_INST_t
*
mac
,
uint8_t
get_downlink_ack
(
NR_UE_MAC_INST_t
*
mac
,
frame_t
frame
,
frame_t
frame
,
int
slot
,
int
slot
,
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
d4e31183
...
@@ -1232,14 +1232,17 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
...
@@ -1232,14 +1232,17 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
uint8_t
feedback_ti
=
uint8_t
feedback_ti
=
ubwpd
->
pucch_Config
->
choice
.
setup
->
dl_DataToUL_ACK
->
list
.
array
[
dci
->
pdsch_to_harq_feedback_timing_indicator
.
val
][
0
];
ubwpd
->
pucch_Config
->
choice
.
setup
->
dl_DataToUL_ACK
->
list
.
array
[
dci
->
pdsch_to_harq_feedback_timing_indicator
.
val
][
0
];
// set the harq status at MAC for feedback
AssertFatal
(
feedback_ti
>=
DURATION_RX_TO_TX
,
"PDSCH to HARQ feedback time (%d) cannot be less than DURATION_RX_TO_TX (%d)
\n
"
,
set_harq_status
(
mac
,
dci
->
pucch_resource_indicator
,
feedback_ti
,
DURATION_RX_TO_TX
);
dci
->
harq_pid
,
dlsch_config_pdu_1_1
->
accumulated_delta_PUCCH
,
// set the harq status at MAC for feedback
feedback_ti
,
set_harq_status
(
mac
,
dci
->
pucch_resource_indicator
,
dci
->
dai
[
0
].
val
,
dci
->
harq_pid
,
dci_ind
->
n_CCE
,
dci_ind
->
N_CCE
,
0
,
dlsch_config_pdu_1_1
->
accumulated_delta_PUCCH
,
frame
,
slot
);
feedback_ti
,
dci
->
dai
[
0
].
val
,
dci_ind
->
n_CCE
,
dci_ind
->
N_CCE
,
0
,
frame
,
slot
);
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
=
FAPI_NR_DL_CONFIG_TYPE_DLSCH
;
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
=
FAPI_NR_DL_CONFIG_TYPE_DLSCH
;
LOG_D
(
MAC
,
"(nr_ue_procedures.c) pdu_type=%d
\n\n
"
,
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
);
LOG_D
(
MAC
,
"(nr_ue_procedures.c) pdu_type=%d
\n\n
"
,
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
);
...
@@ -1331,25 +1334,6 @@ void set_harq_status(NR_UE_MAC_INST_t *mac,
...
@@ -1331,25 +1334,6 @@ void set_harq_status(NR_UE_MAC_INST_t *mac,
}
}
void
update_harq_status
(
nr_downlink_indication_t
*
dl_info
,
int
pdu_id
)
{
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
dl_info
->
module_id
);
uint8_t
harq_pid
=
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
harq_pid
;
NR_UE_HARQ_STATUS_t
*
current_harq
=
&
mac
->
dl_harq_info
[
harq_pid
];
if
(
current_harq
->
active
)
{
current_harq
->
ack
=
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
ack_nack
;
current_harq
->
ack_received
=
true
;
LOG_D
(
PHY
,
"Updating harq_status for harq_id %d,ack/nak %d
\n
"
,
harq_pid
,
current_harq
->
ack
);
}
else
{
//shouldn't get here
LOG_E
(
MAC
,
"Trying to process acknack for an inactive harq process (%d)
\n
"
,
harq_pid
);
}
}
void
nr_ue_configure_pucch
(
NR_UE_MAC_INST_t
*
mac
,
void
nr_ue_configure_pucch
(
NR_UE_MAC_INST_t
*
mac
,
int
slot
,
int
slot
,
uint16_t
rnti
,
uint16_t
rnti
,
...
@@ -2123,7 +2107,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
...
@@ -2123,7 +2107,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
uint32_t
V_temp
=
0
;
uint32_t
V_temp
=
0
;
uint32_t
V_temp2
=
0
;
uint32_t
V_temp2
=
0
;
int
O_ACK
=
0
;
int
O_ACK
=
0
;
in
t
o_ACK
=
0
;
uint8_
t
o_ACK
=
0
;
int
O_bit_number_cw0
=
0
;
int
O_bit_number_cw0
=
0
;
int
O_bit_number_cw1
=
0
;
int
O_bit_number_cw1
=
0
;
...
@@ -2151,6 +2135,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
...
@@ -2151,6 +2135,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
}
}
o_ACK
=
o_ACK
|
(
ack_data
[
0
][
m
]
<<
O_bit_number_cw0
);
o_ACK
=
o_ACK
|
(
ack_data
[
0
][
m
]
<<
O_bit_number_cw0
);
LOG_D
(
MAC
,
"m %d bit number %d o_ACK %d
\n
"
,
m
,
O_bit_number_cw0
,
o_ACK
);
}
}
if
(
V_temp2
<
V_temp
)
{
if
(
V_temp2
<
V_temp
)
{
...
@@ -2169,8 +2154,11 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
...
@@ -2169,8 +2154,11 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
return
(
0
);
return
(
0
);
}
}
reverse_n_bits
(
&
o_ACK
,
number_harq_feedback
);
pucch
->
ack_payload
=
o_ACK
;
pucch
->
ack_payload
=
o_ACK
;
LOG_D
(
MAC
,
"frame %d slot %d pucch acknack payload %d
\n
"
,
frame
,
slot
,
o_ACK
);
return
(
number_harq_feedback
);
return
(
number_harq_feedback
);
}
}
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
d4e31183
...
@@ -2153,7 +2153,8 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in
...
@@ -2153,7 +2153,8 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in
if
(
N_UCI
>
0
)
{
if
(
N_UCI
>
0
)
{
pucch
->
resource_set_id
=
find_pucch_resource_set
(
mac
,
N_UCI
);
LOG_D
(
NR_MAC
,
"%d.%d configure pucch, O_SR %d, O_ACK %d, O_CSI %d
\n
"
,
frameP
,
slotP
,
O_SR
,
O_ACK
,
O_CSI
);
pucch
->
resource_set_id
=
find_pucch_resource_set
(
mac
,
O_ACK
+
O_CSI
);
select_pucch_resource
(
mac
,
pucch
);
select_pucch_resource
(
mac
,
pucch
);
fapi_nr_ul_config_request_t
*
ul_config
=
get_ul_config_request
(
mac
,
slotP
);
fapi_nr_ul_config_request_t
*
ul_config
=
get_ul_config_request
(
mac
,
slotP
);
pthread_mutex_lock
(
&
ul_config
->
mutex_ul_config
);
pthread_mutex_lock
(
&
ul_config
->
mutex_ul_config
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
d4e31183
...
@@ -373,7 +373,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
...
@@ -373,7 +373,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
schedule_nr_prach
(
module_idP
,
f
,
s
);
schedule_nr_prach
(
module_idP
,
f
,
s
);
}
}
// This schedule SR
// This schedule SR
nr_sr_reporting
(
module_idP
,
frame
,
slot
);
nr_sr_reporting
(
module_idP
,
frame
,
slot
);
// Schedule CSI-RS transmission
// Schedule CSI-RS transmission
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
d4e31183
...
@@ -753,7 +753,7 @@ void pf_dl(module_id_t module_id,
...
@@ -753,7 +753,7 @@ void pf_dl(module_id_t module_id,
/* Find PUCCH occasion: if it fails, undo CCE allocation (undoing PUCCH
/* Find PUCCH occasion: if it fails, undo CCE allocation (undoing PUCCH
* allocation after CCE alloc fail would be more complex) */
* allocation after CCE alloc fail would be more complex) */
const
int
alloc
=
nr_acknack_scheduling
(
module_id
,
UE_id
,
frame
,
slot
,
-
1
,
0
);
const
int
alloc
=
nr_acknack_scheduling
(
module_id
,
UE_id
,
frame
,
slot
,
-
1
,
0
);
if
(
alloc
<
0
)
{
if
(
alloc
<
0
)
{
LOG_D
(
NR_MAC
,
LOG_D
(
NR_MAC
,
"%s(): could not find PUCCH for UE %d/%04x@%d.%d
\n
"
,
"%s(): could not find PUCCH for UE %d/%04x@%d.%d
\n
"
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
d4e31183
...
@@ -348,7 +348,7 @@ void nr_preprocessor_phytest(module_id_t module_id,
...
@@ -348,7 +348,7 @@ void nr_preprocessor_phytest(module_id_t module_id,
__func__
,
__func__
,
UE_id
);
UE_id
);
const
int
alloc
=
nr_acknack_scheduling
(
module_id
,
UE_id
,
frame
,
slot
,
-
1
,
0
);
const
int
alloc
=
nr_acknack_scheduling
(
module_id
,
UE_id
,
frame
,
slot
,
-
1
,
0
);
if
(
alloc
<
0
)
{
if
(
alloc
<
0
)
{
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"%s(): could not find PUCCH for UE %d/%04x@%d.%d
\n
"
,
"%s(): could not find PUCCH for UE %d/%04x@%d.%d
\n
"
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
d4e31183
...
@@ -2203,6 +2203,7 @@ void get_pdsch_to_harq_feedback(int Mod_idP,
...
@@ -2203,6 +2203,7 @@ void get_pdsch_to_harq_feedback(int Mod_idP,
}
}
void
nr_csirs_scheduling
(
int
Mod_idP
,
void
nr_csirs_scheduling
(
int
Mod_idP
,
frame_t
frame
,
frame_t
frame
,
sub_frame_t
slot
,
sub_frame_t
slot
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
View file @
d4e31183
...
@@ -1099,6 +1099,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id,
...
@@ -1099,6 +1099,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id,
DevAssert
(
harq
->
is_waiting
);
DevAssert
(
harq
->
is_waiting
);
const
int8_t
pid
=
sched_ctrl
->
feedback_dl_harq
.
head
;
const
int8_t
pid
=
sched_ctrl
->
feedback_dl_harq
.
head
;
remove_front_nr_list
(
&
sched_ctrl
->
feedback_dl_harq
);
remove_front_nr_list
(
&
sched_ctrl
->
feedback_dl_harq
);
LOG_D
(
NR_MAC
,
"bit %d pid %d ack/nack %d
\n
"
,
harq_bit
,
pid
,
harq_value
);
handle_dl_harq
(
mod_id
,
UE_id
,
pid
,
harq_value
==
0
&&
harq_confidence
==
0
);
handle_dl_harq
(
mod_id
,
UE_id
,
pid
,
harq_value
==
0
&&
harq_confidence
==
0
);
if
(
harq_confidence
==
1
)
UE_info
->
mac_stats
[
UE_id
].
pucch0_DTX
++
;
if
(
harq_confidence
==
1
)
UE_info
->
mac_stats
[
UE_id
].
pucch0_DTX
++
;
}
}
...
@@ -1187,7 +1188,7 @@ int nr_acknack_scheduling(int mod_id,
...
@@ -1187,7 +1188,7 @@ int nr_acknack_scheduling(int mod_id,
const
int
nr_mix_slots
=
tdd
->
nrofDownlinkSymbols
!=
0
||
tdd
->
nrofUplinkSymbols
!=
0
;
const
int
nr_mix_slots
=
tdd
->
nrofDownlinkSymbols
!=
0
||
tdd
->
nrofUplinkSymbols
!=
0
;
const
int
nr_slots_period
=
tdd
->
nrofDownlinkSlots
+
tdd
->
nrofUplinkSlots
+
nr_mix_slots
;
const
int
nr_slots_period
=
tdd
->
nrofDownlinkSlots
+
tdd
->
nrofUplinkSlots
+
nr_mix_slots
;
const
int
first_ul_slot_tdd
=
tdd
->
nrofDownlinkSlots
+
nr_slots_period
*
(
slot
/
nr_slots_period
);
const
int
first_ul_slot_tdd
=
tdd
->
nrofDownlinkSlots
+
nr_slots_period
*
(
slot
/
nr_slots_period
);
const
int
first_ul_slot_period
=
first_ul_slot_tdd
%
nr_slots_period
;
const
int
first_ul_slot_period
=
tdd
->
nrofDownlinkSlots
;
const
int
CC_id
=
0
;
const
int
CC_id
=
0
;
NR_sched_pucch_t
*
csi_pucch
;
NR_sched_pucch_t
*
csi_pucch
;
...
@@ -1236,11 +1237,11 @@ int nr_acknack_scheduling(int mod_id,
...
@@ -1236,11 +1237,11 @@ int nr_acknack_scheduling(int mod_id,
&&
!
csi_pucch
->
simultaneous_harqcsi
)
{
&&
!
csi_pucch
->
simultaneous_harqcsi
)
{
nr_fill_nfapi_pucch
(
mod_id
,
frame
,
slot
,
csi_pucch
,
UE_id
);
nr_fill_nfapi_pucch
(
mod_id
,
frame
,
slot
,
csi_pucch
,
UE_id
);
memset
(
csi_pucch
,
0
,
sizeof
(
*
csi_pucch
));
memset
(
csi_pucch
,
0
,
sizeof
(
*
csi_pucch
));
pucch
->
frame
=
s
==
n_slots_frame
-
1
?
(
f
+
1
)
%
1024
:
f
;
pucch
->
frame
=
pucch
->
ul_slot
==
n_slots_frame
-
1
?
(
pucch
->
frame
+
1
)
%
1024
:
pucch
->
frame
;
if
(((
s
+
1
)
%
nr_slots_period
)
==
0
)
if
(((
pucch
->
ul_slot
+
1
)
%
nr_slots_period
)
==
0
)
pucch
->
ul_slot
=
(
s
+
1
+
first_ul_slot_period
)
%
n_slots_frame
;
pucch
->
ul_slot
=
(
pucch
->
ul_slot
+
1
+
first_ul_slot_period
)
%
n_slots_frame
;
else
else
pucch
->
ul_slot
=
(
s
+
1
)
%
n_slots_frame
;
pucch
->
ul_slot
=
(
pucch
->
ul_slot
+
1
)
%
n_slots_frame
;
}
}
}
}
...
@@ -1264,7 +1265,6 @@ int nr_acknack_scheduling(int mod_id,
...
@@ -1264,7 +1265,6 @@ int nr_acknack_scheduling(int mod_id,
int
max_fb_time
=
0
;
int
max_fb_time
=
0
;
get_pdsch_to_harq_feedback
(
mod_id
,
UE_id
,
bwp_Id
,
ss_type
,
&
max_fb_time
,
pdsch_to_harq_feedback
);
get_pdsch_to_harq_feedback
(
mod_id
,
UE_id
,
bwp_Id
,
ss_type
,
&
max_fb_time
,
pdsch_to_harq_feedback
);
int
max_absslot
=
frame
*
n_slots_frame
+
slot
+
max_fb_time
;
LOG_D
(
NR_MAC
,
"pucch_acknak 1b. DL %d.%d, UL_ACK %d.%d, DAI_C %d
\n
"
,
frame
,
slot
,
pucch
->
frame
,
pucch
->
ul_slot
,
pucch
->
dai_c
);
LOG_D
(
NR_MAC
,
"pucch_acknak 1b. DL %d.%d, UL_ACK %d.%d, DAI_C %d
\n
"
,
frame
,
slot
,
pucch
->
frame
,
pucch
->
ul_slot
,
pucch
->
dai_c
);
/* there is a HARQ. Check whether we can use it for this ACKNACK */
/* there is a HARQ. Check whether we can use it for this ACKNACK */
...
@@ -1273,7 +1273,10 @@ int nr_acknack_scheduling(int mod_id,
...
@@ -1273,7 +1273,10 @@ int nr_acknack_scheduling(int mod_id,
// Find the right timing_indicator value.
// Find the right timing_indicator value.
int
i
=
0
;
int
i
=
0
;
while
(
i
<
8
)
{
while
(
i
<
8
)
{
if
(
pdsch_to_harq_feedback
[
i
]
==
pucch
->
ul_slot
-
slot
)
int
diff
=
pucch
->
ul_slot
-
slot
;
if
(
diff
<
0
)
diff
+=
n_slots_frame
;
if
(
pdsch_to_harq_feedback
[
i
]
==
diff
)
break
;
break
;
++
i
;
++
i
;
}
}
...
@@ -1303,8 +1306,10 @@ int nr_acknack_scheduling(int mod_id,
...
@@ -1303,8 +1306,10 @@ int nr_acknack_scheduling(int mod_id,
LOG_D
(
NR_MAC
,
"pucch_acknak : %d.%d DAI = 0, looking for new pucch occasion
\n
"
,
frame
,
slot
);
LOG_D
(
NR_MAC
,
"pucch_acknak : %d.%d DAI = 0, looking for new pucch occasion
\n
"
,
frame
,
slot
);
/* we need to find a new PUCCH occasion */
/* we need to find a new PUCCH occasion */
/*Inizialization of timing information*/
/*(Re)Inizialization of timing information*/
if
(
pucch
->
frame
==
0
&&
pucch
->
ul_slot
==
0
)
{
if
((
pucch
->
frame
==
0
&&
pucch
->
ul_slot
==
0
)
||
((
pucch
->
frame
*
n_slots_frame
+
pucch
->
ul_slot
)
<
(
frame
*
n_slots_frame
+
slot
)))
{
AssertFatal
(
pucch
->
sr_flag
+
pucch
->
dai_c
==
0
,
AssertFatal
(
pucch
->
sr_flag
+
pucch
->
dai_c
==
0
,
"expected no SR/AckNack for UE %d in %4d.%2d, but has %d/%d for %4d.%2d
\n
"
,
"expected no SR/AckNack for UE %d in %4d.%2d, but has %d/%d for %4d.%2d
\n
"
,
UE_id
,
frame
,
slot
,
pucch
->
sr_flag
,
pucch
->
dai_c
,
pucch
->
frame
,
pucch
->
ul_slot
);
UE_id
,
frame
,
slot
,
pucch
->
sr_flag
,
pucch
->
dai_c
,
pucch
->
frame
,
pucch
->
ul_slot
);
...
@@ -1314,13 +1319,16 @@ int nr_acknack_scheduling(int mod_id,
...
@@ -1314,13 +1319,16 @@ int nr_acknack_scheduling(int mod_id,
// Find the right timing_indicator value.
// Find the right timing_indicator value.
int
ind_found
=
-
1
;
int
ind_found
=
-
1
;
// while we are within the feedback limits
and it has not been
// while we are within the feedback limits
while
((
pucch
->
frame
*
n_slots_frame
+
pucch
->
ul_slot
)
<=
max_absslot
)
{
while
((
n_slots_frame
+
pucch
->
ul_slot
-
slot
)
%
n_slots_frame
<=
max_fb_time
)
{
int
i
=
0
;
int
i
=
0
;
while
(
i
<
8
)
{
while
(
i
<
8
)
{
LOG_D
(
NR_MAC
,
"pdsch_to_harq_feedback[%d] = %d (pucch->ul_slot %d - slot %d)
\n
"
,
LOG_D
(
NR_MAC
,
"pdsch_to_harq_feedback[%d] = %d (pucch->ul_slot %d - slot %d)
\n
"
,
i
,
pdsch_to_harq_feedback
[
i
],
pucch
->
ul_slot
,
slot
);
i
,
pdsch_to_harq_feedback
[
i
],
pucch
->
ul_slot
,
slot
);
if
(
pdsch_to_harq_feedback
[
i
]
==
pucch
->
ul_slot
-
slot
)
{
int
diff
=
pucch
->
ul_slot
-
slot
;
if
(
diff
<
0
)
diff
+=
n_slots_frame
;
if
(
pdsch_to_harq_feedback
[
i
]
==
diff
)
{
ind_found
=
i
;
ind_found
=
i
;
break
;
break
;
}
}
...
...
openair2/LAYER2/nr_rlc/nr_rlc_entity.h
View file @
d4e31183
...
@@ -63,6 +63,8 @@ typedef struct nr_rlc_entity_t {
...
@@ -63,6 +63,8 @@ typedef struct nr_rlc_entity_t {
void
(
*
max_retx_reached
)(
void
*
max_retx_reached_data
,
void
(
*
max_retx_reached
)(
void
*
max_retx_reached_data
,
struct
nr_rlc_entity_t
*
entity
);
struct
nr_rlc_entity_t
*
entity
);
void
*
max_retx_reached_data
;
void
*
max_retx_reached_data
;
/* buffer status computation */
nr_rlc_entity_buffer_status_t
bstatus
;
}
nr_rlc_entity_t
;
}
nr_rlc_entity_t
;
nr_rlc_entity_t
*
new_nr_rlc_entity_am
(
nr_rlc_entity_t
*
new_nr_rlc_entity_am
(
...
...
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
View file @
d4e31183
...
@@ -28,6 +28,19 @@
...
@@ -28,6 +28,19 @@
#include "LOG/log.h"
#include "LOG/log.h"
/* for a given SDU/SDU segment, computes the corresponding PDU header size */
static
int
compute_pdu_header_size
(
nr_rlc_entity_am_t
*
entity
,
nr_rlc_sdu_segment_t
*
sdu
)
{
int
header_size
=
2
;
/* one more byte if SN field length is 18 */
if
(
entity
->
sn_field_length
==
18
)
header_size
++
;
/* two more bytes for SO if SDU segment is not the first */
if
(
!
sdu
->
is_first
)
header_size
+=
2
;
return
header_size
;
}
/*************************************************************************/
/*************************************************************************/
/* PDU RX functions */
/* PDU RX functions */
/*************************************************************************/
/*************************************************************************/
...
@@ -114,6 +127,10 @@ static void consider_retransmission(nr_rlc_entity_am_t *entity,
...
@@ -114,6 +127,10 @@ static void consider_retransmission(nr_rlc_entity_am_t *entity,
nr_rlc_sdu_segment_list_append
(
&
entity
->
retransmit_list
,
nr_rlc_sdu_segment_list_append
(
&
entity
->
retransmit_list
,
&
entity
->
retransmit_end
,
&
entity
->
retransmit_end
,
cur
);
cur
);
/* update buffer status */
entity
->
common
.
bstatus
.
retx_size
+=
compute_pdu_header_size
(
entity
,
cur
)
+
cur
->
size
;
}
}
/* checks that all the bytes of the SDU sn have been received (but SDU
/* checks that all the bytes of the SDU sn have been received (but SDU
...
@@ -351,6 +368,9 @@ static void process_received_ack(nr_rlc_entity_am_t *entity, int ack_sn)
...
@@ -351,6 +368,9 @@ static void process_received_ack(nr_rlc_entity_am_t *entity, int ack_sn)
}
}
/* remove from retransmit list */
/* remove from retransmit list */
prev
->
next
=
cur
->
next
;
prev
->
next
=
cur
->
next
;
/* update buffer status */
entity
->
common
.
bstatus
.
retx_size
-=
compute_pdu_header_size
(
entity
,
cur
)
+
cur
->
size
;
/* put the PDU in the ack list */
/* put the PDU in the ack list */
entity
->
ack_list
=
nr_rlc_sdu_segment_list_add
(
sn_compare_tx
,
entity
,
entity
->
ack_list
=
nr_rlc_sdu_segment_list_add
(
sn_compare_tx
,
entity
,
entity
->
ack_list
,
cur
);
entity
->
ack_list
,
cur
);
...
@@ -840,19 +860,6 @@ static int serialize_sdu(nr_rlc_entity_am_t *entity,
...
@@ -840,19 +860,6 @@ static int serialize_sdu(nr_rlc_entity_am_t *entity,
return
encoder
.
byte
+
sdu
->
size
;
return
encoder
.
byte
+
sdu
->
size
;
}
}
/* for a given SDU/SDU segment, computes the corresponding PDU header size */
static
int
compute_pdu_header_size
(
nr_rlc_entity_am_t
*
entity
,
nr_rlc_sdu_segment_t
*
sdu
)
{
int
header_size
=
2
;
/* one more byte if SN field length is 18 */
if
(
entity
->
sn_field_length
==
18
)
header_size
++
;
/* two more bytes for SO if SDU segment is not the first */
if
(
!
sdu
->
is_first
)
header_size
+=
2
;
return
header_size
;
}
/* resize SDU/SDU segment for the corresponding PDU to fit into 'pdu_size'
/* resize SDU/SDU segment for the corresponding PDU to fit into 'pdu_size'
* bytes
* bytes
* - modifies SDU/SDU segment to become an SDU segment
* - modifies SDU/SDU segment to become an SDU segment
...
@@ -1426,8 +1433,12 @@ static int generate_retx_pdu(nr_rlc_entity_am_t *entity, char *buffer,
...
@@ -1426,8 +1433,12 @@ static int generate_retx_pdu(nr_rlc_entity_am_t *entity, char *buffer,
sdu
->
next
=
NULL
;
sdu
->
next
=
NULL
;
/* segment if necessary */
pdu_size
=
pdu_header_size
+
sdu
->
size
;
pdu_size
=
pdu_header_size
+
sdu
->
size
;
/* update buffer status */
entity
->
common
.
bstatus
.
retx_size
-=
pdu_size
;
/* segment if necessary */
if
(
pdu_size
>
size
)
{
if
(
pdu_size
>
size
)
{
nr_rlc_sdu_segment_t
*
next_sdu
;
nr_rlc_sdu_segment_t
*
next_sdu
;
next_sdu
=
resegment
(
sdu
,
entity
,
size
);
next_sdu
=
resegment
(
sdu
,
entity
,
size
);
...
@@ -1436,6 +1447,9 @@ static int generate_retx_pdu(nr_rlc_entity_am_t *entity, char *buffer,
...
@@ -1436,6 +1447,9 @@ static int generate_retx_pdu(nr_rlc_entity_am_t *entity, char *buffer,
entity
->
retransmit_list
=
next_sdu
;
entity
->
retransmit_list
=
next_sdu
;
if
(
entity
->
retransmit_end
==
NULL
)
if
(
entity
->
retransmit_end
==
NULL
)
entity
->
retransmit_end
=
entity
->
retransmit_list
;
entity
->
retransmit_end
=
entity
->
retransmit_list
;
/* update buffer status */
entity
->
common
.
bstatus
.
retx_size
+=
compute_pdu_header_size
(
entity
,
next_sdu
)
+
next_sdu
->
size
;
}
}
/* put SDU/SDU segment in the wait list */
/* put SDU/SDU segment in the wait list */
...
@@ -1479,11 +1493,15 @@ static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size)
...
@@ -1479,11 +1493,15 @@ static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size)
sdu
->
next
=
NULL
;
sdu
->
next
=
NULL
;
pdu_size
=
pdu_header_size
+
sdu
->
size
;
/* update buffer status */
entity
->
common
.
bstatus
.
tx_size
-=
pdu_size
;
/* assign SN to SDU */
/* assign SN to SDU */
sdu
->
sdu
->
sn
=
entity
->
tx_next
;
sdu
->
sdu
->
sn
=
entity
->
tx_next
;
/* segment if necessary */
/* segment if necessary */
pdu_size
=
pdu_header_size
+
sdu
->
size
;
if
(
pdu_size
>
size
)
{
if
(
pdu_size
>
size
)
{
nr_rlc_sdu_segment_t
*
next_sdu
;
nr_rlc_sdu_segment_t
*
next_sdu
;
next_sdu
=
resegment
(
sdu
,
entity
,
size
);
next_sdu
=
resegment
(
sdu
,
entity
,
size
);
...
@@ -1492,6 +1510,9 @@ static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size)
...
@@ -1492,6 +1510,9 @@ static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size)
entity
->
tx_list
=
next_sdu
;
entity
->
tx_list
=
next_sdu
;
if
(
entity
->
tx_end
==
NULL
)
if
(
entity
->
tx_end
==
NULL
)
entity
->
tx_end
=
entity
->
tx_list
;
entity
->
tx_end
=
entity
->
tx_list
;
/* update buffer status */
entity
->
common
.
bstatus
.
tx_size
+=
compute_pdu_header_size
(
entity
,
next_sdu
)
+
next_sdu
->
size
;
}
}
/* update tx_next if the SDU segment is the last */
/* update tx_next if the SDU segment is the last */
...
@@ -1520,24 +1541,6 @@ static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size)
...
@@ -1520,24 +1541,6 @@ static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size)
return
serialize_sdu
(
entity
,
sdu
,
buffer
,
size
,
p
);
return
serialize_sdu
(
entity
,
sdu
,
buffer
,
size
,
p
);
}
}
/* Pretend to serialize all the SDUs in a list and return the size
* of all the PDUs it would produce, limited to 'maxsize'.
* Used for buffer status reporting.
*/
static
int
tx_list_size
(
nr_rlc_entity_am_t
*
entity
,
nr_rlc_sdu_segment_t
*
l
,
int
maxsize
)
{
int
ret
=
0
;
while
(
l
!=
NULL
&&
ret
<
maxsize
)
{
ret
+=
compute_pdu_header_size
(
entity
,
l
)
+
l
->
size
;
l
=
l
->
next
;
}
if
(
ret
>
maxsize
)
ret
=
maxsize
;
return
ret
;
}
nr_rlc_entity_buffer_status_t
nr_rlc_entity_am_buffer_status
(
nr_rlc_entity_buffer_status_t
nr_rlc_entity_am_buffer_status
(
nr_rlc_entity_t
*
_entity
,
int
maxsize
)
nr_rlc_entity_t
*
_entity
,
int
maxsize
)
{
{
...
@@ -1549,8 +1552,8 @@ nr_rlc_entity_buffer_status_t nr_rlc_entity_am_buffer_status(
...
@@ -1549,8 +1552,8 @@ nr_rlc_entity_buffer_status_t nr_rlc_entity_am_buffer_status(
else
else
ret
.
status_size
=
0
;
ret
.
status_size
=
0
;
ret
.
tx_size
=
tx_list_size
(
entity
,
entity
->
tx_list
,
maxsize
)
;
ret
.
tx_size
=
entity
->
common
.
bstatus
.
tx_size
;
ret
.
retx_size
=
tx_list_size
(
entity
,
entity
->
retransmit_list
,
maxsize
)
;
ret
.
retx_size
=
entity
->
common
.
bstatus
.
retx_size
;
return
ret
;
return
ret
;
}
}
...
@@ -1606,6 +1609,10 @@ void nr_rlc_entity_am_recv_sdu(nr_rlc_entity_t *_entity,
...
@@ -1606,6 +1609,10 @@ void nr_rlc_entity_am_recv_sdu(nr_rlc_entity_t *_entity,
LOG_D
(
RLC
,
"Created new RLC SDU and append it to the RLC list
\n
"
);
LOG_D
(
RLC
,
"Created new RLC SDU and append it to the RLC list
\n
"
);
nr_rlc_sdu_segment_list_append
(
&
entity
->
tx_list
,
&
entity
->
tx_end
,
sdu
);
nr_rlc_sdu_segment_list_append
(
&
entity
->
tx_list
,
&
entity
->
tx_end
,
sdu
);
/* update buffer status */
entity
->
common
.
bstatus
.
tx_size
+=
compute_pdu_header_size
(
entity
,
sdu
)
+
sdu
->
size
;
}
}
/*************************************************************************/
/*************************************************************************/
...
@@ -1793,6 +1800,10 @@ void nr_rlc_entity_am_discard_sdu(nr_rlc_entity_t *_entity, int sdu_id)
...
@@ -1793,6 +1800,10 @@ void nr_rlc_entity_am_discard_sdu(nr_rlc_entity_t *_entity, int sdu_id)
entity
->
tx_end
=
NULL
;
entity
->
tx_end
=
NULL
;
}
}
/* update buffer status */
entity
->
common
.
bstatus
.
tx_size
-=
compute_pdu_header_size
(
entity
,
cur
)
+
cur
->
size
;
nr_rlc_free_sdu_segment
(
cur
);
nr_rlc_free_sdu_segment
(
cur
);
}
}
...
@@ -1845,6 +1856,9 @@ static void clear_entity(nr_rlc_entity_am_t *entity)
...
@@ -1845,6 +1856,9 @@ static void clear_entity(nr_rlc_entity_am_t *entity)
entity
->
retransmit_end
=
NULL
;
entity
->
retransmit_end
=
NULL
;
entity
->
ack_list
=
NULL
;
entity
->
ack_list
=
NULL
;
entity
->
common
.
bstatus
.
tx_size
=
0
;
entity
->
common
.
bstatus
.
retx_size
=
0
;
}
}
void
nr_rlc_entity_am_reestablishment
(
nr_rlc_entity_t
*
_entity
)
void
nr_rlc_entity_am_reestablishment
(
nr_rlc_entity_t
*
_entity
)
...
...
openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.c
View file @
d4e31183
...
@@ -68,22 +68,12 @@ static int generate_tx_pdu(nr_rlc_entity_tm_t *entity, char *buffer, int size)
...
@@ -68,22 +68,12 @@ static int generate_tx_pdu(nr_rlc_entity_tm_t *entity, char *buffer, int size)
memcpy
(
buffer
,
sdu
->
sdu
->
data
,
sdu
->
size
);
memcpy
(
buffer
,
sdu
->
sdu
->
data
,
sdu
->
size
);
entity
->
tx_size
-=
sdu
->
size
;
entity
->
tx_size
-=
sdu
->
size
;
nr_rlc_free_sdu_segment
(
sdu
);
return
ret
;
/* update buffer status */
}
entity
->
common
.
bstatus
.
tx_size
-=
sdu
->
size
;
static
int
tx_list_size
(
nr_rlc_entity_tm_t
*
entity
,
nr_rlc_sdu_segment_t
*
l
,
int
maxsize
)
{
int
ret
=
0
;
while
(
l
!=
NULL
&&
ret
<
maxsize
)
{
nr_rlc_free_sdu_segment
(
sdu
);
ret
+=
l
->
size
;
l
=
l
->
next
;
}
if
(
ret
>
maxsize
)
ret
=
maxsize
;
return
ret
;
return
ret
;
}
}
...
@@ -94,7 +84,7 @@ nr_rlc_entity_buffer_status_t nr_rlc_entity_tm_buffer_status(
...
@@ -94,7 +84,7 @@ nr_rlc_entity_buffer_status_t nr_rlc_entity_tm_buffer_status(
nr_rlc_entity_buffer_status_t
ret
;
nr_rlc_entity_buffer_status_t
ret
;
ret
.
status_size
=
0
;
ret
.
status_size
=
0
;
ret
.
tx_size
=
tx_list_size
(
entity
,
entity
->
tx_list
,
maxsize
)
;
ret
.
tx_size
=
entity
->
common
.
bstatus
.
tx_size
;
ret
.
retx_size
=
0
;
ret
.
retx_size
=
0
;
return
ret
;
return
ret
;
...
@@ -136,6 +126,9 @@ void nr_rlc_entity_tm_recv_sdu(nr_rlc_entity_t *_entity,
...
@@ -136,6 +126,9 @@ void nr_rlc_entity_tm_recv_sdu(nr_rlc_entity_t *_entity,
sdu
=
nr_rlc_new_sdu
(
buffer
,
size
,
sdu_id
);
sdu
=
nr_rlc_new_sdu
(
buffer
,
size
,
sdu_id
);
nr_rlc_sdu_segment_list_append
(
&
entity
->
tx_list
,
&
entity
->
tx_end
,
sdu
);
nr_rlc_sdu_segment_list_append
(
&
entity
->
tx_list
,
&
entity
->
tx_end
,
sdu
);
/* update buffer status */
entity
->
common
.
bstatus
.
tx_size
+=
sdu
->
size
;
}
}
/*************************************************************************/
/*************************************************************************/
...
@@ -165,6 +158,8 @@ static void clear_entity(nr_rlc_entity_tm_t *entity)
...
@@ -165,6 +158,8 @@ static void clear_entity(nr_rlc_entity_tm_t *entity)
entity
->
tx_list
=
NULL
;
entity
->
tx_list
=
NULL
;
entity
->
tx_end
=
NULL
;
entity
->
tx_end
=
NULL
;
entity
->
tx_size
=
0
;
entity
->
tx_size
=
0
;
entity
->
common
.
bstatus
.
tx_size
=
0
;
}
}
void
nr_rlc_entity_tm_reestablishment
(
nr_rlc_entity_t
*
_entity
)
void
nr_rlc_entity_tm_reestablishment
(
nr_rlc_entity_t
*
_entity
)
...
...
openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c
View file @
d4e31183
...
@@ -28,6 +28,20 @@
...
@@ -28,6 +28,20 @@
#include "LOG/log.h"
#include "LOG/log.h"
/* for a given SDU/SDU segment, computes the corresponding PDU header size */
static
int
compute_pdu_header_size
(
nr_rlc_entity_um_t
*
entity
,
nr_rlc_sdu_segment_t
*
sdu
)
{
int
header_size
=
1
;
/* if SN to be included then one more byte if SN field length is 12 */
if
(
!
(
sdu
->
is_first
&&
sdu
->
is_last
)
&&
entity
->
sn_field_length
==
12
)
header_size
++
;
/* two more bytes for SO if SDU segment is not the first */
if
(
!
sdu
->
is_first
)
header_size
+=
2
;
return
header_size
;
}
/*************************************************************************/
/*************************************************************************/
/* PDU RX functions */
/* PDU RX functions */
/*************************************************************************/
/*************************************************************************/
...
@@ -375,20 +389,6 @@ static int serialize_sdu(nr_rlc_entity_um_t *entity,
...
@@ -375,20 +389,6 @@ static int serialize_sdu(nr_rlc_entity_um_t *entity,
return
encoder
.
byte
+
sdu
->
size
;
return
encoder
.
byte
+
sdu
->
size
;
}
}
/* for a given SDU/SDU segment, computes the corresponding PDU header size */
static
int
compute_pdu_header_size
(
nr_rlc_entity_um_t
*
entity
,
nr_rlc_sdu_segment_t
*
sdu
)
{
int
header_size
=
1
;
/* if SN to be included then one more byte if SN field length is 12 */
if
(
!
(
sdu
->
is_first
&&
sdu
->
is_last
)
&&
entity
->
sn_field_length
==
12
)
header_size
++
;
/* two more bytes for SO if SDU segment is not the first */
if
(
!
sdu
->
is_first
)
header_size
+=
2
;
return
header_size
;
}
/* resize SDU/SDU segment for the corresponding PDU to fit into 'pdu_size'
/* resize SDU/SDU segment for the corresponding PDU to fit into 'pdu_size'
* bytes
* bytes
* - modifies SDU/SDU segment to become an SDU segment
* - modifies SDU/SDU segment to become an SDU segment
...
@@ -462,8 +462,12 @@ static int generate_tx_pdu(nr_rlc_entity_um_t *entity, char *buffer, int size)
...
@@ -462,8 +462,12 @@ static int generate_tx_pdu(nr_rlc_entity_um_t *entity, char *buffer, int size)
/* assign SN to SDU */
/* assign SN to SDU */
sdu
->
sdu
->
sn
=
entity
->
tx_next
;
sdu
->
sdu
->
sn
=
entity
->
tx_next
;
/* segment if necessary */
pdu_size
=
pdu_header_size
+
sdu
->
size
;
pdu_size
=
pdu_header_size
+
sdu
->
size
;
/* update buffer status */
entity
->
common
.
bstatus
.
tx_size
-=
pdu_size
;
/* segment if necessary */
if
(
pdu_size
>
size
)
{
if
(
pdu_size
>
size
)
{
nr_rlc_sdu_segment_t
*
next_sdu
;
nr_rlc_sdu_segment_t
*
next_sdu
;
next_sdu
=
resegment
(
sdu
,
entity
,
size
);
next_sdu
=
resegment
(
sdu
,
entity
,
size
);
...
@@ -474,6 +478,9 @@ static int generate_tx_pdu(nr_rlc_entity_um_t *entity, char *buffer, int size)
...
@@ -474,6 +478,9 @@ static int generate_tx_pdu(nr_rlc_entity_um_t *entity, char *buffer, int size)
entity
->
tx_list
=
next_sdu
;
entity
->
tx_list
=
next_sdu
;
if
(
entity
->
tx_end
==
NULL
)
if
(
entity
->
tx_end
==
NULL
)
entity
->
tx_end
=
entity
->
tx_list
;
entity
->
tx_end
=
entity
->
tx_list
;
/* update buffer status */
entity
->
common
.
bstatus
.
tx_size
+=
compute_pdu_header_size
(
entity
,
next_sdu
)
+
next_sdu
->
size
;
}
}
/* update tx_next if the SDU is an SDU segment and is the last */
/* update tx_next if the SDU is an SDU segment and is the last */
...
@@ -488,24 +495,6 @@ static int generate_tx_pdu(nr_rlc_entity_um_t *entity, char *buffer, int size)
...
@@ -488,24 +495,6 @@ static int generate_tx_pdu(nr_rlc_entity_um_t *entity, char *buffer, int size)
return
ret
;
return
ret
;
}
}
/* Pretend to serialize all the SDUs in a list and return the size
* of all the PDUs it would produce, limited to 'maxsize'.
* Used for buffer status reporting.
*/
static
int
tx_list_size
(
nr_rlc_entity_um_t
*
entity
,
nr_rlc_sdu_segment_t
*
l
,
int
maxsize
)
{
int
ret
=
0
;
while
(
l
!=
NULL
&&
ret
<
maxsize
)
{
ret
+=
compute_pdu_header_size
(
entity
,
l
)
+
l
->
size
;
l
=
l
->
next
;
}
if
(
ret
>
maxsize
)
ret
=
maxsize
;
return
ret
;
}
nr_rlc_entity_buffer_status_t
nr_rlc_entity_um_buffer_status
(
nr_rlc_entity_buffer_status_t
nr_rlc_entity_um_buffer_status
(
nr_rlc_entity_t
*
_entity
,
int
maxsize
)
nr_rlc_entity_t
*
_entity
,
int
maxsize
)
{
{
...
@@ -513,7 +502,7 @@ nr_rlc_entity_buffer_status_t nr_rlc_entity_um_buffer_status(
...
@@ -513,7 +502,7 @@ nr_rlc_entity_buffer_status_t nr_rlc_entity_um_buffer_status(
nr_rlc_entity_buffer_status_t
ret
;
nr_rlc_entity_buffer_status_t
ret
;
ret
.
status_size
=
0
;
ret
.
status_size
=
0
;
ret
.
tx_size
=
tx_list_size
(
entity
,
entity
->
tx_list
,
maxsize
)
;
ret
.
tx_size
=
entity
->
common
.
bstatus
.
tx_size
;
ret
.
retx_size
=
0
;
ret
.
retx_size
=
0
;
return
ret
;
return
ret
;
...
@@ -555,6 +544,10 @@ void nr_rlc_entity_um_recv_sdu(nr_rlc_entity_t *_entity,
...
@@ -555,6 +544,10 @@ void nr_rlc_entity_um_recv_sdu(nr_rlc_entity_t *_entity,
sdu
=
nr_rlc_new_sdu
(
buffer
,
size
,
sdu_id
);
sdu
=
nr_rlc_new_sdu
(
buffer
,
size
,
sdu_id
);
nr_rlc_sdu_segment_list_append
(
&
entity
->
tx_list
,
&
entity
->
tx_end
,
sdu
);
nr_rlc_sdu_segment_list_append
(
&
entity
->
tx_list
,
&
entity
->
tx_end
,
sdu
);
/* update buffer status */
entity
->
common
.
bstatus
.
tx_size
+=
compute_pdu_header_size
(
entity
,
sdu
)
+
sdu
->
size
;
}
}
/*************************************************************************/
/*************************************************************************/
...
@@ -650,6 +643,10 @@ void nr_rlc_entity_um_discard_sdu(nr_rlc_entity_t *_entity, int sdu_id)
...
@@ -650,6 +643,10 @@ void nr_rlc_entity_um_discard_sdu(nr_rlc_entity_t *_entity, int sdu_id)
entity
->
tx_end
=
NULL
;
entity
->
tx_end
=
NULL
;
}
}
/* update buffer status */
entity
->
common
.
bstatus
.
tx_size
-=
compute_pdu_header_size
(
entity
,
cur
)
+
cur
->
size
;
nr_rlc_free_sdu_segment
(
cur
);
nr_rlc_free_sdu_segment
(
cur
);
}
}
...
@@ -682,6 +679,8 @@ static void clear_entity(nr_rlc_entity_um_t *entity)
...
@@ -682,6 +679,8 @@ static void clear_entity(nr_rlc_entity_um_t *entity)
entity
->
tx_list
=
NULL
;
entity
->
tx_list
=
NULL
;
entity
->
tx_end
=
NULL
;
entity
->
tx_end
=
NULL
;
entity
->
tx_size
=
0
;
entity
->
tx_size
=
0
;
entity
->
common
.
bstatus
.
tx_size
=
0
;
}
}
void
nr_rlc_entity_um_reestablishment
(
nr_rlc_entity_t
*
_entity
)
void
nr_rlc_entity_um_reestablishment
(
nr_rlc_entity_t
*
_entity
)
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
d4e31183
...
@@ -81,13 +81,32 @@ int handle_dci(module_id_t module_id, int cc_id, unsigned int gNB_index, frame_t
...
@@ -81,13 +81,32 @@ int handle_dci(module_id_t module_id, int cc_id, unsigned int gNB_index, frame_t
// Note: sdu should always be processed because data and timing advance updates are transmitted by the UE
// Note: sdu should always be processed because data and timing advance updates are transmitted by the UE
int8_t
handle_dlsch
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
,
int
pdu_id
){
int8_t
handle_dlsch
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
,
int
pdu_id
){
update_harq_status
(
dl_info
,
pdu_id
);
update_harq_status
(
dl_info
->
module_id
,
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
harq_pid
,
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
ack_nack
);
if
(
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
ack_nack
)
if
(
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
ack_nack
)
nr_ue_send_sdu
(
dl_info
,
ul_time_alignment
,
pdu_id
);
nr_ue_send_sdu
(
dl_info
,
ul_time_alignment
,
pdu_id
);
return
0
;
return
0
;
}
}
void
update_harq_status
(
module_id_t
module_id
,
uint8_t
harq_pid
,
uint8_t
ack_nack
)
{
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_id
);
NR_UE_HARQ_STATUS_t
*
current_harq
=
&
mac
->
dl_harq_info
[
harq_pid
];
if
(
current_harq
->
active
)
{
current_harq
->
ack
=
ack_nack
;
current_harq
->
ack_received
=
true
;
LOG_D
(
PHY
,
"Updating harq_status for harq_id %d,ack/nak %d
\n
"
,
harq_pid
,
current_harq
->
ack
);
}
else
{
//shouldn't get here
LOG_E
(
MAC
,
"Trying to process acknack for an inactive harq process (%d)
\n
"
,
harq_pid
);
}
}
int
nr_ue_ul_indication
(
nr_uplink_indication_t
*
ul_info
){
int
nr_ue_ul_indication
(
nr_uplink_indication_t
*
ul_info
){
NR_UE_L2_STATE_t
ret
;
NR_UE_L2_STATE_t
ret
;
...
...
openair2/RRC/NR/nr_rrc_proto.h
View file @
d4e31183
...
@@ -79,6 +79,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
...
@@ -79,6 +79,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
int
scg_id
,
int
scg_id
,
int
servCellIndex
,
int
servCellIndex
,
int
dl_antenna_ports
,
int
dl_antenna_ports
,
int
minRXTXTIMEpdsch
,
int
do_csirs
,
int
do_csirs
,
int
initial_csi_index
,
int
initial_csi_index
,
int
uid
);
int
uid
);
...
@@ -90,6 +91,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
...
@@ -90,6 +91,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
NR_RRCReconfiguration_IEs_t
*
reconfig
,
NR_RRCReconfiguration_IEs_t
*
reconfig
,
NR_CellGroupConfig_t
*
secondaryCellGroup
,
NR_CellGroupConfig_t
*
secondaryCellGroup
,
int
dl_antenna_ports
,
int
dl_antenna_ports
,
int
minRXTXTIMEpdsch
,
int
do_csirs
,
int
do_csirs
,
int
initial_csi_index
,
int
initial_csi_index
,
int
uid
);
int
uid
);
...
...
openair2/RRC/NR/rrc_gNB_nsa.c
View file @
d4e31183
...
@@ -241,6 +241,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
...
@@ -241,6 +241,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
reconfig_ies
,
reconfig_ies
,
ue_context_p
->
ue_context
.
secondaryCellGroup
,
ue_context_p
->
ue_context
.
secondaryCellGroup
,
carrier
->
pdsch_AntennaPorts
,
carrier
->
pdsch_AntennaPorts
,
carrier
->
minRXTXTIMEpdsch
,
carrier
->
do_CSIRS
,
carrier
->
do_CSIRS
,
carrier
->
initial_csi_index
[
ue_context_p
->
local_uid
+
1
],
carrier
->
initial_csi_index
[
ue_context_p
->
local_uid
+
1
],
ue_context_p
->
local_uid
);
ue_context_p
->
local_uid
);
...
@@ -250,6 +251,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
...
@@ -250,6 +251,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
reconfig_ies
,
reconfig_ies
,
ue_context_p
->
ue_context
.
secondaryCellGroup
,
ue_context_p
->
ue_context
.
secondaryCellGroup
,
carrier
->
pdsch_AntennaPorts
,
carrier
->
pdsch_AntennaPorts
,
carrier
->
minRXTXTIMEpdsch
,
carrier
->
do_CSIRS
,
carrier
->
do_CSIRS
,
carrier
->
initial_csi_index
[
ue_context_p
->
local_uid
+
1
],
carrier
->
initial_csi_index
[
ue_context_p
->
local_uid
+
1
],
ue_context_p
->
local_uid
);
ue_context_p
->
local_uid
);
...
...
openair2/RRC/NR/rrc_gNB_reconfig.c
View file @
d4e31183
...
@@ -55,6 +55,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
...
@@ -55,6 +55,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
int
scg_id
,
int
scg_id
,
int
servCellIndex
,
int
servCellIndex
,
int
dl_antenna_ports
,
int
dl_antenna_ports
,
int
minRXTXTIMEpdsch
,
int
do_csirs
,
int
do_csirs
,
int
initial_csi_index
,
int
initial_csi_index
,
int
uid
)
{
int
uid
)
{
...
@@ -945,7 +946,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
...
@@ -945,7 +946,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
long
*
delay
[
8
];
long
*
delay
[
8
];
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
delay
[
i
]
=
calloc
(
1
,
sizeof
(
*
delay
[
i
]));
delay
[
i
]
=
calloc
(
1
,
sizeof
(
*
delay
[
i
]));
*
delay
[
i
]
=
(
i
<
6
)
?
(
i
+
2
)
:
0
;
*
delay
[
i
]
=
i
+
minRXTXTIMEpdsch
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
dl_DataToUL_ACK
->
list
,
delay
[
i
]);
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
dl_DataToUL_ACK
->
list
,
delay
[
i
]);
}
}
pucch_Config
->
spatialRelationInfoToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
spatialRelationInfoToAddModList
));
pucch_Config
->
spatialRelationInfoToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
spatialRelationInfoToAddModList
));
...
@@ -1348,6 +1349,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
...
@@ -1348,6 +1349,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
NR_RRCReconfiguration_IEs_t
*
reconfig
,
NR_RRCReconfiguration_IEs_t
*
reconfig
,
NR_CellGroupConfig_t
*
secondaryCellGroup
,
NR_CellGroupConfig_t
*
secondaryCellGroup
,
int
dl_antenna_ports
,
int
dl_antenna_ports
,
int
minRXTXTIMEpdsch
,
int
do_csirs
,
int
do_csirs
,
int
initial_csi_index
,
int
initial_csi_index
,
int
uid
)
{
int
uid
)
{
...
@@ -1363,6 +1365,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
...
@@ -1363,6 +1365,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
1
,
1
,
1
,
1
,
dl_antenna_ports
,
dl_antenna_ports
,
minRXTXTIMEpdsch
,
do_csirs
,
do_csirs
,
initial_csi_index
,
initial_csi_index
,
uid
);
uid
);
...
...
openair2/X2AP/x2ap_eNB_handler.c
View file @
d4e31183
...
@@ -512,8 +512,8 @@ x2ap_eNB_handle_x2_setup_request(instance_t instance,
...
@@ -512,8 +512,8 @@ x2ap_eNB_handle_x2_setup_request(instance_t instance,
return
x2ap_eNB_generate_x2_setup_response
(
instance_p
,
x2ap_eNB_data
);
return
x2ap_eNB_generate_x2_setup_response
(
instance_p
,
x2ap_eNB_data
);
}
}
const
char
*
X2AP_
cause_str1
[
4
]
=
{
"radioNetwork"
,
"transport"
,
"protocol"
,
"misc
"
};
const
char
*
X2AP_
ResetRequest_str
[
2
]
=
{
"X2AP_ResetRequest_IEs__value_PR_Cause"
,
"X2AP_ResetRequest_IEs__value_PR_InterfaceInstanceIndication
"
};
const
char
*
X2AP_case_str_radio
[
50
]
=
{
"
X2AP_CauseRadioNetwork_handover_desirable_for_radio_reasons"
,
const
char
*
X2AP_case_str_radio
[
50
]
=
{
"X2AP_CauseRadioNetwork_handover_desirable_for_radio_reasons"
,
"X2AP_CauseRadioNetwork_time_critical_handover"
,
"X2AP_CauseRadioNetwork_time_critical_handover"
,
"X2AP_CauseRadioNetwork_resource_optimisation_handover"
,
"X2AP_CauseRadioNetwork_resource_optimisation_handover"
,
"X2AP_CauseRadioNetwork_reduce_load_in_serving_cell"
,
"X2AP_CauseRadioNetwork_reduce_load_in_serving_cell"
,
...
@@ -617,8 +617,9 @@ x2ap_eNB_handle_x2_reset_request(instance_t instance,
...
@@ -617,8 +617,9 @@ x2ap_eNB_handle_x2_reset_request(instance_t instance,
X2AP_ERROR
(
"%s %d: ie is a NULL pointer
\n
"
,
__FILE__
,
__LINE__
);
X2AP_ERROR
(
"%s %d: ie is a NULL pointer
\n
"
,
__FILE__
,
__LINE__
);
return
-
1
;
return
-
1
;
}
else
{
}
else
{
AssertFatal
(
ie
->
value
.
present
<=
X2AP_Cause_PR_misc
&&
ie
->
value
.
present
>
0
,
"Cause value %d, is impossible
\n
"
,
ie
->
value
.
present
);
AssertFatal
(
ie
->
value
.
present
<=
X2AP_ResetRequest_IEs__value_PR_InterfaceInstanceIndication
&&
ie
->
value
.
present
>
0
,
LOG_I
(
X2AP
,
"Received X2AP Reset Request with Cause Type %s
\n
"
,
X2AP_cause_str1
[
ie
->
value
.
present
-
1
]);
"Cause value %d, is impossible
\n
"
,
ie
->
value
.
present
);
LOG_I
(
X2AP
,
"Received X2AP Reset Request with Cause Type %s
\n
"
,
X2AP_ResetRequest_str
[
ie
->
value
.
present
-
1
]);
}
}
X2AP_DEBUG
(
"Adding eNB to the list of associated eNBs
\n
"
);
X2AP_DEBUG
(
"Adding eNB to the list of associated eNBs
\n
"
);
...
...
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