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
4b3a67b3
Commit
4b3a67b3
authored
Nov 13, 2020
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/benetel_phase_rotation' into integration_2020_wk46_2
parents
b4522183
6e1ad6e9
Changes
16
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
289 additions
and
260 deletions
+289
-260
executables/nr-gnb.c
executables/nr-gnb.c
+9
-0
executables/nr-ru.c
executables/nr-ru.c
+3
-3
openair1/PHY/MODULATION/nr_modulation.h
openair1/PHY/MODULATION/nr_modulation.h
+6
-0
openair1/PHY/MODULATION/slot_fep_nr.c
openair1/PHY/MODULATION/slot_fep_nr.c
+22
-10
openair1/SCHED_NR/nr_ru_procedures.c
openair1/SCHED_NR/nr_ru_procedures.c
+0
-32
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+15
-1
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+1
-28
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+154
-154
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+14
-4
targets/ARCH/ETHERNET/benetel/4g/benetel.c
targets/ARCH/ETHERNET/benetel/4g/benetel.c
+1
-1
targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
+3
-4
targets/ARCH/ETHERNET/benetel/5g/benetel.c
targets/ARCH/ETHERNET/benetel/5g/benetel.c
+2
-1
targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
+11
-11
targets/ARCH/ETHERNET/benetel/5g/low.c
targets/ARCH/ETHERNET/benetel/5g/low.c
+35
-2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf
+7
-5
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
+6
-4
No files found.
executables/nr-gnb.c
View file @
4b3a67b3
...
...
@@ -256,6 +256,15 @@ static inline int rxtx(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int frame_t
// Do PRACH RU processing
L1_nr_prach_procedures
(
gNB
,
frame_rx
,
slot_rx
);
//apply the rx signal rotation here
apply_nr_rotation_ul
(
&
gNB
->
frame_parms
,
gNB
->
common_vars
.
rxdataF
[
0
],
slot_rx
,
0
,
gNB
->
frame_parms
.
Ncp
==
EXTENDED
?
12
:
14
,
gNB
->
frame_parms
.
ofdm_symbol_size
);
phy_procedures_gNB_uespec_RX
(
gNB
,
frame_rx
,
slot_rx
);
}
...
...
executables/nr-ru.c
View file @
4b3a67b3
...
...
@@ -858,9 +858,9 @@ void *ru_thread_prach( void *param ) {
if
(
wait_on_condition
(
&
proc
->
mutex_prach
,
&
proc
->
cond_prach
,
&
proc
->
instance_cnt_prach
,
"ru_prach_thread"
)
<
0
)
break
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_RU_PRACH_RX
,
1
);
/*
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_RU_PRACH_RX, 1 );
/*
if (ru->gNB_list[0]){
if (ru->gNB_list[0]){
prach_procedures(
ru->gNB_list[0],0
);
...
...
@@ -2220,7 +2220,7 @@ void set_function_spec_param(RU_t *ru) {
case
REMOTE_IF4p5
:
ru
->
do_prach
=
0
;
ru
->
feprx
=
NULL
;
// DFTs
ru
->
feptx_prec
=
(
get_thread_worker_conf
()
==
WORKER_ENABLE
)
?
NULL
:
nr_feptx_prec
;
// Precoding operation
ru
->
feptx_prec
=
nr_feptx_prec
;
// Precoding operation
ru
->
feptx_ofdm
=
NULL
;
// no OFDM mod
ru
->
fh_south_in
=
fh_if4p5_south_in
;
// synchronous IF4p5 reception
ru
->
fh_south_out
=
fh_if4p5_south_out
;
// synchronous IF4p5 transmission
...
...
openair1/PHY/MODULATION/nr_modulation.h
View file @
4b3a67b3
...
...
@@ -112,4 +112,10 @@ void apply_nr_rotation(NR_DL_FRAME_PARMS *fp,
void
init_symbol_rotation
(
NR_DL_FRAME_PARMS
*
fp
,
uint64_t
CarrierFreq
);
void
apply_nr_rotation_ul
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF
,
int
slot
,
int
first_symbol
,
int
nsymb
,
int
length
);
#endif
openair1/PHY/MODULATION/slot_fep_nr.c
View file @
4b3a67b3
...
...
@@ -496,16 +496,28 @@ int nr_slot_fep_ul(NR_DL_FRAME_PARMS *frame_parms,
// clear DC carrier from OFDM symbols
rxdataF
[
symbol
*
frame_parms
->
ofdm_symbol_size
]
=
0
;
return
(
0
);
}
int
symb_offset
=
(
Ns
%
frame_parms
->
slots_per_subframe
)
*
frame_parms
->
symbols_per_slot
;
uint32_t
rot2
=
((
uint32_t
*
)
frame_parms
->
symbol_rotation
)[
symbol
+
symb_offset
];
((
int16_t
*
)
&
rot2
)[
1
]
=-
((
int16_t
*
)
&
rot2
)[
1
];
LOG_D
(
PHY
,
"slot %d, symb_offset %d rotating by %d.%d
\n
"
,
Ns
,
symb_offset
,((
int16_t
*
)
&
rot2
)[
0
],((
int16_t
*
)
&
rot2
)[
1
]);
rotate_cpx_vector
((
int16_t
*
)
&
rxdataF
[
frame_parms
->
ofdm_symbol_size
*
symbol
],
(
int16_t
*
)
&
rot2
,
(
int16_t
*
)
&
rxdataF
[
frame_parms
->
ofdm_symbol_size
*
symbol
],
frame_parms
->
ofdm_symbol_size
,
15
);
void
apply_nr_rotation_ul
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF
,
int
slot
,
int
first_symbol
,
int
nsymb
,
int
length
)
{
return
(
0
);
int
symb_offset
=
(
slot
%
frame_parms
->
slots_per_subframe
)
*
frame_parms
->
symbols_per_slot
;
for
(
int
symbol
=
0
;
symbol
<
nsymb
;
symbol
++
)
{
uint32_t
rot2
=
((
uint32_t
*
)
frame_parms
->
symbol_rotation
)[
symbol
+
symb_offset
];
((
int16_t
*
)
&
rot2
)[
1
]
=-
((
int16_t
*
)
&
rot2
)[
1
];
LOG_D
(
PHY
,
"slot %d, symb_offset %d rotating by %d.%d
\n
"
,
slot
,
symb_offset
,((
int16_t
*
)
&
rot2
)[
0
],((
int16_t
*
)
&
rot2
)[
1
]);
rotate_cpx_vector
((
int16_t
*
)
&
rxdataF
[
frame_parms
->
ofdm_symbol_size
*
symbol
],
(
int16_t
*
)
&
rot2
,
(
int16_t
*
)
&
rxdataF
[
frame_parms
->
ofdm_symbol_size
*
symbol
],
length
,
15
);
}
}
openair1/SCHED_NR/nr_ru_procedures.c
View file @
4b3a67b3
...
...
@@ -89,13 +89,6 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
if
(
fp
->
numerology_index
!=
0
)
{
if
(
!
(
slot
%
(
fp
->
slots_per_subframe
/
2
))
&&
(
first_symbol
==
0
))
{
// case where first symbol in slot has longer prefix
apply_nr_rotation
(
fp
,
(
int16_t
*
)
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
],
slot
,
0
,
1
,
fp
->
ofdm_symbol_size
);
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
fp
->
ofdm_symbol_size
,
...
...
@@ -103,13 +96,6 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
fp
->
nb_prefix_samples0
,
CYCLIC_PREFIX
);
apply_nr_rotation
(
fp
,
(
int16_t
*
)
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
+
fp
->
ofdm_symbol_size
],
slot
,
1
,
num_symbols
-
1
,
fp
->
ofdm_symbol_size
);
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
+
fp
->
ofdm_symbol_size
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
+
fp
->
nb_prefix_samples0
+
fp
->
ofdm_symbol_size
],
fp
->
ofdm_symbol_size
,
...
...
@@ -118,12 +104,6 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
CYCLIC_PREFIX
);
}
else
{
// all symbols in slot have shorter prefix
apply_nr_rotation
(
fp
,
(
int16_t
*
)
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
],
slot
,
first_symbol
,
num_symbols
,
fp
->
ofdm_symbol_size
);
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
fp
->
ofdm_symbol_size
,
...
...
@@ -141,12 +121,6 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
1
,
fp
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
apply_nr_rotation
(
fp
,
(
int16_t
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
slot
,
idx_sym
,
1
,
fp
->
ofdm_symbol_size
+
fp
->
nb_prefix_samples
);
slot_offset
+=
fp
->
nb_prefix_samples
+
fp
->
ofdm_symbol_size
;
}
else
{
...
...
@@ -156,12 +130,6 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
1
,
fp
->
nb_prefix_samples0
,
CYCLIC_PREFIX
);
apply_nr_rotation
(
fp
,
(
int16_t
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
slot
,
0
,
1
,
fp
->
ofdm_symbol_size
+
fp
->
nb_prefix_samples0
);
slot_offset
+=
fp
->
nb_prefix_samples0
+
fp
->
ofdm_symbol_size
;
}
}
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
4b3a67b3
...
...
@@ -205,6 +205,10 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH
,
0
);
}
//apply the OFDM symbol rotation here
apply_nr_rotation
(
fp
,(
int16_t
*
)
&
gNB
->
common_vars
.
txdataF
[
0
][
txdataF_offset
],
slot
,
0
,
fp
->
Ncp
==
EXTENDED
?
12
:
14
,
fp
->
ofdm_symbol_size
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX
+
offset
,
0
);
}
...
...
@@ -512,7 +516,7 @@ void phy_procedures_gNB_common_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
uint8_t
symbol
;
unsigned
char
aa
;
for
(
symbol
=
0
;
symbol
<
NR_SYMBOLS_PER_SLOT
;
symbol
++
)
{
for
(
symbol
=
0
;
symbol
<
(
gNB
->
frame_parms
.
Ncp
==
EXTENDED
?
12
:
14
)
;
symbol
++
)
{
// nr_slot_fep_ul(gNB, symbol, proc->slot_rx, 0, 0);
for
(
aa
=
0
;
aa
<
gNB
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
...
...
@@ -525,6 +529,16 @@ void phy_procedures_gNB_common_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
0
);
}
}
for
(
aa
=
0
;
aa
<
gNB
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
apply_nr_rotation_ul
(
&
gNB
->
frame_parms
,
gNB
->
common_vars
.
rxdataF
[
aa
],
slot_rx
,
0
,
gNB
->
frame_parms
.
Ncp
==
EXTENDED
?
12
:
14
,
gNB
->
frame_parms
.
ofdm_symbol_size
);
}
}
void
phy_procedures_gNB_uespec_RX
(
PHY_VARS_gNB
*
gNB
,
int
frame_rx
,
int
slot_rx
)
{
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
4b3a67b3
...
...
@@ -864,38 +864,11 @@ int main(int argc, char **argv)
12
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
}
else
{
/*
}
else
{
nr_normal_prefix_mod
(
&
gNB
->
common_vars
.
txdataF
[
aa
][
txdataF_offset
],
&
txdata
[
aa
][
tx_offset
],
14
,
frame_parms
);
*/
PHY_ofdm_mod
(
&
gNB
->
common_vars
.
txdataF
[
aa
][
txdataF_offset
],
(
int
*
)
&
txdata
[
aa
][
tx_offset
],
frame_parms
->
ofdm_symbol_size
,
1
,
frame_parms
->
nb_prefix_samples0
,
CYCLIC_PREFIX
);
apply_nr_rotation
(
frame_parms
,
(
int16_t
*
)
&
txdata
[
aa
][
tx_offset
],
slot
,
0
,
1
,
frame_parms
->
ofdm_symbol_size
+
frame_parms
->
nb_prefix_samples0
);
PHY_ofdm_mod
(
&
gNB
->
common_vars
.
txdataF
[
aa
][
txdataF_offset
+
frame_parms
->
ofdm_symbol_size
],
(
int
*
)
&
txdata
[
aa
][
tx_offset
+
frame_parms
->
nb_prefix_samples0
+
frame_parms
->
ofdm_symbol_size
],
frame_parms
->
ofdm_symbol_size
,
13
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
apply_nr_rotation
(
frame_parms
,
(
int16_t
*
)
&
txdata
[
aa
][
tx_offset
+
frame_parms
->
nb_prefix_samples0
+
frame_parms
->
ofdm_symbol_size
],
slot
,
1
,
13
,
frame_parms
->
ofdm_symbol_size
+
frame_parms
->
nb_prefix_samples
);
}
}
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
4b3a67b3
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
4b3a67b3
...
...
@@ -70,7 +70,7 @@ int16_t ssb_index_from_prach(module_id_t module_idP,
float
num_ssb_per_RO
=
ssb_per_rach_occasion
[
cfg
->
prach_config
.
ssb_per_rach
.
value
];
uint16_t
start_symbol_index
=
0
;
uint8_t
mu
,
N_dur
,
N_t_slot
,
start_symbol
=
0
,
temp_start_symbol
=
0
,
N_RA_slot
;
uint8_t
mu
,
N_dur
=
0
,
N_t_slot
=
0
,
start_symbol
=
0
,
temp_start_symbol
=
0
,
N_RA_slot
=
0
;
uint16_t
format
,
RA_sfn_index
=
-
1
;
uint8_t
config_period
=
1
;
uint16_t
prach_occasion_id
=
-
1
;
...
...
@@ -139,7 +139,7 @@ void find_SSB_and_RO_available(module_id_t module_idP) {
nfapi_nr_config_request_scf_t
*
cfg
=
&
RC
.
nrmac
[
module_idP
]
->
config
[
0
];
uint8_t
config_index
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
prach_ConfigurationIndex
;
uint8_t
mu
,
N_dur
,
N_t_slot
,
start_symbol
,
N_RA_slot
=
0
;
uint8_t
mu
,
N_dur
=
0
,
N_t_slot
=
0
,
start_symbol
=
0
,
N_RA_slot
=
0
;
uint16_t
format
,
N_RA_sfn
=
0
,
unused_RA_occasion
,
repetition
=
0
;
uint8_t
num_active_ssb
=
0
;
uint8_t
max_association_period
=
1
;
...
...
@@ -421,14 +421,24 @@ void nr_initiate_ra_proc(module_id_t module_idP,
uint8_t
ul_carrier_id
=
0
;
// 0 for NUL 1 for SUL
NR_SearchSpace_t
*
ss
;
// ra_rnti from 5.1.3 in 38.321
uint16_t
ra_rnti
=
1
+
symbol
+
(
slotP
*
14
)
+
(
freq_index
*
14
*
80
)
+
(
ul_carrier_id
*
14
*
80
*
8
);
int
UE_id
=
0
;
uint16_t
msg2_frame
,
msg2_slot
,
monitoring_slot_period
,
monitoring_offset
;
gNB_MAC_INST
*
nr_mac
=
RC
.
nrmac
[
module_idP
];
NR_COMMON_channels_t
*
cc
=
&
nr_mac
->
common_channels
[
CC_id
];
NR_ServingCellConfigCommon_t
*
scc
=
cc
->
ServingCellConfigCommon
;
NR_RA_t
*
ra
=
&
cc
->
ra
[
0
];
uint16_t
ra_rnti
;
// ra_rnti from 5.1.3 in 38.321
// FK: in case of long PRACH the phone seems to expect the subframe number instead of the slot number here.
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
present
==
NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839
)
ra_rnti
=
1
+
symbol
+
(
9
/*slotP*/
*
14
)
+
(
freq_index
*
14
*
80
)
+
(
ul_carrier_id
*
14
*
80
*
8
);
else
ra_rnti
=
1
+
symbol
+
(
slotP
*
14
)
+
(
freq_index
*
14
*
80
)
+
(
ul_carrier_id
*
14
*
80
*
8
);
// if the preamble received correspond to one of the listed
// the UE sent a RACH either for starting RA procedure or RA procedure failed and UE retries
int
pr_found
=
0
;
...
...
targets/ARCH/ETHERNET/benetel/4g/benetel.c
View file @
4b3a67b3
...
...
@@ -207,7 +207,7 @@ next:
uint16_t
*
in
;
uint16_t
*
out
;
in
=
(
uint16_t
*
)
s
->
buffers
.
prach
[
*
subframe
];
out
=
(
uint16_t
*
)
ru
->
prach_rxsigF
[
antenna
];
out
=
(
uint16_t
*
)
ru
->
prach_rxsigF
[
0
][
antenna
];
for
(
i
=
0
;
i
<
840
*
2
;
i
++
)
out
[
i
]
=
ntohs
(
in
[
i
]);
s
->
buffers
.
prach_busy
[
*
subframe
]
=
0
;
...
...
targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
View file @
4b3a67b3
...
...
@@ -86,10 +86,9 @@ static struct rte_eth_dev_tx_buffer *tx_buffer[RTE_MAX_ETHPORTS];
static
struct
rte_eth_conf
port_conf
=
{
.
rxmode
=
{
.
split_hdr_size
=
0
,
.
offloads
=
DEV_RX_OFFLOAD_CRC_STRIP
,
.
offloads
=
DEV_RX_OFFLOAD_JUMBO_FRAME
,
.
split_hdr_size
=
0
,
.
max_rx_pkt_len
=
9500
,
.
offloads
=
DEV_RX_OFFLOAD_JUMBO_FRAME
,
.
split_hdr_size
=
0
,
.
max_rx_pkt_len
=
9500
,
},
.
txmode
=
{
.
mq_mode
=
ETH_MQ_TX_NONE
,
...
...
targets/ARCH/ETHERNET/benetel/5g/benetel.c
View file @
4b3a67b3
...
...
@@ -215,7 +215,7 @@ next:
uint16_t
*
in
;
uint16_t
*
out
;
in
=
(
uint16_t
*
)
s
->
buffers
.
prach
[
*
slot
];
out
=
(
uint16_t
*
)
ru
->
prach_rxsigF
[
antenna
];
out
=
(
uint16_t
*
)
ru
->
prach_rxsigF
[
0
][
antenna
];
for
(
i
=
0
;
i
<
839
*
2
;
i
++
)
out
[
i
]
=
ntohs
(
in
[
i
]);
s
->
buffers
.
prach_busy
[
*
slot
]
=
0
;
...
...
@@ -275,6 +275,7 @@ void benetel_fh_if4p5_south_out(RU_t *ru,
int
slot
,
uint64_t
timestamp
)
{
//printf("XXX benetel_fh_if4p5_south_out %d %d %ld\n", frame, slot, timestamp);
benetel_eth_state_t
*
s
=
ru
->
ifdevice
.
priv
;
NR_DL_FRAME_PARMS
*
fp
;
...
...
targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
View file @
4b3a67b3
...
...
@@ -86,10 +86,9 @@ static struct rte_eth_dev_tx_buffer *tx_buffer[RTE_MAX_ETHPORTS];
static
struct
rte_eth_conf
port_conf
=
{
.
rxmode
=
{
.
split_hdr_size
=
0
,
.
offloads
=
DEV_RX_OFFLOAD_CRC_STRIP
,
.
offloads
=
DEV_RX_OFFLOAD_JUMBO_FRAME
,
.
split_hdr_size
=
0
,
.
max_rx_pkt_len
=
9500
,
.
offloads
=
DEV_RX_OFFLOAD_JUMBO_FRAME
,
.
split_hdr_size
=
0
,
.
max_rx_pkt_len
=
9500
,
},
.
txmode
=
{
.
mq_mode
=
ETH_MQ_TX_NONE
,
...
...
@@ -234,7 +233,7 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
}
// Trigger start send DL packets
if
(
PAYLOAD_1
==
0x13
&&
PAYLOAD_2
==
0xe4
&&
SYMBOL
==
0x4
6
&&
ANT_NUM
==
0x00
&&
SUBFRAME
==
0x00
&&
dl_start
==
0
){
if
(
PAYLOAD_1
==
0x13
&&
PAYLOAD_2
==
0xe4
&&
SYMBOL
==
0x4
4
&&
ANT_NUM
==
0x00
&&
SUBFRAME
==
0x00
&&
dl_start
==
0
){
printf
(
"
\n
U-Plane Started
\n
"
);
printf
(
"
\n
====================================================
\n
"
);
...
...
@@ -253,7 +252,7 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
p
.
antenna
=
0
;
memcpy
(
p
.
iq
,
IQ_ptr
,
5088
);
store_ul
(
bs
,
&
p
);
//
if (p.symbol==0) printf("store ul f.sl.sy %d.%d.%d\n", p.frame, p.slot, p.symbol);
//
if (p.symbol==0) printf("store ul f.sl.sy %d.%d.%d\n", p.frame, p.slot, p.symbol);
}
// U-PLANE UL ANT_0 PROCESSING
...
...
@@ -268,7 +267,7 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
int
tx_frame
=
frame
;
int
tx_subframe
=
subframe
;
int
tx_slot
=
slot
;
int
tx_symbol
=
symbol
+
8
;
int
tx_symbol
=
symbol
+
10
;
if
(
tx_symbol
>
13
)
{
tx_symbol
-=
14
;
...
...
@@ -286,7 +285,7 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
ANT_NUM
=
0x00
;
// Mask the symbol bits from UL packet received and apply the shift.
SYMBOL
=
((
SYMBOL
&
0
b00111111
)
+
8
)
%
14
;
SYMBOL
=
((
SYMBOL
&
0
b00111111
)
+
10
)
%
14
;
ANT_NUM
=
0x00
;
SUBFRAME
=
sf
;
...
...
@@ -307,6 +306,7 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
memcpy
(
IQ_ptr
,
bs
->
buffers
->
dl
[
oai_slot
]
+
tx_symbol
*
1272
*
4
,
1272
*
4
);
}
//printf("DL buffer f sf slot symbol %d %d %d %d (sf %d)\n", tx_frame, tx_subframe, tx_slot, tx_symbol, (int)sf);
bs
->
buffers
->
dl_busy
[
oai_slot
]
&=
~
(
1
<<
tx_symbol
);
unlock_dl_buffer
(
bs
->
buffers
,
oai_slot
);
...
...
@@ -319,7 +319,7 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
{
// Mask the symbol bits from UL packet received and apply the shift.
SYMBOL
=
((
SYMBOL
&
0
b00111111
)
+
8
)
%
14
;
SYMBOL
=
((
SYMBOL
&
0
b00111111
)
+
10
)
%
14
;
ANT_NUM
=
0x01
;
SUBFRAME
=
sf
;
...
...
@@ -348,10 +348,10 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
else
if
(
PAYLOAD_1
==
0x0d
&&
PAYLOAD_2
==
0x28
){
if
(
ANT_NUM
==
0
)
{
int
subframe
=
SUBFRAME
>>
4
;
int
slot
=
((
SUBFRAME
&
0x0f
)
<<
2
)
|
((
SYMBOL
>>
6
)
&
0x03
);
//
int slot = ((SUBFRAME & 0x0f) << 2) | ((SYMBOL >> 6) & 0x03);
if
(
subframe
==
9
)
{
//printf("store prach f.sf.sl %d.%d.%d %d\n", FRAME, subframe, slot, subframe * 2 + slot);
store_prach
(
bs
,
FRAME
,
s
lot
/*subframe * 2 + slot*/
,
IQ_ptr
);
store_prach
(
bs
,
FRAME
,
s
ubframe
*
2
+
1
,
IQ_ptr
);
}
}
rte_pktmbuf_free
(
m
);
...
...
targets/ARCH/ETHERNET/benetel/5g/low.c
View file @
4b3a67b3
...
...
@@ -27,17 +27,50 @@
void
store_ul
(
benetel_t
*
bs
,
ul_packet_t
*
ul
)
{
#if 0
struct timespec t;
static struct timespec old;
clock_gettime(CLOCK_REALTIME, &t);
printf("store_ul %d.%ld (%ld)\n", (int)(t.tv_sec % 60), t.tv_nsec, t.tv_nsec - old.tv_nsec);
old = t;
#endif
/* only antenna 0 for the moment */
if
(
ul
->
antenna
!=
0
)
return
;
if
(
ul
->
slot
!=
bs
->
next_slot
||
ul
->
symbol
!=
bs
->
next_symbol
)
{
printf
(
"%s:
fatal
, expected frame.sl.symbol %d.%d.%d, got %d.%d.%d
\n
"
,
printf
(
"%s:
error
, expected frame.sl.symbol %d.%d.%d, got %d.%d.%d
\n
"
,
__FUNCTION__
,
bs
->
expected_benetel_frame
,
bs
->
next_slot
,
bs
->
next_symbol
,
ul
->
frame
,
ul
->
slot
,
ul
->
symbol
);
exit
(
1
);
}
/* fill missing data with 0s */
while
(
ul
->
slot
!=
bs
->
next_slot
||
ul
->
symbol
!=
bs
->
next_symbol
)
{
lock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
if
(
bs
->
buffers
->
ul_busy
[
bs
->
next_slot
]
&
(
1
<<
bs
->
next_symbol
))
{
printf
(
"%s: warning, UL overflow (sl.symbol %d.%d)
\n
"
,
__FUNCTION__
,
bs
->
next_slot
,
bs
->
next_symbol
);
}
memset
(
bs
->
buffers
->
ul
[
bs
->
next_slot
]
+
bs
->
next_symbol
*
1272
*
4
,
0
,
1272
*
4
);
bs
->
buffers
->
ul_busy
[
bs
->
next_slot
]
|=
(
1
<<
bs
->
next_symbol
);
signal_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
unlock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
bs
->
next_symbol
++
;
if
(
bs
->
next_symbol
==
14
)
{
bs
->
next_symbol
=
0
;
bs
->
next_slot
=
(
bs
->
next_slot
+
1
)
%
20
;
if
(
bs
->
next_slot
==
0
)
{
bs
->
expected_benetel_frame
++
;
bs
->
expected_benetel_frame
&=
255
;
}
}
}
lock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf
View file @
4b3a67b3
...
...
@@ -139,6 +139,8 @@ eNBs =
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size
=
5
;
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused
=
0
;
//
SSB
central
frequency
of
NR
secondary
cell
group
(
for
ENDC
NSA
)
nr_scg_ssb_freq
=
640000
;
}
);
...
...
@@ -174,14 +176,14 @@ eNBs =
//////////
MME
parameters
:
mme_ip_address
= ( {
ipv4
=
"192.168.
61.195
"
;
mme_ip_address
= ( {
ipv4
=
"192.168.
18.99
"
;
ipv6
=
"192:168:30::17"
;
active
=
"yes"
;
preference
=
"ipv4"
;
}
);
enable_measurement_reports
=
"
no
"
;
enable_measurement_reports
=
"
yes
"
;
///
X2
enable_x2
=
"yes"
;
...
...
@@ -193,9 +195,9 @@ eNBs =
NETWORK_INTERFACES
:
{
ENB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.1
60.4
6"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.1
8.19
6"
;
ENB_INTERFACE_NAME_FOR_S1U
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.1
60.4
6"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.1
8.19
6"
;
ENB_PORT_FOR_S1U
=
2152
;
# Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C
=
"127.0.0.1"
;
ENB_PORT_FOR_X2C
=
36422
;
# Spec 36422
...
...
@@ -226,7 +228,7 @@ RUs = (
{
//
local_if_name
=
"enp129s0f0"
;
local_if_name
=
"dpdk"
;
sdr_addrs
=
"softmodem -m 2048 -l
8 -n 2 -b 0000:3b:00.0
--proc-type auto --file-prefix ggg -- -p 0x1"
;
sdr_addrs
=
"softmodem -m 2048 -l
35 -n 2 -b 0000:81:00.3
--proc-type auto --file-prefix ggg -- -p 0x1"
;
#sdr_addrs = "softmodem -l 8 -n 2 -- -p 0x2";
remote_address
=
"127.0.0.2"
;
local_address
=
"127.0.0.1"
;
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
View file @
4b3a67b3
...
...
@@ -23,6 +23,8 @@ gNBs =
ssb_SubcarrierOffset
=
31
; //
0
;
pdsch_AntennaPorts
=
1
;
pusch_TargetSNRx10
=
200
;
pucch_TargetSNRx10
=
200
;
servingCellConfigCommon
= (
{
...
...
@@ -203,7 +205,7 @@ gNBs =
//////////
MME
parameters
:
mme_ip_address
= ( {
ipv4
=
"192.168.
61.195
"
;
mme_ip_address
= ( {
ipv4
=
"192.168.
18.99
"
;
ipv6
=
"192:168:30::17"
;
active
=
"yes"
;
preference
=
"ipv4"
;
...
...
@@ -227,9 +229,9 @@ gNBs =
{
GNB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
GNB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.1
60.146
/24"
;
GNB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.1
8.195
/24"
;
GNB_INTERFACE_NAME_FOR_S1U
=
"eth0"
;
GNB_IPV4_ADDRESS_FOR_S1U
=
"192.168.1
60.146
/24"
;
GNB_IPV4_ADDRESS_FOR_S1U
=
"192.168.1
8.195
/24"
;
GNB_PORT_FOR_S1U
=
2152
;
# Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C
=
"127.0.0.2/24"
;
GNB_PORT_FOR_X2C
=
36422
;
# Spec 36422
...
...
@@ -267,7 +269,7 @@ RUs = (
clock_src
=
"external"
;
local_if_name
=
"dpdk"
;
sdr_addrs
=
"softmodem -m 2048 -l
6 -n 3 -b 0000:3b:00.1
--proc-type auto --file-prefix hhh -- -p 0x1"
;
sdr_addrs
=
"softmodem -m 2048 -l
34 -n 3 -b 0000:81:00.2
--proc-type auto --file-prefix hhh -- -p 0x1"
;
remote_address
=
"127.0.0.2"
;
local_address
=
"127.0.0.1"
;
local_portc
=
50000
;
...
...
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