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
ac467099
Commit
ac467099
authored
May 30, 2021
by
Eurecom
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
handling for UL failure. added do_precoding flag to nr-ru procedures. testing with 2x2 N310.
parent
5530f0ce
Changes
20
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
476 additions
and
78 deletions
+476
-78
executables/nr-gnb.c
executables/nr-gnb.c
+1
-1
executables/nr-ru.c
executables/nr-ru.c
+1
-0
openair1/PHY/INIT/nr_init_ru.c
openair1/PHY/INIT/nr_init_ru.c
+2
-1
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+2
-2
openair1/SCHED_NR/nr_ru_procedures.c
openair1/SCHED_NR/nr_ru_procedures.c
+15
-9
openair2/COMMON/rrc_messages_types.h
openair2/COMMON/rrc_messages_types.h
+1
-0
openair2/ENB_APP/enb_paramdef.h
openair2/ENB_APP/enb_paramdef.h
+4
-2
openair2/F1AP/f1ap_cu_ue_context_management.c
openair2/F1AP/f1ap_cu_ue_context_management.c
+45
-23
openair2/F1AP/f1ap_du_ue_context_management.c
openair2/F1AP/f1ap_du_ue_context_management.c
+26
-5
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+26
-16
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+1
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+1
-0
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+6
-1
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+1
-1
openair2/RRC/NR/L2_nr_interface.c
openair2/RRC/NR/L2_nr_interface.c
+20
-0
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+290
-1
openair2/RRC/NR/rrc_gNB_NGAP.c
openair2/RRC/NR/rrc_gNB_NGAP.c
+15
-1
openair2/RRC/NR/rrc_gNB_NGAP.h
openair2/RRC/NR/rrc_gNB_NGAP.h
+4
-0
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+14
-14
No files found.
executables/nr-gnb.c
View file @
ac467099
...
...
@@ -354,7 +354,7 @@ void *nrL1_stats_thread(void *param) {
while
(
!
oai_exit
)
{
sleep
(
1
);
fd
=
fopen
(
"nrL1_stats.log"
,
"w"
);
AssertFatal
(
fd
!=
NULL
,
"Cannot open n
g
L1_stats.log
\n
"
);
AssertFatal
(
fd
!=
NULL
,
"Cannot open n
r
L1_stats.log
\n
"
);
dump_nr_I0_stats
(
fd
,
gNB
);
dump_pusch_stats
(
fd
,
gNB
);
// dump_uci_stats(fd,eNB,eNB->proc.L1_proc_tx.frame_tx);
...
...
executables/nr-ru.c
View file @
ac467099
...
...
@@ -2072,6 +2072,7 @@ void RCconfig_RU(void)
RC
.
ru
[
j
]
->
att_rx
=
*
(
RUParamList
.
paramarray
[
j
][
RU_ATT_RX_IDX
].
uptr
);
RC
.
ru
[
j
]
->
if_frequency
=
*
(
RUParamList
.
paramarray
[
j
][
RU_IF_FREQUENCY
].
u64ptr
);
RC
.
ru
[
j
]
->
if_freq_offset
=
*
(
RUParamList
.
paramarray
[
j
][
RU_IF_FREQ_OFFSET
].
iptr
);
RC
.
ru
[
j
]
->
do_precoding
=
*
(
RUParamList
.
paramarray
[
j
][
RU_DO_PRECODING
].
iptr
);
if
(
config_isparamset
(
RUParamList
.
paramarray
[
j
],
RU_BF_WEIGHTS_LIST_IDX
))
{
RC
.
ru
[
j
]
->
nb_bfw
=
RUParamList
.
paramarray
[
j
][
RU_BF_WEIGHTS_LIST_IDX
].
numelt
;
...
...
openair1/PHY/INIT/nr_init_ru.c
View file @
ac467099
...
...
@@ -137,8 +137,9 @@ int nr_phy_init_RU(RU_t *ru) {
ru
->
beam_weights
[
i
][
p
]
=
(
int32_t
**
)
malloc16_clear
(
ru
->
nb_tx
*
sizeof
(
int32_t
*
));
for
(
j
=
0
;
j
<
ru
->
nb_tx
;
j
++
)
{
ru
->
beam_weights
[
i
][
p
][
j
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
sizeof
(
int32_t
));
AssertFatal
(
ru
->
bw_list
[
i
],
"ru->bw_list[%d] is null
\n
"
,
i
);
for
(
re
=
0
;
re
<
fp
->
ofdm_symbol_size
;
re
++
)
ru
->
beam_weights
[
i
][
p
][
j
][
re
]
=
ru
->
bw_list
[
j
][
l_ind
];
ru
->
beam_weights
[
i
][
p
][
j
][
re
]
=
ru
->
bw_list
[
i
][
l_ind
];
//printf("Beam Weight %08x for beam %d and tx %d\n",ru->bw_list[i][l_ind],p,j);
l_ind
++
;
}
// for j
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
View file @
ac467099
...
...
@@ -152,7 +152,7 @@ void dump_pusch_stats(FILE *fd,PHY_VARS_gNB *gNB) {
aa
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
%
10
);
else
stroff
+=
sprintf
(
output
+
stroff
,
" ulsch_power[%d] %d.%d, ulsch_noise_power[%d] %d.%d
\n
"
,
aa
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
%
10
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
%
10
);
aa
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
%
10
);
AssertFatal
(
stroff
<
(
STATSTRLEN
-
1000
),
"Increase STATSTRLEN
\n
"
);
...
...
openair1/SCHED_NR/nr_ru_procedures.c
View file @
ac467099
...
...
@@ -200,7 +200,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
j
,
1
);
start_meas
(
&
ru
->
txdataF_copy_stats
);
if
(
ru
->
num_gNB
==
1
){
AssertFatal
(
ru
->
num_gNB
==
1
,
"num_gNB>1, help
\n
"
);
gNB
=
ru
->
gNB_list
[
0
];
cfg
=
&
gNB
->
gNB_config
;
...
...
@@ -211,7 +211,6 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
}
}
//num_gNB == 1
stop_meas
(
&
ru
->
txdataF_copy_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
j
,
0
);
...
...
@@ -320,6 +319,13 @@ static void *nr_feptx_thread(void *param) {
(
void
*
)
&
ru
->
gNB_list
[
0
]
->
common_vars
.
txdataF
[
0
][
txdataF_offset
+
l
*
fp
->
ofdm_symbol_size
],
(
fp
->
samples_per_slot_wCP
>>
1
)
*
sizeof
(
int32_t
));
}
else
if
(
ru
->
do_precoding
==
0
)
{
int
gNB_tx
=
ru
->
gNB_list
[
0
]
->
frame_parms
.
nb_antennas_tx
;
for
(
int
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
memcpy
((
void
*
)
&
ru
->
common
.
txdataF_BF
[
aa
][
l
*
fp
->
ofdm_symbol_size
],
(
void
*
)
&
ru
->
gNB_list
[
0
]
->
common_vars
.
txdataF
[
aa
%
gNB_tx
][
txdataF_offset
+
l
*
fp
->
ofdm_symbol_size
],
(
fp
->
samples_per_slot_wCP
>>
1
)
*
sizeof
(
int32_t
));
}
else
{
bw
=
ru
->
beam_weights
[
0
];
for
(
i
=
0
;
i
<
fp
->
symbols_per_slot
>>
1
;
++
i
){
...
...
openair2/COMMON/rrc_messages_types.h
View file @
ac467099
...
...
@@ -405,6 +405,7 @@ typedef struct NRRrcConfigurationReq_s {
uint16_t
mcc
[
PLMN_LIST_MAX_SIZE
];
uint16_t
mnc
[
PLMN_LIST_MAX_SIZE
];
uint8_t
mnc_digit_length
[
PLMN_LIST_MAX_SIZE
];
uint8_t
num_plmn
;
NR_ServingCellConfigCommon_t
*
scc
;
NR_ServingCellConfig_t
*
scd
;
int
ssb_SubcarrierOffset
;
...
...
openair2/ENB_APP/enb_paramdef.h
View file @
ac467099
...
...
@@ -98,6 +98,7 @@ typedef enum {
#define CONFIG_STRING_RU_BF_WEIGHTS_LIST "bf_weights"
#define CONFIG_STRING_RU_IF_FREQUENCY "if_freq"
#define CONFIG_STRING_RU_IF_FREQ_OFFSET "if_offset"
#define CONFIG_STRING_RU_DO_PRECODING "do_precoding"
#define RU_LOCAL_IF_NAME_IDX 0
#define RU_LOCAL_ADDRESS_IDX 1
...
...
@@ -127,7 +128,7 @@ typedef enum {
#define RU_BF_WEIGHTS_LIST_IDX 25
#define RU_IF_FREQUENCY 26
#define RU_IF_FREQ_OFFSET 27
#define RU_DO_PRECODING 28
/*-----------------------------------------------------------------------------------------------------------------------------------------*/
/* RU configuration parameters */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
...
...
@@ -161,6 +162,7 @@ typedef enum {
{CONFIG_STRING_RU_BF_WEIGHTS_LIST, NULL, 0, iptr:NULL, defintarrayval:DEFBFW, TYPE_INTARRAY, 0}, \
{CONFIG_STRING_RU_IF_FREQUENCY, NULL, 0, u64ptr:NULL, defuintval:0, TYPE_UINT64, 0}, \
{CONFIG_STRING_RU_IF_FREQ_OFFSET, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \
{CONFIG_STRING_RU_DO_PRECODING, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \
}
/*---------------------------------------------------------------------------------------------------------------------------------------*/
...
...
openair2/F1AP/f1ap_cu_ue_context_management.c
View file @
ac467099
...
...
@@ -39,8 +39,10 @@
#include "rrc_extern.h"
#include "rrc_eNB_UE_context.h"
#include "openair2/RRC/NR/rrc_gNB_UE_context.h"
#include "rrc_eNB_S1AP.h"
#include "rrc_eNB_GTPV1U.h"
#include "openair2/RRC/NR/rrc_gNB_NGAP.h"
extern
f1ap_setup_req_t
*
f1ap_du_data_from_du
;
extern
f1ap_cudu_inst_t
f1ap_cu_inst
[
MAX_eNB
];
...
...
@@ -1024,11 +1026,30 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance,
// F1AP_CriticalityDiagnostics_IE_List
}
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
instance
],
rnti
);
protocol_ctxt_t
ctxt
;
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
instance
,
ENB_FLAG_YES
,
rnti
,
0
,
0
,
instance
);
if
(
RC
.
nrrrc
[
instance
]
->
node_type
==
ngran_gNB_CU
)
{
struct
rrc_gNB_ue_context_s
*
ue_context_p
=
rrc_gNB_get_ue_context
(
RC
.
nrrrc
[
instance
],
rnti
);
if
(
ue_context_p
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_CU_F1
,
0
,
NGAP_UE_CONTEXT_RELEASE_COMPLETE
);
NGAP_UE_CONTEXT_RELEASE_COMPLETE
(
msg
).
gNB_ue_ngap_id
=
ue_context_p
->
ue_context
.
gNB_ue_ngap_id
;
itti_send_msg_to_task
(
TASK_NGAP
,
instance
,
msg
);
rrc_gNB_remove_ue_context
(
&
ctxt
,
RC
.
nrrrc
[
instance
],
ue_context_p
);
}
else
{
LOG_E
(
F1AP
,
"could not find ue_context of UE RNTI %x
\n
"
,
rnti
);
}
#ifdef ITTI_SIM
return
0
;
#endif
}
else
{
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
instance
],
rnti
);
if
(
ue_context_p
)
{
/* The following is normally done in the function rrc_rx_tx() */
rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_CPLT
(
instance
,
...
...
@@ -1054,6 +1075,7 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance,
}
else
{
LOG_E
(
F1AP
,
"could not find ue_context of UE RNTI %x
\n
"
,
rnti
);
}
}
pdcp_remove_UE
(
&
ctxt
);
...
...
openair2/F1AP/f1ap_du_ue_context_management.c
View file @
ac467099
...
...
@@ -38,6 +38,8 @@
#include "rrc_extern.h"
#include "rrc_eNB_UE_context.h"
#include "openair2/RRC/NR/rrc_gNB_UE_context.h"
#include "openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h"
// undefine C_RNTI from
// openair1/PHY/LTE_TRANSPORT/transport_common.h which
...
...
@@ -662,6 +664,15 @@ int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t instance,
rnti
,
ctxt
.
rnti
);
int
UE_out_of_sync
=
0
;
if
(
RC
.
nrrrc
[
instance
]
->
node_type
==
ngran_gNB_DU
)
{
for
(
int
n
=
0
;
n
<
MAX_MOBILES_PER_GNB
;
++
n
)
{
if
(
RC
.
nrmac
[
instance
]
->
UE_info
.
active
[
n
]
==
TRUE
&&
rnti
==
RC
.
nrmac
[
instance
]
->
UE_info
.
rnti
[
n
])
{
UE_out_of_sync
=
0
;
break
;
}
}
}
else
{
for
(
int
n
=
0
;
n
<
MAX_MOBILES_PER_ENB
;
++
n
)
{
if
(
RC
.
mac
[
instance
]
->
UE_info
.
active
[
n
]
==
TRUE
&&
rnti
==
UE_RNTI
(
instance
,
n
))
{
...
...
@@ -669,6 +680,7 @@ int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t instance,
break
;
}
}
}
/* We don't need the Cause */
/* Optional RRC Container: if present, send to UE */
...
...
@@ -716,6 +728,15 @@ int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t instance,
}
}
if
(
RC
.
nrrrc
[
instance
]
->
node_type
==
ngran_gNB_DU
)
{
// struct rrc_gNB_ue_context_s *ue_context_p;
f1ap_ue_context_release_cplt_t
cplt
;
cplt
.
rnti
=
ctxt
.
rnti
;
DU_send_UE_CONTEXT_RELEASE_COMPLETE
(
instance
,
&
cplt
);
return
0
;
}
struct
rrc_eNB_ue_context_s
*
ue_context_p
;
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
ctxt
.
module_id
],
ctxt
.
rnti
);
...
...
openair2/GNB_APP/gnb_config.c
View file @
ac467099
...
...
@@ -1026,7 +1026,7 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
AssertFatal
(
0
,
"The number of PLMN IDs must be in [1,6], but is %d
\n
"
,
PLMNParamList
.
numelt
);
RRC_CONFIGURATION_REQ
(
msg_p
).
num_plmn
=
PLMNParamList
.
numelt
;
NR
RRC_CONFIGURATION_REQ
(
msg_p
).
num_plmn
=
PLMNParamList
.
numelt
;
for
(
int
l
=
0
;
l
<
PLMNParamList
.
numelt
;
++
l
)
{
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
ac467099
...
...
@@ -55,46 +55,56 @@
#include "nfapi/oai_integration/vendor_ext.h"
#include "executables/nr-softmodem.h"
#include <errno.h>
#include <string.h>
uint16_t
nr_pdcch_order_table
[
6
]
=
{
31
,
31
,
511
,
2047
,
2047
,
8191
};
void
clear_mac_stats
(
gNB_MAC_INST
*
gNB
)
{
memset
((
void
*
)
gNB
->
UE_info
.
mac_stats
,
0
,
MAX_MOBILES_PER_GNB
*
sizeof
(
NR_mac_stats_t
));
}
#define MACSTATSSTRLEN 16384
void
dump_mac_stats
(
gNB_MAC_INST
*
gNB
)
{
NR_UE_info_t
*
UE_info
=
&
gNB
->
UE_info
;
int
num
=
1
;
FILE
*
fd
=
fopen
(
"nrMAC_stats.log"
,
"w"
);
AssertFatal
(
fd
!=
NULL
,
"Cannot open nrMAC_stats.log, error %s
\n
"
,
strerror
(
errno
));
char
output
[
MACSTATSSTRLEN
];
memset
(
output
,
0
,
MACSTATSSTRLEN
);
int
stroff
=
0
;
for
(
int
UE_id
=
UE_info
->
list
.
head
;
UE_id
>=
0
;
UE_id
=
UE_info
->
list
.
next
[
UE_id
])
{
LOG_I
(
MAC
,
"UE ID %d RNTI %04x (%d/%d)
\n
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
num
++
,
UE_info
->
num_UEs
);
stroff
=
sprintf
(
output
,
"UE ID %d RNTI %04x (%d/%d)
\n
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
num
++
,
UE_info
->
num_UEs
);
NR_mac_stats_t
*
stats
=
&
UE_info
->
mac_stats
[
UE_id
];
const
int
avg_rsrp
=
stats
->
num_rsrp_meas
>
0
?
stats
->
cumul_rsrp
/
stats
->
num_rsrp_meas
:
0
;
LOG_I
(
MAC
,
"UE %d: dlsch_rounds %d/%d/%d/%d, dlsch_errors %d, average RSRP %d (%d meas)
\n
"
,
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_rounds %d/%d/%d/%d, dlsch_errors %d, average RSRP %d (%d meas)
\n
"
,
UE_id
,
stats
->
dlsch_rounds
[
0
],
stats
->
dlsch_rounds
[
1
],
stats
->
dlsch_rounds
[
2
],
stats
->
dlsch_rounds
[
3
],
stats
->
dlsch_errors
,
avg_rsrp
,
stats
->
num_rsrp_meas
);
stats
->
num_rsrp_meas
=
0
;
stats
->
cumul_rsrp
=
0
;
LOG_I
(
MAC
,
"UE %d: dlsch_total_bytes %d
\n
"
,
UE_id
,
stats
->
dlsch_total_bytes
);
LOG_I
(
MAC
,
"UE %d: ulsch_rounds %d/%d/%d/%d, ulsch_DTX %d, ulsch_errors %d
\n
"
,
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_total_bytes %d
\n
"
,
UE_id
,
stats
->
dlsch_total_bytes
);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: ulsch_rounds %d/%d/%d/%d, ulsch_DTX %d, ulsch_errors %d
\n
"
,
UE_id
,
stats
->
ulsch_rounds
[
0
],
stats
->
ulsch_rounds
[
1
],
stats
->
ulsch_rounds
[
2
],
stats
->
ulsch_rounds
[
3
],
stats
->
ulsch_DTX
,
stats
->
ulsch_errors
);
LOG_I
(
MAC
,
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: ulsch_total_bytes_scheduled %d, ulsch_total_bytes_received %d
\n
"
,
UE_id
,
stats
->
ulsch_total_bytes_scheduled
,
stats
->
ulsch_total_bytes_rx
);
for
(
int
lc_id
=
0
;
lc_id
<
63
;
lc_id
++
)
{
if
(
stats
->
lc_bytes_tx
[
lc_id
]
>
0
)
LOG_I
(
MAC
,
"UE %d: LCID %d: %d bytes TX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_tx
[
lc_id
]);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: LCID %d: %d bytes TX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_tx
[
lc_id
]);
if
(
stats
->
lc_bytes_rx
[
lc_id
]
>
0
)
LOG_I
(
MAC
,
"UE %d: LCID %d: %d bytes RX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_rx
[
lc_id
]);
stroff
+=
sprintf
(
output
+
stroff
,
"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
);
if
(
stroff
>
0
)
fprintf
(
fd
,
"%s"
,
output
);
fclose
(
fd
);
}
void
clear_nr_nfapi_information
(
gNB_MAC_INST
*
gNB
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
ac467099
...
...
@@ -457,6 +457,7 @@ void pf_dl(module_id_t module_id,
for
(
int
UE_id
=
UE_list
->
head
;
UE_id
>=
0
;
UE_id
=
UE_list
->
next
[
UE_id
])
{
if
(
UE_info
->
Msg4_ACKed
[
UE_id
]
!=
true
)
continue
;
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
if
(
sched_ctrl
->
ul_failure
==
1
)
continue
;
int
bwp_Id
=
sched_ctrl
->
active_bwp
?
sched_ctrl
->
active_bwp
->
bwp_Id
:
0
;
NR_BWP_DownlinkDedicated_t
*
bwp_Dedicated
=
NULL
;
if
(
sched_ctrl
->
active_bwp
)
bwp_Dedicated
=
sched_ctrl
->
active_bwp
->
bwp_Dedicated
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
ac467099
...
...
@@ -514,6 +514,7 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
if
(
UE_info
->
UE_sched_ctrl
[
UE_id
].
pusch_consecutive_dtx_cnt
>=
pusch_failure_thres
)
{
LOG_I
(
NR_MAC
,
"Detected UL Failure on PUSCH, stopping scheduling
\n
"
);
UE_info
->
UE_sched_ctrl
[
UE_id
].
ul_failure
=
1
;
nr_mac_eNB_rrc_ul_failure
(
gnb_mod_idP
,
CC_idP
,
frameP
,
slotP
,
rntiP
);
}
}
}
else
if
(
sduP
)
{
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
ac467099
...
...
@@ -905,7 +905,7 @@ boolean_t nr_rrc_pdcp_config_asn1_req(
//ctxt_pP->configured != 2 ||
//srb2add_list == NULL ||
//drb2add_list != NULL ||
drb2release_list
!=
NULL
||
//
drb2release_list != NULL ||
//security_modeP != 255 ||
//kRRCenc != NULL ||
//kRRCint != NULL ||
...
...
@@ -936,6 +936,10 @@ boolean_t nr_rrc_pdcp_config_asn1_req(
/* todo */
}
if
(
drb2release_list
!=
NULL
)
{
// TODO
}
free
(
kRRCenc
);
free
(
kRRCint
);
free
(
kUPenc
);
...
...
@@ -1202,6 +1206,7 @@ static boolean_t pdcp_data_req_drb(
if
(
rb
==
NULL
)
{
LOG_E
(
PDCP
,
"%s:%d:%s: no DRB found (rnti %d, rb_id %ld)
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
rnti
,
rb_id
);
nr_pdcp_manager_unlock
(
nr_pdcp_ue_manager
);
return
0
;
}
...
...
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
View file @
ac467099
...
...
@@ -918,7 +918,7 @@ rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt
if
(
drb2release_listP
!=
NULL
)
{
LOG_E
(
RLC
,
"%s:%d:%s: TODO
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
//
exit(1);
}
if
(
srb2add_listP
!=
NULL
)
{
...
...
openair2/RRC/NR/L2_nr_interface.c
View file @
ac467099
...
...
@@ -364,3 +364,23 @@ int8_t nr_mac_rrc_data_ind(const module_id_t module_idP,
return
0
;
}
void
nr_mac_eNB_rrc_ul_failure
(
const
module_id_t
Mod_instP
,
const
int
CC_idP
,
const
frame_t
frameP
,
const
sub_frame_t
subframeP
,
const
rnti_t
rntiP
)
{
struct
rrc_gNB_ue_context_s
*
ue_context_p
=
NULL
;
ue_context_p
=
rrc_gNB_get_ue_context
(
RC
.
nrrrc
[
Mod_instP
],
rntiP
);
if
(
ue_context_p
!=
NULL
)
{
LOG_I
(
RRC
,
"Frame %d, Subframe %d: UE %x UL failure, activating timer
\n
"
,
frameP
,
subframeP
,
rntiP
);
if
(
ue_context_p
->
ue_context
.
ul_failure_timer
==
0
)
ue_context_p
->
ue_context
.
ul_failure_timer
=
1
;
}
else
{
LOG_W
(
RRC
,
"Frame %d, Subframe %d: UL failure: UE %x unknown
\n
"
,
frameP
,
subframeP
,
rntiP
);
}
}
openair2/RRC/NR/rrc_gNB.c
View file @
ac467099
This diff is collapsed.
Click to expand it.
openair2/RRC/NR/rrc_gNB_NGAP.c
View file @
ac467099
...
...
@@ -788,7 +788,6 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS(
struct
rrc_gNB_ue_context_s
*
ue_context_p
=
NULL
;
protocol_ctxt_t
ctxt
;
memset
(
&
ctxt
,
0
,
sizeof
(
protocol_ctxt_t
));
MessageDef
*
message_p
;
ue_initial_id
=
NGAP_DOWNLINK_NAS
(
msg_p
).
ue_initial_id
;
gNB_ue_ngap_id
=
NGAP_DOWNLINK_NAS
(
msg_p
).
gNB_ue_ngap_id
;
...
...
@@ -878,6 +877,7 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS(
{
// rrc_mac_config_req_gNB
#ifdef ITTI_SIM
MessageDef
*
message_p
;
uint8_t
*
message_buffer
;
message_buffer
=
itti_malloc
(
TASK_RRC_GNB
,
TASK_RRC_UE_SIM
,
length
);
memcpy
(
message_buffer
,
buffer
,
length
);
...
...
@@ -1229,11 +1229,25 @@ rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(
return
-
1
;
}
else
{
ue_context_p
->
ue_context
.
ue_release_timer_ng
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer_thres_rrc
=
1000
;
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
ue_context_p
->
ue_context
.
rnti
,
0
,
0
);
ctxt
.
eNB_index
=
0
;
rrc_gNB_generate_RRCRelease
(
&
ctxt
,
ue_context_p
);
return
0
;
}
}
void
rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
uint32_t
gNB_ue_ngap_id
)
{
MSC_LOG_TX_MESSAGE
(
MSC_RRC_GNB
,
MSC_NGAP_GNB
,
NULL
,
0
,
"0 NGAP_UE_CONTEXT_RELEASE_COMPLETE gNB_ue_ngap_id 0x%06"
PRIX32
" "
,
gNB_ue_ngap_id
);
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
0
,
NGAP_UE_CONTEXT_RELEASE_COMPLETE
);
NGAP_UE_CONTEXT_RELEASE_COMPLETE
(
msg
).
gNB_ue_ngap_id
=
gNB_ue_ngap_id
;
itti_send_msg_to_task
(
TASK_NGAP
,
instance
,
msg
);
}
//------------------------------------------------------------------------------
/*
* Remove UE ids (ue_initial_id and ng_id) from hashtables.
...
...
openair2/RRC/NR/rrc_gNB_NGAP.h
View file @
ac467099
...
...
@@ -129,6 +129,10 @@ rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(
instance_t
instance
);
void
rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
uint32_t
gNB_ue_ngap_id
);
void
rrc_gNB_NGAP_remove_ue_ids
(
gNB_RRC_INST
*
const
rrc_instance_pP
,
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
ac467099
...
...
@@ -633,21 +633,22 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
int16x8_t
buff_tmp
[
2
][
nsamps2
];
#endif
samples_received
=
0
;
while
(
samples_received
!=
nsamps
)
{
if
(
cc
>
1
)
{
// receive multiple channels (e.g. RF A and RF B)
std
::
vector
<
void
*>
buff_ptrs
;
for
(
int
i
=
0
;
i
<
cc
;
i
++
)
buff_ptrs
.
push_back
(
buff_tmp
[
i
]
);
for
(
int
i
=
0
;
i
<
cc
;
i
++
)
buff_ptrs
.
push_back
(
buff_tmp
[
i
]
+
samples_received
);
samples_received
=
s
->
rx_stream
->
recv
(
buff_ptrs
,
nsamps
,
s
->
rx_md
);
samples_received
+
=
s
->
rx_stream
->
recv
(
buff_ptrs
,
nsamps
,
s
->
rx_md
);
}
else
{
// receive a single channel (e.g. from connector RF A)
samples_received
=
0
;
while
(
samples_received
!=
nsamps
)
{
samples_received
+=
s
->
rx_stream
->
recv
((
void
*
)((
int32_t
*
)
buff_tmp
[
0
]
+
samples_received
),
nsamps
-
samples_received
,
s
->
rx_md
);
}
if
((
s
->
wait_for_first_pps
==
0
)
&&
(
s
->
rx_md
.
error_code
!=
uhd
::
rx_metadata_t
::
ERROR_CODE_NONE
))
break
;
...
...
@@ -656,7 +657,6 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
}
}
if
(
samples_received
==
nsamps
)
s
->
wait_for_first_pps
=
0
;
}
// bring RX data into 12 LSBs for softmodem RX
for
(
int
i
=
0
;
i
<
cc
;
i
++
)
{
...
...
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