Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
2b592f9a
Commit
2b592f9a
authored
Dec 09, 2020
by
Remi Hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop-oriecpriupdates' into rh_wk50_debug
parents
a5f4123a
52084fd3
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
932 additions
and
725 deletions
+932
-725
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
+27
-22
openair1/PHY/LTE_TRANSPORT/if5_tools.c
openair1/PHY/LTE_TRANSPORT/if5_tools.c
+82
-212
openair1/PHY/LTE_TRANSPORT/prach.c
openair1/PHY/LTE_TRANSPORT/prach.c
+27
-25
openair1/PHY/MODULATION/ofdm_mod.c
openair1/PHY/MODULATION/ofdm_mod.c
+4
-14
openair1/PHY/defs_eNB.h
openair1/PHY/defs_eNB.h
+2
-0
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+12
-12
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+2
-2
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+1
-1
openair2/X2AP/x2ap_eNB_generate_messages.c
openair2/X2AP/x2ap_eNB_generate_messages.c
+90
-4
targets/ARCH/COMMON/common_lib.c
targets/ARCH/COMMON/common_lib.c
+3
-0
targets/ARCH/COMMON/common_lib.h
targets/ARCH/COMMON/common_lib.h
+50
-6
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
+6
-66
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
+157
-121
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+33
-31
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
+6
-3
targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h
targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h
+5
-3
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc_b38_if5_ENDC.conf
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc_b38_if5_ENDC.conf
+243
-0
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+3
-3
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+134
-181
targets/RT/USER/rcc_if5.gtkw
targets/RT/USER/rcc_if5.gtkw
+44
-18
targets/RT/USER/ru_control.c
targets/RT/USER/ru_control.c
+1
-1
No files found.
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
View file @
2b592f9a
...
...
@@ -47,6 +47,7 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *eNB,
uint32_t
rb
;
int32_t
*
ul_ch
;
int32_t
n0_power_tot
;
int64_t
n0_power_tot2
;
int
len
;
int
offset
;
// noise measurements
...
...
@@ -75,43 +76,47 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *eNB,
}
n0_power_tot2
=
0
;
int
nb_rb
=
0
;
for
(
rb
=
0
;
rb
<
frame_parms
->
N_RB_UL
;
rb
++
)
{
n0_power_tot
=
0
;
n0_power_tot
=
0
;
int
offset0
=
(
frame_parms
->
first_carrier_offset
+
(
rb
*
12
))
%
frame_parms
->
ofdm_symbol_size
;
if
((
rb_mask
[
rb
>>
5
]
&
(
1
<<
(
rb
&
31
)))
==
0
)
{
// check that rb was not used in this subframe
nb_rb
++
;
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
measurements
->
n0_subband_power
[
aarx
][
rb
]
=
0
;
for
(
int
s
=
0
;
s
<
14
-
(
frame_parms
->
Ncp
<<
1
);
s
++
)
{
// select the 7th symbol in an uplink subframe
offset
=
(
frame_parms
->
first_carrier_offset
+
(
rb
*
12
))
%
frame_parms
->
ofdm_symbol_size
;
offset
+=
(
7
*
frame_parms
->
ofdm_symbol_size
);
ul_ch
=
&
common_vars
->
rxdataF
[
aarx
][
offset
];
len
=
12
;
offset
=
offset0
+
(
s
*
frame_parms
->
ofdm_symbol_size
);
ul_ch
=
&
common_vars
->
rxdataF
[
aarx
][
offset
];
len
=
12
;
// just do first half of middle PRB for odd number of PRBs
if
(((
frame_parms
->
N_RB_UL
&
1
)
==
1
)
&&
(
rb
==
(
frame_parms
->
N_RB_UL
>>
1
)))
{
len
=
6
;
}
if
(
clear
==
1
)
measurements
->
n0_subband_power
[
aarx
][
rb
]
=
0
;
if
(((
frame_parms
->
N_RB_UL
&
1
)
==
1
)
&&
(
rb
==
(
frame_parms
->
N_RB_UL
>>
1
)))
{
len
=
6
;
}
AssertFatal
(
ul_ch
,
"RX signal buffer (freq) problem"
);
AssertFatal
(
ul_ch
,
"RX signal buffer (freq) problem"
);
measurements
->
n0_subband_power
[
aarx
][
rb
]
=
signal_energy_nodc
(
ul_ch
,
len
);
//((k1*(signal_energy_nodc(ul_ch,len)))
// + (k2*measurements->n0_subband_power[aarx][rb]));
measurements
->
n0_subband_power
[
aarx
][
rb
]
+=
signal_energy_nodc
(
ul_ch
,
len
);
measurements
->
n0_subband_power_dB
[
aarx
][
rb
]
=
dB_fixed
(
measurements
->
n0_subband_power
[
aarx
][
rb
]);
// printf("subframe %d (%d): eNB %d, aarx %d, rb %d len %d: energy %d (%d dB)\n",subframe,offset,eNB_id,aarx,rb,len,signal_energy_nodc(ul_ch,len),
// measurements->n0_subband_power_dB[aarx][rb]);
n0_power_tot
+=
measurements
->
n0_subband_power
[
aarx
][
rb
];
}
measurements
->
n0_subband_power
[
aarx
][
rb
]
/=
(
14
-
(
frame_parms
->
Ncp
<<
1
));
measurements
->
n0_subband_power_dB
[
aarx
][
rb
]
=
dB_fixed
(
measurements
->
n0_subband_power
[
aarx
][
rb
]);
n0_power_tot
+=
measurements
->
n0_subband_power
[
aarx
][
rb
];
}
measurements
->
n0_subband_power_tot_dB
[
rb
]
=
dB_fixed
(
n0_power_tot
);
n0_power_tot
/=
frame_parms
->
nb_antennas_rx
;
n0_power_tot2
+=
n0_power_tot
;
measurements
->
n0_subband_power_tot_dB
[
rb
]
=
dB_fixed
(
n0_power_tot
/
frame_parms
->
nb_antennas_rx
);
measurements
->
n0_subband_power_tot_dBm
[
rb
]
=
measurements
->
n0_subband_power_tot_dB
[
rb
]
-
eNB
->
rx_total_gain_dB
-
dB_fixed
(
frame_parms
->
N_RB_UL
);
}
}
if
(
nb_rb
>
0
)
measurements
->
n0_subband_power_avg_dB
=
dB_fixed
(
n0_power_tot2
/
nb_rb
);
}
void
lte_eNB_srs_measurements
(
PHY_VARS_eNB
*
eNB
,
...
...
openair1/PHY/LTE_TRANSPORT/if5_tools.c
View file @
2b592f9a
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_TRANSPORT/prach.c
View file @
2b592f9a
...
...
@@ -89,7 +89,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
int32_t
*
prach_ifft
=
(
int32_t
*
)
NULL
;
int32_t
**
prach_ifftp
=
(
int32_t
**
)
NULL
;
int
prach_ifft_cnt
=
0
;
int
exit_flag
=
0
;
LTE_DL_FRAME_PARMS
*
fp
;
int
nb_rx
;
if
(
eNB
)
{
...
...
@@ -177,32 +177,33 @@ void rx_prach0(PHY_VARS_eNB *eNB,
}
AssertFatal
(
ru
!=
NULL
,
"ru is null
\n
"
);
int8_t
dBEn0
=
0
;
for
(
aa
=
0
;
aa
<
nb_rx
;
aa
++
)
{
if
(
ru
->
if_south
==
LOCAL_RF
)
{
// set the time-domain signal if we have to use it in this node
if
(
ru
->
if_south
==
LOCAL_RF
||
ru
->
function
==
NGFI_RAU_IF5
)
{
// set the time-domain signal if we have to use it in this node
// DJP - indexing below in subframe zero takes us off the beginning of the array???
prach
[
aa
]
=
(
int16_t
*
)
&
ru
->
common
.
rxdata
[
aa
][(
subframe
*
fp
->
samples_per_tti
)
-
ru
->
N_TA_offset
];
if
(
LOG_DUMPFLAG
(
PRACH
))
{
int32_t
en0
=
signal_energy
((
int32_t
*
)
prach
[
aa
],
fp
->
samples_per_tti
);
int8_t
db
En0
=
dB_fixed
(
en0
);
int8_t
rach_dBm
=
d
b
En0
-
ru
->
rx_total_gain_dB
;
dB
En0
=
dB_fixed
(
en0
);
int8_t
rach_dBm
=
d
B
En0
-
ru
->
rx_total_gain_dB
;
char
buffer
[
80
];
if
(
d
bEn0
>
32
&&
prach
[
0
]
!=
NULL
)
{
if
(
d
BEn0
>
30
&&
prach
[
0
]
!=
NULL
)
{
static
int
counter
=
0
;
sprintf
(
buffer
,
"%s%d"
,
"/tmp/prach_rx"
,
counter
);
LOG_M
(
buffer
,
"prach_rx"
,
prach
[
0
],
fp
->
samples_per_tti
,
1
,
13
);
sprintf
(
buffer
,
"%s%d"
,
"/tmp/prach_rx.m"
,
counter
);
LOG_M
(
buffer
,
"prach_rx"
,
prach
[
0
],
fp
->
samples_per_tti
,
1
,
1
);
exit_flag
=
1
;
}
if
(
dB
_fixed
(
en0
)
>
32
)
{
if
(
dB
En0
>
30
)
{
sprintf
(
buffer
,
"rach_dBm:%d"
,
rach_dBm
);
if
(
prach
[
0
]
!=
NULL
)
LOG_M
(
"prach_rx"
,
"prach_rx"
,
prach
[
0
],
fp
->
samples_per_tti
,
1
,
1
);
if
(
prach
[
0
]
!=
NULL
)
LOG_M
(
"prach_rx
.m
"
,
"prach_rx"
,
prach
[
0
],
fp
->
samples_per_tti
,
1
,
1
);
LOG_I
(
PHY
,
"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d
\n
"
,
ru
->
idx
,
br_flag
,
ce_level
,
frame_prach
,
subframe
,
fp
->
samples_per_tti
,
prach
[
aa
],
d
b
En0
,
ru
->
N_TA_offset
,
buffer
,
ru
->
common
.
rxdata
[
aa
],
prach
[
aa
],
d
B
En0
,
ru
->
N_TA_offset
,
buffer
,
ru
->
common
.
rxdata
[
aa
],
(
subframe
*
fp
->
samples_per_tti
)
-
ru
->
N_TA_offset
);
}
}
...
...
@@ -415,7 +416,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
if
(
LOG_DEBUGFLAG
(
PRACH
))
{
int
en
=
dB_fixed
(
signal_energy
((
int32_t
*
)
&
rxsigF
[
0
][
0
],
840
));
if
((
en
>
6
0
)
&&
(
br_flag
==
1
))
LOG_I
(
PHY
,
"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB
\n
"
,
br_flag
,
ce_level
,
n_ra_prb
,
k
,
frame_prach
,
subframe
,
en
);
if
((
en
>
1
0
)
&&
(
br_flag
==
1
))
LOG_I
(
PHY
,
"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB
\n
"
,
br_flag
,
ce_level
,
n_ra_prb
,
k
,
frame_prach
,
subframe
,
en
);
}
}
...
...
@@ -454,9 +455,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
for
(
preamble_index
=
0
;
preamble_index
<
64
;
preamble_index
++
)
{
if
(
LOG_DEBUGFLAG
(
PRACH
))
{
int
en
=
dB_fixed
(
signal_energy
((
int32_t
*
)
&
rxsigF
[
0
][
0
],
840
));
//
int en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if
(
en
>
6
0
)
LOG_I
(
PHY
,
"frame %d, subframe %d : Trying preamble %d (br_flag %d)
\n
"
,
frame_prach
,
subframe
,
preamble_index
,
br_flag
);
if
(
dBEn0
>
3
0
)
LOG_I
(
PHY
,
"frame %d, subframe %d : Trying preamble %d (br_flag %d)
\n
"
,
frame_prach
,
subframe
,
preamble_index
,
br_flag
);
}
if
(
restricted_set
==
0
)
{
...
...
@@ -539,10 +540,10 @@ void rx_prach0(PHY_VARS_eNB *eNB,
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
if
(
LOG_DEBUGFLAG
(
PRACH
))
{
int
en
=
dB_fixed
(
signal_energy
((
int32_t
*
)
&
rxsigF
[
0
][
0
],
840
));
//
en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if
(
en
>
6
0
)
LOG_I
(
PHY
,
"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)
\n
"
,
frame_prach
,
subframe
,
preamble_index
,
preamble_offset
,
preamble_shift
,
br_flag
,
en
);
if
(
dBEn0
>
3
0
)
LOG_I
(
PHY
,
"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)
\n
"
,
frame_prach
,
subframe
,
preamble_index
,
preamble_offset
,
preamble_shift
,
br_flag
,
dBEn0
);
}
log2_ifft_size
=
10
;
...
...
@@ -564,13 +565,13 @@ void rx_prach0(PHY_VARS_eNB *eNB,
memset
(
prachF
,
0
,
sizeof
(
int16_t
)
*
2
*
1024
);
if
(
LOG_DUMPFLAG
(
PRACH
))
{
if
(
LOG_DUMPFLAG
(
PRACH
))
{
if
(
prach
[
0
]
!=
NULL
)
LOG_M
(
"prach_rx0.m"
,
"prach_rx0"
,
prach
[
0
],
6144
+
792
,
1
,
1
);
LOG_M
(
"prach_rx1.m"
,
"prach_rx1"
,
prach
[
1
],
6144
+
792
,
1
,
1
);
LOG_M
(
"prach_rxF0.m"
,
"prach_rxF0"
,
rxsigF
[
0
],
12288
,
1
,
1
);
LOG_M
(
"prach_rxF1.m"
,
"prach_rxF1"
,
rxsigF
[
1
],
12288
,
1
,
1
);
}
}
for
(
aa
=
0
;
aa
<
nb_rx
;
aa
++
)
{
// Do componentwise product with Xu* on each antenna
...
...
@@ -633,9 +634,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
*
max_preamble
=
preamble_index
;
if
(
LOG_DEBUGFLAG
(
PRACH
))
{
int
en
=
dB_fixed
(
signal_energy
((
int32_t
*
)
&
rxsigF
[
0
][
0
],
840
));
//
int en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if
(
(
en
>
60
)
&&
(
br_flag
==
1
)
)
if
(
dBEn0
>
30
)
LOG_D
(
PHY
,
"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)
\n
"
,
frame_prach
,
subframe
,
*
max_preamble_energy
,
*
max_preamble_delay
,
...
...
@@ -648,10 +649,10 @@ void rx_prach0(PHY_VARS_eNB *eNB,
*
avg_preamble_energy
=
dB_fixed
(
avg_en
/
64
);
if
(
LOG_DUMPFLAG
(
PRACH
)
)
{
if
(
exit_flag
==
1
)
{
int
en
=
dB_fixed
(
signal_energy
((
int32_t
*
)
&
rxsigF
[
0
][
0
],
840
));
if
(
en
>
6
0
)
{
if
(
en
>
3
0
)
{
k
=
(
12
*
n_ra_prb
)
-
6
*
fp
->
N_RB_UL
;
if
(
k
<
0
)
k
+=
fp
->
ofdm_symbol_size
;
...
...
@@ -665,19 +666,20 @@ void rx_prach0(PHY_VARS_eNB *eNB,
LOG_M
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
LOG_M
(
"Xu.m"
,
"xu"
,
Xu
,
N_ZC
,
1
,
1
);
LOG_M
(
"prach_ifft0.m"
,
"prach_t0"
,
prach_ifft
,
1024
,
1
,
1
);
exit
(
-
1
);
LOG_M
(
"SF2_3.m"
,
"sf2_3"
,
&
ru
->
common
.
rxdata
[
0
][
2
*
fp
->
samples_per_tti
],
2
*
fp
->
samples_per_tti
,
1
,
1
);
}
else
{
LOG_E
(
PHY
,
"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)
\n
"
,
br_flag
,
k
,
n_ra_prb
);
LOG_M
(
"rxsigF_br.m"
,
"prach_rxF_br"
,
&
rxsigF
[
0
][
0
],
12288
,
1
,
1
);
LOG_M
(
"prach_rxF_comp0_br.m"
,
"prach_rxF_comp0_br"
,
prachF
,
1024
,
1
,
1
);
LOG_M
(
"Xu_br.m"
,
"xu_br"
,
Xu
,
N_ZC
,
1
,
1
);
LOG_M
(
"prach_ifft0_br.m"
,
"prach_t0_br"
,
prach_ifft
,
1024
,
1
,
1
);
exit
(
-
1
);
}
}
}
/* LOG_DUMPFLAG(PRACH) */
if
(
eNB
)
stop_meas
(
&
eNB
->
rx_prach
);
AssertFatal
(
exit_flag
==
0
,
"exiting
\n
"
);
}
...
...
openair1/PHY/MODULATION/ofdm_mod.c
View file @
2b592f9a
...
...
@@ -90,9 +90,8 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
if
(
nb_symbols
==
0
)
return
;
short
temp
[
2
*
2
*
6144
*
4
]
__attribute__
((
aligned
(
32
)));
unsigned
short
i
,
j
;
short
k
;
int16_t
temp
[
2
*
2
*
6144
*
4
]
__attribute__
((
aligned
(
32
)));
int
i
,
j
;
volatile
int
*
output_ptr
=
(
int
*
)
0
;
...
...
@@ -190,18 +189,9 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
if
(
fftsize
==
128
)
#endif
{
/*for (j=0; j<fftsize ; j++) {
output_ptr[j] = temp_ptr[j];
}*/
memcpy1
((
void
*
)
output_ptr
,(
void
*
)
temp_ptr
,
fftsize
<<
2
);
memcpy
((
void
*
)
output_ptr
,(
void
*
)
temp_ptr
,
fftsize
<<
2
);
}
j
=
fftsize
;
for
(
k
=-
1
;
k
>=-
nb_prefix_samples
;
k
--
)
{
output_ptr
[
k
]
=
output_ptr
[
--
j
];
}
memcpy
((
void
*
)
&
output_ptr
[
-
nb_prefix_samples
],(
void
*
)
&
output_ptr
[
fftsize
-
nb_prefix_samples
],
nb_prefix_samples
<<
2
);
break
;
case
CYCLIC_SUFFIX
:
...
...
openair1/PHY/defs_eNB.h
View file @
2b592f9a
...
...
@@ -389,6 +389,8 @@ typedef struct {
short
n0_subband_power_tot_dB
[
100
];
//! estimated avg noise power per RB (dBm)
short
n0_subband_power_tot_dBm
[
100
];
//! etimated avg noise power over all RB (dB)
short
n0_subband_power_avg_dB
;
// eNB measurements (per user)
//! estimated received spatial signal power (linear)
unsigned
int
rx_spatial_power
[
NUMBER_OF_UE_MAX
][
2
][
2
];
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
2b592f9a
...
...
@@ -757,8 +757,8 @@ void fill_sr_indication(int UEid, PHY_VARS_eNB *eNB,uint16_t rnti,int frame,int
// pdu->rx_ue_information.handle = handle;
pdu
->
rx_ue_information
.
tl
.
tag
=
NFAPI_RX_UE_INFORMATION_TAG
;
pdu
->
rx_ue_information
.
rnti
=
rnti
;
int
SNRtimes10
=
dB_fixed_times10
(
stat
)
-
10
*
eNB
->
measurements
.
n0_subband_power_
dB
[
0
][
0
]
;
LOG_D
(
PHY
,
"stat %d subband
power %d, SNRtimes10 %d
\n
"
,
stat
,
eNB
->
measurements
.
n0_subband_power_dB
[
0
][
0
]
,
SNRtimes10
);
int
SNRtimes10
=
dB_fixed_times10
(
stat
)
-
10
*
eNB
->
measurements
.
n0_subband_power_
avg_dB
;
LOG_D
(
PHY
,
"stat %d subband
n0 %d, SNRtimes10 %d
\n
"
,
stat
,
eNB
->
measurements
.
n0_subband_power_avg_dB
,
SNRtimes10
);
pdu
->
ul_cqi_information
.
tl
.
tag
=
NFAPI_UL_CQI_INFORMATION_TAG
;
if
(
SNRtimes10
<
-
640
)
pdu
->
ul_cqi_information
.
ul_cqi
=
0
;
...
...
@@ -1604,8 +1604,8 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
timing_advance_update
=
63
;
pdu
->
rx_indication_rel8
.
timing_advance
=
timing_advance_update
;
// estimate UL_CQI for MAC
(from antenna port 0 only)
int
SNRtimes10
=
dB_fixed_times10
(
eNB
->
pusch_vars
[
UE_id
]
->
ulsch_power
[
0
]
)
-
10
*
eNB
->
measurements
.
n0_subband_power_dB
[
0
][
0
]
;
// estimate UL_CQI for MAC
int
SNRtimes10
=
dB_fixed_times10
(
eNB
->
pusch_vars
[
UE_id
]
->
ulsch_power
[
0
]
+
((
eNB
->
frame_parms
.
nb_antennas_rx
>
1
)
?
eNB
->
pusch_vars
[
UE_id
]
->
ulsch_power
[
1
]
:
0
))
-
10
*
eNB
->
measurements
.
n0_subband_power_avg_dB
;
if
(
SNRtimes10
<
-
640
)
pdu
->
rx_indication_rel8
.
ul_cqi
=
0
;
...
...
@@ -1614,8 +1614,8 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
else
pdu
->
rx_indication_rel8
.
ul_cqi
=
(
640
+
SNRtimes10
)
/
5
;
LOG_D
(
PHY
,
"[PUSCH %d] Frame %d Subframe %d Filling RX_indication with SNR %d (%d), timing_advance %d (update %d)
\n
"
,
harq_pid
,
frame
,
subframe
,
SNRtimes10
,
pdu
->
rx_indication_rel8
.
ul_cqi
,
pdu
->
rx_indication_rel8
.
timing_advance
,
LOG_D
(
PHY
,
"[PUSCH %d] Frame %d Subframe %d Filling RX_indication with SNR %d (%d
,%d
), timing_advance %d (update %d)
\n
"
,
harq_pid
,
frame
,
subframe
,
SNRtimes10
,
pdu
->
rx_indication_rel8
.
ul_cqi
,
eNB
->
measurements
.
n0_subband_power_avg_dB
,
pdu
->
rx_indication_rel8
.
timing_advance
,
timing_advance_update
);
eNB
->
UL_INFO
.
rx_ind
.
rx_indication_body
.
number_of_pdus
++
;
eNB
->
UL_INFO
.
rx_ind
.
sfn_sf
=
frame
<<
4
|
subframe
;
...
...
@@ -1919,7 +1919,7 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
pdu
->
rx_ue_information
.
rnti
=
uci
->
rnti
;
// estimate UL_CQI for MAC (from antenna port 0 only)
pdu
->
ul_cqi_information
.
tl
.
tag
=
NFAPI_UL_CQI_INFORMATION_TAG
;
int
SNRtimes10
=
dB_fixed_times10
(
uci
->
stat
)
-
10
*
eNB
->
measurements
.
n0_subband_power_
dB
[
0
][
0
]
;
int
SNRtimes10
=
dB_fixed_times10
(
uci
->
stat
)
-
10
*
eNB
->
measurements
.
n0_subband_power_
avg_dB
;
if
(
SNRtimes10
<
-
100
)
LOG_I
(
PHY
,
"uci->stat %d
\n
"
,
uci
->
stat
);
...
...
@@ -2132,17 +2132,17 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
lte_eNB_I0_measurements
(
eNB
,
subframe
,
0
,
eNB
->
first_run_I0_measurements
);
int
min_I0
=
1000
,
max_I0
=
0
;
if
((
frame
==
0
)
&&
(
subframe
==
4
))
{
int
amin
=
0
,
amax
=
0
;
if
((
frame
==
0
)
&&
(
subframe
==
3
))
{
for
(
int
i
=
0
;
i
<
eNB
->
frame_parms
.
N_RB_UL
;
i
++
)
{
if
(
i
==
(
eNB
->
frame_parms
.
N_RB_UL
>>
1
)
-
1
)
i
+=
2
;
if
(
eNB
->
measurements
.
n0_subband_power_tot_dB
[
i
]
<
min_I0
)
min_I0
=
eNB
->
measurements
.
n0_subband_power_tot_dB
[
i
];
if
(
eNB
->
measurements
.
n0_subband_power_tot_dB
[
i
]
<
min_I0
)
{
min_I0
=
eNB
->
measurements
.
n0_subband_power_tot_dB
[
i
];
amin
=
i
;}
if
(
eNB
->
measurements
.
n0_subband_power_tot_dB
[
i
]
>
max_I0
)
max_I0
=
eNB
->
measurements
.
n0_subband_power_tot_dB
[
i
];
if
(
eNB
->
measurements
.
n0_subband_power_tot_dB
[
i
]
>
max_I0
)
{
max_I0
=
eNB
->
measurements
.
n0_subband_power_tot_dB
[
i
];
amax
=
i
;}
}
LOG_I
(
PHY
,
"max_I0 %d
, min_I0 %d
\n
"
,
max_I0
,
min_I0
);
LOG_I
(
PHY
,
"max_I0 %d
(rb %d), min_I0 %d (rb %d), avg I0 %d
\n
"
,
max_I0
,
amax
,
min_I0
,
amin
,
eNB
->
measurements
.
n0_subband_power_avg_dB
);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC
,
0
);
...
...
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
2b592f9a
...
...
@@ -487,7 +487,7 @@ int n_ch_rlz = 1;
int
rx_sample_offset
=
0
;
int
xforms
=
0
;
int
dump_table
=
0
;
int
loglvl
=
OAILOG_
WARNING
;
int
loglvl
=
OAILOG_
INFO
;
int
mcs1
=
0
,
mcs2
=
0
,
mcs_i
=
0
,
dual_stream_UE
=
0
,
awgn_flag
=
0
;
int
two_thread_flag
=
0
;
int
num_rounds
=
4
;
//,fix_rounds=0;
...
...
@@ -670,7 +670,7 @@ int main(int argc, char **argv) {
{
"XForms"
,
"Display the soft scope"
,
PARAMFLAG_BOOL
,
iptr
:&
xforms
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"Yperfect_ce"
,
"Perfect CE"
,
PARAMFLAG_BOOL
,
iptr
:&
perfect_ce
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"Zdump"
,
"dump table"
,
PARAMFLAG_BOOL
,
iptr
:&
dump_table
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"Loglvl"
,
"log level"
,
0
,
iptr
:&
loglvl
,
defintval
:
OAILOG_
DEBUG
,
TYPE_INT
,
0
},
{
"Loglvl"
,
"log level"
,
0
,
iptr
:&
loglvl
,
defintval
:
OAILOG_
INFO
,
TYPE_INT
,
0
},
{
"zn_rx"
,
"Number of RX antennas used in UE"
,
0
,
iptr
:
NULL
,
defintval
:
2
,
TYPE_INT
,
0
},
{
"gchannel"
,
"[A:M] Use 3GPP 25.814 SCM-A/B/C/D('A','B','C','D') or 36-101 EPA('E'), EVA ('F'),ETU('G') models (ignores delay spread and Ricean factor), Rayghleigh8 ('H'), Rayleigh1('I'), Rayleigh1_corr('J'), Rayleigh1_anticorr ('K'), Rice8('L'), Rice1('M')"
,
0
,
strptr
:
NULL
,
defstrval
:
NULL
,
TYPE_STRING
,
0
},
{
"verbose"
,
"display debug text"
,
PARAMFLAG_BOOL
,
iptr
:&
verbose
,
defintval
:
0
,
TYPE_INT
,
0
},
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
2b592f9a
...
...
@@ -182,7 +182,7 @@ rx_sdu(const module_id_t enb_mod_idP,
UE_template_ptr
->
scheduled_ul_bytes
=
0
;
}
}
else
{
// sduP == NULL => error
LOG_
W
(
MAC
,
"[eNB %d][PUSCH %d] CC_id %d %d.%d ULSCH in error in round %d, ul_cqi %d, UE_id %d, RNTI %x (len %d)
\n
"
,
LOG_
D
(
MAC
,
"[eNB %d][PUSCH %d] CC_id %d %d.%d ULSCH in error in round %d, ul_cqi %d, UE_id %d, RNTI %x (len %d)
\n
"
,
enb_mod_idP
,
harq_pid
,
CC_idP
,
...
...
openair2/X2AP/x2ap_eNB_generate_messages.c
View file @
2b592f9a
...
...
@@ -1439,7 +1439,7 @@ int x2ap_eNB_generate_ENDC_x2_setup_response(
}
if
(
instance_p
->
frame_type
[
i
]
==
FDD
)
{
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
present
=
X2AP_EUTRA_Mode_Info_PR_fDD
;
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
present
=
X2AP_EUTRA_Mode_Info_PR_fDD
;
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
fDD
.
dL_EARFCN
=
instance_p
->
fdd_earfcn_DL
[
i
];
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
fDD
.
uL_EARFCN
=
instance_p
->
fdd_earfcn_UL
[
i
];
switch
(
instance_p
->
N_RB_DL
[
i
])
{
...
...
@@ -1473,12 +1473,98 @@ int x2ap_eNB_generate_ENDC_x2_setup_response(
}
}
else
{
AssertFatal
(
0
,
"X2Setupresponse not supported for TDD!"
);
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
present
=
X2AP_EUTRA_Mode_Info_PR_tDD
;
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
eARFCN
=
instance_p
->
fdd_earfcn_DL
[
i
];
switch
(
instance_p
->
subframeAssignment
[
i
])
{
case
0
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
subframeAssignment
=
X2AP_SubframeAssignment_sa0
;
break
;
case
1
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
subframeAssignment
=
X2AP_SubframeAssignment_sa1
;
break
;
case
2
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
subframeAssignment
=
X2AP_SubframeAssignment_sa2
;
break
;
case
3
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
subframeAssignment
=
X2AP_SubframeAssignment_sa3
;
break
;
case
4
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
subframeAssignment
=
X2AP_SubframeAssignment_sa4
;
break
;
case
5
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
subframeAssignment
=
X2AP_SubframeAssignment_sa5
;
break
;
case
6
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
subframeAssignment
=
X2AP_SubframeAssignment_sa6
;
break
;
default:
AssertFatal
(
0
,
"Failed: Check value for subframeAssignment"
);
break
;
}
switch
(
instance_p
->
specialSubframe
[
i
])
{
case
0
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
specialSubframePatterns
=
X2AP_SpecialSubframePatterns_ssp0
;
break
;
case
1
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
specialSubframePatterns
=
X2AP_SpecialSubframePatterns_ssp1
;
break
;
case
2
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
specialSubframePatterns
=
X2AP_SpecialSubframePatterns_ssp2
;
break
;
case
3
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
specialSubframePatterns
=
X2AP_SpecialSubframePatterns_ssp3
;
break
;
case
4
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
specialSubframePatterns
=
X2AP_SpecialSubframePatterns_ssp4
;
break
;
case
5
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
specialSubframePatterns
=
X2AP_SpecialSubframePatterns_ssp5
;
break
;
case
6
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
specialSubframePatterns
=
X2AP_SpecialSubframePatterns_ssp6
;
break
;
case
7
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
specialSubframePatterns
=
X2AP_SpecialSubframePatterns_ssp7
;
break
;
case
8
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
specialSubframePatterns
=
X2AP_SpecialSubframePatterns_ssp8
;
break
;
default:
AssertFatal
(
0
,
"Failed: Check value for subframeAssignment"
);
break
;
}
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
cyclicPrefixDL
=
X2AP_CyclicPrefixDL_normal
;
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
specialSubframe_Info
.
cyclicPrefixUL
=
X2AP_CyclicPrefixUL_normal
;
switch
(
instance_p
->
N_RB_DL
[
i
])
{
case
6
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
transmission_Bandwidth
=
X2AP_Transmission_Bandwidth_bw6
;
break
;
case
15
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
transmission_Bandwidth
=
X2AP_Transmission_Bandwidth_bw15
;
break
;
case
25
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
transmission_Bandwidth
=
X2AP_Transmission_Bandwidth_bw25
;
break
;
case
50
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
transmission_Bandwidth
=
X2AP_Transmission_Bandwidth_bw50
;
break
;
case
75
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
transmission_Bandwidth
=
X2AP_Transmission_Bandwidth_bw75
;
break
;
case
100
:
servedCellMember
->
servedEUTRACellInfo
.
eUTRA_Mode_Info
.
choice
.
tDD
.
transmission_Bandwidth
=
X2AP_Transmission_Bandwidth_bw100
;
break
;
default:
AssertFatal
(
0
,
"Failed: Check value for N_RB_DL/N_RB_UL"
);
break
;
}
}
}
ASN_SEQUENCE_ADD
(
&
ie_ENB_ENDC
->
value
.
choice
.
ServedEUTRAcellsENDCX2ManagementList
.
list
,
servedCellMember
);
ASN_SEQUENCE_ADD
(
&
ie_ENB_ENDC
->
value
.
choice
.
ServedEUTRAcellsENDCX2ManagementList
.
list
,
servedCellMember
);
}
}
}
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
RespondingNodeType_EndcX2Setup
.
choice
.
respond_eNB
.
list
,
ie_ENB_ENDC
);
...
...
targets/ARCH/COMMON/common_lib.c
View file @
2b592f9a
...
...
@@ -112,6 +112,9 @@ int load_lib(openair0_device *device,
else
deflibname
=
OAI_RF_LIBNAME
;
shlib_fdesc
[
0
].
fname
=
"device_init"
;
}
else
if
(
flag
==
RAU_REMOTE_THIRDPARTY_RADIO_HEAD
)
{
deflibname
=
OAI_THIRDPARTY_TP_LIBNAME
;
shlib_fdesc
[
0
].
fname
=
"transport_init"
;
}
else
{
deflibname
=
OAI_TP_LIBNAME
;
shlib_fdesc
[
0
].
fname
=
"transport_init"
;
...
...
targets/ARCH/COMMON/common_lib.h
View file @
2b592f9a
...
...
@@ -41,6 +41,8 @@
#define OAI_RF_LIBNAME "oai_device"
/* name of shared library implementing the transport */
#define OAI_TP_LIBNAME "oai_transpro"
/* name of shared library implementing a third-party transport */
#define OAI_THIRDPARTY_TP_LIBNAME "thirdparty_transpro"
/* name of shared library implementing the rf simulator */
#define OAI_RFSIM_LIBNAME "rfsimulator"
/* name of shared library implementing the basic simulator */
...
...
@@ -51,10 +53,9 @@
/* flags for BBU to determine whether the attached radio head is local or remote */
#define RAU_LOCAL_RADIO_HEAD 0
#define RAU_REMOTE_RADIO_HEAD 1
#define RAU_REMOTE_THIRDPARTY_RADIO_HEAD 2
#define MAX_WRITE_THREAD_PACKAGE 10
#define MAX_WRITE_THREAD_BUFFER_SIZE 8
#ifndef MAX_CARDS
#define MAX_CARDS 8
#endif
...
...
@@ -367,13 +368,23 @@ struct openair0_device_t {
/*! \brief Called to send samples to the RF target
@param device pointer to the device structure specific to the RF hardware target
@param timestamp The timestamp at whicch the first sample MUST be sent
@param buff Buffer which holds the samples
@param buff Buffer which holds the samples
(2 dimensional)
@param nsamps number of samples to be sent
@param
antenna_id index of the antenna if the device has multiple anteannas
@param
number of antennas
@param flags flags must be set to TRUE if timestamp parameter needs to be applied
*/
int
(
*
trx_write_func
)(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
void
**
buff
,
int
nsamps
,
int
antenna_id
,
int
flags
);
/*! \brief Called to send samples to the RF target
@param device pointer to the device structure specific to the RF hardware target
@param timestamp The timestamp at whicch the first sample MUST be sent
@param buff Buffer which holds the samples (1 dimensional)
@param nsamps number of samples to be sent
@param antenna_id index of the antenna if the device has multiple anteannas
@param flags flags must be set to TRUE if timestamp parameter needs to be applied
*/
int
(
*
trx_write_func2
)(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
void
*
buff
,
int
nsamps
,
int
antenna_id
,
int
flags
);
/*! \brief Receive samples from hardware.
* Read \ref nsamps samples from each channel to buffers. buff[0] is the array for
* the first channel. *ptimestamp is the time at which the first sample
...
...
@@ -382,10 +393,24 @@ struct openair0_device_t {
* \param[out] ptimestamp the time at which the first sample was received.
* \param[out] buff An array of pointers to buffers for received samples. The buffers must be large enough to hold the number of samples \ref nsamps.
* \param nsamps Number of samples. One sample is 2 byte I + 2 byte Q => 4 byte.
* \param
antenna_id Index of antenna for
which to receive samples
* \param
num_antennas number of antennas from
which to receive samples
* \returns the number of sample read
*/
int
(
*
trx_read_func
)(
openair0_device
*
device
,
openair0_timestamp
*
ptimestamp
,
void
**
buff
,
int
nsamps
,
int
antenna_id
);
int
(
*
trx_read_func
)(
openair0_device
*
device
,
openair0_timestamp
*
ptimestamp
,
void
**
buff
,
int
nsamps
,
int
num_antennas
);
/*! \brief Receive samples from hardware, this version provides a single antenna at a time and returns.
* Read \ref nsamps samples from each channel to buffers. buff[0] is the array for
* the first channel. *ptimestamp is the time at which the first sample
* was received.
* \param device the hardware to use
* \param[out] ptimestamp the time at which the first sample was received.
* \param[out] buff A pointers to a buffer for received samples. The buffer must be large enough to hold the number of samples \ref nsamps.
* \param nsamps Number of samples. One sample is 2 byte I + 2 byte Q => 4 byte.
* \param antenna_id Index of antenna from which samples were received
* \returns the number of sample read
*/
int
(
*
trx_read_func2
)(
openair0_device
*
device
,
openair0_timestamp
*
ptimestamp
,
void
*
buff
,
int
nsamps
,
int
*
antenna_id
);
/*! \brief print the device statistics
* \param device the hardware to use
...
...
@@ -431,6 +456,25 @@ struct openair0_device_t {
*/
void
(
*
configure_rru
)(
int
idx
,
void
*
arg
);
/*! \brief Pointer to generic RRU private information
*/
void
*
thirdparty_priv
;
/*! \brief Callback for Third-party RRU Initialization routine
\param device the hardware configuration to use
*/
int
(
*
thirdparty_init
)(
openair0_device
*
device
);
/*! \brief Callback for Third-party RRU Cleanup routine
\param device the hardware configuration to use
*/
int
(
*
thirdparty_cleanup
)(
openair0_device
*
device
);
/*! \brief Callback for Third-party start streaming routine
\param device the hardware configuration to use
*/
int
(
*
thirdparty_startstreaming
)(
openair0_device
*
device
);
/*! \brief RRU Configuration callback
* \param idx RU index
* \param arg pointer to capabilities or configuration
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
View file @
2b592f9a
...
...
@@ -102,23 +102,15 @@ int eth_socket_init_raw(openair0_device *device) {
eth
->
local_addrd_ll
.
sll_family
=
AF_PACKET
;
eth
->
local_addrd_ll
.
sll_ifindex
=
eth
->
if_index
.
ifr_ifindex
;
/* hear traffic from specific protocol*/
if
(
eth
->
flags
==
ETH_RAW_IF5_MOBIPASS
)
{
eth
->
local_addrd_ll
.
sll_protocol
=
htons
(
0xbffe
);
}
else
{
eth
->
local_addrc_ll
.
sll_protocol
=
htons
((
short
)
device
->
eth_params
->
my_portc
);
eth
->
local_addrd_ll
.
sll_protocol
=
htons
((
short
)
device
->
eth_params
->
my_portd
);
}
eth
->
local_addrc_ll
.
sll_protocol
=
htons
((
short
)
device
->
eth_params
->
my_portc
);
eth
->
local_addrd_ll
.
sll_protocol
=
htons
((
short
)
device
->
eth_params
->
my_portd
);
eth
->
local_addrc_ll
.
sll_halen
=
ETH_ALEN
;
eth
->
local_addrc_ll
.
sll_pkttype
=
PACKET_OTHERHOST
;
eth
->
local_addrd_ll
.
sll_halen
=
ETH_ALEN
;
eth
->
local_addrd_ll
.
sll_pkttype
=
PACKET_OTHERHOST
;
eth
->
addr_len
=
sizeof
(
struct
sockaddr_ll
);
if
((
eth
->
flags
!=
ETH_RAW_IF5_MOBIPASS
)
&&
(
bind
(
eth
->
sockfdc
,(
struct
sockaddr
*
)
&
eth
->
local_addrc_ll
,
eth
->
addr_len
)
<
0
))
{
perror
(
"ETHERNET: Cannot bind to socket (control)"
);
exit
(
0
);
}
if
(
bind
(
eth
->
sockfdd
,(
struct
sockaddr
*
)
&
eth
->
local_addrd_ll
,
eth
->
addr_len
)
<
0
)
{
perror
(
"ETHERNET: Cannot bind to socket (user)"
);
exit
(
0
);
...
...
@@ -127,12 +119,9 @@ int eth_socket_init_raw(openair0_device *device) {
/* Construct the Ethernet header */
ether_aton_r
(
local_mac
,
(
struct
ether_addr
*
)(
&
(
eth
->
ehd
.
ether_shost
)));
ether_aton_r
(
remote_mac
,
(
struct
ether_addr
*
)(
&
(
eth
->
ehd
.
ether_dhost
)));
if
(
eth
->
flags
==
ETH_RAW_IF5_MOBIPASS
)
{
eth
->
ehd
.
ether_type
=
htons
(
0xbffe
);
}
else
{
eth
->
ehc
.
ether_type
=
htons
((
short
)
device
->
eth_params
->
my_portc
);
eth
->
ehd
.
ether_type
=
htons
((
short
)
device
->
eth_params
->
my_portd
);
}
eth
->
ehc
.
ether_type
=
htons
((
short
)
device
->
eth_params
->
my_portc
);
eth
->
ehd
.
ether_type
=
htons
((
short
)
device
->
eth_params
->
my_portd
);
printf
(
"[%s] binding to hardware address %x:%x:%x:%x:%x:%x
\n
"
,((
device
->
host_type
==
RAU_HOST
)
?
"RAU"
:
"RRU"
),
eth
->
ehd
.
ether_shost
[
0
],
eth
->
ehd
.
ether_shost
[
1
],
eth
->
ehd
.
ether_shost
[
2
],
eth
->
ehd
.
ether_shost
[
3
],
eth
->
ehd
.
ether_shost
[
4
],
eth
->
ehd
.
ether_shost
[
5
]);
return
0
;
...
...
@@ -216,8 +205,6 @@ int trx_eth_write_raw_IF4p5(openair0_device *device, openair0_timestamp timestam
packet_size
=
RAW_IF4p5_PULFFT_SIZE_BYTES
(
nblocks
);
}
else
if
(
flags
==
IF4p5_PULTICK
)
{
packet_size
=
RAW_IF4p5_PULTICK_SIZE_BYTES
;
}
else
if
(
flags
==
IF5_MOBIPASS
)
{
packet_size
=
RAW_IF5_MOBIPASS_SIZE_BYTES
;
}
else
{
packet_size
=
RAW_IF4p5_PRACH_SIZE_BYTES
;
}
...
...
@@ -430,53 +417,6 @@ int trx_eth_read_raw_IF4p5(openair0_device *device, openair0_timestamp *timestam
}
int
trx_eth_read_raw_IF5_mobipass
(
openair0_device
*
device
,
openair0_timestamp
*
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
)
{
// Read nblocks info from packet itself
int
bytes_received
=
0
;
eth_state_t
*
eth
=
(
eth_state_t
*
)
device
->
priv
;
int
ret
;
ssize_t
packet_size
=
28
;
//MAC_HEADER_SIZE_BYTES + sizeof_IF5_mobipass_header_t ;
// ssize_t packet_size = MAC_HEADER_SIZE_BYTES + sizeof_IF5_mobipass_header_t + 640*sizeof(int16_t);
bytes_received
=
recv
(
eth
->
sockfdd
,
buff
[
0
],
packet_size
,
MSG_PEEK
);
if
(
bytes_received
==-
1
)
{
eth
->
num_rx_errors
++
;
perror
(
"[MOBIPASS]ETHERNET IF5 READ (header): "
);
exit
(
-
1
);
}
IF5_mobipass_header_t
*
test_header
=
(
IF5_mobipass_header_t
*
)((
uint8_t
*
)
buff
[
0
]
+
MAC_HEADER_SIZE_BYTES
);
*
timestamp
=
test_header
->
time_stamp
;
packet_size
=
MAC_HEADER_SIZE_BYTES
+
sizeof_IF5_mobipass_header_t
+
640
*
sizeof
(
int16_t
);
while
(
bytes_received
<
packet_size
)
{
ret
=
recv
(
eth
->
sockfdd
,
buff
[
0
],
packet_size
,
0
);
if
(
bytes_received
==-
1
)
{
eth
->
num_rx_errors
++
;
perror
(
"[MOBIPASS] ETHERNET IF5 READ (payload): "
);
return
(
-
1
);
}
else
{
bytes_received
+=
ret
;
eth
->
rx_actual_nsamps
=
bytes_received
>>
1
;
eth
->
rx_count
++
;
}
}
eth
->
rx_nsamps
=
nsamps
;
return
(
bytes_received
);
}
int
eth_set_dev_conf_raw
(
openair0_device
*
device
)
{
eth_state_t
*
eth
=
(
eth_state_t
*
)
device
->
priv
;
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
View file @
2b592f9a
This diff is collapsed.
Click to expand it.
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
View file @
2b592f9a
...
...
@@ -52,11 +52,20 @@ int num_devices_eth = 0;
struct
sockaddr_in
dest_addr
[
MAX_INST
];
int
dest_addr_len
[
MAX_INST
];
int
load_lib
(
openair0_device
*
device
,
openair0_config_t
*
openair0_cfg
,
eth_params_t
*
cfg
,
uint8_t
flag
);
int
trx_eth_start
(
openair0_device
*
device
)
{
eth_state_t
*
eth
=
(
eth_state_t
*
)
device
->
priv
;
if
(
eth
->
flags
==
ETH_UDP_IF5_ECPRI_MODE
)
{
AssertFatal
(
device
->
thirdparty_init
!=
NULL
,
"device->thirdparty_init is null
\n
"
);
AssertFatal
(
device
->
thirdparty_init
(
device
)
==
0
,
"third-party init failed
\n
"
);
device
->
openair0_cfg
->
samples_per_packet
=
256
;
}
/* initialize socket */
if
(
eth
->
flags
==
ETH_RAW_MODE
)
{
printf
(
"Setting ETHERNET to ETH_RAW_IF5_MODE
\n
"
);
...
...
@@ -121,11 +130,6 @@ int trx_eth_start(openair0_device *device)
}
else
if
(
eth
->
flags
==
ETH_RAW_IF5_MOBIPASS
)
{
printf
(
"Setting ETHERNET to RAW_IF5_MODE
\n
"
);
if
(
eth_socket_init_raw
(
device
)
!=
0
)
return
-
1
;
if
(
ethernet_tune
(
device
,
RCV_TIMEOUT
,
999999
)
!=
0
)
return
-
1
;
}
else
{
printf
(
"Setting ETHERNET to UDP_IF5_MODE
\n
"
);
if
(
eth_socket_init_udp
(
device
)
!=
0
)
return
-
1
;
...
...
@@ -137,8 +141,7 @@ int trx_eth_start(openair0_device *device)
if(eth_get_dev_conf_udp(device)!=0) return -1;
}*/
/* adjust MTU wrt number of samples per packet */
if
(
ethernet_tune
(
device
,
MTU_SIZE
,
UDP_IF4p5_PRACH_SIZE_BYTES
)
!=
0
)
return
-
1
;
//if(ethernet_tune (device,MTU_SIZE,UDP_IF4p5_PRACH_SIZE_BYTES)!=0) return -1;
if
(
ethernet_tune
(
device
,
RCV_TIMEOUT
,
999999
)
!=
0
)
return
-
1
;
}
...
...
@@ -166,9 +169,15 @@ void trx_eth_end(openair0_device *device)
}
int
trx_eth_stop
(
openair0_device
*
device
)
{
return
(
0
);
int
trx_eth_stop
(
openair0_device
*
device
)
{
eth_state_t
*
eth
=
(
eth_state_t
*
)
device
->
priv
;
if
(
eth
->
flags
==
ETH_UDP_IF5_ECPRI_MODE
)
{
AssertFatal
(
device
->
thirdparty_cleanup
!=
NULL
,
"device->thirdparty_cleanup is null
\n
"
);
AssertFatal
(
device
->
thirdparty_cleanup
(
device
)
==
0
,
"third-party cleanup failed
\n
"
);
}
return
(
0
);
}
...
...
@@ -387,20 +396,11 @@ int transport_init(openair0_device *device,
eth_state_t
*
eth
=
(
eth_state_t
*
)
malloc
(
sizeof
(
eth_state_t
));
memset
(
eth
,
0
,
sizeof
(
eth_state_t
));
if
(
eth_params
->
transp_preference
==
1
)
{
eth
->
flags
=
ETH_RAW_MODE
;
}
else
if
(
eth_params
->
transp_preference
==
0
)
{
eth
->
flags
=
ETH_UDP_MODE
;
}
else
if
(
eth_params
->
transp_preference
==
3
)
{
eth
->
flags
=
ETH_RAW_IF4p5_MODE
;
}
else
if
(
eth_params
->
transp_preference
==
2
)
{
eth
->
flags
=
ETH_UDP_IF4p5_MODE
;
}
else
if
(
eth_params
->
transp_preference
==
4
)
{
eth
->
flags
=
ETH_RAW_IF5_MOBIPASS
;
}
else
{
printf
(
"transport_init: Unknown transport preference %d - default to RAW"
,
eth_params
->
transp_preference
);
eth
->
flags
=
ETH_RAW_MODE
;
}
eth
->
flags
=
eth_params
->
transp_preference
;
// load third-party driver
if
(
eth
->
flags
==
ETH_UDP_IF5_ECPRI_MODE
)
load_lib
(
device
,
openair0_cfg
,
eth_params
,
RAU_REMOTE_THIRDPARTY_RADIO_HEAD
);
if
(
eth_params
->
if_compress
==
0
)
{
eth
->
compression
=
NO_COMPRESS
;
...
...
@@ -423,12 +423,17 @@ int transport_init(openair0_device *device,
device
->
trx_set_gains_func
=
trx_eth_set_gains
;
device
->
trx_write_init
=
trx_eth_write_init
;
if
(
eth
->
flags
==
ETH_RAW_MODE
)
{
device
->
trx_read_func2
=
NULL
;
device
->
trx_read_func
=
NULL
;
device
->
trx_write_func2
=
NULL
;
device
->
trx_write_func
=
NULL
;
if
(
eth
->
flags
==
ETH_RAW_MODE
)
{
device
->
trx_write_func
=
trx_eth_write_raw
;
device
->
trx_read_func
=
trx_eth_read_raw
;
}
else
if
(
eth
->
flags
==
ETH_UDP_MODE
)
{
device
->
trx_write_func
=
trx_eth_write_udp
;
device
->
trx_read_func
=
trx_eth_read_udp
;
}
else
if
(
eth
->
flags
==
ETH_UDP_MODE
||
eth
->
flags
==
ETH_UDP_IF5_ECPRI_MODE
)
{
device
->
trx_write_func
2
=
trx_eth_write_udp
;
device
->
trx_read_func
2
=
trx_eth_read_udp
;
device
->
trx_ctlsend_func
=
trx_eth_ctlsend_udp
;
device
->
trx_ctlrecv_func
=
trx_eth_ctlrecv_udp
;
}
else
if
(
eth
->
flags
==
ETH_RAW_IF4p5_MODE
)
{
...
...
@@ -439,9 +444,6 @@ int transport_init(openair0_device *device,
device
->
trx_read_func
=
trx_eth_read_udp_IF4p5
;
device
->
trx_ctlsend_func
=
trx_eth_ctlsend_udp
;
device
->
trx_ctlrecv_func
=
trx_eth_ctlrecv_udp
;
}
else
if
(
eth
->
flags
==
ETH_RAW_IF5_MOBIPASS
)
{
device
->
trx_write_func
=
trx_eth_write_raw_IF4p5
;
device
->
trx_read_func
=
trx_eth_read_raw_IF5_mobipass
;
}
else
{
//device->trx_write_func = trx_eth_write_udp_IF4p5;
//device->trx_read_func = trx_eth_read_udp_IF4p5;
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
View file @
2b592f9a
...
...
@@ -49,7 +49,10 @@
#define RX_FLAG 0
#include "if_defs.h"
#define APP_HEADER_SIZE_BYTES (sizeof(int32_t) + sizeof(openair0_timestamp))
#define ECPRICOMMON_BYTES 4
#define ECPRIPCID_BYTES 2
#define APP_HEADER_SIZE_BYTES (ECPRICOMMON_BYTES + ECPRIPCID_BYTES + sizeof(openair0_timestamp))
#define ECPRIREV 1 // ECPRI Version 1, C=0 - single ECPRI message per OAI TX packet
/*!\brief opaque ethernet data structure */
typedef
struct
{
...
...
@@ -234,8 +237,8 @@ int ethernet_tune(openair0_device *device, unsigned int option, int value);
* @ingroup _oai
*/
int
eth_socket_init_udp
(
openair0_device
*
device
);
int
trx_eth_write_udp
(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
void
*
*
buff
,
int
nsamps
,
int
cc
,
int
flags
);
int
trx_eth_read_udp
(
openair0_device
*
device
,
openair0_timestamp
*
timestamp
,
void
*
*
buff
,
int
nsamps
,
int
cc
);
int
trx_eth_write_udp
(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
void
*
buff
,
int
nsamps
,
int
cc
,
int
flags
);
int
trx_eth_read_udp
(
openair0_device
*
device
,
openair0_timestamp
*
timestamp
,
void
*
buff
,
int
nsamps
,
int
*
cc
);
int
eth_socket_init_raw
(
openair0_device
*
device
);
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h
View file @
2b592f9a
...
...
@@ -36,15 +36,17 @@
#include <netinet/ether.h>
#include <stdint.h>
#ifndef LITE_COMPILATION
#include "PHY/LTE_TRANSPORT/if4_tools.h"
#include "PHY/LTE_TRANSPORT/if5_tools.h"
#endif
// ETH transport preference modes
#define ETH_UDP_MODE 0
#define ETH_RAW_MODE 1
#define ETH_UDP_MODE
0
#define ETH_RAW_MODE
1
#define ETH_UDP_IF4p5_MODE 2
#define ETH_RAW_IF4p5_MODE 3
#define ETH_
RAW_IF5_MOBIPASS
4
#define ETH_
UDP_IF5_ECPRI_MODE
4
// COMMOM HEADER LENGTHS
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc_b38_if5_ENDC.conf
0 → 100644
View file @
2b592f9a
Active_eNBs
= (
"eNB_Eurecom_VCO_B38"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
eNBs
=
(
{
# real_time choice in {hard, rt-preempt, no}
real_time
=
"no"
;
//////////
Identification
parameters
:
eNB_ID
=
0
xe00
;
cell_type
=
"CELL_MACRO_ENB"
;
eNB_name
=
"eNB_Eurecom_VCO_B38"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
222
;
mnc
=
01
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
component_carriers
= (
{
node_function
=
"NGFI_RCC_IF5"
;
node_timing
=
"synch_to_ext_device"
;
node_synch_ref
=
0
;
frame_type
=
"TDD"
;
tdd_config
=
1
;
tdd_config_s
=
0
;
prefix_type
=
"NORMAL"
;
eutra_band
=
38
;
downlink_frequency
=
2585000000
L
;
uplink_frequency_offset
=
0
;
Nid_cell
=
0
;
N_RB_DL
=
100
;
Nid_cell_mbsfn
=
0
;
nb_antenna_ports
=
1
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
rx_gain
=
125
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
prach_zero_correlation
=
5
;
prach_freq_offset
=
2
;
pucch_delta_shift
=
1
;
pucch_nRB_CQI
=
1
;
pucch_nCS_AN
=
0
;
pucch_n1_AN
=
0
;
pdsch_referenceSignalPower
=
10
;
pdsch_p_b
=
0
;
pusch_n_SB
=
1
;
pusch_enable64QAM
=
"DISABLE"
;
pusch_hoppingMode
=
"interSubFrame"
;
pusch_hoppingOffset
=
0
;
pusch_groupHoppingEnabled
=
"ENABLE"
;
pusch_groupAssignment
=
0
;
pusch_sequenceHoppingEnabled
=
"DISABLE"
;
pusch_nDMRS1
=
1
;
phich_duration
=
"NORMAL"
;
phich_resource
=
"ONESIXTH"
;
srs_enable
=
"DISABLE"
;
/*
srs_BandwidthConfig
=;
srs_SubframeConfig
=;
srs_ackNackST
=;
srs_MaxUpPts
=;*/
pusch_p0_Nominal
= -
96
;
pusch_alpha
=
"AL1"
;
pucch_p0_Nominal
= -
106
;
msg3_delta_Preamble
=
6
;
pucch_deltaF_Format1
=
"deltaF2"
;
pucch_deltaF_Format1b
=
"deltaF3"
;
pucch_deltaF_Format2
=
"deltaF0"
;
pucch_deltaF_Format2a
=
"deltaF0"
;
pucch_deltaF_Format2b
=
"deltaF0"
;
rach_numberOfRA_Preambles
=
64
;
rach_preamblesGroupAConfig
=
"DISABLE"
;
/*
rach_sizeOfRA_PreamblesGroupA
= ;
rach_messageSizeGroupA
= ;
rach_messagePowerOffsetGroupB
= ;
*/
rach_powerRampingStep
=
4
;
rach_preambleInitialReceivedTargetPower
= -
108
;
rach_preambleTransMax
=
10
;
rach_raResponseWindowSize
=
10
;
rach_macContentionResolutionTimer
=
48
;
rach_maxHARQ_Msg3Tx
=
4
;
pcch_default_PagingCycle
=
128
;
pcch_nB
=
"oneT"
;
bcch_modificationPeriodCoeff
=
2
;
ue_TimersAndConstants_t300
=
1000
;
ue_TimersAndConstants_t301
=
1000
;
ue_TimersAndConstants_t310
=
1000
;
ue_TimersAndConstants_t311
=
10000
;
ue_TimersAndConstants_n310
=
20
;
ue_TimersAndConstants_n311
=
1
;
ue_TransmissionMode
=
1
;
}
);
srb1_parameters
:
{
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
timer_poll_retransmit
=
80
;
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
timer_reordering
=
35
;
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
timer_status_prohibit
=
0
;
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
poll_pdu
=
4
;
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
poll_byte
=
99999
;
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
max_retx_threshold
=
4
;
}
# ------- SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
};
//////////
MME
parameters
:
mme_ip_address
= ( {
ipv4
=
"192.168.18.150"
;
ipv6
=
"192:168:30::17"
;
active
=
"yes"
;
preference
=
"ipv4"
;
}
);
enable_measurement_reports
=
"no"
;
///
X2
enable_x2
=
"yes"
;
t_reloc_prep
=
1000
; /*
unit
:
millisecond
*/
tx2_reloc_overall
=
2000
; /*
unit
:
millisecond
*/
t_dc_prep
=
1000
;
t_dc_overall
=
2000
;
NETWORK_INTERFACES
:
{
ENB_INTERFACE_NAME_FOR_S1_MME
=
"bond0"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.18.203/24"
;
ENB_INTERFACE_NAME_FOR_S1U
=
"bond0"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.18.203/24"
;
ENB_PORT_FOR_S1U
=
2152
;
# Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C
=
"192.168.18.203/24"
;
ENB_PORT_FOR_X2C
=
36422
;
# Spec 36422
};
log_config
:
{
global_log_level
=
"debug"
;
global_log_verbosity
=
"medium"
;
hw_log_level
=
"info"
;
hw_log_verbosity
=
"medium"
;
phy_log_level
=
"info"
;
phy_log_verbosity
=
"medium"
;
mac_log_level
=
"info"
;
mac_log_verbosity
=
"high"
;
rlc_log_level
=
"info"
;
rlc_log_verbosity
=
"medium"
;
pdcp_log_level
=
"info"
;
pdcp_log_verbosity
=
"medium"
;
rrc_log_level
=
"info"
;
rrc_log_verbosity
=
"medium"
;
};
}
);
MACRLCs
= (
{
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
scheduler_mode
=
"fairRR"
;
puSch10xSnr
=
100
;
puCch10xSnr
=
100
;
}
);
L1s
= (
{
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
prach_dtx_threshold
=
150
;
}
);
RUs
= (
{
local_if_name
=
"bond0"
;
remote_address
=
"192.168.18.222"
;
local_address
=
"192.168.18.203"
;
local_portc
=
50000
;
remote_portc
=
55444
;
local_portd
=
52001
;
remote_portd
=
52183
;
local_rf
=
"no"
tr_preference
=
"udp_ecpri_if5"
nb_tx
=
1
nb_rx
=
1
att_tx
=
5
att_rx
=
0
;
eNB_instances
= [
0
];
}
);
THREAD_STRUCT
= (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_RU_L1_TRX_SPLIT"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
);
NETWORK_CONTROLLER
:
{
FLEXRAN_ENABLED
=
"no"
;
FLEXRAN_INTERFACE_NAME
=
"lo"
;
FLEXRAN_IPV4_ADDRESS
=
"127.0.0.1"
;
FLEXRAN_PORT
=
2210
;
FLEXRAN_CACHE
=
"/mnt/oai_agent_cache"
;
FLEXRAN_AWAIT_RECONF
=
"no"
;
};
targets/RT/USER/lte-enb.c
View file @
2b592f9a
...
...
@@ -461,10 +461,9 @@ void eNB_top(PHY_VARS_eNB *eNB,
L1_proc
->
subframe_rx
=
ru_proc
->
tti_rx
;
L1_proc
->
frame_tx
=
(
L1_proc
->
subframe_rx
>
(
9
-
sf_ahead
))
?
(
L1_proc
->
frame_rx
+
1
)
&
1023
:
L1_proc
->
frame_rx
;
L1_proc
->
subframe_tx
=
(
L1_proc
->
subframe_rx
+
sf_ahead
)
%
10
;
if
(
rxtx
(
eNB
,
L1_proc
,
string
)
<
0
)
LOG_E
(
PHY
,
"eNB %d CC_id %d failed during execution
\n
"
,
eNB
->
Mod_id
,
eNB
->
CC_id
);
LOG_E
(
PHY
,
"eNB %d CC_id %d failed during execution
\n
"
,
eNB
->
Mod_id
,
eNB
->
CC_id
);
ru_proc
->
timestamp_tx
=
L1_proc
->
timestamp_tx
;
ru_proc
->
tti_tx
=
L1_proc
->
subframe_tx
;
ru_proc
->
frame_tx
=
L1_proc
->
frame_tx
;
...
...
@@ -1168,6 +1167,7 @@ void init_eNB_afterRU(void) {
for
(
ru_id
=
0
,
aa
=
0
;
ru_id
<
eNB
->
num_RU
;
ru_id
++
)
{
eNB
->
frame_parms
.
nb_antennas_rx
+=
eNB
->
RU_list
[
ru_id
]
->
nb_rx
;
AssertFatal
(
eNB
->
RU_list
[
ru_id
]
->
common
.
rxdataF
!=
NULL
,
"RU %d : common.rxdataF is NULL
\n
"
,
eNB
->
RU_list
[
ru_id
]
->
idx
);
...
...
targets/RT/USER/lte-ru.c
View file @
2b592f9a
This diff is collapsed.
Click to expand it.
targets/RT/USER/rcc_if5.gtkw
View file @
2b592f9a
[*]
[*] GTKWave Analyzer v3.3.
58 (w)1999-2014
BSI
[*]
Sun Jul 31 13:30:42 2016
[*] GTKWave Analyzer v3.3.
66 (w)1999-2015
BSI
[*]
Tue Sep 24 06:59:08 2019
[*]
[dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile_mtime] "
Sun Jul 31 13:21:59 2016
"
[dumpfile_size] 1
8273240
[savefile] "/home/
fourmi
/openairinterface5g/targets/RT/USER/rcc_if5.gtkw"
[timestart]
24070893
000
[size] 1
301 716
[pos]
309 0
*-19.
793451 29026062100
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[sst_width]
284
[signals_width]
262
[dumpfile_mtime] "
Mon Sep 23 20:04:56 2019
"
[dumpfile_size] 1
625759
[savefile] "/home/
orange/aw2s
/openairinterface5g/targets/RT/USER/rcc_if5.gtkw"
[timestart]
12600104
000
[size] 1
215 1000
[pos]
0 22
*-19.
506693 12600920638
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[sst_width]
386
[signals_width]
344
[sst_expanded] 1
[sst_vpaned_height] 294
[sst_vpaned_height] 303
@29
functions.send_if5
@28
functions.recv_if5
@24
variables.trx_ts[63:0]
variables.trx_tst[63:0]
@28
functions.send_if5
functions.recv_if5
functions.eNB_thread_rxtx0
@24
variables.frame_number_RX0_RU[63:0]
variables.subframe_number_RX0_RU[63:0]
variables.frame_number_TX0_RU[63:0]
variables.subframe_number_TX0_RU[63:0]
@28
functions.mac_schedule_dlsch
functions.macxface_eNB_dlsch_ulsch_scheduler
functions.macxface_ue_scheduler
functions.phy_eNB_ofdm_mod_l
@24
variables.frame_number_RX0_eNB[63:0]
variables.subframe_number_RX0_eNB[63:0]
variables.frame_number_TX0_eNB[63:0]
variables.subframe_number_TX0_eNB[63:0]
@28
functions.eNB_thread_rxtx1
@24
variables.frame_number_RX1_eNB[63:0]
variables.subframe_number_RX1_eNB[63:0]
variables.frame_number_TX1_eNB[63:0]
variables.subframe_number_TX1_eNB[63:0]
@28
functions.phy_eNB_dlsch_modulation
functions.phy_eNB_dlsch_encoding
functions.phy_eNB_dlsch_scrambling
functions.phy_eNB_beam_precoding
functions.phy_enb_pdcch_tx
functions.phy_enb_prach_rx
functions.phy_procedures_ru_feprx0
functions.phy_procedures_eNb_rx_uespec0
functions.phy_procedures_eNb_rx_uespec1
functions.phy_enb_sfgen
functions.phy_procedures_eNb_tx0
functions.phy_procedures_eNb_tx1
functions.phy_procedures_ru_feprx1
functions.phy_procedures_ru_feptx_ofdm0
functions.phy_procedures_ru_feptx_ofdm1
functions.phy_procedures_ru_feptx_prec0
functions.phy_procedures_ru_feptx_prec1
functions.eNB_thread_rxtx1
functions.phy_enb_sfgen
functions.phy_eNB_slot_fep
functions.phy_enb_prach_rx
@24
variables.dci_info[63:0]
...
...
targets/RT/USER/ru_control.c
View file @
2b592f9a
...
...
@@ -524,7 +524,7 @@ void* ru_thread_control( void* param )
}
ru
->
state
=
(
ru
->
function
==
eNodeB_3GPP
)
?
RU_RUN
:
RU_IDLE
;
ru
->
state
=
(
ru
->
function
==
eNodeB_3GPP
||
ru
->
if_south
==
REMOTE_IF5
)
?
RU_RUN
:
RU_IDLE
;
LOG_I
(
PHY
,
"Control channel ON for RU %d
\n
"
,
ru
->
idx
);
while
(
!
oai_exit
)
// Change the cond
...
...
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