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
ZhouShuya
OpenXG-RAN
Commits
26b6d87f
Commit
26b6d87f
authored
Apr 25, 2021
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into integration_2021_wk13_b
parents
089246c6
5d834473
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
757 additions
and
54 deletions
+757
-54
ci-scripts/Jenkinsfile-git-dashboard
ci-scripts/Jenkinsfile-git-dashboard
+45
-0
ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
...cripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
+305
-0
ci-scripts/ran.py
ci-scripts/ran.py
+25
-13
ci-scripts/ran_dashboard.py
ci-scripts/ran_dashboard.py
+275
-0
ci-scripts/xml_files/gnb_phytest_usrp_run.xml
ci-scripts/xml_files/gnb_phytest_usrp_run.xml
+53
-0
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+4
-2
common/utils/T/Makefile
common/utils/T/Makefile
+1
-1
executables/nr-gnb.c
executables/nr-gnb.c
+23
-15
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
+2
-2
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+2
-2
openair1/PHY/TOOLS/time_meas.c
openair1/PHY/TOOLS/time_meas.c
+3
-2
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+1
-0
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+5
-0
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+2
-2
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+0
-2
openair2/GNB_APP/gnb_paramdef.h
openair2/GNB_APP/gnb_paramdef.h
+5
-5
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+1
-0
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_uci.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+2
-6
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+2
-1
No files found.
ci-scripts/Jenkinsfile-git-dashboard
0 → 100644
View file @
26b6d87f
#
!
/bin/
groovy
/*
* 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
*/
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
// Location of the python executor node shall be in the same subnet as the others servers
def
pythonExecutor
=
params
.
pythonExecutor
pipeline
{
agent
{
label
pythonExecutor
}
stages
{
stage
(
"gDashboard"
)
{
steps
{
script
{
//retrieve MR data from gitlab and export to gSheet
sh
returnStdout:
true
,
script:
'python3 ci-scripts/ran_dashboard.py'
}
}
}
}
}
ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
0 → 100644
View file @
26b6d87f
Active_gNBs
= (
"gNB-Eurecom-5GNRBox"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
gNBs
=
(
{
//////////
Identification
parameters
:
gNB_ID
=
0
xe00
;
cell_type
=
"CELL_MACRO_GNB"
;
gNB_name
=
"gNB-Eurecom-5GNRBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
222
;
mnc
=
01
;
mnc_length
=
2
;});
tr_s_preference
=
"local_mac"
//////////
Physical
parameters
:
ssb_SubcarrierOffset
=
31
; //
0
;
pdsch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
pusch_TargetSNRx10
=
200
;
pucch_TargetSNRx10
=
200
;
servingCellConfigCommon
= (
{
#spCellConfigCommon
physCellId
=
0
;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 84 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB
=
641272
; //
641032
;
#641968; 641968=start of ssb at 3600MHz + 82 RBs 641032=center of SSB at center of cell
dl_frequencyBand
=
78
;
# this is 3600 MHz
dl_absoluteFrequencyPointA
=
640000
;
#scs-SpecificCarrierList
dl_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing
=
1
;
dl_carrierBandwidth
=
106
;
#initialDownlinkBWP
#genericParameters
# this is RBstart=84,L=13 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth
=
6368
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
1
;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
0
;
initialDLBWPsearchSpaceZero
=
0
;
#pdsch-ConfigCommon
#pdschTimeDomainAllocationList (up to 16 entries)
initialDLBWPk0_0
=
0
;
#initialULBWPmappingType
#0=typeA,1=typeB
initialDLBWPmappingType_0
=
0
;
#this is SS=1,L=13
initialDLBWPstartSymbolAndLength_0
=
40
;
initialDLBWPk0_1
=
0
;
initialDLBWPmappingType_1
=
0
;
#this is SS=2,L=12
initialDLBWPstartSymbolAndLength_1
=
53
;
initialDLBWPk0_2
=
0
;
initialDLBWPmappingType_2
=
0
;
#this is SS=1,L=12
initialDLBWPstartSymbolAndLength_2
=
54
;
initialDLBWPk0_3
=
0
;
initialDLBWPmappingType_3
=
0
;
#this is SS=1,L=4 //5 (4 is for 43, 5 is for 57)
initialDLBWPstartSymbolAndLength_3
=
57
; //
43
; //
57
;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand
=
78
;
#scs-SpecificCarrierList
ul_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing
=
1
;
ul_carrierBandwidth
=
106
;
pMax
=
20
;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth
=
6368
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing
=
1
;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex
=
98
;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM
=
0
;
prach_msg1_FrequencyStart
=
0
;
zeroCorrelationZoneConfig
=
13
;
preambleReceivedTargetPower
= -
100
;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax
=
6
;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep
=
1
;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow
=
5
;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
=
4
;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
14
; //
15
;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer
=
7
;
rsrp_ThresholdSSB
=
19
;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR
=
2
;
prach_RootSequenceIndex
=
1
;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing
=
1
,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig
=
0
,
# pusch-ConfigCommon (up to 16 elements)
initialULBWPk2_0
=
2
;
initialULBWPmappingType_0
=
1
# this is SS=0 L=11
initialULBWPstartSymbolAndLength_0
=
55
;
initialULBWPk2_1
=
2
;
initialULBWPmappingType_1
=
1
;
# this is SS=0 L=12
initialULBWPstartSymbolAndLength_1
=
69
;
initialULBWPk2_2
=
7
;
initialULBWPmappingType_2
=
1
;
# this is SS=10 L=4
initialULBWPstartSymbolAndLength_2
=
52
;
msg3_DeltaPreamble
=
1
;
p0_NominalWithGrant
=-
90
;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping
=
0
;
hoppingId
=
40
;
p0_nominal
= -
90
;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
ssb_PositionsInBurst_Bitmap
=
1
;
#0x80;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell
=
2
;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing
=
1
;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing
=
1
;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity
=
6
;
nrofDownlinkSlots
=
7
; //
8
; //
7
;
nrofDownlinkSymbols
=
6
; //
0
; //
6
;
nrofUplinkSlots
=
2
;
nrofUplinkSymbols
=
4
; //
0
; //
4
;
ssPBCH_BlockPower
= -
25
;
}
);
# ------- SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
};
//////////
MME
parameters
:
mme_ip_address
= ( {
ipv4
=
"CI_MME_IP_ADDR"
;
ipv6
=
"192:168:30::17"
;
port
=
36412
;
active
=
"yes"
;
preference
=
"ipv4"
;
}
);
///
X2
enable_x2
=
"yes"
;
t_reloc_prep
=
1000
; /*
unit
:
millisecond
*/
tx2_reloc_overall
=
2000
; /*
unit
:
millisecond
*/
t_dc_prep
=
1000
; /*
unit
:
millisecond
*/
t_dc_overall
=
2000
; /*
unit
:
millisecond
*/
target_enb_x2_ip_address
= (
{
ipv4
=
"CI_FR1_CTL_ENB_IP_ADDR"
;
ipv6
=
"192:168:30::17"
;
preference
=
"ipv4"
;
}
);
NETWORK_INTERFACES
:
{
GNB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
GNB_IPV4_ADDRESS_FOR_S1_MME
=
"CI_GNB_IP_ADDR"
;
GNB_INTERFACE_NAME_FOR_S1U
=
"eth0"
;
GNB_IPV4_ADDRESS_FOR_S1U
=
"CI_GNB_IP_ADDR"
;
GNB_PORT_FOR_S1U
=
2152
;
# Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C
=
"CI_GNB_IP_ADDR"
;
GNB_PORT_FOR_X2C
=
36422
;
# Spec 36422
};
}
);
MACRLCs
= (
{
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
}
);
L1s
= (
{
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
pusch_proc_threads
=
6
;
}
);
RUs
= (
{
local_rf
=
"yes"
nb_tx
=
1
nb_rx
=
1
att_tx
=
0
att_rx
=
0
;
bands
= [
7
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
75
;
#114
eNB_instances
= [
0
];
sdr_addrs
=
"addr=192.168.80.50"
clock_src
=
"internal"
}
);
THREAD_STRUCT
= (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_RU_L1_TRX_SPLIT"
;
//
parallel_config
=
"PARALLEL_SINGLE_THREAD"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
);
log_config
:
{
global_log_level
=
"info"
;
global_log_verbosity
=
"medium"
;
hw_log_level
=
"info"
;
hw_log_verbosity
=
"medium"
;
phy_log_level
=
"info"
;
phy_log_verbosity
=
"medium"
;
mac_log_level
=
"info"
;
mac_log_verbosity
=
"high"
;
rlc_log_level
=
"info"
;
rlc_log_verbosity
=
"medium"
;
pdcp_log_level
=
"info"
;
pdcp_log_verbosity
=
"medium"
;
rrc_log_level
=
"info"
;
rrc_log_verbosity
=
"medium"
;
};
uicc
: {
opc
=
"testopc"
;
};
ci-scripts/ran.py
View file @
26b6d87f
...
...
@@ -694,8 +694,8 @@ class RANManagement():
NSA_RAPROC_PUSCH_check
=
0
#dlsch and ulsch statistics (dictionary)
dlsch_ulsch_stats
=
{}
#
count "L1 thread not ready" msg
L1_thread_not_ready_cnt
=
0
#
real time statistics (dictionary)
real_time_stats
=
{}
#count "problem receiving samples" msg
pb_receiving_samples_cnt
=
0
...
...
@@ -857,16 +857,21 @@ class RANManagement():
#keys below are the markers we are loooking for, loop over this keys list
#everytime these markers are found in the log file, the previous ones are overwritten in the dict
#eventually we record and print only the last occurence
keys
=
{
'
dlsch_rounds'
,
'dlsch_total_bytes'
,
'ulsch_rounds'
,
'ulsch_total_bytes_scheduled
'
}
keys
=
{
'
UE ID'
,
'dlsch_rounds'
,
'dlsch_total_bytes'
,
'ulsch_rounds'
,
'ulsch_total_bytes_scheduled'
,
'scheduling timing stats
'
}
for
k
in
keys
:
result
=
re
.
search
(
k
,
line
)
if
result
is
not
None
:
#remove 1- all useless char before relevant info (ulsch or dlsch) 2- trailing char
dlsch_ulsch_stats
[
k
]
=
re
.
sub
(
r'^.*\]\s+'
,
r''
,
line
.
rstrip
())
#count "L1 thread not ready" msg
result
=
re
.
search
(
'\[PHY\]\s+L1_thread isn
\'
t ready'
,
str
(
line
))
if
result
is
not
None
:
L1_thread_not_ready_cnt
+=
1
#real time statistics
#same method as above
keys
=
{
'feprx'
,
'feptx_prec'
,
'feptx_ofdm'
,
'feptx_total'
,
'L1 Tx processing'
,
'DLSCH encoding'
,
'L1 Rx processing'
,
'PUSCH inner-receiver'
,
'PUSCH decoding'
}
for
k
in
keys
:
result
=
re
.
search
(
k
,
line
)
if
result
is
not
None
:
#remove 1- all useless char before relevant info 2- trailing char
tmp
=
re
.
match
(
rf'^.*?(\b
{
k
}
\b.*)'
,
line
.
rstrip
())
#from python 3.6 we can use literal string interpolation for the variable k, using rf' in the regex
real_time_stats
[
k
]
=
tmp
.
group
(
1
)
#count "problem receiving samples" msg
result
=
re
.
search
(
'\[PHY\]\s+problem receiving samples'
,
str
(
line
))
if
result
is
not
None
:
...
...
@@ -897,15 +902,10 @@ class RANManagement():
statMsg
=
'[RAPROC] PUSCH with TC_RNTI message check for '
+
nodeB_prefix
+
'NB : PASS '
htmlMsg
=
statMsg
+
'
\n
'
else
:
statMsg
=
'[RAPROC] PUSCH with TC_RNTI message check for '
+
nodeB_prefix
+
'NB : FAIL '
statMsg
=
'[RAPROC] PUSCH with TC_RNTI message check for '
+
nodeB_prefix
+
'NB : FAIL
or not relevant
'
htmlMsg
=
statMsg
+
'
\n
'
logging
.
debug
(
statMsg
)
htmleNBFailureMsg
+=
htmlMsg
#L1 thread not ready log
statMsg
=
'[PHY] L1 thread is not ready msg count = '
+
str
(
L1_thread_not_ready_cnt
)
htmlMsg
=
statMsg
+
'
\n
'
logging
.
debug
(
statMsg
)
htmleNBFailureMsg
+=
htmlMsg
#problem receiving samples log
statMsg
=
'[PHY] problem receiving samples msg count = '
+
str
(
pb_receiving_samples_cnt
)
htmlMsg
=
statMsg
+
'
\n
'
...
...
@@ -920,6 +920,18 @@ class RANManagement():
logging
.
debug
(
dlsch_ulsch_stats
[
key
])
htmleNBFailureMsg
+=
statMsg
#real time statistics statistics
if
len
(
real_time_stats
)
!=
0
:
#check if dictionary is not empty
statMsg
=
''
for
key
in
real_time_stats
:
#for each dictionary key
statMsg
+=
real_time_stats
[
key
]
+
'
\n
'
logging
.
debug
(
real_time_stats
[
key
])
htmleNBFailureMsg
+=
statMsg
else
:
statMsg
=
'No real time stats found in the log file
\n
'
logging
.
debug
(
'No real time stats found in the log file'
)
htmleNBFailureMsg
+=
statMsg
if
uciStatMsgCount
>
0
:
statMsg
=
nodeB_prefix
+
'NB showed '
+
str
(
uciStatMsgCount
)
+
' "uci->stat" message(s)'
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
...
...
ci-scripts/ran_dashboard.py
0 → 100644
View file @
26b6d87f
#/*
# * 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
# */
#---------------------------------------------------------------------
# Merge Requests Dashboard for RAN on googleSheet
#
# Required Python Version
# Python 3.x
#
#---------------------------------------------------------------------
#-----------------------------------------------------------
# Import
#-----------------------------------------------------------
#import google spreadsheet API
import
gspread
from
oauth2client.service_account
import
ServiceAccountCredentials
import
subprocess
import
shlex
#lexical analysis
import
json
#json structures
import
datetime
#now() and date formating
from
datetime
import
datetime
#-----------------------------------------------------------
# Class Declaration
#-----------------------------------------------------------
class
gDashboard
:
def
__init__
(
self
,
creds_file
,
spreadsheet
,
worksheet
):
#"creds.json", 'OAI RAN Dashboard', 'MR Status'
self
.
scope
=
[
"https://spreadsheets.google.com/feeds"
,
'https://www.googleapis.com/auth/spreadsheets'
,
"https://www.googleapis.com/auth/drive.file"
,
"https://www.googleapis.com/auth/drive"
]
self
.
creds
=
ServiceAccountCredentials
.
from_json_keyfile_name
(
creds_file
,
self
.
scope
)
self
.
client
=
gspread
.
authorize
(
self
.
creds
)
#spreadsheet
self
.
ss
=
self
.
client
.
open
(
spreadsheet
)
#worksheet
self
.
sheet
=
self
.
ss
.
worksheet
(
worksheet
)
self
.
ss
.
del_worksheet
(
self
.
sheet
)
#start by deleting the old sheet
self
.
sheet
=
self
.
ss
.
add_worksheet
(
title
=
worksheet
,
rows
=
"100"
,
cols
=
"20"
)
#create a new one
self
.
d
=
{}
#data dictionary
def
fetchData
(
self
,
cmd
):
#cmd="""curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100" """
process
=
subprocess
.
Popen
(
shlex
.
split
(
cmd
),
stdout
=
subprocess
.
PIPE
)
output
=
process
.
stdout
.
readline
()
tmp
=
output
.
decode
(
"utf-8"
)
self
.
d
=
json
.
loads
(
tmp
)
def
gBuild
(
self
,
destinationSheetName
):
#line 1 : update date/time, format dd/mm/YY H:M:S
now
=
datetime
.
now
()
dt_string
=
"Update : "
+
now
.
strftime
(
"%d/%m/%Y %H:%M"
)
row
=
[
dt_string
]
self
.
sheet
.
insert_row
(
row
,
index
=
1
,
value_input_option
=
'RAW'
)
#line 2 empty
#line 3 is for the column names
i
=
3
row
=
[
"MR"
,
"Created_at"
,
"Author"
,
"Title"
,
"Assignee"
,
"Reviewer"
,
"CAN START"
,
"IN PROGRESS"
,
"COMPLETED"
,
"OK MERGE"
,
"Merge conflicts"
]
self
.
sheet
.
insert_row
(
row
,
index
=
i
,
value_input_option
=
'RAW'
)
#line 4 onward, MR data lines
for
x
in
range
(
len
(
self
.
d
)):
i
=
i
+
1
date_time_str
=
self
.
d
[
x
][
'created_at'
]
date_time_obj
=
datetime
.
strptime
(
date_time_str
,
'%Y-%m-%dT%H:%M:%S.%fZ'
)
milestone1
=
milestone2
=
milestone3
=
milestone4
=
""
if
self
.
d
[
x
][
'milestone'
]
!=
None
:
if
self
.
d
[
x
][
'milestone'
][
'title'
]
==
"REVIEW_CAN_START"
:
milestone1
=
"X"
elif
self
.
d
[
x
][
'milestone'
][
'title'
]
==
"REVIEW_IN_PROGRESS"
:
milestone2
=
"X"
elif
self
.
d
[
x
][
'milestone'
][
'title'
]
==
"REVIEW_COMPLETED_AND_APPROVED"
:
milestone3
=
"X"
elif
self
.
d
[
x
][
'milestone'
][
'title'
]
==
"OK_TO_BE_MERGED"
:
milestone4
=
"X"
else
:
pass
else
:
pass
#check if empty or not
if
self
.
d
[
x
][
'assignee'
]
!=
None
:
assignee
=
str
(
self
.
d
[
x
][
'assignee'
][
'name'
])
else
:
assignee
=
""
#check if empty or not
if
len
(
self
.
d
[
x
][
'reviewers'
])
!=
0
:
reviewer
=
str
(
self
.
d
[
x
][
'reviewers'
][
0
][
'name'
])
else
:
reviewer
=
""
if
self
.
d
[
x
][
'has_conflicts'
]
==
True
:
conflicts
=
"YES"
else
:
conflicts
=
""
#build final row to be inserted, the first column is left empty for now, will be filled afterward with hyperlinks to gitlab MR
row
=
[
""
,
str
(
date_time_obj
.
date
()),
str
(
self
.
d
[
x
][
'author'
][
'name'
]),
str
(
self
.
d
[
x
][
'title'
]),
\
assignee
,
reviewer
,
\
milestone1
,
milestone2
,
milestone3
,
milestone4
,
conflicts
]
#insert the row to worksheet
self
.
sheet
.
insert_row
(
row
,
index
=
i
,
value_input_option
=
'RAW'
)
#add MR hyperlinks in a list of requests to be sent as one update batch; this to save API calls (quotas)
i
=
3
requests
=
[]
for
x
in
range
(
len
(
self
.
d
)):
rowIndex
=
i
colIndex
=
0
hyperlink
=
'
\"
'
+
"https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/"
+
str
(
self
.
d
[
x
][
'iid'
])
+
'
\"
'
text
=
'
\"
'
+
str
(
self
.
d
[
x
][
'iid'
])
+
'"'
requests
.
append
(
self
.
addHyperlink
(
hyperlink
,
text
,
destinationSheetName
,
rowIndex
,
colIndex
))
i
=
i
+
1
body
=
{
"requests"
:
requests
}
self
.
ss
.
batch_update
(
body
)
def
addHyperlink
(
self
,
hyperlink
,
text
,
destinationSheetName
,
rowIndex
,
colIndex
):
sheetId
=
self
.
ss
.
worksheet
(
destinationSheetName
).
_properties
[
'sheetId'
]
request
=
\
{
"updateCells"
:
{
"rows"
:
[
{
"values"
:
[
{
"userEnteredValue"
:
{
"formulaValue"
:
"=HYPERLINK({},{})"
.
format
(
hyperlink
,
text
)
}
}
]
}
],
"fields"
:
"userEnteredValue"
,
"start"
:
{
"sheetId"
:
sheetId
,
"rowIndex"
:
rowIndex
,
"columnIndex"
:
colIndex
}
}
}
return
request
def
gFormat
(
self
,
sourceSheetName
,
destinationSheetName
):
# "Formating" , "MR Status"
#the requests are appended in a list of requests to be sent as one update batch; this to save API calls (quotas)
#copy formating template
sourceSheetId
=
self
.
ss
.
worksheet
(
sourceSheetName
).
_properties
[
'sheetId'
]
destinationSheetId
=
self
.
ss
.
worksheet
(
destinationSheetName
).
_properties
[
'sheetId'
]
requests
=
[]
requests
.
append
(
{
"copyPaste"
:
{
"source"
:
{
"sheetId"
:
sourceSheetId
,
"startRowIndex"
:
0
,
"endRowIndex"
:
40
,
"startColumnIndex"
:
0
,
"endColumnIndex"
:
12
},
"destination"
:
{
"sheetId"
:
destinationSheetId
,
"startRowIndex"
:
0
,
"endRowIndex"
:
40
,
"startColumnIndex"
:
0
,
"endColumnIndex"
:
12
},
"pasteType"
:
"PASTE_FORMAT"
}
}
)
#resize columns fit to data, except col 0
sheetId
=
self
.
ss
.
worksheet
(
destinationSheetName
).
_properties
[
'sheetId'
]
requests
.
append
(
{
'autoResizeDimensions'
:
{
'dimensions'
:
{
'sheetId'
:
sheetId
,
'dimension'
:
'COLUMNS'
,
'startIndex'
:
1
,
'endIndex'
:
12
}
}
}
)
#resize col 0
sheetId
=
self
.
ss
.
worksheet
(
destinationSheetName
).
_properties
[
'sheetId'
]
requests
.
append
(
{
"updateDimensionProperties"
:
{
"range"
:
{
"sheetId"
:
sheetId
,
"dimension"
:
"COLUMNS"
,
"startIndex"
:
0
,
"endIndex"
:
1
},
"properties"
:
{
"pixelSize"
:
100
},
"fields"
:
"pixelSize"
}
}
)
#resize milestones to be cleaner
sheetId
=
self
.
ss
.
worksheet
(
destinationSheetName
).
_properties
[
'sheetId'
]
requests
.
append
(
{
"updateDimensionProperties"
:
{
"range"
:
{
"sheetId"
:
sheetId
,
"dimension"
:
"COLUMNS"
,
"startIndex"
:
6
,
"endIndex"
:
10
},
"properties"
:
{
"pixelSize"
:
135
},
"fields"
:
"pixelSize"
}
}
)
body
=
{
"requests"
:
requests
}
self
.
ss
.
batch_update
(
body
)
def
main
():
my_gDashboard
=
gDashboard
(
"/home/oaicicd/remi/creds.json"
,
'OAI RAN Dashboard'
,
'MR Status'
)
cmd
=
"""curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100" """
my_gDashboard
.
fetchData
(
cmd
)
my_gDashboard
.
gBuild
(
"MR Status"
)
my_gDashboard
.
gFormat
(
"Formating"
,
"MR Status"
)
if
__name__
==
"__main__"
:
# execute only if run as a script
main
()
ci-scripts/xml_files/gnb_phytest_usrp_run.xml
0 → 100644
View file @
26b6d87f
<!--
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>
gNB-PHY-Test
</htmlTabRef>
<htmlTabName>
Run-gNB-PHY-Test
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
2
</repeatCount>
<TestCaseRequestedList>
090101 000001 090109
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"090101"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB USRP
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test -q -U 787200 -T 106 -t 28 -D 130175 -m 28 -M 106
</Initialize_eNB_args>
<air_interface>
NR
</air_interface>
</testCase>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
180
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"090109"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate gNB
</desc>
<air_interface>
NR
</air_interface>
</testCase>
</testCaseList>
cmake_targets/CMakeLists.txt
View file @
26b6d87f
...
...
@@ -2828,8 +2828,6 @@ endif (${T_TRACER})
#This rule and the following deal with it.
add_custom_command
(
OUTPUT
${
OPENAIR_DIR
}
/common/utils/T/T_IDs.h
COMMAND make clean
COMMAND make -j2
COMMAND make check_vcd
WORKING_DIRECTORY
${
OPENAIR_DIR
}
/common/utils/T
DEPENDS
${
OPENAIR_DIR
}
/common/utils/T/T_messages.txt
...
...
@@ -2837,6 +2835,10 @@ add_custom_command (
${
OPENAIR_DIR
}
/common/utils/LOG/vcd_signal_dumper.h
)
execute_process
(
COMMAND make check_vcd
WORKING_DIRECTORY
${
OPENAIR_DIR
}
/common/utils/T
)
#This rule is specifically needed to generate T files
#before anything else in a project that uses the T.
#See below, there are some 'add_dependencies' showing that.
...
...
common/utils/T/Makefile
View file @
26b6d87f
...
...
@@ -18,7 +18,7 @@ T_messages.txt.h: T_messages.txt
T_IDs.h
:
$(GENIDS) T_messages.txt
./
$(GENIDS)
T_messages.txt T_IDs.h
check_vcd
:
check_vcd
:
T_IDs.h T_messages.txt.h
gcc
-Wall
-I
.
-I
..
-I
../itti
-I
../../../openair2/COMMON
-Itracer
-o
_check_vcd check_vcd.c tracer/database.c tracer/utils.c
-lm
-pthread
./_check_vcd
||
(
rm
-f
./_check_vcd ./T_IDs.h ./T_messages.txt.h
&&
false
)
rm
-f
./_check_vcd
...
...
executables/nr-gnb.c
View file @
26b6d87f
...
...
@@ -228,16 +228,6 @@ void rx_func(void *param) {
rnti_to_remove_count
=
0
;
if
(
pthread_mutex_unlock
(
&
rnti_to_remove_mutex
))
exit
(
1
);
// Call the scheduler
pthread_mutex_lock
(
&
gNB
->
UL_INFO_mutex
);
gNB
->
UL_INFO
.
frame
=
frame_rx
;
gNB
->
UL_INFO
.
slot
=
slot_rx
;
gNB
->
UL_INFO
.
module_id
=
gNB
->
Mod_id
;
gNB
->
UL_INFO
.
CC_id
=
gNB
->
CC_id
;
gNB
->
if_inst
->
NR_UL_indication
(
&
gNB
->
UL_INFO
);
pthread_mutex_unlock
(
&
gNB
->
UL_INFO_mutex
);
// RX processing
int
tx_slot_type
=
nr_slot_select
(
cfg
,
frame_tx
,
slot_tx
);
int
rx_slot_type
=
nr_slot_select
(
cfg
,
frame_rx
,
slot_rx
);
...
...
@@ -264,6 +254,18 @@ void rx_func(void *param) {
stop_meas
(
&
softmodem_stats_rxtx_sf
);
LOG_D
(
PHY
,
"%s() Exit proc[rx:%d%d tx:%d%d]
\n
"
,
__FUNCTION__
,
frame_rx
,
slot_rx
,
frame_tx
,
slot_tx
);
// Call the scheduler
start_meas
(
&
gNB
->
ul_indication_stats
);
pthread_mutex_lock
(
&
gNB
->
UL_INFO_mutex
);
gNB
->
UL_INFO
.
frame
=
frame_rx
;
gNB
->
UL_INFO
.
slot
=
slot_rx
;
gNB
->
UL_INFO
.
module_id
=
gNB
->
Mod_id
;
gNB
->
UL_INFO
.
CC_id
=
gNB
->
CC_id
;
gNB
->
if_inst
->
NR_UL_indication
(
&
gNB
->
UL_INFO
);
pthread_mutex_unlock
(
&
gNB
->
UL_INFO_mutex
);
stop_meas
(
&
gNB
->
ul_indication_stats
);
notifiedFIFO_elt_t
*
res
;
if
(
tx_slot_type
==
NR_DOWNLINK_SLOT
||
tx_slot_type
==
NR_MIXED_SLOT
)
{
...
...
@@ -323,18 +325,24 @@ static void *process_stats_thread(void *param) {
PHY_VARS_gNB
*
gNB
=
(
PHY_VARS_gNB
*
)
param
;
reset_meas
(
&
gNB
->
phy_proc_tx
);
reset_meas
(
&
gNB
->
dlsch_encoding_stats
);
reset_meas
(
&
gNB
->
dlsch_scrambling_stats
);
reset_meas
(
&
gNB
->
dlsch_modulation_stats
);
reset_meas
(
&
gNB
->
phy_proc_rx
);
reset_meas
(
&
gNB
->
ul_indication_stats
);
reset_meas
(
&
gNB
->
rx_pusch_stats
);
reset_meas
(
&
gNB
->
ulsch_decoding_stats
);
wait_sync
(
"process_stats_thread"
);
while
(
!
oai_exit
)
{
sleep
(
1
);
print_meas
(
&
gNB
->
dlsch_encoding_stats
,
"pdsch_encoding"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_scrambling_stats
,
"pdsch_scrambling"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_modulation_stats
,
"pdsch_modulation"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
phy_proc_tx
,
"L1 Tx processing"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_encoding_stats
,
"DLSCH encoding"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
phy_proc_rx
,
"L1 Rx processing"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
ul_indication_stats
,
"UL Indication"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
rx_pusch_stats
,
"PUSCH inner-receiver"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
ulsch_decoding_stats
,
"PUSCH decoding"
,
NULL
,
NULL
);
}
return
(
NULL
);
}
...
...
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
View file @
26b6d87f
...
...
@@ -691,7 +691,7 @@ typedef struct
typedef
struct
{
uint16_t
pm_idx
;
//Index to precoding matrix (PM) pre-stored at cell configuration. Note: If precoding is not used this parameter should be set to 0. Value: 0->65535.
nfapi_nr_dig_bf_interface_t
dig_bf_interface_list
[
255
];
//max dig_bf_interfaces
nfapi_nr_dig_bf_interface_t
dig_bf_interface_list
[
1
];
//max dig_bf_interfaces
}
nfapi_nr_tx_precoding_and_beamforming_number_of_prgs_t
;
...
...
@@ -702,7 +702,7 @@ typedef struct
uint16_t
prg_size
;
//Size in RBs of a precoding resource block group (PRG) – to which same precoding and digital beamforming gets applied. Value: 1->275
//watchout: dig_bf_interfaces here, in table 3-53 it's dig_bf_interface
uint8_t
dig_bf_interfaces
;
//Number of STD ant ports (parallel streams) feeding into the digBF Value: 0->255
nfapi_nr_tx_precoding_and_beamforming_number_of_prgs_t
prgs_list
[
275
];
//max prg_size
nfapi_nr_tx_precoding_and_beamforming_number_of_prgs_t
prgs_list
[
1
];
//max prg_size
}
nfapi_nr_tx_precoding_and_beamforming_t
;
...
...
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
View file @
26b6d87f
...
...
@@ -86,7 +86,7 @@ static void copyPrimary( struct complex16 *out, struct complex16 *in, int ofdmSi
}
int
lte_sync_time_init
(
LTE_DL_FRAME_PARMS
*
frame_parms
)
{
// LTE_UE_COMMON *common_vars
struct
complex16
syncF_tmp
[
2048
]
__attribute__
((
aligned
(
32
)))
=
{
0
};
struct
complex16
syncF_tmp
[
2048
]
__attribute__
((
aligned
(
32
)))
=
{
{
0
}
};
int
sz
=
frame_parms
->
ofdm_symbol_size
*
sizeof
(
*
primary_synch0_time
);
AssertFatal
(
NULL
!=
(
primary_synch0_time
=
(
struct
complex16
*
)
malloc16
(
sz
)),
""
);
bzero
(
primary_synch0_time
,
sz
);
...
...
@@ -153,7 +153,7 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
// perform a time domain correlation using the oversampled sync sequence
unsigned
int
n
,
ar
,
s
,
peak_pos
,
peak_val
,
sync_source
;
int
result
,
result2
;
struct
complexd
sync_out
[
3
]
=
{
0
},
sync_out2
[
3
]
=
{
0
};
struct
complexd
sync_out
[
3
]
=
{
{
0
}},
sync_out2
[
3
]
=
{{
0
}
};
int
length
=
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
frame_parms
->
samples_per_tti
>>
1
;
peak_val
=
0
;
peak_pos
=
0
;
...
...
openair1/PHY/TOOLS/time_meas.c
View file @
26b6d87f
...
...
@@ -103,10 +103,11 @@ void print_meas(time_stats_t *ts,
if
(
ts
->
trials
>
0
)
{
//printf("%20s: total: %10.3f ms, average: %10.3f us (%10d trials)\n", name, ts->diff/cpu_freq_GHz/1000000.0, ts->diff/ts->trials/cpu_freq_GHz/1000.0, ts->trials);
if
((
total_exec_time
==
NULL
)
||
(
sf_exec_time
==
NULL
))
{
fprintf
(
stderr
,
"%25s: %15.3f us; %15d;
\n
"
,
fprintf
(
stderr
,
"%25s: %15.3f us; %15d;
%15.3f us;
\n
"
,
name
,
(
ts
->
diff
/
ts
->
trials
/
cpu_freq_GHz
/
1000
.
0
),
ts
->
trials
);
ts
->
trials
,
ts
->
max
/
cpu_freq_GHz
/
1000
.
0
);
}
else
{
fprintf
(
stderr
,
"%25s: %15.3f ms (%5.2f%%); %15.3f us (%5.2f%%); %15d;
\n
"
,
name
,
...
...
openair1/PHY/defs_gNB.h
View file @
26b6d87f
...
...
@@ -824,6 +824,7 @@ typedef struct PHY_VARS_gNB_s {
time_stats_t
dlsch_segmentation_stats
;
time_stats_t
rx_pusch_stats
;
time_stats_t
ul_indication_stats
;
time_stats_t
ulsch_decoding_stats
;
time_stats_t
ulsch_rate_unmatching_stats
;
time_stats_t
ulsch_ldpc_decoding_stats
;
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
26b6d87f
...
...
@@ -194,6 +194,8 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH
,
0
);
}
if
(
do_meas
==
1
)
stop_meas
(
&
gNB
->
phy_proc_tx
);
if
((
frame
&
127
)
==
0
)
dump_pdsch_stats
(
gNB
);
//apply the OFDM symbol rotation here
...
...
@@ -539,6 +541,8 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
int
power_rxF
=
signal_energy_nodc
(
&
gNB
->
common_vars
.
rxdataF
[
0
][
offset
],
12
*
18
);
LOG_D
(
PHY
,
"frame %d, slot %d: UL signal energy %d
\n
"
,
frame_rx
,
slot_rx
,
power_rxF
);
start_meas
(
&
gNB
->
phy_proc_rx
);
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_PUCCH_MAX
;
i
++
){
NR_gNB_PUCCH_t
*
pucch
=
gNB
->
pucch
[
i
];
if
(
pucch
)
{
...
...
@@ -662,6 +666,7 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
}
}
}
stop_meas
(
&
gNB
->
phy_proc_rx
);
// figure out a better way to choose slot_rx, 19 is ok for a particular TDD configuration with 30kHz SCS
if
((
frame_rx
&
127
)
==
0
&&
slot_rx
==
19
)
{
dump_pusch_stats
(
gNB
);
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
26b6d87f
...
...
@@ -301,7 +301,7 @@ int main(int argc, char **argv)
//float psnr;
float
eff_tp_check
=
0
.
7
;
uint8_t
snrRun
;
uint32_t
TBS
;
uint32_t
TBS
=
0
;
int
**
txdata
;
double
**
s_re
,
**
s_im
,
**
r_re
,
**
r_im
;
//double iqim = 0.0;
...
...
@@ -1021,7 +1021,7 @@ int main(int argc, char **argv)
if
(
run_initial_sync
)
nr_common_signal_procedures
(
gNB
,
frame
,
slot
,
gNB
->
ssb
[
0
].
ssb_pdu
);
else
phy_procedures_gNB_TX
(
gNB
,
frame
,
slot
,
0
);
phy_procedures_gNB_TX
(
gNB
,
frame
,
slot
,
1
);
int
txdataF_offset
=
(
slot
%
2
)
*
frame_parms
->
samples_per_slot_wCP
;
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
26b6d87f
...
...
@@ -1170,7 +1170,6 @@ int main(int argc, char **argv)
gNB
->
UL_INFO
.
rx_ind
.
number_of_pdus
=
0
;
gNB
->
UL_INFO
.
crc_ind
.
number_crcs
=
0
;
start_meas
(
&
gNB
->
phy_proc_rx
);
phy_procedures_gNB_common_RX
(
gNB
,
frame
,
slot
);
phy_procedures_gNB_uespec_RX
(
gNB
,
frame
,
slot
);
...
...
@@ -1202,7 +1201,6 @@ int main(int argc, char **argv)
LOG_M
(
"rxsigF0_llr.m"
,
"rxsF0_llr"
,
&
gNB
->
pusch_vars
[
0
]
->
llr
[
0
],(
nb_symb_sch
-
1
)
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
*
mod_order
,
1
,
0
);
}
start_meas
(
&
gNB
->
phy_proc_rx
);
////////////////////////////////////////////////////////////
if
(
gNB
->
ulsch
[
0
][
0
]
->
last_iteration_cnt
>=
...
...
openair2/GNB_APP/gnb_paramdef.h
View file @
26b6d87f
...
...
@@ -324,12 +324,12 @@ typedef enum {
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*--------------------------------------------------------------------------------------------------------------------------------------------------*/
#define GNBNETPARAMS_DESC { \
{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_NG_AMF, NULL, 0, strptr:NULL, defstrval:
"lo"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_IPV4_ADDRESS_FOR_NG_AMF, NULL, 0, strptr:NULL, defstrval:
"127.0.0.1"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_NGU, NULL, 0, strptr:NULL, defstrval:
"lo"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_NGU, NULL, 0, strptr:NULL, defstrval:
"127.0.0.1"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_NG_AMF, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_IPV4_ADDRESS_FOR_NG_AMF, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_NGU, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_NGU, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_PORT_FOR_NGU, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C, NULL, 0, strptr:NULL, defstrval:
"127.0.0.1"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_ENB_PORT_FOR_X2C, NULL, 0, uptr:NULL, defintval:0L, TYPE_UINT, 0} \
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
26b6d87f
...
...
@@ -103,6 +103,7 @@ void dump_mac_stats(gNB_MAC_INST *gNB)
LOG_I
(
MAC
,
"UE %d: LCID %d: %d bytes RX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_rx
[
lc_id
]);
}
}
print_meas
(
&
gNB
->
eNB_scheduler
,
"DL & UL scheduling timing stats"
,
NULL
,
NULL
);
}
void
clear_nr_nfapi_information
(
gNB_MAC_INST
*
gNB
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
26b6d87f
...
...
@@ -388,7 +388,7 @@ void nr_preprocessor_phytest(module_id_t module_id,
uint32_t
target_ul_mcs
=
9
;
uint32_t
target_ul_bw
=
50
;
uint64_t
ulsch_slot_bitmap
=
(
1
<<
8
)
|
(
1
<<
18
)
;
uint64_t
ulsch_slot_bitmap
=
(
1
<<
8
);
bool
nr_ul_preprocessor_phytest
(
module_id_t
module_id
,
frame_t
frame
,
sub_frame_t
slot
)
{
gNB_MAC_INST
*
nr_mac
=
RC
.
nrmac
[
module_id
];
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
View file @
26b6d87f
...
...
@@ -1020,9 +1020,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id,
for
(
int
harq_bit
=
0
;
harq_bit
<
uci_01
->
harq
->
num_harq
;
harq_bit
++
)
{
const
uint8_t
harq_value
=
uci_01
->
harq
->
harq_list
[
harq_bit
].
harq_value
;
const
uint8_t
harq_confidence
=
uci_01
->
harq
->
harq_confidence_level
;
const
int
feedback_frame
=
slot
==
0
?
(
frame
-
1
+
1024
)
%
1024
:
frame
;
const
int
feedback_slot
=
(
slot
-
1
+
num_slots
)
%
num_slots
;
NR_UE_harq_t
*
harq
=
find_harq
(
mod_id
,
feedback_frame
,
feedback_slot
,
UE_id
);
NR_UE_harq_t
*
harq
=
find_harq
(
mod_id
,
frame
,
slot
,
UE_id
);
if
(
!
harq
)
break
;
DevAssert
(
harq
->
is_waiting
);
...
...
@@ -1059,9 +1057,7 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id,
// iterate over received harq bits
for
(
int
harq_bit
=
0
;
harq_bit
<
uci_234
->
harq
.
harq_bit_len
;
harq_bit
++
)
{
const
int
acknack
=
((
uci_234
->
harq
.
harq_payload
[
harq_bit
>>
3
])
>>
harq_bit
)
&
0x01
;
const
int
feedback_frame
=
slot
==
0
?
(
frame
-
1
+
1024
)
%
1024
:
frame
;
const
int
feedback_slot
=
(
slot
-
1
+
num_slots
)
%
num_slots
;
NR_UE_harq_t
*
harq
=
find_harq
(
mod_id
,
feedback_frame
,
feedback_slot
,
UE_id
);
NR_UE_harq_t
*
harq
=
find_harq
(
mod_id
,
frame
,
slot
,
UE_id
);
if
(
!
harq
)
break
;
DevAssert
(
harq
->
is_waiting
);
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
26b6d87f
...
...
@@ -597,7 +597,8 @@ int trx_usrp_write_init(openair0_device *device){
write_thread
->
end
=
0
;
write_thread
->
count_write
=
0
;
printf
(
"end of tx write thread
\n
"
);
pthread_mutex_init
(
&
write_thread
->
mutex_write
,
NULL
);
pthread_cond_init
(
&
write_thread
->
cond_write
,
NULL
);
pthread_create
(
&
write_thread
->
pthread_write
,
NULL
,
trx_usrp_write_thread
,(
void
*
)
device
);
return
(
0
);
...
...
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