Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
e9d79295
Commit
e9d79295
authored
Jan 30, 2023
by
Vaibhav Shrivastava
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'FRD_299_Changes' into Latest_3GPP_FRD_299
parents
4ed32230
9d5bb0c0
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
201 additions
and
687 deletions
+201
-687
common/utils/nr/nr_common.c
common/utils/nr/nr_common.c
+13
-62
executables/nr-gnb.c
executables/nr-gnb.c
+20
-47
executables/nr-softmodem.c
executables/nr-softmodem.c
+13
-147
executables/nr-ue.c
executables/nr-ue.c
+9
-210
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+75
-74
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+4
-4
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
+2
-4
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+2
-2
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/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+3
-12
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+8
-7
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+2
-2
openair2/RRC/NR/L2_nr_interface.c
openair2/RRC/NR/L2_nr_interface.c
+0
-85
openair2/RRC/NR/nr_rrc_proto.h
openair2/RRC/NR/nr_rrc_proto.h
+5
-3
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+44
-27
No files found.
common/utils/nr/nr_common.c
View file @
e9d79295
...
...
@@ -191,65 +191,17 @@ int PRBalloc_to_locationandbandwidth(int NPRB,int RBstart) {
return
(
PRBalloc_to_locationandbandwidth0
(
NPRB
,
RBstart
,
275
));
}
/// Target code rate tables indexed by Imcs
/* TS 38.214 table 5.1.3.1-1 - MCS index table 1 for PDSCH */
uint16_t
nr_target_code_rate_table1
[
29
]
=
{
120
,
157
,
193
,
251
,
308
,
379
,
449
,
526
,
602
,
679
,
340
,
378
,
434
,
490
,
553
,
\
616
,
658
,
438
,
466
,
517
,
567
,
616
,
666
,
719
,
772
,
822
,
873
,
910
,
948
};
/* TS 38.214 table 5.1.3.1-2 - MCS index table 2 for PDSCH */
// Imcs values 20 and 26 have been multiplied by 2 to avoid the floating point
uint16_t
nr_target_code_rate_table2
[
28
]
=
{
120
,
193
,
308
,
449
,
602
,
378
,
434
,
490
,
553
,
616
,
658
,
466
,
517
,
567
,
\
616
,
666
,
719
,
772
,
822
,
873
,
1365
,
711
,
754
,
797
,
841
,
885
,
1833
,
948
};
/* TS 38.214 table 5.1.3.1-3 - MCS index table 3 for PDSCH */
uint16_t
nr_target_code_rate_table3
[
29
]
=
{
30
,
40
,
50
,
64
,
78
,
99
,
120
,
157
,
193
,
251
,
308
,
379
,
449
,
526
,
602
,
340
,
\
378
,
434
,
490
,
553
,
616
,
438
,
466
,
517
,
567
,
616
,
666
,
719
,
772
};
uint16_t
nr_tbs_table
[
93
]
=
{
24
,
32
,
40
,
48
,
56
,
64
,
72
,
80
,
88
,
96
,
104
,
112
,
120
,
128
,
136
,
144
,
152
,
160
,
168
,
176
,
184
,
192
,
208
,
224
,
240
,
256
,
272
,
288
,
304
,
320
,
\
336
,
352
,
368
,
384
,
408
,
432
,
456
,
480
,
504
,
528
,
552
,
576
,
608
,
640
,
672
,
704
,
736
,
768
,
808
,
848
,
888
,
928
,
984
,
1032
,
1064
,
1128
,
1160
,
1192
,
1224
,
1256
,
\
1288
,
1320
,
1352
,
1416
,
1480
,
1544
,
1608
,
1672
,
1736
,
1800
,
1864
,
1928
,
2024
,
2088
,
2152
,
2216
,
2280
,
2408
,
2472
,
2536
,
2600
,
2664
,
2728
,
2792
,
2856
,
2976
,
\
3104
,
3240
,
3368
,
3496
,
3624
,
3752
,
3824
};
uint8_t
nr_get_Qm
(
uint8_t
Imcs
,
uint8_t
table_idx
)
{
switch
(
table_idx
)
{
case
1
:
return
(((
Imcs
<
10
)
||
(
Imcs
==
29
))
?
2
:
((
Imcs
<
17
)
||
(
Imcs
==
30
))
?
4
:
((
Imcs
<
29
)
||
(
Imcs
==
31
))
?
6
:-
1
);
break
;
case
2
:
return
(((
Imcs
<
5
)
||
(
Imcs
==
28
))
?
2
:
((
Imcs
<
11
)
||
(
Imcs
==
29
))
?
4
:
((
Imcs
<
20
)
||
(
Imcs
==
30
))
?
6
:
((
Imcs
<
28
)
||
(
Imcs
==
31
))
?
8
:-
1
);
break
;
case
3
:
return
(((
Imcs
<
15
)
||
(
Imcs
==
29
))
?
2
:
((
Imcs
<
21
)
||
(
Imcs
==
30
))
?
4
:
((
Imcs
<
29
)
||
(
Imcs
==
31
))
?
6
:-
1
);
break
;
default:
AssertFatal
(
0
,
"Invalid MCS table index %d (expected in range [1,3])
\n
"
,
table_idx
);
return
(
0
);
break
;
}
}
uint32_t
nr_get_code_rate
(
uint8_t
Imcs
,
uint8_t
table_idx
)
{
switch
(
table_idx
)
{
case
1
:
return
(
nr_target_code_rate_table1
[
Imcs
]);
break
;
case
2
:
return
(
nr_target_code_rate_table2
[
Imcs
]);
break
;
int
cce_to_reg_interleaving
(
const
int
R
,
int
k
,
int
n_shift
,
const
int
C
,
int
L
,
const
int
N_regs
)
{
case
3
:
return
(
nr_target_code_rate_table3
[
Imcs
]);
break
;
default:
AssertFatal
(
0
,
"Invalid MCS table index %d (expected in range [1,3])
\n
"
,
table_idx
);
return
(
0
);
break
;
int
f
;
// interleaving function
if
(
R
==
0
)
f
=
k
;
else
{
int
c
=
k
/
R
;
int
r
=
k
%
R
;
f
=
(
r
*
C
+
c
+
n_shift
)
%
(
N_regs
/
L
);
}
return
f
;
}
void
get_coreset_rballoc
(
uint8_t
*
FreqDomainResource
,
int
*
n_rb
,
int
*
rb_offset
)
{
...
...
@@ -275,7 +227,8 @@ void get_coreset_rballoc(uint8_t *FreqDomainResource,int *n_rb,int *rb_offset) {
*
n_rb
=
6
*
count
;
}
int
get_nb_periods_per_frame
(
uint8_t
tdd_period
)
{
int
get_nb_periods_per_frame
(
uint8_t
tdd_period
)
{
int
nb_periods_per_frame
;
switch
(
tdd_period
)
{
...
...
@@ -342,9 +295,9 @@ int get_dmrs_port(int nl, uint16_t dmrs_ports)
return
p
;
}
lte_
frame_type_t
get_frame_type
(
uint16_t
current_band
,
uint8_t
scs_index
)
frame_type_t
get_frame_type
(
uint16_t
current_band
,
uint8_t
scs_index
)
{
lte_
frame_type_t
current_type
;
frame_type_t
current_type
;
int32_t
delta_duplex
=
get_delta_duplex
(
current_band
,
scs_index
);
if
(
delta_duplex
==
0
)
...
...
@@ -509,7 +462,6 @@ int get_nr_table_idx(int nr_bandP, uint8_t scs_index) {
return
i
;
}
int
get_subband_size
(
int
NPRB
,
int
size
)
{
// implements table 5.2.1.4-2 from 36.214
//
...
...
@@ -792,6 +744,5 @@ void SLIV2SL(int SLIV,int *S,int *L) {
*
L
=
15
-
SLIVdiv14
;
*
S
=
13
-
SLIVmod14
;
}
}
executables/nr-gnb.c
View file @
e9d79295
...
...
@@ -135,7 +135,6 @@ void rx_func(void *param) {
int
slot_rx
=
info
->
slot_rx
;
int
frame_tx
=
info
->
frame_tx
;
int
slot_tx
=
info
->
slot_tx
;
sl_ahead
=
sf_ahead
*
gNB
->
frame_parms
.
slots_per_subframe
;
nfapi_nr_config_request_scf_t
*
cfg
=
&
gNB
->
gNB_config
;
int
absslot_tx
=
info
->
timestamp_tx
/
gNB
->
frame_parms
.
get_samples_per_slot
(
slot_rx
,
&
gNB
->
frame_parms
);
...
...
@@ -188,15 +187,14 @@ void rx_func(void *param) {
void
clean_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
);
int
j
;
for
(
j
=
0
;
j
<
NUMBER_OF_NR_ULSCH_MAX
;
j
++
)
if
(
gNB
->
ulsch
[
j
][
0
]
->
rnti
==
rnti_to_remove
[
i
])
{
gNB
->
ulsch
[
j
][
0
]
->
rnti
=
0
;
gNB
->
ulsch
[
j
][
0
]
->
harq_mask
=
0
;
//clean_gNB_ulsch(gNB->ulsch[j][0]);
if
(
gNB
->
ulsch
[
j
]
->
rnti
==
rnti_to_remove
[
i
])
{
gNB
->
ulsch
[
j
]
->
rnti
=
0
;
gNB
->
ulsch
[
j
]
->
harq_mask
=
0
;
int
h
;
for
(
h
=
0
;
h
<
NR_MAX_ULSCH_HARQ_PROCESSES
;
h
++
)
{
gNB
->
ulsch
[
j
]
[
0
]
->
harq_processes
[
h
]
->
status
=
SCH_IDLE
;
gNB
->
ulsch
[
j
]
[
0
]
->
harq_processes
[
h
]
->
round
=
0
;
gNB
->
ulsch
[
j
]
[
0
]
->
harq_processes
[
h
]
->
handled
=
0
;
gNB
->
ulsch
[
j
]
->
harq_processes
[
h
]
->
status
=
SCH_IDLE
;
gNB
->
ulsch
[
j
]
->
harq_processes
[
h
]
->
round
=
0
;
gNB
->
ulsch
[
j
]
->
harq_processes
[
h
]
->
handled
=
0
;
}
up_removed
++
;
}
...
...
@@ -221,7 +219,6 @@ void rx_func(void *param) {
if
(
pthread_mutex_unlock
(
&
rnti_to_remove_mutex
))
exit
(
1
);
// 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
);
if
(
rx_slot_type
==
NR_UPLINK_SLOT
||
rx_slot_type
==
NR_MIXED_SLOT
)
{
// UE-specific RX processing for subframe n
...
...
@@ -236,8 +233,7 @@ void rx_func(void *param) {
gNB
->
common_vars
.
rxdataF
[
aa
],
slot_rx
,
0
,
gNB
->
frame_parms
.
Ncp
==
EXTENDED
?
12
:
14
,
gNB
->
frame_parms
.
ofdm_symbol_size
);
gNB
->
frame_parms
.
Ncp
==
EXTENDED
?
12
:
14
);
}
phy_procedures_gNB_uespec_RX
(
gNB
,
frame_rx
,
slot_rx
);
}
...
...
@@ -256,7 +252,8 @@ void rx_func(void *param) {
gNB
->
if_inst
->
NR_UL_indication
(
&
gNB
->
UL_INFO
);
pthread_mutex_unlock
(
&
gNB
->
UL_INFO_mutex
);
stop_meas
(
&
gNB
->
ul_indication_stats
);
int
tx_slot_type
=
nr_slot_select
(
cfg
,
frame_rx
,
slot_tx
);
if
(
tx_slot_type
==
NR_DOWNLINK_SLOT
||
tx_slot_type
==
NR_MIXED_SLOT
)
{
notifiedFIFO_elt_t
*
res
;
processingData_L1tx_t
*
syncMsg
;
...
...
@@ -449,37 +446,19 @@ void init_gNB_Tpool(int inst) {
gNB_L1_proc_t
*
proc
=
&
gNB
->
proc
;
// ULSCH decoding threadpool
gNB
->
threadPool
=
(
tpool_t
*
)
malloc
(
sizeof
(
tpool_t
));
int
numCPU
=
sysconf
(
_SC_NPROCESSORS_ONLN
);
LOG_I
(
PHY
,
"Number of threads requested in config file: %d, Number of threads available on this machine: %d
\n
"
,
gNB
->
thread_pool_size
,
numCPU
);
int
threadCnt
=
min
(
numCPU
,
gNB
->
thread_pool_size
);
if
(
threadCnt
<
2
)
LOG_E
(
PHY
,
"Number of threads for gNB should be more than 1. Allocated only %d
\n
"
,
threadCnt
);
char
pool
[
80
];
sprintf
(
pool
,
"-1"
);
int
s_offset
=
0
;
for
(
int
icpu
=
1
;
icpu
<
threadCnt
;
icpu
++
)
{
sprintf
(
pool
+
2
+
s_offset
,
",-1"
);
s_offset
+=
3
;
}
if
(
getenv
(
"noThreads"
))
strcpy
(
pool
,
"n"
);
initTpool
(
pool
,
gNB
->
threadPool
,
cpumeas
(
CPUMEAS_GETSTATE
));
initTpool
(
get_softmodem_params
()
->
threadPoolConfig
,
&
gNB
->
threadPool
,
cpumeas
(
CPUMEAS_GETSTATE
));
// ULSCH decoder result FIFO
gNB
->
respDecode
=
(
notifiedFIFO_t
*
)
malloc
(
sizeof
(
notifiedFIFO_t
));
initNotifiedFIFO
(
gNB
->
respDecode
);
initNotifiedFIFO
(
&
gNB
->
respDecode
);
// L1 RX result FIFO
gNB
->
resp_L1
=
(
notifiedFIFO_t
*
)
malloc
(
sizeof
(
notifiedFIFO_t
));
initNotifiedFIFO
(
gNB
->
resp_L1
);
notifiedFIFO_elt_t
*
msg
=
newNotifiedFIFO_elt
(
sizeof
(
processingData_L1_t
),
0
,
gNB
->
resp_L1
,
rx_func
);
pushNotifiedFIFO
(
gNB
->
resp_L1
,
msg
);
// to unblock the process in the beginning
initNotifiedFIFO
(
&
gNB
->
resp_L1
);
notifiedFIFO_elt_t
*
msg
=
newNotifiedFIFO_elt
(
sizeof
(
processingData_L1_t
),
0
,
&
gNB
->
resp_L1
,
rx_func
);
pushNotifiedFIFO
(
&
gNB
->
resp_L1
,
msg
);
// to unblock the process in the beginning
// L1 TX result FIFO
gNB
->
L1_tx_free
=
(
notifiedFIFO_t
*
)
malloc
(
sizeof
(
notifiedFIFO_t
));
gNB
->
L1_tx_filled
=
(
notifiedFIFO_t
*
)
malloc
(
sizeof
(
notifiedFIFO_t
));
gNB
->
L1_tx_out
=
(
notifiedFIFO_t
*
)
malloc
(
sizeof
(
notifiedFIFO_t
));
initNotifiedFIFO
(
gNB
->
L1_tx_free
);
initNotifiedFIFO
(
gNB
->
L1_tx_filled
);
initNotifiedFIFO
(
gNB
->
L1_tx_out
);
initNotifiedFIFO
(
&
gNB
->
L1_tx_free
);
initNotifiedFIFO
(
&
gNB
->
L1_tx_filled
);
initNotifiedFIFO
(
&
gNB
->
L1_tx_out
);
// we create 2 threads for L1 tx processing
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
...
...
@@ -584,15 +563,9 @@ void init_eNB_afterRU(void) {
gNB
->
RU_list
[
ru_id
]
->
idx
);
for
(
i
=
0
;
i
<
gNB
->
RU_list
[
ru_id
]
->
nb_rx
;
aa
++
,
i
++
)
{
LOG_I
(
PHY
,
"Attaching RU %d antenna %d to gNB antenna %d
\n
"
,
gNB
->
RU_list
[
ru_id
]
->
idx
,
i
,
aa
);
gNB
->
prach_vars
.
rxsigF
[
aa
]
=
gNB
->
RU_list
[
ru_id
]
->
prach_rxsigF
[
0
][
i
];
#if 0
printf("before %p\n", gNB->common_vars.rxdataF[aa]);
#endif
gNB
->
common_vars
.
rxdataF
[
aa
]
=
gNB
->
RU_list
[
ru_id
]
->
common
.
rxdataF
[
i
];
#if 0
printf("after %p\n", gNB->common_vars.rxdataF[aa]);
#endif
LOG_I
(
PHY
,
"Attaching RU %d antenna %d to gNB antenna %d
\n
"
,
gNB
->
RU_list
[
ru_id
]
->
idx
,
i
,
aa
);
gNB
->
prach_vars
.
rxsigF
[
aa
]
=
gNB
->
RU_list
[
ru_id
]
->
prach_rxsigF
[
0
][
i
];
gNB
->
common_vars
.
rxdataF
[
aa
]
=
gNB
->
RU_list
[
ru_id
]
->
common
.
rxdataF
[
i
];
}
}
...
...
executables/nr-softmodem.c
View file @
e9d79295
...
...
@@ -100,7 +100,7 @@ int sync_var=-1; //!< protected by mutex \ref sync_mutex.
int
config_sync_var
=-
1
;
volatile
int
start_gNB
=
0
;
volatile
int
oai_exit
=
0
;
int
oai_exit
=
0
;
static
int
wait_for_sync
=
0
;
...
...
@@ -174,7 +174,7 @@ void sendFs6Ulharq(enum pckType type, int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *
extern
void
reset_opp_meas
(
void
);
extern
void
print_opp_meas
(
void
);
//
extern void *udp_eNB_task(void *args_p);
extern
void
*
udp_eNB_task
(
void
*
args_p
);
int
transmission_mode
=
1
;
int
emulate_rf
=
0
;
...
...
@@ -305,7 +305,7 @@ int create_gNB_tasks(uint32_t gnb_nb) {
/*if (itti_create_task (TASK_GNB_APP, gNB_app_task, NULL) < 0) {
LOG_E(GNB_APP, "Create task for gNB APP failed\n");
return -1;
}*/
}*/
if
(
itti_create_task
(
TASK_SCTP
,
sctp_eNB_task
,
NULL
)
<
0
)
{
LOG_E
(
SCTP
,
"Create task for SCTP failed
\n
"
);
return
-
1
;
...
...
@@ -330,26 +330,20 @@ int create_gNB_tasks(uint32_t gnb_nb) {
char
aprefix
[
MAX_OPTNAME_SIZE
*
2
+
8
];
sprintf
(
aprefix
,
"%s.[%i].%s"
,
GNB_CONFIG_STRING_GNB_LIST
,
0
,
GNB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG
);
config_get
(
NETParams
,
sizeof
(
NETParams
)
/
sizeof
(
paramdef_t
),
aprefix
);
for
(
int
i
=
GNB_INTERFACE_NAME_FOR_NG_AMF_IDX
;
i
<=
GNB_IPV4_ADDRESS_FOR_NG_AMF_IDX
;
i
++
)
{
if
(
NETParams
[
i
].
strptr
==
NULL
)
{
LOG_E
(
NGAP
,
"No configuration in the file.
\n
"
);
NGAP_CONF_MODE
=
0
;
LOG_E
(
NGAP
,
"No AMF configuration in the file.
\n
"
);
}
else
{
LOG_D
(
NGAP
,
"Configuration in the file: %s.
\n
"
,
*
NETParams
[
i
].
strptr
);
LOG_D
(
NGAP
,
"Configuration in the file: %s.
\n
"
,
*
NETParams
[
i
].
strptr
);
}
}
if
(
gnb_nb
>
0
)
{
if
(
NGAP_CONF_MODE
)
{
if
(
itti_create_task
(
TASK_NGAP
,
ngap_gNB_task
,
NULL
)
<
0
)
{
LOG_E
(
NGAP
,
"Create task for NGAP failed
\n
"
);
return
-
1
;
}
}
else
{
LOG_I
(
NGAP
,
"Ngap task not created
\n
"
);
if
(
itti_create_task
(
TASK_NGAP
,
ngap_gNB_task
,
NULL
)
<
0
)
{
LOG_E
(
NGAP
,
"Create task for NGAP failed
\n
"
);
return
-
1
;
}
}
}
...
...
@@ -407,14 +401,13 @@ int create_gNB_tasks(uint32_t gnb_nb) {
return
-
1
;
}
//Use check on x2ap to consider the NSA scenario and check
on AMF_MODE_ENABLED for the
SA scenario
if
(
is_x2ap_enabled
()
||
AMF_MODE_ENABLED
)
{
//Use check on x2ap to consider the NSA scenario and check
for
SA scenario
if
(
is_x2ap_enabled
()
||
get_softmodem_params
()
->
sa
)
{
if
(
itti_create_task
(
TASK_GTPV1_U
,
&
gtpv1uTask
,
NULL
)
<
0
)
{
LOG_E
(
GTPU
,
"Create task for GTPV1U failed
\n
"
);
return
-
1
;
}
}
}
return
0
;
...
...
@@ -542,86 +535,6 @@ void terminate_task(task_id_t task_id, module_id_t mod_id) {
//extern void free_transport(PHY_VARS_gNB *);
extern
void
nr_phy_free_RU
(
RU_t
*
);
int
stop_L1L2
(
module_id_t
gnb_id
)
{
LOG_W
(
GNB_APP
,
"stopping nr-softmodem
\n
"
);
oai_exit
=
1
;
if
(
!
RC
.
ru
)
{
LOG_F
(
GNB_APP
,
"no RU configured
\n
"
);
return
-
1
;
}
/* stop trx devices, multiple carrier currently not supported by RU */
if
(
RC
.
ru
[
gnb_id
])
{
if
(
RC
.
ru
[
gnb_id
]
->
rfdevice
.
trx_stop_func
)
{
RC
.
ru
[
gnb_id
]
->
rfdevice
.
trx_stop_func
(
&
RC
.
ru
[
gnb_id
]
->
rfdevice
);
LOG_I
(
GNB_APP
,
"turned off RU rfdevice
\n
"
);
}
else
{
LOG_W
(
GNB_APP
,
"can not turn off rfdevice due to missing trx_stop_func callback, proceeding anyway!
\n
"
);
}
if
(
RC
.
ru
[
gnb_id
]
->
ifdevice
.
trx_stop_func
)
{
RC
.
ru
[
gnb_id
]
->
ifdevice
.
trx_stop_func
(
&
RC
.
ru
[
gnb_id
]
->
ifdevice
);
LOG_I
(
GNB_APP
,
"turned off RU ifdevice
\n
"
);
}
else
{
LOG_W
(
GNB_APP
,
"can not turn off ifdevice due to missing trx_stop_func callback, proceeding anyway!
\n
"
);
}
}
else
{
LOG_W
(
GNB_APP
,
"no RU found for index %d
\n
"
,
gnb_id
);
return
-
1
;
}
/* these tasks need to pick up new configuration */
terminate_task
(
TASK_RRC_ENB
,
gnb_id
);
LOG_I
(
GNB_APP
,
"calling kill_gNB_proc() for instance %d
\n
"
,
gnb_id
);
kill_gNB_proc
(
gnb_id
);
LOG_I
(
GNB_APP
,
"calling kill_NR_RU_proc() for instance %d
\n
"
,
gnb_id
);
kill_NR_RU_proc
(
gnb_id
);
oai_exit
=
0
;
//free_transport(RC.gNB[gnb_id]);
phy_free_nr_gNB
(
RC
.
gNB
[
gnb_id
]);
nr_phy_free_RU
(
RC
.
ru
[
gnb_id
]);
free_lte_top
();
return
0
;
}
/*
* Restart the nr-softmodem after it has been soft-stopped with stop_L1L2()
*/
int
restart_L1L2
(
module_id_t
gnb_id
)
{
RU_t
*
ru
=
RC
.
ru
[
gnb_id
];
MessageDef
*
msg_p
=
NULL
;
LOG_W
(
GNB_APP
,
"restarting nr-softmodem
\n
"
);
/* block threads */
sync_var
=
-
1
;
RC
.
gNB
[
gnb_id
]
->
configured
=
0
;
RC
.
ru_mask
|=
(
1
<<
ru
->
idx
);
set_function_spec_param
(
RC
.
ru
[
gnb_id
]);
LOG_I
(
GNB_APP
,
"attempting to create ITTI tasks
\n
"
);
// No more rrc thread, as many race conditions are hidden behind
rrc_enb_init
();
itti_mark_task_ready
(
TASK_RRC_ENB
);
/* pass a reconfiguration request which will configure everything down to
* RC.eNB[i][j]->frame_parms, too */
msg_p
=
itti_alloc_new_message
(
TASK_ENB_APP
,
0
,
RRC_CONFIGURATION_REQ
);
RRC_CONFIGURATION_REQ
(
msg_p
)
=
RC
.
rrc
[
gnb_id
]
->
configuration
;
itti_send_msg_to_task
(
TASK_RRC_ENB
,
ENB_MODULE_ID_TO_INSTANCE
(
gnb_id
),
msg_p
);
/* TODO XForms might need to be restarted, but it is currently (09/02/18)
* broken, so we cannot test it */
wait_gNBs
();
init_RU_proc
(
ru
);
ru
->
rf_map
.
card
=
0
;
ru
->
rf_map
.
chain
=
0
;
/* CC_id + chain_offset;*/
wait_RUs
();
init_eNB_afterRU
();
printf
(
"Sending sync to all threads
\n
"
);
pthread_mutex_lock
(
&
sync_mutex
);
sync_var
=
0
;
pthread_cond_broadcast
(
&
sync_cond
);
pthread_mutex_unlock
(
&
sync_mutex
);
return
0
;
}
static
void
wait_nfapi_init
(
char
*
thread_name
)
{
printf
(
"waiting for NFAPI PNF connection and population of global structure (%s)
\n
"
,
thread_name
);
pthread_mutex_lock
(
&
nfapi_sync_mutex
);
...
...
@@ -679,8 +592,6 @@ int main( int argc, char **argv ) {
}
openair0_cfg
[
0
].
threequarter_fs
=
threequarter_fs
;
AMF_MODE_ENABLED
=
get_softmodem_params
()
->
sa
;
NGAP_CONF_MODE
=
get_softmodem_params
()
->
sa
;
if
(
get_softmodem_params
()
->
do_ra
)
AssertFatal
(
get_softmodem_params
()
->
phy_test
==
0
,
"RA and phy_test are mutually exclusive
\n
"
);
...
...
@@ -721,14 +632,6 @@ int main( int argc, char **argv ) {
int
ret
=
create_gNB_tasks
(
1
);
AssertFatal
(
ret
==
0
,
"cannot create ITTI tasks
\n
"
);
/* Start the agent. If it is turned off in the configuration, it won't start */
/*
RCconfig_nr_flexran();
for (i = 0; i < RC.nb_nr_L1_inst; i++) {
flexran_agent_start(i);
}
*/
// init UE_PF_PO and mutex lock
pthread_mutex_init
(
&
ue_pf_po_mutex
,
NULL
);
memset
(
&
UE_PF_PO
[
0
][
0
],
0
,
sizeof
(
UE_PF_PO_t
)
*
NUMBER_OF_UE_MAX
*
MAX_NUM_CCs
);
...
...
@@ -765,9 +668,6 @@ int main( int argc, char **argv ) {
printf
(
"NFAPI MODE:%s
\n
"
,
nfapi_mode_str
);
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
)
wait_nfapi_init
(
"main?"
);
printf
(
"START MAIN THREADS
\n
"
);
// start the main threads
number_of_cards
=
1
;
...
...
@@ -836,44 +736,14 @@ int main( int argc, char **argv ) {
pthread_mutex_unlock
(
&
sync_mutex
);
}
printf
(
"About to call end_configmodule() from %s() %s:%d
\n
"
,
__FUNCTION__
,
__FILE__
,
__LINE__
);
// We have to set PARAMFLAG_NOFREE on right paramters before re-enabling end_configmodule()
//end_configmodule();
printf
(
"Called end_configmodule() from %s() %s:%d
\n
"
,
__FUNCTION__
,
__FILE__
,
__LINE__
);
// wait for end of program
printf
(
"TYPE <CTRL-C> TO TERMINATE
\n
"
);
//getchar();
printf
(
"Entering ITTI signals handler
\n
"
);
printf
(
"TYPE <CTRL-C> TO TERMINATE
\n
"
);
itti_wait_tasks_end
();
printf
(
"Returned from ITTI signal handler
\n
"
);
oai_exit
=
1
;
printf
(
"oai_exit=%d
\n
"
,
oai_exit
);
// stop threads
/*#ifdef XFORMS
printf("waiting for XFORMS thread\n");
if (do_forms==1) {
pthread_join(forms_thread,&status);
fl_hide_form(form_stats->stats_form);
fl_free_form(form_stats->stats_form);
fl_hide_form(form_stats_l2->stats_form);
fl_free_form(form_stats_l2->stats_form);
for(UE_id=0; UE_id<scope_enb_num_ue; UE_id++) {
for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
fl_hide_form(form_enb[CC_id][UE_id]->phy_scope_gNB);
fl_free_form(form_enb[CC_id][UE_id]->phy_scope_gNB);
}
}
}
#endif*/
printf
(
"stopping MODEM threads
\n
"
);
// cleanup
if
(
RC
.
nb_nr_L1_inst
>
0
)
stop_gNB
(
RC
.
nb_nr_L1_inst
);
...
...
@@ -891,7 +761,6 @@ int main( int argc, char **argv ) {
phy_free_nr_gNB
(
RC
.
gNB
[
inst
]);
}
free_lte_top
();
pthread_cond_destroy
(
&
sync_cond
);
pthread_mutex_destroy
(
&
sync_mutex
);
pthread_cond_destroy
(
&
nfapi_sync_cond
);
...
...
@@ -900,10 +769,7 @@ int main( int argc, char **argv ) {
// *** Handle per CC_id openair0
for
(
ru_id
=
0
;
ru_id
<
NB_RU
;
ru_id
++
)
{
if
(
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
)
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
rfdevice
);
for
(
ru_id
=
0
;
ru_id
<
RC
.
nb_RU
;
ru_id
++
)
{
if
(
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
)
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
ifdevice
);
}
...
...
executables/nr-ue.c
View file @
e9d79295
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
e9d79295
...
...
@@ -1713,100 +1713,98 @@ schedule_ulsch(module_id_t module_idP,
sched_frame
=
frameP
;
/* Note: RC.nb_mac_CC[module_idP] should be lower than or equal to NFAPI_CC_MAX */
for
(
int
CC_id
=
0
;
CC_id
<
RC
.
nb_mac_CC
[
module_idP
];
CC_id
++
,
cc
++
)
{
/* MultiCell: Common channels modify for multiple CC */
cc
=
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_id
];
/* For TDD: check subframes where we have to act and return if nothing should be done now */
if
(
cc
->
tdd_Config
)
{
// Done only for CC_id = 0, assume tdd_Config for all CC_id
int
tdd_sfa
=
cc
->
tdd_Config
->
subframeAssignment
;
switch
(
subframeP
)
{
case
0
:
if
((
tdd_sfa
==
0
)
||
(
tdd_sfa
==
3
))
sched_subframe
=
4
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
7
;
else
return
;
break
;
case
1
:
if
((
tdd_sfa
==
0
)
||
(
tdd_sfa
==
1
))
sched_subframe
=
7
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
8
;
else
return
;
/* MultiCell: Common channels modify for multiple CC */
cc
=
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_id
];
/* For TDD: check subframes where we have to act and return if nothing should be done now */
if
(
cc
->
tdd_Config
)
{
// Done only for CC_id = 0, assume tdd_Config for all CC_id
int
tdd_sfa
=
cc
->
tdd_Config
->
subframeAssignment
;
switch
(
subframeP
)
{
case
0
:
if
((
tdd_sfa
==
0
)
||
(
tdd_sfa
==
3
))
sched_subframe
=
4
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
7
;
else
return
;
break
;
break
;
case
2
:
// Don't schedule UL in subframe 2 for TDD
case
1
:
if
((
tdd_sfa
==
0
)
||
(
tdd_sfa
==
1
))
sched_subframe
=
7
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
8
;
else
return
;
case
3
:
if
(
tdd_sfa
==
2
)
sched_subframe
=
7
;
else
return
;
break
;
break
;
case
2
:
// Don't schedule UL in subframe 2 for TDD
return
;
case
4
:
if
(
tdd_sfa
==
1
)
sched_subframe
=
8
;
else
return
;
case
3
:
if
(
tdd_sfa
==
2
)
sched_subframe
=
7
;
else
return
;
break
;
break
;
case
5
:
if
(
tdd_sfa
==
0
)
sched_subframe
=
9
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
2
;
else
return
;
case
4
:
if
(
tdd_sfa
==
1
)
sched_subframe
=
8
;
else
return
;
break
;
break
;
case
6
:
if
(
tdd_sfa
==
0
||
tdd_sfa
==
1
)
sched_subframe
=
2
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
3
;
else
return
;
case
5
:
if
(
tdd_sfa
==
0
)
sched_subframe
=
9
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
2
;
else
return
;
break
;
break
;
case
7
:
case
6
:
if
(
tdd_sfa
==
0
||
tdd_sfa
==
1
)
sched_subframe
=
2
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
3
;
else
return
;
case
8
:
if
((
tdd_sfa
>=
2
)
&&
(
tdd_sfa
<=
5
))
sched_subframe
=
2
;
else
return
;
break
;
break
;
case
7
:
return
;
case
9
:
if
((
tdd_sfa
==
1
)
||
(
tdd_sfa
==
3
)
||
(
tdd_sfa
==
4
))
sched_subframe
=
3
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
4
;
else
return
;
case
8
:
if
((
tdd_sfa
>=
2
)
&&
(
tdd_sfa
<=
5
))
sched_subframe
=
2
;
else
return
;
break
;
break
;
default:
case
9
:
if
((
tdd_sfa
==
1
)
||
(
tdd_sfa
==
3
)
||
(
tdd_sfa
==
4
))
sched_subframe
=
3
;
else
if
(
tdd_sfa
==
6
)
sched_subframe
=
4
;
else
return
;
}
break
;
default:
return
;
}
}
if
(
sched_subframe
<
subframeP
)
{
sched_frame
++
;
...
...
@@ -1817,6 +1815,9 @@ schedule_ulsch(module_id_t module_idP,
memset
(
emtc_active
,
0
,
5
*
sizeof
(
int
));
schedule_ulsch_rnti_emtc
(
module_idP
,
frameP
,
subframeP
,
sched_subframe
,
emtc_active
);
/* Note: RC.nb_mac_CC[module_idP] should be lower than or equal to NFAPI_CC_MAX */
for
(
int
CC_id
=
0
;
CC_id
<
RC
.
nb_mac_CC
[
module_idP
];
CC_id
++
,
cc
++
)
{
if
(
is_prach_subframe0
(
cc
->
tdd_Config
!=
NULL
?
cc
->
tdd_Config
->
subframeAssignment
:
0
,
cc
->
tdd_Config
!=
NULL
?
1
:
0
,
cc
->
radioResourceConfigCommon
->
prach_Config
.
prach_ConfigInfo
.
prach_ConfigIndex
,
sched_frame
,
sched_subframe
))
{
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
e9d79295
...
...
@@ -1535,8 +1535,8 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
rbStart
,
BWPSize
,
BWPStart
,
startSymbolIndex
,
nrOfSymbols
);
msg4_tda
.
startSymbolIndex
,
msg4_tda
.
nrOfSymbols
);
if
(
RC
.
ss
.
mode
==
SS_SOFTMODEM
)
BWPStart
=
27
;
...
...
@@ -1788,7 +1788,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
}
T
(
T_GNB_MAC_DL_PDU_WITH_DATA
,
T_INT
(
module_idP
),
T_INT
(
CC_id
),
T_INT
(
ra
->
rnti
),
T_INT
(
frameP
),
T_INT
(
slotP
),
T_INT
(
current_harq_pid
),
T_BUFFER
(
harq
->
t
b
,
harq
->
tb_size
));
T_INT
(
frameP
),
T_INT
(
slotP
),
T_INT
(
current_harq_pid
),
T_BUFFER
(
harq
->
t
ransportBlock
,
harq
->
tb_size
));
// Trace MACPDU
mac_pkt_info_t
mac_pkt
;
...
...
@@ -1797,7 +1797,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
mac_pkt
.
rnti
=
ra
->
rnti
;
mac_pkt
.
harq_pid
=
current_harq_pid
;
mac_pkt
.
preamble
=
-
1
;
/* TODO */
LOG_MAC_P
(
OAILOG_DEBUG
,
"MAC_DL_PDU"
,
frameP
,
slotP
,
mac_pkt
,
(
uint8_t
*
)
harq
->
t
b
,
(
int
)
harq
->
tb_size
);
LOG_MAC_P
(
OAILOG_DEBUG
,
"MAC_DL_PDU"
,
frameP
,
slotP
,
mac_pkt
,
(
uint8_t
*
)
harq
->
t
ransportBlock
,
(
int
)
harq
->
tb_size
);
// DL TX request
nfapi_nr_pdu_t
*
tx_req
=
&
nr_mac
->
TX_req
[
CC_id
].
pdu_list
[
nr_mac
->
TX_req
[
CC_id
].
Number_of_PDUs
];
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
View file @
e9d79295
...
...
@@ -355,7 +355,6 @@ uint32_t schedule_control_sib1(module_id_t module_id,
int
mcsTableIdx
=
0
;
int
rbSize
=
0
;
uint32_t
TBS
=
0
;
LOG_D
(
MAC
,
"bwpSize:%d rbStart:%d rbSize:%d startSymbolIndex,:%d nrOfSymbols:%d
\n
"
,
bwpSize
,
rbStart
,
rbSize
,
startSymbolIndex
,
nrOfSymbols
);
do
{
if
(
rbSize
<
bwpSize
&&
!
(
vrb_map
[
rbStart
+
rbSize
]
&
SL_to_bitmap
(
tda_info
->
startSymbolIndex
,
tda_info
->
nrOfSymbols
)))
rbSize
++
;
...
...
@@ -460,10 +459,9 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
pdsch_pdu_rel15
->
rbStart
=
pdsch
->
rbStart
;
pdsch_pdu_rel15
->
rbSize
=
pdsch
->
rbSize
;
pdsch_pdu_rel15
->
VRBtoPRBMapping
=
0
;
pdsch_pdu_rel15
->
qamModOrder
[
0
]
=
nr_get_Qm_dl
(
gNB_mac
->
sched_ctrlCommon
->
sched_pdsch
.
mcs
,
gNB_mac
->
sched_ctrlCommon
->
pdsch_semi_static
.
mcsTableIdx
);
pdsch_pdu_rel15
->
qamModOrder
[
0
]
=
nr_get_Qm_dl
(
pdsch
->
mcs
,
mcsTableIdx
);
pdsch_pdu_rel15
->
TBSize
[
0
]
=
TBS
;
pdsch_pdu_rel15
->
mcsTable
[
0
]
=
gNB_mac
->
sched_ctrlCommon
->
pdsch_semi_static
.
mcsTableIdx
;
pdsch_pdu_rel15
->
mcsTable
[
0
]
=
mcsTableIdx
;
pdsch_pdu_rel15
->
StartSymbolIndex
=
StartSymbolIndex
;
pdsch_pdu_rel15
->
NrOfSymbols
=
NrOfSymbols
;
pdsch_pdu_rel15
->
dlDmrsSymbPos
=
pdsch
->
dmrs_parms
.
dl_dmrs_symb_pos
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
e9d79295
...
...
@@ -1186,7 +1186,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
mac_pkt
.
rnti
=
rnti
;
mac_pkt
.
harq_pid
=
current_harq_pid
;
mac_pkt
.
preamble
=
-
1
;
/* TODO */
LOG_MAC_P
(
OAILOG_DEBUG
,
"MAC_RETRANSMISSION_DL_PDU"
,
frame
,
slot
,
mac_pkt
,
(
uint8_t
*
)
harq
->
t
b
,
(
int
)
TBS
);
LOG_MAC_P
(
OAILOG_DEBUG
,
"MAC_RETRANSMISSION_DL_PDU"
,
frame
,
slot
,
mac_pkt
,
(
uint8_t
*
)
harq
->
t
ransportBlock
,
(
int
)
TBS
);
}
else
{
/* initial transmission */
LOG_D
(
NR_MAC
,
"[%s] Initial HARQ transmission in %d.%d
\n
"
,
__FUNCTION__
,
frame
,
slot
);
...
...
@@ -1332,7 +1332,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
mac_pkt
.
rnti
=
rnti
;
mac_pkt
.
harq_pid
=
current_harq_pid
;
mac_pkt
.
preamble
=
-
1
;
/* TODO */
LOG_MAC_P
(
OAILOG_DEBUG
,
"MAC_DL_PDU"
,
frame
,
slot
,
mac_pkt
,
(
uint8_t
*
)
harq
->
t
b
,
(
int
)
TBS
);
LOG_MAC_P
(
OAILOG_DEBUG
,
"MAC_DL_PDU"
,
frame
,
slot
,
mac_pkt
,
(
uint8_t
*
)
harq
->
t
ransportBlock
,
(
int
)
TBS
);
}
const
int
ntx_req
=
gNB_mac
->
TX_req
[
CC_id
].
Number_of_PDUs
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
e9d79295
...
...
@@ -3173,7 +3173,7 @@ void send_initial_ul_rrc_message(module_id_t module_id,
const
NR_ServingCellConfigCommon_t
*
scc
=
RC
.
nrrrc
[
module_id
]
->
carrier
.
servingcellconfigcommon
;
const
NR_ServingCellConfig_t
*
sccd
=
RC
.
nrrrc
[
module_id
]
->
configuration
.
scd
;
NR_CellGroupConfig_t
cellGroupConfig
=
{
0
};
fill_initial_cellGroupConfig
(
uid
,
&
cellGroupConfig
,
scc
,
sccd
,
&
RC
.
nrrrc
[
module_id
]
->
configuration
);
fill_initial_cellGroupConfig
(
uid
,
&
cellGroupConfig
,
scc
,
sccd
,
&
RC
.
nrrrc
[
module_id
]
->
configuration
,
CC_id
);
uint8_t
du2cu_rrc_container
[
1024
];
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CellGroupConfig
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
e9d79295
...
...
@@ -320,17 +320,8 @@ int nr_process_mac_pdu(instance_t module_idP,
return
0
;
}
case
UL_SCH_LCID_DTCH
...
(
UL_SCH_LCID_DTCH
+
4
):
// check if LCID is valid at current time.
if
(
pdu_len
<
sizeof
(
NR_MAC_SUBHEADER_SHORT
))
return
0
;
if
(((
NR_MAC_SUBHEADER_SHORT
*
)
pduP
)
->
F
)
{
// mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8;
if
(
pdu_len
<
sizeof
(
NR_MAC_SUBHEADER_LONG
))
return
0
;
mac_subheader_len
=
3
;
mac_sdu_len
=
((
uint16_t
)(((
NR_MAC_SUBHEADER_LONG
*
)
pduP
)
->
L1
&
0x7f
)
<<
8
)
|
((
uint16_t
)((
NR_MAC_SUBHEADER_LONG
*
)
pduP
)
->
L2
&
0xff
);
if
(
pdu_len
<
mac_subheader_len
+
mac_len
)
return
0
;
rnti_t
crnti
=
UE
->
rnti
;
NR_UE_info_t
*
UE_idx
=
UE
;
...
...
@@ -410,7 +401,7 @@ int nr_process_mac_pdu(instance_t module_idP,
nr_rlc_activate_srb0
(
UE
->
rnti
,
module_idP
,
CC_id
,
UE
->
uid
,
send_initial_ul_rrc_message
);
if
(
pdu_len
<
mac_subheader_len
+
mac_
ce_len
+
mac_sdu_
len
)
if
(
pdu_len
<
mac_subheader_len
+
mac_len
)
return
0
;
mac_rlc_data_ind
(
module_idP
,
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
e9d79295
...
...
@@ -257,7 +257,7 @@ static void do_pdcp_data_ind(
/** TRACE PDCP PDU */
nr_pdcp_pkt_info_t
pdcp_pkt
;
pdcp_pkt
.
direction
=
0
;
//PDCP_NR_DIRECTION_UPLINK
pdcp_pkt
.
ueid
=
rnti
;
pdcp_pkt
.
ueid
=
rnti
MaybeUEid
;
if
(
ctxt_pP
->
enb_flag
)
T
(
T_ENB_PDCP_UL
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
rntiMaybeUEid
),
T_INT
(
rb_id
),
T_INT
(
sdu_buffer_size
));
...
...
@@ -817,7 +817,7 @@ srb_found:
SS_NRRRC_PDU_IND
(
message_p
).
sdu_size
=
size
;
SS_NRRRC_PDU_IND
(
message_p
).
srb_id
=
srb_id
;
SS_NRRRC_PDU_IND
(
message_p
).
frame
=
nr_pdcp_current_time_last_frame
;
SS_NRRRC_PDU_IND
(
message_p
).
rnti
=
ue
->
rnti
;
SS_NRRRC_PDU_IND
(
message_p
).
rnti
=
ue
->
rnti
MaybeUEid
;
SS_NRRRC_PDU_IND
(
message_p
).
subframe
=
nr_pdcp_current_time_last_subframe
;
memset
(
SS_NRRRC_PDU_IND
(
message_p
).
sdu
,
0
,
SDU_SIZE
);
memcpy
(
SS_NRRRC_PDU_IND
(
message_p
).
sdu
,
buf
,
size
);
...
...
@@ -827,8 +827,8 @@ srb_found:
LOG_E
(
PDCP
,
"Error in sending DCCH_PDU_IND/SS_NRRRC_PDU_IND(msg_Id:%d) to TASK_SS_SRB_GNB
\n
"
,
SS_NRRRC_PDU_IND
);
}
}
}
{
}
{
if
(
entity
->
is_gnb
)
{
MessageDef
*
message_p
=
itti_alloc_new_message
(
TASK_PDCP_GNB
,
0
,
F1AP_UL_RRC_MESSAGE
);
AssertFatal
(
message_p
!=
NULL
,
"OUT OF MEMORY
\n
"
);
...
...
@@ -851,6 +851,7 @@ srb_found:
NR_RRC_DCCH_DATA_IND
(
message_p
).
sdu_size
=
size
;
NR_RRC_DCCH_DATA_IND
(
message_p
).
rnti
=
ue
->
rntiMaybeUEid
;
itti_send_msg_to_task
(
TASK_RRC_NRUE
,
0
,
message_p
);
}
}
}
...
...
@@ -1162,7 +1163,7 @@ void nr_pdcp_add_drbs(eNB_flag_t enb_flag,
if
(
drb2add_list
!=
NULL
)
{
for
(
int
i
=
0
;
i
<
drb2add_list
->
list
.
count
;
i
++
)
{
if
(
rlc_bearer2add_list
!=
NULL
)
{
for
(
j
=
0
;
j
<
rlc_bearer2add_list
->
list
.
count
;
j
++
){
for
(
int
j
=
0
;
j
<
rlc_bearer2add_list
->
list
.
count
;
j
++
){
if
(
rlc_bearer2add_list
->
list
.
array
[
j
]
->
servedRadioBearer
!=
NULL
){
if
(
rlc_bearer2add_list
->
list
.
array
[
j
]
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity
){
if
(
drb2add_list
->
list
.
array
[
i
]
->
drb_Identity
==
rlc_bearer2add_list
->
list
.
array
[
j
]
->
servedRadioBearer
->
choice
.
drb_Identity
){
...
...
@@ -1365,7 +1366,7 @@ static bool pdcp_data_req_srb(protocol_ctxt_t *ctxt_pP,
nr_pdcp_pkt_info_t
pdcp_pkt
;
memset
(
&
pdcp_pkt
,
0
,
sizeof
(
pdcp_pkt
));
pdcp_pkt
.
direction
=
1
;
//PDCP_NR_DIRECTION_DOWNLINK
pdcp_pkt
.
ueid
=
ue
->
rnti
;
pdcp_pkt
.
ueid
=
ue
->
rnti
MaybeUEid
;
pdcp_pkt
.
bearerType
=
8
;
//TODO
pdcp_pkt
.
bearerId
=
rb_id
-
1
;
pdcp_pkt
.
plane
=
(
rb_id
==
1
)
?
4
:
1
;
...
...
@@ -1445,7 +1446,7 @@ static bool pdcp_data_req_drb(protocol_ctxt_t *ctxt_pP,
pdcp_pkt
.
direction
=
1
;
//PDCP_NR_DIRECTION_DOWNLINK
if
(
ue
!=
NULL
)
{
pdcp_pkt
.
ueid
=
ue
->
rnti
;
pdcp_pkt
.
ueid
=
ue
->
rnti
MaybeUEid
;
}
pdcp_pkt
.
bearerType
=
8
;
//TODO
pdcp_pkt
.
bearerId
=
rb_id
-
1
;
...
...
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
View file @
e9d79295
...
...
@@ -482,7 +482,7 @@ rlc_op_status_t enqueue_mac_rlc_data_req(
const
uint32_t
*
const
destinationL2Id
)
{
int
rnti
=
ctxt_pP
->
rnti
;
int
rnti
=
ctxt_pP
->
rnti
MaybeUEid
;
nr_rlc_ue_t
*
ue
;
nr_rlc_entity_t
*
rb
;
...
...
@@ -492,7 +492,7 @@ rlc_op_status_t enqueue_mac_rlc_data_req(
if
(
ctxt_pP
->
enb_flag
)
T
(
T_ENB_RLC_DL
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
rnti
),
T_INT
(
rb_idP
),
T_INT
(
sdu_sizeP
));
T_INT
(
ctxt_pP
->
rnti
MaybeUEid
),
T_INT
(
rb_idP
),
T_INT
(
sdu_sizeP
));
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
...
...
openair2/RRC/NR/L2_nr_interface.c
View file @
e9d79295
...
...
@@ -179,91 +179,6 @@ int8_t nr_mac_rrc_bwp_switch_req(const module_id_t module_idP,
return
0
;
}
int8_t
nr_mac_rrc_data_ind
(
const
module_id_t
module_idP
,
const
int
CC_id
,
const
frame_t
frameP
,
const
sub_frame_t
sub_frameP
,
const
int
UE_id
,
const
rnti_t
rntiP
,
const
rb_id_t
srb_idP
,
const
uint8_t
*
sduP
,
const
sdu_size_t
sdu_lenP
,
const
boolean_t
brOption
)
{
if
(
NODE_IS_DU
(
RC
.
nrrrc
[
module_idP
]
->
node_type
))
{
LOG_W
(
RRC
,
"[DU %d][RAPROC] Received SDU for CCCH on SRB %ld length %d for UE id %d RNTI %x
\n
"
,
module_idP
,
srb_idP
,
sdu_lenP
,
UE_id
,
rntiP
);
// Generate DUtoCURRCContainer
// call do_RRCSetup like full procedure and extract masterCellGroup
NR_CellGroupConfig_t
cellGroupConfig
;
NR_ServingCellConfigCommon_t
*
scc
=
RC
.
nrrrc
[
module_idP
]
->
carrier
.
servingcellconfigcommon
;
memset
(
&
cellGroupConfig
,
0
,
sizeof
(
cellGroupConfig
));
struct
rrc_gNB_ue_context_s
*
ue_context_p
=
rrc_gNB_allocate_new_UE_context
(
RC
.
nrrrc
[
module_idP
]);
ue_context_p
->
ue_id_rnti
=
rntiP
;
ue_context_p
->
ue_context
.
rnti
=
rntiP
;
ue_context_p
->
ue_context
.
random_ue_identity
=
rntiP
;
ue_context_p
->
ue_context
.
Srb0
.
Active
=
1
;
RB_INSERT
(
rrc_nr_ue_tree_s
,
&
RC
.
nrrrc
[
module_idP
]
->
rrc_ue_head
,
ue_context_p
);
fill_initial_cellGroupConfig
(
ue_context_p
->
local_uid
,
&
cellGroupConfig
,
scc
,
&
RC
.
nrrrc
[
module_idP
]
->
carrier
,
CC_id
);
MessageDef
*
tmp
=
itti_alloc_new_message_sized
(
TASK_RRC_GNB
,
0
,
F1AP_INITIAL_UL_RRC_MESSAGE
,
sizeof
(
f1ap_initial_ul_rrc_message_t
)
+
sdu_lenP
);
f1ap_initial_ul_rrc_message_t
*
msg
=
&
F1AP_INITIAL_UL_RRC_MESSAGE
(
tmp
);
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CellGroupConfig
,
NULL
,
(
void
*
)
&
cellGroupConfig
,
msg
->
du2cu_rrc_container
,
1024
);
//sizeof(msg->du2cu_rrc_container));
if
(
enc_rval
.
encoded
==
-
1
)
{
LOG_E
(
F1AP
,
"Could not encoded cellGroupConfig, failed element %s
\n
"
,
enc_rval
.
failed_type
->
name
);
exit
(
-
1
);
}
/* do ITTI message */
msg
->
du2cu_rrc_container_length
=
(
enc_rval
.
encoded
+
7
)
/
8
;
msg
->
crnti
=
rntiP
;
msg
->
rrc_container
=
(
uint8_t
*
)
(
msg
+
1
);
// Made extra room after the struct with itti_alloc_msg_sized()
memcpy
(
msg
->
rrc_container
,
sduP
,
sdu_lenP
);
msg
->
rrc_container_length
=
sdu_lenP
;
itti_send_msg_to_task
(
TASK_DU_F1
,
0
,
tmp
);
return
(
0
);
}
protocol_ctxt_t
ctxt
;
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
module_idP
,
GNB_FLAG_YES
,
rntiP
,
frameP
,
sub_frameP
,
0
);
if
((
srb_idP
&
RAB_OFFSET
)
==
CCCH
)
{
LOG_D
(
NR_RRC
,
"[gNB %d] Received SDU for CCCH on SRB %ld
\n
"
,
module_idP
,
srb_idP
);
ctxt
.
brOption
=
brOption
;
if
(
sdu_lenP
>
0
)
{
LOG_I
(
NR_RRC
,
"NRRRC Sending CCCH_PDU_IND/SS_NRRRC_PDU_IND to TASK_SS_SRB_GNB (msg_Id:%d) [SFN: %d, SF: %d]
\n
"
,
SS_NRRRC_PDU_IND
,
ctxt
.
frame
,
ctxt
.
subframe
);
MessageDef
*
message_p
=
itti_alloc_new_message
(
TASK_SS_SRB_GNB
,
INSTANCE_DEFAULT
,
SS_NRRRC_PDU_IND
);
if
(
message_p
)
{
/* Populate the message to SS */
SS_NRRRC_PDU_IND
(
message_p
).
sdu_size
=
sdu_lenP
;
SS_NRRRC_PDU_IND
(
message_p
).
srb_id
=
0
;
SS_NRRRC_PDU_IND
(
message_p
).
rnti
=
rntiP
;
SS_NRRRC_PDU_IND
(
message_p
).
frame
=
ctxt
.
frame
;
SS_NRRRC_PDU_IND
(
message_p
).
subframe
=
ctxt
.
subframe
;
memset
(
SS_NRRRC_PDU_IND
(
message_p
).
sdu
,
0
,
SDU_SIZE
);
memcpy
(
SS_NRRRC_PDU_IND
(
message_p
).
sdu
,
sduP
,
sdu_lenP
);
int
send_res
=
itti_send_msg_to_task
(
TASK_SS_SRB_GNB
,
INSTANCE_DEFAULT
,
message_p
);
if
(
send_res
<
0
)
{
LOG_E
(
RRC
,
"Error in sending CCCH_PDU_IND/SS_NRRRC_PDU_IND to TASK_SS_SRB_GNB (msg_Id:%d) to TASK_SS_SRB_GNB
\n
"
,
SS_NRRRC_PDU_IND
);
}
}
nr_rrc_gNB_decode_ccch
(
&
ctxt
,
sduP
,
sdu_lenP
,
NULL
,
CC_id
);
}
}
return
0
;
}
void
nr_mac_gNB_rrc_ul_failure
(
const
module_id_t
Mod_instP
,
const
int
CC_idP
,
const
frame_t
frameP
,
...
...
openair2/RRC/NR/nr_rrc_proto.h
View file @
e9d79295
...
...
@@ -114,7 +114,8 @@ rrc_gNB_generate_RRCSetup(
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
const
uint8_t
*
masterCellGroup
,
int
masterCellGroup_len
,
NR_ServingCellConfigCommon_t
*
scc
);
NR_ServingCellConfigCommon_t
*
scc
,
const
int
CC_id
);
int
parse_CG_ConfigInfo
(
gNB_RRC_INST
*
rrc
,
NR_CG_ConfigInfo_t
*
CG_ConfigInfo
,
x2ap_ENDC_sgnb_addition_req_t
*
m
);
...
...
@@ -186,8 +187,9 @@ int nr_rrc_reconfiguration_req(rrc_gNB_ue_context_t *const ue_context_pP
int
nr_rrc_gNB_decode_ccch
(
protocol_ctxt_t
*
const
ctxt_pP
,
const
uint8_t
*
buffer
,
int
buffer_length
,
const
uint8_t
*
du_to_cu_rrc_container
,
int
du_to_cu_rrc_container_length
);
OCTET_STRING_t
*
du_to_cu_rrc_container
,
int
du_to_cu_rrc_container_len
,
const
int
CC_id
);
void
rrc_gNB_generate_dedicatedRRCReconfiguration_release
(
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
e9d79295
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