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
spbro
OpenXG-RAN
Commits
66bdd0e8
Commit
66bdd0e8
authored
Mar 08, 2024
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/ci-aw2s-test-15' into integration_2024_w10
parents
e24f5d63
066aa337
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
196 additions
and
227 deletions
+196
-227
ci-scripts/ci_ueinfra.yaml
ci-scripts/ci_ueinfra.yaml
+42
-0
ci-scripts/xml_files/container_sa_aw2s_asue.xml
ci-scripts/xml_files/container_sa_aw2s_asue.xml
+49
-7
common/openairinterface5g_limits.h
common/openairinterface5g_limits.h
+0
-2
executables/nr-softmodem.c
executables/nr-softmodem.c
+0
-4
executables/nr-uesoftmodem.c
executables/nr-uesoftmodem.c
+0
-3
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+8
-1
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+5
-2
openair1/PHY/NR_TRANSPORT/nr_ulsch.h
openair1/PHY/NR_TRANSPORT/nr_ulsch.h
+7
-2
openair1/PHY/NR_TRANSPORT/pucch_rx.c
openair1/PHY/NR_TRANSPORT/pucch_rx.c
+24
-15
openair1/PHY/TOOLS/nr_phy_scope.c
openair1/PHY/TOOLS/nr_phy_scope.c
+7
-7
openair1/PHY/phy_vars.h
openair1/PHY/phy_vars.h
+0
-2
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+10
-70
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+1
-1
openair2/NR_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_PHY_INTERFACE/NR_IF_Module.c
+7
-2
openair2/NR_PHY_INTERFACE/NR_IF_Module.h
openair2/NR_PHY_INTERFACE/NR_IF_Module.h
+5
-3
openair2/RRC/NR/nr_rrc_config.c
openair2/RRC/NR/nr_rrc_config.c
+27
-45
openair2/RRC/NR/nr_rrc_extern.h
openair2/RRC/NR/nr_rrc_extern.h
+0
-20
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+4
-41
No files found.
ci-scripts/ci_ueinfra.yaml
View file @
66bdd0e8
...
...
@@ -119,6 +119,48 @@ amarisoft_ue_10:
NetworkScript
:
ip netns exec ue10 ip a show dev pdn0
CmdPrefix
:
ip netns exec ue10
MTU
:
1500
amarisoft_ue_11
:
Host
:
amariue
AttachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":11}'
DetachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":11}'
NetworkScript
:
ip netns exec ue11 ip a show dev pdn0
CmdPrefix
:
ip netns exec ue11
MTU
:
1500
amarisoft_ue_12
:
Host
:
amariue
AttachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":12}'
DetachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":12}'
NetworkScript
:
ip netns exec ue12 ip a show dev pdn0
CmdPrefix
:
ip netns exec ue12
MTU
:
1500
amarisoft_ue_13
:
Host
:
amariue
AttachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":13}'
DetachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":13}'
NetworkScript
:
ip netns exec ue13 ip a show dev pdn0
CmdPrefix
:
ip netns exec ue13
MTU
:
1500
amarisoft_ue_14
:
Host
:
amariue
AttachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":14}'
DetachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":14}'
NetworkScript
:
ip netns exec ue14 ip a show dev pdn0
CmdPrefix
:
ip netns exec ue14
MTU
:
1500
amarisoft_ue_15
:
Host
:
amariue
AttachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":15}'
DetachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":15}'
NetworkScript
:
ip netns exec ue15 ip a show dev pdn0
CmdPrefix
:
ip netns exec ue15
MTU
:
1500
amarisoft_ue_16
:
Host
:
amariue
AttachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":16}'
DetachScript
:
/root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":16}'
NetworkScript
:
ip netns exec ue16 ip a show dev pdn0
CmdPrefix
:
ip netns exec ue16
MTU
:
1500
oai_ue_caracal
:
Host
:
caracal
...
...
ci-scripts/xml_files/container_sa_aw2s_asue.xml
View file @
66bdd0e8
...
...
@@ -40,9 +40,15 @@
002008
002009
002010
002011
002012
002013
002014
002015
000100
000010
000020
002016
000200
003000
004000
...
...
@@ -132,12 +138,42 @@
<id>
amarisoft_ue_10
</id>
</testCase>
<testCase
id=
"002011"
>
<class>
Attach_UE
</class>
<desc>
Attach UE
</desc>
<id>
amarisoft_ue_11
</id>
</testCase>
<testCase
id=
"002012"
>
<class>
Attach_UE
</class>
<desc>
Attach UE
</desc>
<id>
amarisoft_ue_12
</id>
</testCase>
<testCase
id=
"002013"
>
<class>
Attach_UE
</class>
<desc>
Attach UE
</desc>
<id>
amarisoft_ue_13
</id>
</testCase>
<testCase
id=
"002014"
>
<class>
Attach_UE
</class>
<desc>
Attach UE
</desc>
<id>
amarisoft_ue_14
</id>
</testCase>
<testCase
id=
"002015"
>
<class>
Attach_UE
</class>
<desc>
Attach UE
</desc>
<id>
amarisoft_ue_15
</id>
</testCase>
<testCase
id=
"000010"
>
<class>
Iperf
</class>
<desc>
iperf (DL/7Mbps/UDP)(30 sec)(multi-ue profile)
</desc>
<iperf_args>
-u -b 70M -t 30 -i 1 -R
</iperf_args>
<direction>
IPERF3
</direction>
<id>
amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
</id>
<id>
amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15
</id>
<iperf_packetloss_threshold>
25
</iperf_packetloss_threshold>
<iperf_bitrate_threshold>
80
</iperf_bitrate_threshold>
<iperf_profile>
balanced
</iperf_profile>
...
...
@@ -148,7 +184,7 @@
<desc>
iperf (UL/3.6Mbps/UDP)(30 sec)(multi-ue profile)
</desc>
<iperf_args>
-u -b 36M -t 30 -i 1
</iperf_args>
<direction>
IPERF3
</direction>
<id>
amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
</id>
<id>
amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15
</id>
<iperf_packetloss_threshold>
25
</iperf_packetloss_threshold>
<iperf_bitrate_threshold>
80
</iperf_bitrate_threshold>
<iperf_profile>
balanced
</iperf_profile>
...
...
@@ -157,17 +193,23 @@
<testCase
id=
"000100"
>
<class>
Ping
</class>
<desc>
Ping: 20pings in 20sec, multi-ue
</desc>
<id>
amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
</id>
<id>
amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15
</id>
<ping_args>
-c 20 %cn_ip%
</ping_args>
<ping_packetloss_threshold>
1
</ping_packetloss_threshold>
<ping_rttavg_threshold>
25
</ping_rttavg_threshold>
</testCase>
<testCase
id=
"002016"
>
<class>
Attach_UE
</class>
<desc>
Attach UE
</desc>
<id>
amarisoft_ue_16
</id>
</testCase>
<testCase
id=
"000200"
>
<class>
Ping
</class>
<desc>
Ping:
100pings in 2
0sec, multi-ue
</desc>
<id>
amarisoft_ue_1
amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
</id>
<ping_args>
-c
10
0 -i 0.2 %cn_ip%
</ping_args>
<desc>
Ping:
50pings in 1
0sec, multi-ue
</desc>
<id>
amarisoft_ue_1
6
</id>
<ping_args>
-c
5
0 -i 0.2 %cn_ip%
</ping_args>
<ping_packetloss_threshold>
1
</ping_packetloss_threshold>
<ping_rttavg_threshold>
30
</ping_rttavg_threshold>
</testCase>
...
...
@@ -175,7 +217,7 @@
<testCase
id=
"003000"
>
<class>
Detach_UE
</class>
<desc>
Detach UE
</desc>
<id>
amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
</id>
<id>
amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 amarisoft_ue_16
</id>
</testCase>
<testCase
id=
"004000"
>
...
...
common/openairinterface5g_limits.h
View file @
66bdd0e8
...
...
@@ -12,8 +12,6 @@
# define NUMBER_OF_SRS_MAX 16
# define NUMBER_OF_SCH_STATS_MAX 16
#define NUMBER_FRAMES_PHY_UE_INACTIVE 10
#define MAX_MANAGED_ENB_PER_MOBILE 2
#define MAX_MANAGED_GNB_PER_MOBILE 2
...
...
executables/nr-softmodem.c
View file @
66bdd0e8
...
...
@@ -679,9 +679,6 @@ int main( int argc, char **argv ) {
AssertFatal
(
ret
==
0
,
"cannot create ITTI tasks
\n
"
);
}
// 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
);
mlockall
(
MCL_CURRENT
|
MCL_FUTURE
);
pthread_cond_init
(
&
sync_cond
,
NULL
);
pthread_mutex_init
(
&
sync_mutex
,
NULL
);
...
...
@@ -823,7 +820,6 @@ int main( int argc, char **argv ) {
pthread_mutex_destroy
(
&
sync_mutex
);
pthread_cond_destroy
(
&
nfapi_sync_cond
);
pthread_mutex_destroy
(
&
nfapi_sync_mutex
);
pthread_mutex_destroy
(
&
ue_pf_po_mutex
);
// *** Handle per CC_id openair0
...
...
executables/nr-uesoftmodem.c
View file @
66bdd0e8
...
...
@@ -567,9 +567,6 @@ int main(int argc, char **argv)
}
init_openair0
();
// 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
);
set_latency_target
();
if
(
IS_SOFTMODEM_DOSCOPE_QT
)
{
...
...
openair1/PHY/INIT/nr_init.c
View file @
66bdd0e8
...
...
@@ -77,8 +77,11 @@ NR_gNB_PHY_STATS_t *get_phy_stats(PHY_VARS_gNB *gNB, uint16_t rnti)
else
if
(
!
stats
->
active
&&
first_free
==
-
1
)
first_free
=
i
;
}
if
(
first_free
<
0
)
return
NULL
;
// new stats
AssertFatal
(
first_free
>=
0
,
"PHY statistics list is full
\n
"
);
stats
=
&
gNB
->
phy_stats
[
first_free
];
stats
->
active
=
true
;
stats
->
rnti
=
rnti
;
...
...
@@ -130,6 +133,8 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB)
load_LDPClib
(
NULL
,
&
ldpc_interface
);
pthread_mutex_init
(
&
gNB
->
UL_INFO
.
crc_rx_mutex
,
NULL
);
if
(
gNB
->
ldpc_offload_flag
)
load_LDPClib
(
"_t2"
,
&
ldpc_interface_offload
);
gNB
->
max_nb_pdsch
=
MAX_MOBILES_PER_GNB
;
...
...
@@ -326,6 +331,8 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
const
int
max_ul_mimo_layers
=
4
;
// taken from phy_init_nr_gNB()
const
int
n_buf
=
Prx
*
max_ul_mimo_layers
;
pthread_mutex_destroy
(
&
gNB
->
UL_INFO
.
crc_rx_mutex
);
PHY_MEASUREMENTS_gNB
*
meas
=
&
gNB
->
measurements
;
free_and_zero
(
meas
->
n0_subband_power
);
free_and_zero
(
meas
->
n0_subband_power_dB
);
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
View file @
66bdd0e8
...
...
@@ -34,7 +34,7 @@
#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h"
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
NR_gNB_ULSCH_t
*
find_nr_ulsch
(
PHY_VARS_gNB
*
gNB
,
uint16_t
rnti
,
int
pid
)
static
NR_gNB_ULSCH_t
*
find_nr_ulsch
(
PHY_VARS_gNB
*
gNB
,
uint16_t
rnti
,
int
pid
)
{
int16_t
first_free_index
=
-
1
;
AssertFatal
(
gNB
!=
NULL
,
"gNB is null
\n
"
);
...
...
@@ -62,7 +62,10 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB, int frame, int slot, nfapi_nr_pusch_pdu_t
{
int
harq_pid
=
ulsch_pdu
->
pusch_data
.
harq_process_id
;
NR_gNB_ULSCH_t
*
ulsch
=
find_nr_ulsch
(
gNB
,
ulsch_pdu
->
rnti
,
harq_pid
);
AssertFatal
(
ulsch
,
"No ulsch_id found for rnti %04x
\n
"
,
ulsch_pdu
->
rnti
);
if
(
ulsch
==
NULL
)
{
LOG_E
(
NR_PHY
,
"No ulsch_id found for rnti %04x
\n
"
,
ulsch_pdu
->
rnti
);
return
;
}
ulsch
->
rnti
=
ulsch_pdu
->
rnti
;
ulsch
->
harq_pid
=
harq_pid
;
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch.h
View file @
66bdd0e8
...
...
@@ -30,9 +30,14 @@
* \warning
*/
#ifndef NR_ULSCH_H_
#define NR_ULSCH_H_
#include "PHY/defs_gNB.h"
#include "common/utils/threadPool/thread-pool.h"
#define NUMBER_FRAMES_PHY_UE_INACTIVE 10
void
free_gNB_ulsch
(
NR_gNB_ULSCH_t
*
ulsch
,
uint16_t
N_RB_UL
);
NR_gNB_ULSCH_t
new_gNB_ulsch
(
uint8_t
max_ldpc_iterations
,
uint16_t
N_RB_UL
);
...
...
@@ -71,10 +76,10 @@ void nr_ulsch_unscrambling(int16_t* llr, uint32_t size, uint32_t Nid, uint32_t n
void
nr_ulsch_layer_demapping
(
int16_t
*
llr_cw
,
uint8_t
Nl
,
uint8_t
mod_order
,
uint32_t
length
,
int16_t
**
llr_layers
);
NR_gNB_ULSCH_t
*
find_nr_ulsch
(
PHY_VARS_gNB
*
gNB
,
uint16_t
rnti
,
int
pid
);
void
dump_pusch_stats
(
FILE
*
fd
,
PHY_VARS_gNB
*
gNB
);
void
dump_nr_I0_stats
(
FILE
*
fd
,
PHY_VARS_gNB
*
gNB
);
NR_gNB_SCH_STATS_t
*
get_ulsch_stats
(
PHY_VARS_gNB
*
gNB
,
NR_gNB_ULSCH_t
*
ulsch
);
#endif
/* NR_ULSCH_H_ */
openair1/PHY/NR_TRANSPORT/pucch_rx.c
View file @
66bdd0e8
...
...
@@ -162,10 +162,15 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
pucch_pdu
->
bit_len_harq
,
pucch_pdu
->
sr_flag
);
/* it might be that the stats list is full: In this case, we will simply
* write to some memory on the stack instead of the UE's UCI stats */
NR_gNB_UCI_STATS_t
stack_uci_stats
=
{
0
};
NR_gNB_UCI_STATS_t
*
uci_stats
=
&
stack_uci_stats
;
NR_gNB_PHY_STATS_t
*
phy_stats
=
get_phy_stats
(
gNB
,
pucch_pdu
->
rnti
);
AssertFatal
(
phy_stats
!=
NULL
,
"phy_stats shouldn't be NULL
\n
"
);
phy_stats
->
frame
=
frame
;
NR_gNB_UCI_STATS_t
*
uci_stats
=
&
phy_stats
->
uci_stats
;
if
(
phy_stats
!=
NULL
)
{
phy_stats
->
frame
=
frame
;
uci_stats
=
&
phy_stats
->
uci_stats
;
}
int
nr_sequences
;
const
uint8_t
*
mcs
;
...
...
@@ -350,9 +355,14 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
#endif
index
=
maxpos
;
uci_stats
->
pucch0_n00
=
gNB
->
measurements
.
n0_subband_power_tot_dB
[
prb_offset
[
0
]];
uci_stats
->
pucch0_n01
=
gNB
->
measurements
.
n0_subband_power_tot_dB
[
prb_offset
[
1
]];
LOG_D
(
PHY
,
"n00[%d] = %d, n01[%d] = %d
\n
"
,
prb_offset
[
0
],
uci_stats
->
pucch0_n00
,
prb_offset
[
1
],
uci_stats
->
pucch0_n01
);
int
pucch0_n00
=
gNB
->
measurements
.
n0_subband_power_tot_dB
[
prb_offset
[
0
]];
int
pucch0_n01
=
gNB
->
measurements
.
n0_subband_power_tot_dB
[
prb_offset
[
1
]];
LOG_D
(
PHY
,
"n00[%d] = %d, n01[%d] = %d
\n
"
,
prb_offset
[
0
],
pucch0_n00
,
prb_offset
[
1
],
pucch0_n01
);
uci_stats
->
pucch0_n00
=
pucch0_n00
;
uci_stats
->
pucch0_n01
=
pucch0_n01
;
uci_stats
->
pucch0_thres
=
gNB
->
pucch0_thres
;
// estimate CQI for MAC (from antenna port 0 only)
int
max_n0
=
max
(
gNB
->
measurements
.
n0_subband_power_tot_dB
[
prb_offset
[
0
]],
gNB
->
measurements
.
n0_subband_power_tot_dB
[
prb_offset
[
1
]]);
...
...
@@ -365,7 +375,6 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
else
cqi
=
(
640
+
SNRtimes10
)
/
5
;
uci_stats
->
pucch0_thres
=
gNB
->
pucch0_thres
;
/* + (10*max_n0);*/
bool
no_conf
=
false
;
if
(
nr_sequences
>
1
)
{
if
(
/*xrtmag_dBtimes10 < (30+xrtmag_next_dBtimes10) ||*/
SNRtimes10
<
gNB
->
pucch0_thres
)
{
...
...
@@ -374,7 +383,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
"%d.%d PUCCH bad confidence: %d threshold, %d, %d, %d
\n
"
,
frame
,
slot
,
uci_stats
->
pucch0_thres
,
gNB
->
pucch0_thres
,
SNRtimes10
,
xrtmag_dBtimes10
,
xrtmag_next_dBtimes10
);
...
...
@@ -390,7 +399,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
uci_pdu
->
rssi
=
1280
-
(
10
*
dB_fixed
(
32767
*
32767
))
-
dB_fixed_times10
(
signal_energy_ant0
);
if
(
pucch_pdu
->
bit_len_harq
==
0
)
{
uci_pdu
->
sr
.
sr_confidence_level
=
SNRtimes10
<
uci_stats
->
pucch0_thres
;
uci_pdu
->
sr
.
sr_confidence_level
=
SNRtimes10
<
gNB
->
pucch0_thres
;
uci_stats
->
pucch0_sr_trials
++
;
if
(
xrtmag_dBtimes10
>
(
10
*
max_n0
+
100
))
{
uci_pdu
->
sr
.
sr_indication
=
1
;
...
...
@@ -417,9 +426,9 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
xrtmag_next_dBtimes10
,
pucch_power_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
pucch0_n00
,
pucch0_n01
,
gNB
->
pucch0_thres
,
cqi
,
SNRtimes10
,
10
*
log10
((
double
)
signal_energy_ant0
));
...
...
@@ -452,9 +461,9 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
xrtmag_next_dBtimes10
,
pucch_power_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
pucch0_n00
,
pucch0_n01
,
gNB
->
pucch0_thres
,
cqi
,
SNRtimes10
);
if
(
pucch_pdu
->
sr_flag
==
1
)
{
...
...
openair1/PHY/TOOLS/nr_phy_scope.c
View file @
66bdd0e8
...
...
@@ -614,8 +614,8 @@ static void pucchIQ (OAIgraph_t *graph, scopeData_t *p, int nb_UEs) {
static
void
puschThroughtput
(
OAIgraph_t
*
graph
,
scopeData_t
*
p
,
int
nb_UEs
)
{
// PUSCH Throughput
/*
float tput_time_enb[
NUMBER_OF_UE_MAX
][TPUT_WINDOW_LENGTH] = {{0}};
float tput_enb[
NUMBER_OF_UE_MAX
][TPUT_WINDOW_LENGTH] = {{0}};
float tput_time_enb[
MAX_MOBILES_PER_GNB
][TPUT_WINDOW_LENGTH] = {{0}};
float tput_enb[
MAX_MOBILES_PER_GNB
][TPUT_WINDOW_LENGTH] = {{0}};
memmove( tput_time_enb[UE_id], &tput_time_enb[UE_id][1], (TPUT_WINDOW_LENGTH-1)*sizeof(float) );
memmove( tput_enb[UE_id], &tput_enb[UE_id][1], (TPUT_WINDOW_LENGTH-1)*sizeof(float) );
...
...
@@ -725,7 +725,7 @@ static void *scope_thread_gNB(void *arg) {
int
fl_argc
=
1
;
char
*
name
=
"5G-gNB-scope"
;
fl_initialize
(
&
fl_argc
,
&
name
,
NULL
,
0
,
0
);
int
nb_ue
=
min
(
NUMBER_OF_UE_MAX
,
scope_enb_num_ue
);
int
nb_ue
=
min
(
MAX_MOBILES_PER_GNB
,
scope_enb_num_ue
);
OAI_phy_scope_t
*
form_gnb
=
create_phy_scope_gnb
();
while
(
!
oai_exit
)
{
...
...
@@ -985,9 +985,9 @@ static void uePdschIQ (scopeGraphData_t **data, OAIgraph_t *graph, PHY_VARS_NR_
}
static
void
uePdschThroughput
(
scopeGraphData_t
**
data
,
OAIgraph_t
*
graph
,
PHY_VARS_NR_UE
*
phy_vars_ue
,
int
eNB_id
,
int
UE_id
)
{
/*
float tput_time_ue[
NUMBER_OF_UE_MAX
][TPUT_WINDOW_LENGTH] = {{0}};
float tput_ue[
NUMBER_OF_UE_MAX
][TPUT_WINDOW_LENGTH] = {{0}};
float tput_ue_max[
NUMBER_OF_UE_MAX
] = {0};
float tput_time_ue[
MAX_MOBILES_PER_GNB
][TPUT_WINDOW_LENGTH] = {{0}};
float tput_ue[
MAX_MOBILES_PER_GNB
][TPUT_WINDOW_LENGTH] = {{0}};
float tput_ue_max[
MAX_MOBILES_PER_GNB
] = {0};
// PDSCH Throughput
...
...
@@ -1178,7 +1178,7 @@ static void reset_stats_gNB(FL_OBJECT *button,
int i,k;
//PHY_VARS_gNB *phy_vars_gNB = RC.gNB[0][0];
for (i=0; i<
NUMBER_OF_UE_MAX
; i++) {
for (i=0; i<
MAX_MOBILES_PER_GNB
; i++) {
for (k=0; k<8; k++) { //harq_processes
/* for (j=0; j<phy_vars_gNB->dlsch[i][0]->Mlimit; j++) {
phy_vars_gNB->UE_stats[i].dlsch_NAK[k][j]=0;
...
...
openair1/PHY/phy_vars.h
View file @
66bdd0e8
...
...
@@ -30,8 +30,6 @@
PHY_VARS_UE
***
PHY_vars_UE_g
;
UL_RCC_IND_t
UL_RCC_INFO
;
NR_UL_IND_t
UL_INFO
;
unsigned
char
NB_RU
=
0
;
int
number_of_cards
;
uint8_t
max_turbo_iterations
=
4
;
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
66bdd0e8
...
...
@@ -467,75 +467,13 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
else
if
(
SNRtimes10
>
635
)
cqi
=
255
;
else
cqi
=
(
640
+
SNRtimes10
)
/
5
;
if
(
0
/*pusch_pdu->mcs_index == 9*/
)
{
__attribute__
((
unused
))
int
off
=
((
pusch_pdu
->
rb_size
&
1
)
==
1
)
?
4
:
0
;
LOG_M
(
"rxsigF0.m"
,
"rxsF0"
,
&
gNB
->
common_vars
.
rxdataF
[
0
][(
slot_rx
%
RU_RX_SLOT_DEPTH
)
*
gNB
->
frame_parms
.
ofdm_symbol_size
*
gNB
->
frame_parms
.
symbols_per_slot
],
gNB
->
frame_parms
.
ofdm_symbol_size
*
gNB
->
frame_parms
.
symbols_per_slot
,
1
,
1
);
LOG_M
(
"chestF0.m"
,
"chF0"
,
&
gNB
->
pusch_vars
[
0
].
ul_ch_estimates
[
0
][
pusch_pdu
->
start_symbol_index
*
gNB
->
frame_parms
.
ofdm_symbol_size
],
gNB
->
frame_parms
.
ofdm_symbol_size
,
1
,
1
);
LOG_M
(
"chestF0_ext.m"
,
"chF0_ext"
,
&
gNB
->
pusch_vars
[
0
]
.
ul_ch_estimates_ext
[
0
][(
pusch_pdu
->
start_symbol_index
+
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
(
pusch_pdu
->
nr_of_symbols
-
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"rxsigF0_comp.m"
,
"rxsF0_comp"
,
&
gNB
->
pusch_vars
[
0
].
rxdataF_comp
[
0
][
pusch_pdu
->
start_symbol_index
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
pusch_pdu
->
nr_of_symbols
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"rxsigF0_llr.m"
,
"rxsF0_llr"
,
&
gNB
->
pusch_vars
[
0
].
llr
[
0
],
(
pusch_pdu
->
nr_of_symbols
-
1
)
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
*
pusch_pdu
->
qam_mod_order
,
1
,
0
);
if
(
gNB
->
frame_parms
.
nb_antennas_rx
>
1
)
{
LOG_M
(
"rxsigF1.m"
,
"rxsF1"
,
&
gNB
->
common_vars
.
rxdataF
[
1
][(
slot_rx
%
RU_RX_SLOT_DEPTH
)
*
gNB
->
frame_parms
.
ofdm_symbol_size
*
gNB
->
frame_parms
.
symbols_per_slot
],
gNB
->
frame_parms
.
ofdm_symbol_size
*
gNB
->
frame_parms
.
symbols_per_slot
,
1
,
1
);
LOG_M
(
"chestF1.m"
,
"chF1"
,
&
gNB
->
pusch_vars
[
0
].
ul_ch_estimates
[
1
][
pusch_pdu
->
start_symbol_index
*
gNB
->
frame_parms
.
ofdm_symbol_size
],
gNB
->
frame_parms
.
ofdm_symbol_size
,
1
,
1
);
LOG_M
(
"chestF1_ext.m"
,
"chF1_ext"
,
&
gNB
->
pusch_vars
[
0
]
.
ul_ch_estimates_ext
[
1
][(
pusch_pdu
->
start_symbol_index
+
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
(
pusch_pdu
->
nr_of_symbols
-
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"rxsigF1_comp.m"
,
"rxsF1_comp"
,
&
gNB
->
pusch_vars
[
0
].
rxdataF_comp
[
1
][
pusch_pdu
->
start_symbol_index
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
pusch_pdu
->
nr_of_symbols
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
}
exit
(
-
1
);
}
// multiple threads might call this function at the same time, or while the
// L2 reads the messages. Hence, if not protected, crc and rx indications
// might not appear pairwise (in the same order) in the same slot, or even in
// separate slots. The L2 does not support this; hence, use the crc_rx_mutex
// to ensure that messages are pairwise.
int
rc
=
pthread_mutex_lock
(
&
gNB
->
UL_INFO
.
crc_rx_mutex
);
DevAssert
(
rc
==
0
);
// crc indication
uint16_t
num_crc
=
gNB
->
UL_INFO
.
crc_ind
.
number_crcs
;
...
...
@@ -573,8 +511,10 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
gNB
->
rx_pdu_list
[
num_rx
].
pdu_length
=
harq_process
->
TBS
;
gNB
->
rx_pdu_list
[
num_rx
].
pdu
=
harq_process
->
b
;
}
gNB
->
UL_INFO
.
rx_ind
.
number_of_pdus
++
;
rc
=
pthread_mutex_unlock
(
&
gNB
->
UL_INFO
.
crc_rx_mutex
);
DevAssert
(
rc
==
0
);
}
// Function to fill UL RB mask to be used for N0 measurements
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
66bdd0e8
...
...
@@ -136,7 +136,7 @@ nrUE_params_t *get_nrUE_params(void) {
uint16_t
n_rnti
=
0x1234
;
openair0_config_t
openair0_cfg
[
MAX_CARDS
];
channel_desc_t
*
UE2gNB
[
NUMBER_OF_UE_MAX
][
NUMBER_OF_gNB_MAX
];
channel_desc_t
*
UE2gNB
[
MAX_MOBILES_PER_GNB
][
NUMBER_OF_gNB_MAX
];
int
NB_UE_INST
=
1
;
configmodule_interface_t
*
uniqCfg
=
NULL
;
...
...
openair2/NR_PHY_INTERFACE/NR_IF_Module.c
View file @
66bdd0e8
...
...
@@ -177,6 +177,9 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info)
}
if
(
UL_info
->
rx_ind
.
number_of_pdus
>
0
&&
UL_info
->
crc_ind
.
number_crcs
>
0
)
{
// see nr_fill_indication about why this mutex is necessary
int
rc
=
pthread_mutex_lock
(
&
UL_info
->
crc_rx_mutex
);
DevAssert
(
rc
==
0
);
AssertFatal
(
UL_info
->
rx_ind
.
number_of_pdus
==
UL_info
->
crc_ind
.
number_crcs
,
"number_of_pdus %d, number_crcs %d
\n
"
,
UL_info
->
rx_ind
.
number_of_pdus
,
UL_info
->
crc_ind
.
number_crcs
);
...
...
@@ -210,9 +213,11 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info)
rx
->
rssi
);
handle_nr_ul_harq
(
UL_info
->
CC_id
,
UL_info
->
module_id
,
UL_info
->
frame
,
UL_info
->
slot
,
crc
);
}
UL_info
->
rx_ind
.
number_of_pdus
=
0
;
UL_info
->
crc_ind
.
number_crcs
=
0
;
rc
=
pthread_mutex_unlock
(
&
UL_info
->
crc_rx_mutex
);
DevAssert
(
rc
==
0
);
}
UL_info
->
rx_ind
.
number_of_pdus
=
0
;
UL_info
->
crc_ind
.
number_crcs
=
0
;
}
void
handle_nr_srs
(
NR_UL_IND_t
*
UL_info
)
{
...
...
openair2/NR_PHY_INTERFACE/NR_IF_Module.h
View file @
66bdd0e8
...
...
@@ -63,6 +63,11 @@ typedef struct {
/// crc indication list
nfapi_nr_crc_indication_t
crc_ind
;
/// RX indication
nfapi_nr_rx_data_indication_t
rx_ind
;
/// mutex to protect concurrent access to crc_ind and rx_ind, which the L2
/// needs to be pairwise
pthread_mutex_t
crc_rx_mutex
;
/// RACH indication list
nfapi_nr_rach_indication_t
rach_ind
;
...
...
@@ -70,9 +75,6 @@ typedef struct {
/// SRS indication list
nfapi_nr_srs_indication_t
srs_ind
;
/// RX indication
nfapi_nr_rx_data_indication_t
rx_ind
;
/// UCI indication
nfapi_nr_uci_indication_t
uci_ind
;
...
...
openair2/RRC/NR/nr_rrc_config.c
View file @
66bdd0e8
...
...
@@ -608,25 +608,27 @@ static struct NR_SRS_Resource__resourceType__periodic *configure_periodic_srs(co
return
periodic_srs
;
}
static
void
config_srs
(
const
NR_ServingCellConfigCommon_t
*
scc
,
NR_SetupRelease_SRS_Config_t
*
setup_release_srs_Config
,
const
NR_UE_NR_Capability_t
*
uecap
,
const
int
curr_bwp
,
const
int
uid
,
const
int
res_id
,
const
long
maxMIMO_Layers
,
const
int
do_srs
)
static
NR_SetupRelease_SRS_Config_t
*
get_config_srs
(
const
NR_ServingCellConfigCommon_t
*
scc
,
const
NR_UE_NR_Capability_t
*
uecap
,
const
int
curr_bwp
,
const
int
uid
,
const
int
res_id
,
const
long
maxMIMO_Layers
,
int
do_srs
)
{
setup_release_srs_Config
->
present
=
NR_SetupRelease_SRS_Config_PR_setup
;
NR_SRS_Config_t
*
srs_Config
;
if
(
setup_release_srs_Config
->
choice
.
setup
)
{
srs_Config
=
setup_release_srs_Config
->
choice
.
setup
;
ASN_STRUCT_FREE
(
asn_DEF_NR_SRS_Config
,
srs_Config
);
// if in the future NUMBER_OF_gNB_MAX is increased, it will be necessary to improve the allocation of SRS resources,
// where the startPosition = 2 or 3 and sl160 = 17, 17, 27 ... 157 only give us 30 different allocations.
static_assert
(
NUMBER_OF_gNB_MAX
<=
32
,
"SRS can only handle up to 30 UEs (additional ones are handled gracefully, but don't have SRS enabled
\n
"
);
if
(
do_srs
&&
(
uid
<
0
||
uid
>
29
))
{
LOG_E
(
NR_RRC
,
"gNB cannot allocate SRS resources for UID %d: available resources exceeded
\n
"
,
uid
);
do_srs
=
0
;
}
NR_SetupRelease_SRS_Config_t
*
setup_release_srs_Config
=
calloc
(
1
,
sizeof
(
*
setup_release_srs_Config
));
setup_release_srs_Config
->
present
=
NR_SetupRelease_SRS_Config_PR_setup
;
setup_release_srs_Config
->
choice
.
setup
=
calloc
(
1
,
sizeof
(
*
setup_release_srs_Config
->
choice
.
setup
));
srs_Config
=
setup_release_srs_Config
->
choice
.
setup
;
NR_SRS_Config_t
*
srs_Config
=
setup_release_srs_Config
->
choice
.
setup
;
srs_Config
->
srs_ResourceSetToReleaseList
=
NULL
;
...
...
@@ -733,6 +735,8 @@ static void config_srs(const NR_ServingCellConfigCommon_t *scc,
srs_res0
->
spatialRelationInfo
->
referenceSignal
.
present
=
NR_SRS_SpatialRelationInfo__referenceSignal_PR_ssb_Index
;
srs_res0
->
spatialRelationInfo
->
referenceSignal
.
choice
.
ssb_Index
=
0
;
asn1cSeqAdd
(
&
srs_Config
->
srs_ResourceToAddModList
->
list
,
srs_res0
);
return
setup_release_srs_Config
;
}
void
prepare_sim_uecap
(
NR_UE_NR_Capability_t
*
cap
,
...
...
@@ -1443,15 +1447,7 @@ static void config_uplinkBWP(NR_BWP_Uplink_t *ubwp,
&&
servingcellconfigdedicated
->
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
?
*
servingcellconfigdedicated
->
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
:
1
;
ubwp
->
bwp_Dedicated
->
srs_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
srs_Config
));
config_srs
(
scc
,
ubwp
->
bwp_Dedicated
->
srs_Config
,
NULL
,
curr_bwp
,
uid
,
bwp_loop
+
1
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
ubwp
->
bwp_Dedicated
->
srs_Config
=
get_config_srs
(
scc
,
NULL
,
curr_bwp
,
uid
,
bwp_loop
+
1
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
ubwp
->
bwp_Dedicated
->
configuredGrantConfig
=
NULL
;
ubwp
->
bwp_Dedicated
->
beamFailureRecoveryConfig
=
NULL
;
...
...
@@ -2227,8 +2223,7 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
:
1
;
// We are using do_srs = 0 here because the periodic SRS will only be enabled in update_cellGroupConfig() if do_srs == 1
initialUplinkBWP
->
srs_Config
=
calloc
(
1
,
sizeof
(
*
initialUplinkBWP
->
srs_Config
));
config_srs
(
scc
,
initialUplinkBWP
->
srs_Config
,
NULL
,
curr_bwp
,
uid
,
0
,
maxMIMO_Layers
,
0
);
initialUplinkBWP
->
srs_Config
=
get_config_srs
(
scc
,
NULL
,
curr_bwp
,
uid
,
0
,
maxMIMO_Layers
,
0
);
scheduling_request_config
(
scc
,
pucch_Config
,
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
subcarrierSpacing
);
...
...
@@ -2525,17 +2520,8 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
// UL and SRS configuration
if
(
configuration
->
do_SRS
&&
uplinkConfig
&&
uplinkConfig
->
initialUplinkBWP
)
{
if
(
!
uplinkConfig
->
initialUplinkBWP
->
srs_Config
)
{
uplinkConfig
->
initialUplinkBWP
->
srs_Config
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
initialUplinkBWP
->
srs_Config
));
}
config_srs
(
scc
,
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
initialUplinkBWP
->
srs_Config
,
uecap
,
curr_bwp
,
uid
,
0
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
ASN_STRUCT_FREE
(
asn_DEF_NR_SetupRelease_SRS_Config
,
uplinkConfig
->
initialUplinkBWP
->
srs_Config
);
uplinkConfig
->
initialUplinkBWP
->
srs_Config
=
get_config_srs
(
scc
,
uecap
,
curr_bwp
,
uid
,
0
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
}
// Set DL MCS table
...
...
@@ -2570,7 +2556,9 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
}
*
pusch_Config
->
maxRank
=
ul_max_layers
;
}
config_srs
(
scc
,
ul_bwp
->
bwp_Dedicated
->
srs_Config
,
uecap
,
bwp_size
,
uid
,
i
+
1
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
ASN_STRUCT_FREE
(
asn_DEF_NR_SetupRelease_SRS_Config
,
ul_bwp
->
bwp_Dedicated
->
srs_Config
);
ul_bwp
->
bwp_Dedicated
->
srs_Config
=
get_config_srs
(
scc
,
uecap
,
bwp_size
,
uid
,
i
+
1
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
}
}
update_cqitables
(
bwp_Dedicated
->
pdsch_Config
,
SpCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
);
...
...
@@ -2648,11 +2636,6 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
if
(
uecap
==
NULL
)
LOG_E
(
RRC
,
"No UE Capabilities available when programming default CellGroup in NSA
\n
"
);
// This assert will never happen in the current implementation because NUMBER_OF_UE_MAX = 4.
// However, if in the future NUMBER_OF_UE_MAX is increased, it will be necessary to improve the allocation of SRS resources,
// where the startPosition = 2 or 3 and sl160 = 17, 17, 27 ... 157 only give us 30 different allocations.
AssertFatal
(
uid
>=
0
&&
uid
<
30
,
"gNB cannot allocate the SRS resources
\n
"
);
uint64_t
bitmap
=
get_ssb_bitmap
(
servingcellconfigcommon
);
// See comment at the end of this function regarding ServingCellConfig
fix_servingcellconfigdedicated
(
servingcellconfigdedicated
);
...
...
@@ -2772,8 +2755,7 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
int
curr_bwp
=
NRRIV2BW
(
servingcellconfigcommon
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
initialUplinkBWP
->
srs_Config
=
calloc
(
1
,
sizeof
(
*
initialUplinkBWP
->
srs_Config
));
config_srs
(
servingcellconfigcommon
,
initialUplinkBWP
->
srs_Config
,
NULL
,
curr_bwp
,
uid
,
0
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
initialUplinkBWP
->
srs_Config
=
get_config_srs
(
servingcellconfigcommon
,
NULL
,
curr_bwp
,
uid
,
0
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
// Downlink BWPs
int
n_dl_bwp
=
1
;
...
...
openair2/RRC/NR/nr_rrc_extern.h
View file @
66bdd0e8
...
...
@@ -34,25 +34,5 @@
#include "COMMON/mac_rrc_primitives.h"
#include "LAYER2/RLC/rlc.h"
#include "openair2/RRC/common.h"
void
openair_rrc_gNB_configuration
(
gNB_RRC_INST
*
rrc
,
gNB_RrcConfigurationReq
*
configuration
);
extern
UE_RRC_INST
*
UE_rrc_inst
;
extern
uint8_t
DRB2LCHAN
[
8
];
extern
int
NB_UE_INST
;
extern
void
*
bigphys_malloc
(
int
);
//uint8_t RACH_TIME_ALLOC;
extern
uint16_t
RACH_FREQ_ALLOC
;
// uint8_t NB_RACH;
extern
MAC_MEAS_T
BCCH_MEAS_TRIGGER
,
CCCH_MEAS_TRIGGER
,
DCCH_MEAS_TRIGGER
,
DTCH_MEAS_TRIGGER
;
extern
MAC_AVG_T
BCCH_MEAS_AVG
,
CCCH_MEAS_AVG
,
DCCH_MEAS_AVG
,
DTCH_MEAS_AVG
;
extern
UE_PF_PO_t
UE_PF_PO
[
NFAPI_CC_MAX
][
MAX_MOBILES_PER_ENB
];
extern
pthread_mutex_t
ue_pf_po_mutex
;
#endif
openair2/RRC/NR/rrc_gNB.c
View file @
66bdd0e8
...
...
@@ -317,7 +317,7 @@ static void rrc_gNB_CU_DU_init(gNB_RRC_INST *rrc)
void
openair_rrc_gNB_configuration
(
gNB_RRC_INST
*
rrc
,
gNB_RrcConfigurationReq
*
configuration
)
{
AssertFatal
(
rrc
!=
NULL
,
"RC.nrrrc not initialized!"
);
AssertFatal
(
NUMBER_OF_UE_MAX
<
(
module_id_t
)
0xFFFFFFFFFFFFFFFF
,
" variable overflow"
);
AssertFatal
(
MAX_MOBILES_PER_GNB
<
(
module_id_t
)
0xFFFFFFFFFFFFFFFF
,
" variable overflow"
);
AssertFatal
(
configuration
!=
NULL
,
"configuration input is null
\n
"
);
rrc
->
module_id
=
0
;
rrc_gNB_CU_DU_init
(
rrc
);
...
...
@@ -2698,14 +2698,12 @@ rrc_gNB_generate_RRCRelease(
int
rrc_gNB_generate_pcch_msg
(
sctp_assoc_t
assoc_id
,
const
NR_SIB1_t
*
sib1
,
uint32_t
tmsi
,
uint8_t
paging_drx
)
{
instance_t
instance
=
0
;
uint8_t
CC_id
=
0
;
const
unsigned
int
Ttab
[
4
]
=
{
32
,
64
,
128
,
256
};
uint8_t
Tc
;
uint8_t
Tue
;
uint32_t
pfoffset
;
uint32_t
N
;
/* N: min(T,nB). total count of PF in one DRX cycle */
uint32_t
Ns
=
0
;
/* Ns: max(1,nB/T) */
uint8_t
i_s
;
/* i_s = floor(UE_ID/N) mod Ns */
uint32_t
T
;
/* DRX cycle */
uint32_t
length
;
uint8_t
buffer
[
RRC_BUF_SIZE
];
...
...
@@ -2767,44 +2765,9 @@ int rrc_gNB_generate_pcch_msg(sctp_assoc_t assoc_id, const NR_SIB1_t *sib1, uint
return
(
-
1
);
}
/* insert data to UE_PF_PO or update data in UE_PF_PO */
pthread_mutex_lock
(
&
ue_pf_po_mutex
);
uint8_t
i
=
0
;
for
(
i
=
0
;
i
<
MAX_MOBILES_PER_ENB
;
i
++
)
{
if
((
UE_PF_PO
[
CC_id
][
i
].
enable_flag
==
true
&&
UE_PF_PO
[
CC_id
][
i
].
ue_index_value
==
(
uint16_t
)(
tmsi
%
1024
))
||
(
UE_PF_PO
[
CC_id
][
i
].
enable_flag
!=
true
))
{
/* set T = min(Tc,Tue) */
UE_PF_PO
[
CC_id
][
i
].
T
=
T
;
/* set UE_ID */
UE_PF_PO
[
CC_id
][
i
].
ue_index_value
=
(
uint16_t
)(
tmsi
%
1024
);
/* calculate PF and PO */
/* set PF_min and PF_offset: (SFN + PF_offset) mod T = (T div N)*(UE_ID mod N) */
UE_PF_PO
[
CC_id
][
i
].
PF_min
=
(
T
/
N
)
*
(
UE_PF_PO
[
CC_id
][
i
].
ue_index_value
%
N
);
UE_PF_PO
[
CC_id
][
i
].
PF_offset
=
pfoffset
;
/* set i_s */
/* i_s = floor(UE_ID/N) mod Ns */
i_s
=
(
uint8_t
)((
UE_PF_PO
[
CC_id
][
i
].
ue_index_value
/
N
)
%
Ns
);
UE_PF_PO
[
CC_id
][
i
].
i_s
=
i_s
;
// TODO,set PO
if
(
UE_PF_PO
[
CC_id
][
i
].
enable_flag
==
true
)
{
//paging exist UE log
LOG_D
(
NR_RRC
,
"[gNB %ld] CC_id %d In rrc_gNB_generate_pcch_msg: Update exist UE %d, T %d, N %d, PF %d, i_s %d, PF_offset %d
\n
"
,
instance
,
CC_id
,
UE_PF_PO
[
CC_id
][
i
].
ue_index_value
,
T
,
N
,
UE_PF_PO
[
CC_id
][
i
].
PF_min
,
UE_PF_PO
[
CC_id
][
i
].
i_s
,
UE_PF_PO
[
CC_id
][
i
].
PF_offset
);
}
else
{
/* set enable_flag */
UE_PF_PO
[
CC_id
][
i
].
enable_flag
=
true
;
//paging new UE log
LOG_D
(
NR_RRC
,
"[gNB %ld] CC_id %d In rrc_gNB_generate_pcch_msg: Insert a new UE %d, T %d, N %d, PF %d, i_s %d, PF_offset %d
\n
"
,
instance
,
CC_id
,
UE_PF_PO
[
CC_id
][
i
].
ue_index_value
,
T
,
N
,
UE_PF_PO
[
CC_id
][
i
].
PF_min
,
UE_PF_PO
[
CC_id
][
i
].
i_s
,
UE_PF_PO
[
CC_id
][
i
].
PF_offset
);
}
break
;
}
}
pthread_mutex_unlock
(
&
ue_pf_po_mutex
);
(
void
)
N
;
/* not used, suppress warning */
(
void
)
Ns
;
/* not used, suppress warning */
(
void
)
pfoffset
;
/* not used, suppress warning */
/* Create message for PDCP (DLInformationTransfer_t) */
length
=
do_NR_Paging
(
instance
,
...
...
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