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
canghaiwuhen
OpenXG-RAN
Commits
680a0c97
Commit
680a0c97
authored
5 years ago
by
yilmazt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Operation of all of the physical simulators are tested and verified + various warning removals
parent
ffebd6b4
Changes
31
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
293 additions
and
552 deletions
+293
-552
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+14
-14
cmake_targets/build_oai
cmake_targets/build_oai
+16
-0
cmake_targets/lte_noS1_build_oai/CMakeLists.template
cmake_targets/lte_noS1_build_oai/CMakeLists.template
+0
-9
executables/nr-ru.c
executables/nr-ru.c
+2
-2
executables/nr-softmodem-common.h
executables/nr-softmodem-common.h
+14
-9
executables/nr-softmodem.c
executables/nr-softmodem.c
+24
-6
executables/nr-softmodem.h
executables/nr-softmodem.h
+1
-1
executables/nr-uesoftmodem.c
executables/nr-uesoftmodem.c
+18
-1
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
+4
-4
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+3
-2
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+2
-2
openair1/PHY/MODULATION/nr_modulation.c
openair1/PHY/MODULATION/nr_modulation.c
+6
-7
openair1/PHY/NR_REFSIG/nr_gold_ue.c
openair1/PHY/NR_REFSIG/nr_gold_ue.c
+10
-7
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
+23
-19
openair1/SCHED/ru_procedures.c
openair1/SCHED/ru_procedures.c
+3
-3
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+28
-9
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+2
-3
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+5
-7
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+42
-382
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+6
-6
openair1/SIMULATION/NR_PHY/pucchsim.c
openair1/SIMULATION/NR_PHY/pucchsim.c
+2
-2
openair1/SIMULATION/NR_PHY/ulschsim.c
openair1/SIMULATION/NR_PHY/ulschsim.c
+5
-10
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/main.c
openair2/LAYER2/NR_MAC_gNB/main.c
+2
-2
openair2/NETWORK_DRIVER/MESH/local.h
openair2/NETWORK_DRIVER/MESH/local.h
+3
-1
openair2/UTIL/OPT/opt.h
openair2/UTIL/OPT/opt.h
+7
-7
openair2/UTIL/OPT/probe.c
openair2/UTIL/OPT/probe.c
+9
-4
targets/ARCH/COMMON/common_lib.c
targets/ARCH/COMMON/common_lib.c
+1
-2
targets/RT/USER/lte-softmodem-common.c
targets/RT/USER/lte-softmodem-common.c
+1
-0
targets/RT/USER/lte-softmodem.h
targets/RT/USER/lte-softmodem.h
+38
-29
No files found.
cmake_targets/autotests/test_case_list.xml
View file @
680a0c97
...
@@ -953,20 +953,20 @@
...
@@ -953,20 +953,20 @@
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec_args></pre_exec_args>
<pre_exec_args></pre_exec_args>
<main_exec>
$OPENAIR_DIR/targets/bin/dlsim.Rel15
</main_exec>
<main_exec>
$OPENAIR_DIR/targets/bin/dlsim.Rel15
</main_exec>
<main_exec_args>
-m
5 -gF -s-1 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O
60
<main_exec_args>
-m
=5 -g=F -s=-1 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -O=
60
-m
4 -gF -s0 -w1.0 -f.2 -n500 -B6 -c4 -z2 -O
60
-m
=4 -g=F -s=0 -w=1.0 -f=.2 -n=500 -B=6 -c=4 -z=2 -O=
60
-m
15 -gF -s6.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O
60
-m
=15 -g=F -s=6.7 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -O=
60
-m
15 -gF -s6.7 -w1.0 -f.2 -n500 -B25 -c2 -z2 -O
60
-m
=15 -g=F -s=6.7 -w=1.0 -f=.2 -n=500 -B=25 -c=2 -z=2 -O=
60
-m
15 -gG -s1.4 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O
25
-m
=15 -g=G -s=1.4 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -O=
25
-m
15 -gG -s1.4 -w1.0 -f.2 -n500 -B25 -c2 -z2 -O
25
-m
=15 -g=G -s=1.4 -w=1.0 -f=.2 -n=500 -B=25 -c=2 -z=2 -O=
25
-m
25 -gF -s17.4 -w1.0 -f.2 -n500 -B25 -c3 -z2 -O
60
-m
=25 -g=F -s=17.4 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -z=2 -O=
60
-m
25 -gF -s17.5 -w1.0 -f.2 -n500 -B25 -c3 -z2 -r1022 -O
60
-m
=25 -g=F -s=17.5 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -z=2 -r=1022 -O=
60
-m
26 -gF -s17.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O
60
-m
=26 -g=F -s=17.7 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -O=
60
-m
26 -gF -s17.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -O
60
-m
=26 -g=F -s=17.6 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -O=
60
-m
26 -gF -s17.3 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1600 -O
60
-m
=26 -g=F -s=17.3 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -r=1600 -O=
60
-m
26 -gF -s16.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1899 -O
60
-m
=26 -g=F -s=16.6 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -r=1899 -O=
60
-m14 -gF -s6.8 -w1.0 -f.2 -n500 -B50 -c2 -x2 -y2 -z2 -O
60
-m=14 -g=F -s=6.8 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -x=2 -y=2 -z=2 -O=
60
-m
13 -gF -s5.9 -w1.0 -f.2 -n500 -B25 -c3 -x2 -y2 -z2 -O
60
</main_exec_args>
-m
=13 -g=F -s=5.9 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -x=2 -y=2 -z=2 -O=
60
</main_exec_args>
<tags>
dlsim.test1 dlsim.test5 dlsim.test6 dlsim.test6b dlsim.test7 dlsim.test7b dlsim.test10 dlsim.test10b dlsim.test11 dlsim.test11a dlsim.test11b dlsim.test11c dlsim.TM2_test1 dlsim.TM2_test1b
</tags>
<tags>
dlsim.test1 dlsim.test5 dlsim.test6 dlsim.test6b dlsim.test7 dlsim.test7b dlsim.test10 dlsim.test10b dlsim.test11 dlsim.test11a dlsim.test11b dlsim.test11c dlsim.TM2_test1 dlsim.TM2_test1b
</tags>
<search_expr_true>
"passed"
</search_expr_true>
<search_expr_true>
"passed"
</search_expr_true>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
...
...
This diff is collapsed.
Click to expand it.
cmake_targets/build_oai
View file @
680a0c97
...
@@ -574,6 +574,22 @@ function main() {
...
@@ -574,6 +574,22 @@ function main() {
compilations
\
compilations
\
$build_dir
$exec
\
$build_dir
$exec
\
$exec
$dbin
/
$exec
.
$REL
$exec
$dbin
/
$exec
.
$REL
# if --eNB --UE are both provided together as build options
if
[
"
$eNB
"
=
"1"
-a
"
$UE
"
=
"1"
]
;
then
echo_info
"Compiling lte-uesoftmodem"
compilations
\
$build_dir
lte-uesoftmodem
\
lte-uesoftmodem
$dbin
/lte-uesoftmodem.
$REL
fi
# if --gNB --nrUE are both provided together as build options
if
[
"
$gNB
"
=
"1"
-a
"
$nrUE
"
=
"1"
]
;
then
echo_info
"Compiling nr-uesoftmodem"
compilations
\
$build_dir
nr-uesoftmodem
\
nr-uesoftmodem
$dbin
/nr-uesoftmodem.
$REL
fi
# mandatory shared lib
# mandatory shared lib
compilations
\
compilations
\
...
...
This diff is collapsed.
Click to expand it.
cmake_targets/lte_noS1_build_oai/CMakeLists.template
deleted
100644 → 0
View file @
ffebd6b4
set(ENABLE_ITTI True)
set(ENABLE_USE_MME False)
set(PDCP_USE_NETLINK True)
set(LINK_ENB_PDCP_TO_IP_DRIVER True)
set(LINK_ENB_PDCP_TO_GTPV1U False)
set(PDCP_USE_NETLINK_QUEUES False)
set(LINUX True)
set(SECU False)
set(NAS_UE False)
This diff is collapsed.
Click to expand it.
executables/nr-ru.c
View file @
680a0c97
...
@@ -88,8 +88,8 @@ unsigned short config_frames[4] = {2,9,11,13};
...
@@ -88,8 +88,8 @@ unsigned short config_frames[4] = {2,9,11,13};
#endif
#endif
/* these variables have to be defined before including ENB_APP/enb_paramdef.h and GNB_APP/gnb_paramdef.h */
/* these variables have to be defined before including ENB_APP/enb_paramdef.h and GNB_APP/gnb_paramdef.h */
static
int
DEFBANDS
[]
=
{
7
};
//
static int DEFBANDS[] = {7};
static
int
DEFENBS
[]
=
{
0
};
//
static int DEFENBS[] = {0};
static
int
DEFNRBANDS
[]
=
{
7
};
static
int
DEFNRBANDS
[]
=
{
7
};
static
int
DEFGNBS
[]
=
{
0
};
static
int
DEFGNBS
[]
=
{
0
};
...
...
This diff is collapsed.
Click to expand it.
executables/nr-softmodem-common.h
View file @
680a0c97
...
@@ -93,20 +93,24 @@
...
@@ -93,20 +93,24 @@
#define CONFIG_HLP_USRP_CLK_SRC "USRP clock source: 'internal' or 'external'\n"
#define CONFIG_HLP_USRP_CLK_SRC "USRP clock source: 'internal' or 'external'\n"
#define CONFIG_HLP_FLOG "Enable online log \n"
#define CONFIG_HLP_FLOG "Enable online log \n"
#define CONFIG_HLP_LOGL "Set the global log level, valid
e options: (9:trace, 8/7:debug, 6:info, 4:warn, 3:error
)\n"
#define CONFIG_HLP_LOGL "Set the global log level, valid
options: (4:trace, 3:debug, 2:info, 1:warn, (0:error)
)\n"
#define CONFIG_HLP_LOGV "Set the global log verbosity \n"
#define CONFIG_HLP_LOGV "Set the global log verbosity \n"
#define CONFIG_HLP_TELN "Start embedded telnet server \n"
#define CONFIG_HLP_TELN "Start embedded telnet server \n"
#define CONFIG_HLP_MSC "Enable the MSC tracing utility \n"
#define CONFIG_HLP_SNR "Set average SNR in dB (for --siml1 option)\n"
#define CONFIG_HLP_SNR "Set average SNR in dB (for --siml1 option)\n"
/*------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------------------*/
/* command line parameters for LOG utility */
/* command line parameters for LOG utility */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------------------*/
#define START_MSC softmodem_params.start_msc
#define CMDLINE_LOGPARAMS_DESC { \
#define CMDLINE_LOGPARAMS_DESC { \
{"R" , CONFIG_HLP_FLOG, 0, uptr:&online_log_messages, defintval:1, TYPE_INT, 0}, \
{"R" , CONFIG_HLP_FLOG, 0, uptr:&online_log_messages, defintval:1, TYPE_INT, 0}, \
{"g" , CONFIG_HLP_LOGL, 0, uptr:&glog_level, defintval:0, TYPE_UINT, 0}, \
{"g" , CONFIG_HLP_LOGL, 0, uptr:&glog_level, defintval:0, TYPE_UINT, 0}, \
{"G" , CONFIG_HLP_LOGV, 0, uptr:&glog_verbosity, defintval:0, TYPE_UINT16, 0}, \
{"G" , CONFIG_HLP_LOGV, 0, uptr:&glog_verbosity, defintval:0, TYPE_UINT16, 0}, \
{"telnetsrv", CONFIG_HLP_TELN, PARAMFLAG_BOOL, uptr:&start_telnetsrv, defintval:0, TYPE_UINT, 0}, \
{"telnetsrv", CONFIG_HLP_TELN, PARAMFLAG_BOOL, uptr:&start_telnetsrv, defintval:0, TYPE_UINT, 0}, \
{"msc", CONFIG_HLP_MSC, PARAMFLAG_BOOL, uptr:&START_MSC, defintval:0, TYPE_UINT, 0}, \
}
}
#define CMDLINE_ONLINELOG_IDX 0
#define CMDLINE_ONLINELOG_IDX 0
#define CMDLINE_GLOGLEVEL_IDX 1
#define CMDLINE_GLOGLEVEL_IDX 1
#define CMDLINE_GLOGVERBO_IDX 2
#define CMDLINE_GLOGVERBO_IDX 2
...
@@ -114,6 +118,7 @@
...
@@ -114,6 +118,7 @@
/***************************************************************************************************************************************/
/***************************************************************************************************************************************/
extern
pthread_cond_t
sync_cond
;
extern
pthread_cond_t
sync_cond
;
extern
pthread_mutex_t
sync_mutex
;
extern
pthread_mutex_t
sync_mutex
;
extern
int
sync_var
;
extern
int
sync_var
;
...
...
This diff is collapsed.
Click to expand it.
executables/nr-softmodem.c
View file @
680a0c97
...
@@ -189,6 +189,23 @@ int transmission_mode=1;
...
@@ -189,6 +189,23 @@ int transmission_mode=1;
int
emulate_rf
=
0
;
int
emulate_rf
=
0
;
int
numerology
=
0
;
int
numerology
=
0
;
typedef
struct
{
uint64_t
optmask
;
THREAD_STRUCT
thread_struct
;
char
rf_config_file
[
1024
];
int
phy_test
;
uint8_t
usim_test
;
int
emulate_rf
;
int
wait_for_sync
;
//eNodeB only
int
single_thread_flag
;
//eNodeB only
int
chain_offset
;
int
numerology
;
unsigned
int
start_msc
;
uint32_t
clock_source
;
int
hw_timing_advance
;
}
softmodem_params_t
;
static
softmodem_params_t
softmodem_params
;
static
char
*
parallel_config
=
NULL
;
static
char
*
parallel_config
=
NULL
;
static
char
*
worker_config
=
NULL
;
static
char
*
worker_config
=
NULL
;
static
THREAD_STRUCT
thread_struct
;
static
THREAD_STRUCT
thread_struct
;
...
@@ -492,7 +509,8 @@ static void get_options(void) {
...
@@ -492,7 +509,8 @@ static void get_options(void) {
uint32_t
online_log_messages
;
uint32_t
online_log_messages
;
uint32_t
glog_level
,
glog_verbosity
;
uint32_t
glog_level
,
glog_verbosity
;
uint32_t
start_telnetsrv
;
uint32_t
start_telnetsrv
;
paramdef_t
cmdline_params
[]
=
CMDLINE_PARAMS_DESC
;
char
*
in_ip
=
NULL
,
*
in_path
=
NULL
;
paramdef_t
cmdline_params
[]
=
CMDLINE_PARAMS_DESC_GNB
;
paramdef_t
cmdline_logparams
[]
=
CMDLINE_LOGPARAMS_DESC
;
paramdef_t
cmdline_logparams
[]
=
CMDLINE_LOGPARAMS_DESC
;
config_process_cmdline
(
cmdline_params
,
sizeof
(
cmdline_params
)
/
sizeof
(
paramdef_t
),
NULL
);
config_process_cmdline
(
cmdline_params
,
sizeof
(
cmdline_params
)
/
sizeof
(
paramdef_t
),
NULL
);
...
@@ -550,10 +568,10 @@ static void get_options(void) {
...
@@ -550,10 +568,10 @@ static void get_options(void) {
void
set_default_frame_parms
(
nfapi_nr_config_request_t
*
config
[
MAX_NUM_CCs
],
NR_DL_FRAME_PARMS
*
frame_parms
[
MAX_NUM_CCs
])
{
void
set_default_frame_parms
(
nfapi_nr_config_request_t
*
config
[
MAX_NUM_CCs
],
int
CC_id
;
NR_DL_FRAME_PARMS
*
frame_parms
[
MAX_NUM_CCs
])
{
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
for
(
int
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
frame_parms
[
CC_id
]
=
(
NR_DL_FRAME_PARMS
*
)
malloc
(
sizeof
(
NR_DL_FRAME_PARMS
));
frame_parms
[
CC_id
]
=
(
NR_DL_FRAME_PARMS
*
)
malloc
(
sizeof
(
NR_DL_FRAME_PARMS
));
config
[
CC_id
]
=
(
nfapi_nr_config_request_t
*
)
malloc
(
sizeof
(
nfapi_nr_config_request_t
));
config
[
CC_id
]
=
(
nfapi_nr_config_request_t
*
)
malloc
(
sizeof
(
nfapi_nr_config_request_t
));
config
[
CC_id
]
->
subframe_config
.
numerology_index_mu
.
value
=
1
;
config
[
CC_id
]
->
subframe_config
.
numerology_index_mu
.
value
=
1
;
...
@@ -861,7 +879,7 @@ static void wait_nfapi_init(char *thread_name) {
...
@@ -861,7 +879,7 @@ static void wait_nfapi_init(char *thread_name) {
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
argc
,
char
**
argv
)
{
{
int
i
,
CC_id
,
ru_id
;
int
i
,
ru_id
,
CC_id
=
0
;
start_background_system
();
start_background_system
();
///static configuration for NR at the moment
///static configuration for NR at the moment
...
...
This diff is collapsed.
Click to expand it.
executables/nr-softmodem.h
View file @
680a0c97
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
/* command line parameters common to eNodeB and UE */
/* command line parameters common to eNodeB and UE */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define CMDLINE_PARAMS_DESC { \
#define CMDLINE_PARAMS_DESC
_GNB
{ \
{"rf-config-file", CONFIG_HLP_RFCFGF, 0, strptr:(char **)&rf_config_file, defstrval:NULL, TYPE_STRING, sizeof(rf_config_file)},\
{"rf-config-file", CONFIG_HLP_RFCFGF, 0, strptr:(char **)&rf_config_file, defstrval:NULL, TYPE_STRING, sizeof(rf_config_file)},\
{"ulsch-max-errors", CONFIG_HLP_ULMAXE, 0, uptr:&ULSCH_max_consecutive_errors, defuintval:0, TYPE_UINT, 0}, \
{"ulsch-max-errors", CONFIG_HLP_ULMAXE, 0, uptr:&ULSCH_max_consecutive_errors, defuintval:0, TYPE_UINT, 0}, \
{"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&phy_test, defintval:0, TYPE_INT, 0}, \
{"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&phy_test, defintval:0, TYPE_INT, 0}, \
...
...
This diff is collapsed.
Click to expand it.
executables/nr-uesoftmodem.c
View file @
680a0c97
...
@@ -161,6 +161,23 @@ uint8_t nb_antenna_rx = 1;
...
@@ -161,6 +161,23 @@ uint8_t nb_antenna_rx = 1;
char
ref
[
128
]
=
"internal"
;
char
ref
[
128
]
=
"internal"
;
char
channels
[
128
]
=
"0"
;
char
channels
[
128
]
=
"0"
;
typedef
struct
{
uint64_t
optmask
;
THREAD_STRUCT
thread_struct
;
char
rf_config_file
[
1024
];
int
phy_test
;
uint8_t
usim_test
;
int
emulate_rf
;
int
wait_for_sync
;
//eNodeB only
int
single_thread_flag
;
//eNodeB only
int
chain_offset
;
int
numerology
;
unsigned
int
start_msc
;
uint32_t
clock_source
;
int
hw_timing_advance
;
}
softmodem_params_t
;
static
softmodem_params_t
softmodem_params
;
static
char
*
parallel_config
=
NULL
;
static
char
*
parallel_config
=
NULL
;
static
char
*
worker_config
=
NULL
;
static
char
*
worker_config
=
NULL
;
static
THREAD_STRUCT
thread_struct
;
static
THREAD_STRUCT
thread_struct
;
...
@@ -386,7 +403,7 @@ int16_t dlsch_demod_shift;
...
@@ -386,7 +403,7 @@ int16_t dlsch_demod_shift;
static
void
get_options
(
void
)
{
static
void
get_options
(
void
)
{
int
CC_id
;
int
CC_id
;
int
tddflag
=
0
,
nonbiotflag
;
int
tddflag
=
0
,
nonbiotflag
;
char
*
loopfile
=
NULL
;
char
*
loopfile
=
NULL
,
*
in_ip
=
NULL
,
*
in_path
=
NULL
;
int
dumpframe
=
0
;
int
dumpframe
=
0
;
uint32_t
online_log_messages
;
uint32_t
online_log_messages
;
uint32_t
glog_level
,
glog_verbosity
;
uint32_t
glog_level
,
glog_verbosity
;
...
...
This diff is collapsed.
Click to expand it.
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
View file @
680a0c97
...
@@ -525,10 +525,10 @@ typedef struct{
...
@@ -525,10 +525,10 @@ typedef struct{
uint8_t
css_format_2_2
;
uint8_t
css_format_2_2
;
uint8_t
css_format_2_3
;
uint8_t
css_format_2_3
;
uint8_t
uss_dci_formats
;
uint8_t
uss_dci_formats
;
uint16_t
srs_monitoring_periodicity
;
uint16_t
srs_monitoring_periodicity
;
uint16_t
slot_monitoring_periodicity
;
uint16_t
slot_monitoring_periodicity
;
uint16_t
slot_monitoring_offset
;
uint16_t
slot_monitoring_offset
;
uint
16
_t
monitoring_symbols_in_slot
;
uint
32
_t
monitoring_symbols_in_slot
;
uint16_t
number_of_candidates
[
NFAPI_NR_MAX_NB_CCE_AGGREGATION_LEVELS
];
uint16_t
number_of_candidates
[
NFAPI_NR_MAX_NB_CCE_AGGREGATION_LEVELS
];
}
nfapi_nr_search_space_t
;
}
nfapi_nr_search_space_t
;
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/INIT/nr_init.c
View file @
680a0c97
...
@@ -279,11 +279,12 @@ void phy_config_request(PHY_Config_t *phy_config) {
...
@@ -279,11 +279,12 @@ void phy_config_request(PHY_Config_t *phy_config) {
}*/
}*/
void
phy_free_nr_gNB
(
PHY_VARS_gNB
*
gNB
)
{
void
phy_free_nr_gNB
(
PHY_VARS_gNB
*
gNB
)
{
//NR_DL_FRAME_PARMS* const fp = &gNB->frame_parms;
//NR_DL_FRAME_PARMS* const fp = &gNB->frame_parms;
//nfapi_nr_config_request_t *cfg = &gNB->gNB_config;
//nfapi_nr_config_request_t *cfg = &gNB->gNB_config;
NR_gNB_COMMON
*
const
common_vars
=
&
gNB
->
common_vars
;
NR_gNB_COMMON
*
const
common_vars
=
&
gNB
->
common_vars
;
NR_gNB_PUSCH
**
const
pusch_vars
=
gNB
->
pusch_vars
;
//
NR_gNB_PUSCH **const pusch_vars = gNB->pusch_vars;
/*LTE_eNB_SRS *const srs_vars = gNB->srs_vars;
/*LTE_eNB_SRS *const srs_vars = gNB->srs_vars;
LTE_eNB_PRACH *const prach_vars = &gNB->prach_vars;*/
LTE_eNB_PRACH *const prach_vars = &gNB->prach_vars;*/
uint32_t
***
pdcch_dmrs
=
gNB
->
nr_gold_pdcch_dmrs
;
uint32_t
***
pdcch_dmrs
=
gNB
->
nr_gold_pdcch_dmrs
;
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/INIT/nr_init_ue.c
View file @
680a0c97
...
@@ -678,13 +678,13 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
...
@@ -678,13 +678,13 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
int
i
,
j
,
k
,
l
,
slot
,
symb
,
q
,
layer
;
int
i
,
j
,
k
,
l
,
slot
,
symb
,
q
;
int
eNB_id
;
int
eNB_id
;
int
th_id
;
int
th_id
;
int
n_ssb_crb
=
(
fp
->
N_RB_DL
-
20
);
int
n_ssb_crb
=
(
fp
->
N_RB_DL
-
20
);
int
k_ssb
=
0
;
int
k_ssb
=
0
;
uint32_t
****
pusch_dmrs
;
uint32_t
****
pusch_dmrs
;
int
N_n_scid
[
2
]
=
{
0
,
1
};
// [HOTFIX] This is a temporary implementation of scramblingID0 and scramblingID1 which are given by DMRS-UplinkConfig
uint16_t
N_n_scid
[
2
]
=
{
0
,
1
};
// [HOTFIX] This is a temporary implementation of scramblingID0 and scramblingID1 which are given by DMRS-UplinkConfig
int
n_scid
;
int
n_scid
;
abstraction_flag
=
0
;
abstraction_flag
=
0
;
fp
->
nb_antennas_tx
=
1
;
fp
->
nb_antennas_tx
=
1
;
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/MODULATION/nr_modulation.c
View file @
680a0c97
...
@@ -26,20 +26,19 @@ extern short nr_mod_table[NR_MOD_TABLE_SIZE_SHORT];
...
@@ -26,20 +26,19 @@ extern short nr_mod_table[NR_MOD_TABLE_SIZE_SHORT];
void
nr_modulation
(
uint32_t
*
in
,
void
nr_modulation
(
uint32_t
*
in
,
uint16_t
length
,
uint16_t
length
,
uint16_t
mod_order
,
uint16_t
mod_order
,
int16_t
*
out
)
{
int16_t
*
out
)
{
uint16_t
offset
;
uint16_t
offset
;
uint16_t
order
;
int
i
,
j
;
uint8_t
idx
,
b_idx
;
uint8_t
idx
,
b_idx
;
offset
=
(
mod_order
==
2
)
?
NR_MOD_TABLE_QPSK_OFFSET
:
(
mod_order
==
4
)
?
NR_MOD_TABLE_QAM16_OFFSET
:
\
offset
=
(
mod_order
==
2
)
?
NR_MOD_TABLE_QPSK_OFFSET
:
(
mod_order
==
4
)
?
NR_MOD_TABLE_QAM16_OFFSET
:
\
(
mod_order
==
6
)
?
NR_MOD_TABLE_QAM64_OFFSET
:
(
mod_order
==
8
)
?
NR_MOD_TABLE_QAM256_OFFSET
:
0
;
(
mod_order
==
6
)
?
NR_MOD_TABLE_QAM64_OFFSET
:
(
mod_order
==
8
)
?
NR_MOD_TABLE_QAM256_OFFSET
:
0
;
for
(
i
=
0
;
i
<
length
/
mod_order
;
i
++
)
{
for
(
int
i
=
0
;
i
<
length
/
mod_order
;
i
++
)
{
idx
=
0
;
idx
=
0
;
for
(
int
j
=
0
;
j
<
mod_order
;
j
++
)
for
(
j
=
0
;
j
<
mod_order
;
j
++
)
{
{
b_idx
=
(
i
*
mod_order
+
j
)
&
0x1f
;
b_idx
=
(
i
*
mod_order
+
j
)
&
0x1f
;
if
(
i
&&
(
!
b_idx
))
if
(
i
&&
(
!
b_idx
))
in
++
;
in
++
;
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_REFSIG/nr_gold_ue.c
View file @
680a0c97
...
@@ -23,7 +23,6 @@
...
@@ -23,7 +23,6 @@
void
nr_gold_pbch
(
PHY_VARS_NR_UE
*
ue
)
void
nr_gold_pbch
(
PHY_VARS_NR_UE
*
ue
)
{
{
unsigned
int
n
,
x1
,
x2
;
unsigned
int
n
,
x1
,
x2
;
unsigned
int
Nid
,
i_ssb
,
i_ssb2
;
unsigned
int
Nid
,
i_ssb
,
i_ssb2
;
unsigned
char
Lmax
,
l
,
n_hf
,
N_hf
;
unsigned
char
Lmax
,
l
,
n_hf
,
N_hf
;
...
@@ -63,9 +62,10 @@ void nr_gold_pbch(PHY_VARS_NR_UE* ue)
...
@@ -63,9 +62,10 @@ void nr_gold_pbch(PHY_VARS_NR_UE* ue)
}
}
void
nr_gold_pdcch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
n_idDMRS
,
unsigned
short
length_dmrs
)
void
nr_gold_pdcch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
n_idDMRS
,
unsigned
short
length_dmrs
)
{
{
unsigned
char
ns
,
l
;
unsigned
char
ns
,
l
;
unsigned
int
n
,
x1
,
x2
,
x2tmp0
;
unsigned
int
n
,
x1
,
x2
,
x2tmp0
;
unsigned
int
nid
;
unsigned
int
nid
;
...
@@ -106,9 +106,11 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue,unsigned short n_idDMRS, unsigned short le
...
@@ -106,9 +106,11 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue,unsigned short n_idDMRS, unsigned short le
}
}
}
}
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
lbar
,
unsigned
short
*
n_idDMRS
,
unsigned
short
length_dmrs
)
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
lbar
,
unsigned
short
*
n_idDMRS
,
unsigned
short
length_dmrs
)
{
{
unsigned
char
ns
,
l
;
unsigned
char
ns
,
l
;
unsigned
int
n
,
x1
,
x2
,
x2tmp0
;
unsigned
int
n
,
x1
,
x2
,
x2tmp0
;
int
nscid
;
int
nscid
;
...
@@ -161,9 +163,10 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,unsigned short lbar,unsigned short *n_idDM
...
@@ -161,9 +163,10 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,unsigned short lbar,unsigned short *n_idDM
}
}
}
}
void
nr_init_pusch_dmrs
(
PHY_VARS_NR_UE
*
ue
,
uint16_t
*
N_n_scid
,
uint8_t
n_scid
)
void
nr_init_pusch_dmrs
(
PHY_VARS_NR_UE
*
ue
,
uint16_t
*
N_n_scid
,
uint8_t
n_scid
)
{
{
uint32_t
x1
,
x2
,
n
;
uint32_t
x1
,
x2
,
n
;
uint8_t
reset
,
slot
,
symb
,
q
;
uint8_t
reset
,
slot
,
symb
,
q
;
NR_DL_FRAME_PARMS
*
fp
=
&
ue
->
frame_parms
;
NR_DL_FRAME_PARMS
*
fp
=
&
ue
->
frame_parms
;
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
View file @
680a0c97
...
@@ -31,38 +31,42 @@
...
@@ -31,38 +31,42 @@
/*!\brief This function generates the NR Gold sequence (38-211, Sec 5.2.1) for the PBCH DMRS.
/*!\brief This function generates the NR Gold sequence (38-211, Sec 5.2.1) for the PBCH DMRS.
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
*/
*/
int
nr_pbch_dmrs_rx
(
int
dmrss
,
unsigned
int
*
nr_gold_pbch
,
int32_t
*
output
);
int
nr_pbch_dmrs_rx
(
int
dmrss
,
unsigned
int
*
nr_gold_pbch
,
int32_t
*
output
);
/*!\brief This function generates the NR Gold sequence (38-211, Sec 5.2.1) for the PDCCH DMRS.
/*!\brief This function generates the NR Gold sequence (38-211, Sec 5.2.1) for the PDCCH DMRS.
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
*/
*/
int
nr_pdcch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
int
nr_pdcch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
uint8_t
eNB_offset
,
unsigned
int
Ns
,
unsigned
int
Ns
,
unsigned
int
*
nr_gold_pdcch
,
unsigned
int
*
nr_gold_pdcch
,
int32_t
*
output
,
int32_t
*
output
,
unsigned
short
p
,
unsigned
short
p
,
unsigned
short
nb_rb_corset
);
unsigned
short
nb_rb_corset
);
int
nr_pdsch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
int
nr_pdsch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
unsigned
int
Ns
,
unsigned
int
Ns
,
unsigned
int
*
nr_gold_pdsch
,
unsigned
int
*
nr_gold_pdsch
,
int32_t
*
output
,
int32_t
*
output
,
unsigned
short
p
,
unsigned
short
p
,
unsigned
char
lp
,
unsigned
char
lp
,
unsigned
short
nb_pdsch_rb
);
unsigned
short
nb_pdsch_rb
);
void
nr_gold_pbch
(
PHY_VARS_NR_UE
*
ue
);
void
nr_gold_pbch
(
PHY_VARS_NR_UE
*
ue
);
void
nr_gold_pdcch
(
PHY_VARS_NR_UE
*
ue
,
void
nr_gold_pdcch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
n_idDMRS
,
unsigned
short
n_idDMRS
,
unsigned
short
length_dmrs
);
unsigned
short
length_dmrs
);
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
lbar
,
unsigned
short
lbar
,
unsigned
short
*
n_idDMRS
,
unsigned
short
*
n_idDMRS
,
unsigned
short
length_dmrs
);
unsigned
short
length_dmrs
);
void
nr_init_pusch_dmrs
(
PHY_VARS_NR_UE
*
ue
,
uint16_t
*
N_n_scid
,
uint8_t
n_scid
);
void
nr_init_pusch_dmrs
(
PHY_VARS_NR_UE
*
ue
,
uint16_t
*
N_n_scid
,
uint8_t
n_scid
);
#endif
#endif
This diff is collapsed.
Click to expand it.
openair1/SCHED/ru_procedures.c
View file @
680a0c97
...
@@ -218,11 +218,11 @@ void feptx_ofdm_2thread(RU_t *ru,int frame,int subframe) {
...
@@ -218,11 +218,11 @@ void feptx_ofdm_2thread(RU_t *ru,int frame,int subframe) {
}
}
void
feptx_ofdm
(
RU_t
*
ru
,
int
frame
,
int
subframe
)
{
void
feptx_ofdm
(
RU_t
*
ru
,
int
frame
,
int
subframe
)
{
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
unsigned
int
aa
,
slot_offset
,
slot_offset_F
;
unsigned
int
aa
,
slot_offset
,
slot_offset_F
;
int
dummy_tx_b
[
7680
*
4
]
__attribute__
((
aligned
(
32
)));
int
dummy_tx_b
[
7680
*
4
]
__attribute__
((
aligned
(
32
)));
int
i
,
j
,
tx_offset
;
int
i
,
j
,
tx_offset
;
int
slot_sizeF
=
(
fp
->
ofdm_symbol_size
)
*
int
slot_sizeF
=
(
fp
->
ofdm_symbol_size
)
*
...
...
This diff is collapsed.
Click to expand it.
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
680a0c97
...
@@ -206,31 +206,50 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
...
@@ -206,31 +206,50 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
}
}
void
nr_ulsch_procedures
(
PHY_VARS_gNB
*
gNB
,
gNB_L1_rxtx_proc_t
*
proc
,
int
UE_id
,
uint8_t
harq_pid
)
{
void
nr_ulsch_procedures
(
PHY_VARS_gNB
*
gNB
,
gNB_L1_rxtx_proc_t
*
proc
,
NR_DL_FRAME_PARMS
*
frame_parms
=
&
gNB
->
frame_parms
;
int
UE_id
,
uint8_t
harq_pid
)
{
NR_DL_FRAME_PARMS
*
frame_parms
=
&
gNB
->
frame_parms
;
nfapi_nr_ul_config_ulsch_pdu
*
rel15_ul
=
&
gNB
->
ulsch
[
UE_id
+
1
][
0
]
->
harq_processes
[
harq_pid
]
->
ulsch_pdu
;
nfapi_nr_ul_config_ulsch_pdu
*
rel15_ul
=
&
gNB
->
ulsch
[
UE_id
+
1
][
0
]
->
harq_processes
[
harq_pid
]
->
ulsch_pdu
;
nfapi_nr_ul_config_ulsch_pdu_rel15_t
*
nfapi_ulsch_pdu_rel15
=
&
rel15_ul
->
ulsch_pdu_rel15
;
nfapi_nr_ul_config_ulsch_pdu_rel15_t
*
nfapi_ulsch_pdu_rel15
=
&
rel15_ul
->
ulsch_pdu_rel15
;
uint8_t
ret
;
//
uint8_t ret;
uint32_t
G
;
uint32_t
G
;
int
Nid_cell
=
0
;
// [hna] shouldn't be a local variable (should be signaled)
int
Nid_cell
=
0
;
// [hna] shouldn't be a local variable (should be signaled)
G
=
nr_get_G
(
nfapi_ulsch_pdu_rel15
->
number_rbs
,
nfapi_ulsch_pdu_rel15
->
number_symbols
,
nfapi_ulsch_pdu_rel15
->
nb_re_dmrs
,
nfapi_ulsch_pdu_rel15
->
length_dmrs
,
nfapi_ulsch_pdu_rel15
->
Qm
,
nfapi_ulsch_pdu_rel15
->
n_layers
);
G
=
nr_get_G
(
nfapi_ulsch_pdu_rel15
->
number_rbs
,
nfapi_ulsch_pdu_rel15
->
number_symbols
,
nfapi_ulsch_pdu_rel15
->
nb_re_dmrs
,
nfapi_ulsch_pdu_rel15
->
length_dmrs
,
nfapi_ulsch_pdu_rel15
->
Qm
,
nfapi_ulsch_pdu_rel15
->
n_layers
);
//----------------------------------------------------------
//----------------------------------------------------------
//------------------- ULSCH unscrambling -------------------
//------------------- ULSCH unscrambling -------------------
//----------------------------------------------------------
//----------------------------------------------------------
nr_ulsch_unscrambling
(
gNB
->
pusch_vars
[
UE_id
]
->
llr
,
G
,
0
,
Nid_cell
,
rel15_ul
->
rnti
);
nr_ulsch_unscrambling
(
gNB
->
pusch_vars
[
UE_id
]
->
llr
,
G
,
0
,
Nid_cell
,
rel15_ul
->
rnti
);
//----------------------------------------------------------
//----------------------------------------------------------
//--------------------- ULSCH decoding ---------------------
//--------------------- ULSCH decoding ---------------------
//----------------------------------------------------------
//----------------------------------------------------------
ret
=
nr_ulsch_decoding
(
gNB
,
UE_id
,
gNB
->
pusch_vars
[
UE_id
]
->
llr
,
frame_parms
,
proc
->
frame_rx
,
//ret = nr_ulsch_decoding(gNB,
nfapi_ulsch_pdu_rel15
->
number_symbols
,
proc
->
slot_rx
,
harq_pid
,
0
);
nr_ulsch_decoding
(
gNB
,
UE_id
,
gNB
->
pusch_vars
[
UE_id
]
->
llr
,
frame_parms
,
proc
->
frame_rx
,
nfapi_ulsch_pdu_rel15
->
number_symbols
,
proc
->
slot_rx
,
harq_pid
,
0
);
// if (ret > ulsch_gNB->max_ldpc_iterations)
// if (ret > ulsch_gNB->max_ldpc_iterations)
// n_errors++;
// n_errors++;
...
...
This diff is collapsed.
Click to expand it.
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
680a0c97
...
@@ -40,9 +40,8 @@
...
@@ -40,9 +40,8 @@
#include "PHY/impl_defs_nr.h"
#include "PHY/impl_defs_nr.h"
extern
PHY_VARS_NR_UE
***
PHY_vars_UE_g
;
extern
PHY_VARS_NR_UE
***
PHY_vars_UE_g
;
int8_t
nr_ue_scheduled_response
(
nr_scheduled_response_t
*
scheduled_response
){
int8_t
nr_ue_scheduled_response
(
nr_scheduled_response_t
*
scheduled_response
)
{
/// module id
/// module id
module_id_t
module_id
=
scheduled_response
->
module_id
;
module_id_t
module_id
=
scheduled_response
->
module_id
;
/// component carrier id
/// component carrier id
...
...
This diff is collapsed.
Click to expand it.
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
680a0c97
...
@@ -2463,10 +2463,11 @@ void ue_pucch_procedures(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eNB_
...
@@ -2463,10 +2463,11 @@ void ue_pucch_procedures(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eNB_
#endif
#endif
void
phy_procedures_nrUE_TX
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
uint8_t
gNB_id
,
uint8_t
thread_id
)
{
void
phy_procedures_nrUE_TX
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
uint8_t
gNB_id
,
NR_DL_FRAME_PARMS
*
frame_parms
=&
ue
->
frame_parms
;
uint8_t
thread_id
)
{
fapi_nr_dci_pdu_rel15_t
*
ul_dci_pdu
;
fapi_nr_dci_pdu_rel15_t
*
ul_dci_pdu
;
NR_UE_ULSCH_t
*
ulsch_ue
;
NR_UE_ULSCH_t
*
ulsch_ue
;
NR_UL_UE_HARQ_t
*
harq_process_ul_ue
;
NR_UL_UE_HARQ_t
*
harq_process_ul_ue
;
...
@@ -2487,7 +2488,6 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t g
...
@@ -2487,7 +2488,6 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t g
harq_pid
=
0
;
//temporary implementation
harq_pid
=
0
;
//temporary implementation
generate_ue_ulsch_params
(
ue
,
generate_ue_ulsch_params
(
ue
,
0
,
0
,
gNB_id
,
gNB_id
,
...
@@ -2496,7 +2496,6 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t g
...
@@ -2496,7 +2496,6 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t g
ulsch_ue
=
ue
->
ulsch
[
thread_id
][
gNB_id
][
0
];
// cwd_index = 0
ulsch_ue
=
ue
->
ulsch
[
thread_id
][
gNB_id
][
0
];
// cwd_index = 0
harq_process_ul_ue
=
ulsch_ue
->
harq_processes
[
harq_pid
];
harq_process_ul_ue
=
ulsch_ue
->
harq_processes
[
harq_pid
];
TBS
=
nr_compute_tbs
(
ul_dci_pdu
->
mcs
,
harq_process_ul_ue
->
nb_rb
,
ulsch_ue
->
Nsymb_pusch
,
ulsch_ue
->
nb_re_dmrs
,
ulsch_ue
->
length_dmrs
,
ul_dci_pdu
->
precod_nbr_layers
);
TBS
=
nr_compute_tbs
(
ul_dci_pdu
->
mcs
,
harq_process_ul_ue
->
nb_rb
,
ulsch_ue
->
Nsymb_pusch
,
ulsch_ue
->
nb_re_dmrs
,
ulsch_ue
->
length_dmrs
,
ul_dci_pdu
->
precod_nbr_layers
);
//-----------------------------------------------------//
//-----------------------------------------------------//
...
@@ -2524,7 +2523,6 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t g
...
@@ -2524,7 +2523,6 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t g
*/
*/
nr_ue_pusch_common_procedures
(
ue
,
nr_ue_pusch_common_procedures
(
ue
,
slot_tx
,
slot_tx
,
ul_dci_pdu
->
precod_nbr_layers
,
ul_dci_pdu
->
precod_nbr_layers
,
...
...
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
680a0c97
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
680a0c97
...
@@ -195,7 +195,7 @@ int main(int argc, char **argv)
...
@@ -195,7 +195,7 @@ int main(int argc, char **argv)
cpuf
=
get_cpu_freq_GHz
();
cpuf
=
get_cpu_freq_GHz
();
if
(
load_configmodule
(
argc
,
argv
,
CONFIG_ENABLECMDLINEONLY
)
==
0
)
{
if
(
load_configmodule
(
argc
,
argv
,
CONFIG_ENABLECMDLINEONLY
)
==
0
)
{
exit_fun
(
"[SOFTMODEM] Error, configuration module init failed
\n
"
);
exit_fun
(
"[SOFTMODEM] Error, configuration module init failed
\n
"
);
}
}
...
@@ -449,8 +449,8 @@ int main(int argc, char **argv)
...
@@ -449,8 +449,8 @@ int main(int argc, char **argv)
gNB2UE
=
new_channel_desc_scm
(
n_tx
,
gNB2UE
=
new_channel_desc_scm
(
n_tx
,
n_rx
,
n_rx
,
channel_model
,
channel_model
,
fs
,
fs
,
bw
,
bw
,
0
,
0
,
0
,
0
,
0
);
0
);
...
@@ -703,7 +703,7 @@ int main(int argc, char **argv)
...
@@ -703,7 +703,7 @@ int main(int argc, char **argv)
for
(
i
=
0
;
i
<
frame_length_complex_samples
;
i
++
)
{
for
(
i
=
0
;
i
<
frame_length_complex_samples
;
i
++
)
{
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_rx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_rx
;
aa
++
)
{
((
short
*
)
UE
->
common_vars
.
rxdata
[
aa
])[
2
*
i
]
=
(
short
)
((
r_re
[
aa
][
i
]
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
((
short
*
)
UE
->
common_vars
.
rxdata
[
aa
])[
2
*
i
]
=
(
short
)
((
r_re
[
aa
][
i
]
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
((
short
*
)
UE
->
common_vars
.
rxdata
[
aa
])[
2
*
i
+
1
]
=
(
short
)
((
r_im
[
aa
][
i
]
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
((
short
*
)
UE
->
common_vars
.
rxdata
[
aa
])[
2
*
i
+
1
]
=
(
short
)
((
r_im
[
aa
][
i
]
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
}
}
...
@@ -726,7 +726,7 @@ int main(int argc, char **argv)
...
@@ -726,7 +726,7 @@ int main(int argc, char **argv)
UE_proc
.
frame_rx
=
frame
;
UE_proc
.
frame_rx
=
frame
;
UE_proc
.
nr_tti_rx
=
slot
;
UE_proc
.
nr_tti_rx
=
slot
;
UE_proc
.
subframe_rx
=
slot
;
UE_proc
.
subframe_rx
=
slot
;
nr_ue_scheduled_response
(
&
UE_mac
->
scheduled_response
);
nr_ue_scheduled_response
(
&
UE_mac
->
scheduled_response
);
printf
(
"Running phy procedures UE RX %d.%d
\n
"
,
frame
,
slot
);
printf
(
"Running phy procedures UE RX %d.%d
\n
"
,
frame
,
slot
);
...
@@ -743,7 +743,7 @@ int main(int argc, char **argv)
...
@@ -743,7 +743,7 @@ int main(int argc, char **argv)
if
(
UE
->
frame_parms
.
nb_antennas_rx
>
1
)
if
(
UE
->
frame_parms
.
nb_antennas_rx
>
1
)
LOG_M
(
"rxsigF1.m"
,
"rxsF1"
,
UE
->
common_vars
.
common_vars_rx_data_per_thread
[
0
].
rxdataF
[
1
],
slot_length_complex_samples_no_prefix
,
1
,
1
);
LOG_M
(
"rxsigF1.m"
,
"rxsF1"
,
UE
->
common_vars
.
common_vars_rx_data_per_thread
[
0
].
rxdataF
[
1
],
slot_length_complex_samples_no_prefix
,
1
,
1
);
}
}
if
(
UE
->
dci_ind
.
number_of_dcis
==
0
)
n_errors
++
;
if
(
UE
->
dci_ind
.
number_of_dcis
==
0
)
n_errors
++
;
}
}
}
//noise trials
}
//noise trials
...
...
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/NR_PHY/pucchsim.c
View file @
680a0c97
...
@@ -94,7 +94,7 @@ int main(int argc, char **argv)
...
@@ -94,7 +94,7 @@ int main(int argc, char **argv)
// int sync_pos, sync_pos_slot;
// int sync_pos, sync_pos_slot;
// FILE *rx_frame_file;
// FILE *rx_frame_file;
FILE
*
output_fd
=
NULL
;
FILE
*
output_fd
=
NULL
;
uint8_t
write_output_file
=
0
;
//
uint8_t write_output_file=0;
//int result;
//int result;
//int freq_offset;
//int freq_offset;
//int subframe_offset;
//int subframe_offset;
...
@@ -144,7 +144,7 @@ int main(int argc, char **argv)
...
@@ -144,7 +144,7 @@ int main(int argc, char **argv)
while
((
c
=
getopt
(
argc
,
argv
,
"f:hA:f:g:n:o:s:S:t:x:y:z:N:F:GR:P:IL:"
))
!=
-
1
)
{
while
((
c
=
getopt
(
argc
,
argv
,
"f:hA:f:g:n:o:s:S:t:x:y:z:N:F:GR:P:IL:"
))
!=
-
1
)
{
switch
(
c
)
{
switch
(
c
)
{
case
'f'
:
case
'f'
:
write_output_file
=
1
;
//
write_output_file=1;
output_fd
=
fopen
(
optarg
,
"w"
);
output_fd
=
fopen
(
optarg
,
"w"
);
if
(
output_fd
==
NULL
)
{
if
(
output_fd
==
NULL
)
{
...
...
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/NR_PHY/ulschsim.c
View file @
680a0c97
...
@@ -104,7 +104,7 @@ int main(int argc, char **argv) {
...
@@ -104,7 +104,7 @@ int main(int argc, char **argv) {
char
c
;
char
c
;
int
i
,
sf
;
int
i
,
sf
;
double
SNR
,
SNR_lin
,
snr0
=
-
2
.
0
,
snr1
=
2
.
0
;
double
SNR
,
snr0
=
-
2
.
0
,
snr1
=
2
.
0
;
//, SNR_lin
;
double
snr_step
=
0
.
1
;
double
snr_step
=
0
.
1
;
uint8_t
snr1set
=
0
;
uint8_t
snr1set
=
0
;
FILE
*
output_fd
=
NULL
;
FILE
*
output_fd
=
NULL
;
...
@@ -123,7 +123,7 @@ int main(int argc, char **argv) {
...
@@ -123,7 +123,7 @@ int main(int argc, char **argv) {
//unsigned char pbch_phase = 0;
//unsigned char pbch_phase = 0;
int
frame
=
0
,
subframe
=
0
;
int
frame
=
0
,
subframe
=
0
;
NR_DL_FRAME_PARMS
*
frame_parms
;
NR_DL_FRAME_PARMS
*
frame_parms
;
double
sigma
;
//
double sigma;
unsigned
char
qbits
=
8
;
unsigned
char
qbits
=
8
;
int
ret
;
int
ret
;
int
loglvl
=
OAILOG_WARNING
;
int
loglvl
=
OAILOG_WARNING
;
...
@@ -531,15 +531,10 @@ int main(int argc, char **argv) {
...
@@ -531,15 +531,10 @@ int main(int argc, char **argv) {
//if (i<16) printf("modulated_input[%d] = %d\n",i,modulated_input[i]);
//if (i<16) printf("modulated_input[%d] = %d\n",i,modulated_input[i]);
SNR_lin
=
pow
(
10
,
SNR
/
10
.
0
);
//SNR_lin = pow(10, SNR / 10.0);
sigma
=
1
.
0
/
sqrt
(
2
*
SNR_lin
);
//sigma = 1.0 / sqrt(2 * SNR_lin);
#if 0
channel_output_fixed[i] = (short) quantize(sigma / 4.0 / 4.0,
modulated_input[i] + sigma * gaussdouble(0.0, 1.0),
qbits);
#else
channel_output_fixed
[
i
]
=
(
short
)
quantize
(
0
.
01
,
modulated_input
[
i
],
qbits
);
channel_output_fixed
[
i
]
=
(
short
)
quantize
(
0
.
01
,
modulated_input
[
i
],
qbits
);
#endif
//channel_output_fixed[i] = (short) quantize(sigma / 4.0 / 4.0, modulated_input[i] + sigma * gaussdouble(0.0, 1.0), qbits);
//channel_output_fixed[i] = (char)quantize8bit(sigma/4.0,(2.0*modulated_input[i]) - 1.0 + sigma*gaussdouble(0.0,1.0));
//channel_output_fixed[i] = (char)quantize8bit(sigma/4.0,(2.0*modulated_input[i]) - 1.0 + sigma*gaussdouble(0.0,1.0));
//printf("channel_output_fixed[%d]: %d\n",i,channel_output_fixed[i]);
//printf("channel_output_fixed[%d]: %d\n",i,channel_output_fixed[i]);
...
...
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
680a0c97
...
@@ -453,7 +453,7 @@ int main(int argc, char **argv) {
...
@@ -453,7 +453,7 @@ int main(int argc, char **argv) {
unsigned
char
harq_pid
=
0
;
unsigned
char
harq_pid
=
0
;
unsigned
int
TBS
=
8424
;
unsigned
int
TBS
=
8424
;
unsigned
int
available_bits
;
unsigned
int
available_bits
;
uint8_t
nb_re_dmrs
=
UE
->
dmrs_UplinkConfig
.
pusch_maxLength
*
(
UE
->
dmrs_UplinkConfig
.
pusch_dmrs_type
==
pusch_dmrs_type1
)
?
6
:
4
;
uint8_t
nb_re_dmrs
=
UE
->
dmrs_UplinkConfig
.
pusch_maxLength
*
(
UE
->
dmrs_UplinkConfig
.
pusch_dmrs_type
==
pusch_dmrs_type1
)
?
6
:
4
;
uint8_t
length_dmrs
=
1
;
uint8_t
length_dmrs
=
1
;
unsigned
char
mod_order
;
unsigned
char
mod_order
;
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
680a0c97
...
@@ -400,7 +400,7 @@ void nr_configure_dci_from_pdcch_config(nfapi_nr_dl_config_pdcch_parameters_rel1
...
@@ -400,7 +400,7 @@ void nr_configure_dci_from_pdcch_config(nfapi_nr_dl_config_pdcch_parameters_rel1
// first symbol
// first symbol
//AssertFatal(pdcch_scs==kHz15, "PDCCH SCS above 15kHz not allowed if a symbol above 2 is monitored");
//AssertFatal(pdcch_scs==kHz15, "PDCCH SCS above 15kHz not allowed if a symbol above 2 is monitored");
for
(
int
i
=
0
;
i
<
get_symbolsperslot
(
&
cfg
);
i
++
)
for
(
int
i
=
0
;
i
<
get_symbolsperslot
(
&
cfg
);
i
++
)
if
((
search_space
->
monitoring_symbols_in_slot
>>
(
15
-
i
))
&
1
)
{
if
((
search_space
->
monitoring_symbols_in_slot
>>
(
31
-
i
))
&
1
)
{
pdcch_params
->
first_symbol
=
i
;
pdcch_params
->
first_symbol
=
i
;
break
;
break
;
}
}
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/main.c
View file @
680a0c97
...
@@ -57,8 +57,8 @@ void nr_init_coreset(nfapi_nr_coreset_t *coreset) {
...
@@ -57,8 +57,8 @@ void nr_init_coreset(nfapi_nr_coreset_t *coreset) {
coreset
->
dmrs_scrambling_id
=
0
;
coreset
->
dmrs_scrambling_id
=
0
;
}
}
void
nr_init_search_space
(
nfapi_nr_search_space_t
*
search_space
)
{
void
nr_init_search_space
(
nfapi_nr_search_space_t
*
search_space
)
{
search_space
->
search_space_id
=
1
;
search_space
->
search_space_id
=
1
;
search_space
->
coreset_id
=
1
;
search_space
->
coreset_id
=
1
;
search_space
->
search_space_type
=
NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC
;
search_space
->
search_space_type
=
NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC
;
...
...
This diff is collapsed.
Click to expand it.
openair2/NETWORK_DRIVER/MESH/local.h
View file @
680a0c97
...
@@ -64,7 +64,9 @@
...
@@ -64,7 +64,9 @@
#include "rrc_nas_primitives.h"
#include "rrc_nas_primitives.h"
#include "COMMON/platform_types.h"
#include "COMMON/platform_types.h"
#define MAKE_VERSION(a,b,c) ((a)*256+(b)*16+(c))
#ifndef MAKE_VERSION
#define MAKE_VERSION(a,b,c) ((a)*256+(b)*16+(c))
#endif
struct
rb_entity
{
struct
rb_entity
{
nasRadioBearerId_t
rab_id
;
nasRadioBearerId_t
rab_id
;
...
...
This diff is collapsed.
Click to expand it.
openair2/UTIL/OPT/opt.h
View file @
680a0c97
...
@@ -68,14 +68,14 @@ typedef guint8 gboolean;
...
@@ -68,14 +68,14 @@ typedef guint8 gboolean;
#define CONFIG_HLP_TYPEMON "Type of L2 monitoring messages: none,pcap,wireshark \n"
#define CONFIG_HLP_TYPEMON "Type of L2 monitoring messages: none,pcap,wireshark \n"
#define CONFIG_HLP_L2MONIP "ip address for wireshark messages \n"
#define CONFIG_HLP_L2MONIP "ip address for wireshark messages \n"
#define CONFIG_HLP_L2MONPATH "file path for pcap messages on localhost \n"
#define CONFIG_HLP_L2MONPATH "file path for pcap messages on localhost \n"
/*---------------------------------------------------------------------------------------------------------------------------------------------
--------------------------
*/
/*---------------------------------------------------------------------------------------------------------------------------------------------*/
/* command line parameters for LOG utility
*/
/* command line parameters for LOG utility */
/* optname
helpstr paramflags XXXptr defXXXval type
numelt */
/* optname
helpstr paramflags XXXptr defXXXval type
numelt */
/*---------------------------------------------------------------------------------------------------------------------------------------------
--------------------------
*/
/*---------------------------------------------------------------------------------------------------------------------------------------------*/
#define OPT_PARAMS_DESC { \
#define OPT_PARAMS_DESC { \
{"type" ,
CONFIG_HLP_TYPEMON, 0, strptr:&in_type, defstrval:"none", TYPE_STRING, 0},
\
{"type" ,
CONFIG_HLP_TYPEMON, 0, strptr:&in_type, defstrval:"none", TYPE_STRING, 0},
\
{"ip" ,
CONFIG_HLP_L2MONIP, 0, strptr:&in_ip, defstrval:"127.0.0.1", TYPE_STRING, 0},
\
{"ip" ,
CONFIG_HLP_L2MONIP, 0, strptr:&in_ip, defstrval:"127.0.0.1", TYPE_STRING, 0},
\
{"path" ,
CONFIG_HLP_L2MONPATH, 0, strptr:&in_path, defstrval:"/tmp/oai_opt.pcap", TYPE_STRING, 0},
\
{"path" ,
CONFIG_HLP_L2MONPATH, 0, strptr:&in_path, defstrval:"/tmp/oai_opt.pcap", TYPE_STRING, 0},
\
}
}
#define OPTTYPE_IDX 0
#define OPTTYPE_IDX 0
...
...
This diff is collapsed.
Click to expand it.
openair2/UTIL/OPT/probe.c
View file @
680a0c97
...
@@ -99,8 +99,6 @@ int opt_enabled=0;
...
@@ -99,8 +99,6 @@ int opt_enabled=0;
//static unsigned char g_PDUBuffer[1600];
//static unsigned char g_PDUBuffer[1600];
//static unsigned int g_PDUOffset;
//static unsigned int g_PDUOffset;
char
in_ip
[
40
];
char
in_path
[
FILENAME_MAX
];
FILE
*
file_fd
=
NULL
;
FILE
*
file_fd
=
NULL
;
pcap_hdr_t
file_header
=
{
pcap_hdr_t
file_header
=
{
0xa1b2c3d4
,
/* magic number */
0xa1b2c3d4
,
/* magic number */
...
@@ -334,7 +332,9 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
...
@@ -334,7 +332,9 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
/* Write an individual PDU (PCAP packet header + mac-context + mac-pdu) */
/* Write an individual PDU (PCAP packet header + mac-context + mac-pdu) */
static
int
MAC_LTE_PCAP_WritePDU
(
MAC_Context_Info_t
*
context
,
static
int
MAC_LTE_PCAP_WritePDU
(
MAC_Context_Info_t
*
context
,
const
uint8_t
*
PDU
,
unsigned
int
length
)
{
const
uint8_t
*
PDU
,
unsigned
int
length
)
{
pcaprec_hdr_t
packet_header
;
pcaprec_hdr_t
packet_header
;
uint8_t
context_header
[
256
];
uint8_t
context_header
[
256
];
int
offset
=
0
;
int
offset
=
0
;
...
@@ -379,6 +379,7 @@ static int MAC_LTE_PCAP_WritePDU(MAC_Context_Info_t *context,
...
@@ -379,6 +379,7 @@ static int MAC_LTE_PCAP_WritePDU(MAC_Context_Info_t *context,
fwrite
(
PDU
,
1
,
length
,
file_fd
);
fwrite
(
PDU
,
1
,
length
,
file_fd
);
return
1
;
return
1
;
}
}
#include <common/ran_context.h>
#include <common/ran_context.h>
extern
RAN_CONTEXT_t
RC
;
extern
RAN_CONTEXT_t
RC
;
#include <openair1/PHY/phy_extern_ue.h>
#include <openair1/PHY/phy_extern_ue.h>
...
@@ -434,8 +435,11 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
...
@@ -434,8 +435,11 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
}
}
}
}
/*---------------------------------------------------*/
/*---------------------------------------------------*/
int
init_opt
(
void
)
{
int
init_opt
(
void
)
{
char
*
in_type
=
NULL
;
char
*
in_type
=
NULL
;
char
*
in_ip
=
NULL
;
char
*
in_path
=
NULL
;
paramdef_t
opt_params
[]
=
OPT_PARAMS_DESC
;
paramdef_t
opt_params
[]
=
OPT_PARAMS_DESC
;
checkedparam_t
opt_checkParams
[]
=
OPTPARAMS_CHECK_DESC
;
checkedparam_t
opt_checkParams
[]
=
OPTPARAMS_CHECK_DESC
;
uint16_t
in_port
;
uint16_t
in_port
;
...
@@ -520,6 +524,7 @@ int init_opt(void) {
...
@@ -520,6 +524,7 @@ int init_opt(void) {
// memset(mac_info, 0, sizeof(mac_lte_info)+pdu_buffer_size + 8);
// memset(mac_info, 0, sizeof(mac_lte_info)+pdu_buffer_size + 8);
return
(
1
);
return
(
1
);
}
}
void
terminate_opt
(
void
)
{
void
terminate_opt
(
void
)
{
/* Close local socket */
/* Close local socket */
// free(mac_info);
// free(mac_info);
...
...
This diff is collapsed.
Click to expand it.
targets/ARCH/COMMON/common_lib.c
View file @
680a0c97
...
@@ -153,8 +153,7 @@ void uhd_set_thread_prio(void) {
...
@@ -153,8 +153,7 @@ void uhd_set_thread_prio(void) {
}
else
{
}
else
{
(
set_prio_func_t
)
shlib_fdesc
[
0
].
fptr
();
(
set_prio_func_t
)
shlib_fdesc
[
0
].
fptr
();
}
}
return
ret
;
//return ret;
}
}
int
openair0_device_load
(
openair0_device
*
device
,
int
openair0_device_load
(
openair0_device
*
device
,
...
...
This diff is collapsed.
Click to expand it.
targets/RT/USER/lte-softmodem-common.c
View file @
680a0c97
...
@@ -54,6 +54,7 @@ softmodem_params_t *get_softmodem_params(void) {
...
@@ -54,6 +54,7 @@ softmodem_params_t *get_softmodem_params(void) {
void
get_common_options
(
void
)
{
void
get_common_options
(
void
)
{
uint32_t
online_log_messages
;
uint32_t
online_log_messages
;
uint32_t
glog_level
;
uint32_t
glog_level
;
uint32_t
glog_verbosity
;
uint32_t
start_telnetsrv
;
uint32_t
start_telnetsrv
;
uint32_t
noS1
;
uint32_t
noS1
;
uint32_t
nokrnmod
;
uint32_t
nokrnmod
;
...
...
This diff is collapsed.
Click to expand it.
targets/RT/USER/lte-softmodem.h
View file @
680a0c97
This diff is collapsed.
Click to expand it.
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