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
canghaiwuhen
OpenXG-RAN
Commits
ddd5a96c
Commit
ddd5a96c
authored
Dec 04, 2020
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop-oriecpriupdates' into integration_2020_wk50
parents
dfb110bf
d64bc67b
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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_TRANSPORT/prach.c
View file @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
This diff is collapsed.
Click to expand it.
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
View file @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
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 @
ddd5a96c
...
...
@@ -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 @
ddd5a96c
This diff is collapsed.
Click to expand it.
targets/RT/USER/rcc_if5.gtkw
View file @
ddd5a96c
[*]
[*] 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 @
ddd5a96c
...
...
@@ -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