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
littleBu
OpenXG-RAN
Commits
b735f8be
Commit
b735f8be
authored
Mar 17, 2023
by
laurent
Committed by
Robert Schmidt
Apr 19, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ubsan fixes
parent
8a10d1b2
Changes
29
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
305 additions
and
239 deletions
+305
-239
common/utils/time_meas.h
common/utils/time_meas.h
+9
-7
openair1/PHY/CODING/crc_byte.c
openair1/PHY/CODING/crc_byte.c
+49
-59
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+3
-1
openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
+1
-1
openair1/PHY/LTE_TRANSPORT/dci_tools_common.c
openair1/PHY/LTE_TRANSPORT/dci_tools_common.c
+10
-11
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
+2
-5
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
+15
-18
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+1
-2
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+1
-1
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+2
-1
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
+6
-3
openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
+1
-1
openair1/PHY/TOOLS/tools_defs.h
openair1/PHY/TOOLS/tools_defs.h
+26
-19
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+2
-2
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+2
-1
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+129
-83
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+1
-1
openair1/SIMULATION/LTE_PHY/ulsim.c
openair1/SIMULATION/LTE_PHY/ulsim.c
+2
-3
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+1
-0
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+1
-0
openair2/LAYER2/nr_rlc/nr_rlc_pdu.c
openair2/LAYER2/nr_rlc/nr_rlc_pdu.c
+1
-1
openair2/LAYER2/nr_rlc/nr_rlc_pdu.h
openair2/LAYER2/nr_rlc/nr_rlc_pdu.h
+1
-1
openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.c
openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.c
+4
-2
openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c
openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c
+10
-4
openair3/NAS/COMMON/IES/FGCNasMessageContainer.c
openair3/NAS/COMMON/IES/FGCNasMessageContainer.c
+2
-1
openair3/NAS/COMMON/IES/FGSMobileIdentity.c
openair3/NAS/COMMON/IES/FGSMobileIdentity.c
+7
-4
openair3/NAS/COMMON/UTIL/TLVDecoder.h
openair3/NAS/COMMON/UTIL/TLVDecoder.h
+7
-3
openair3/NAS/COMMON/UTIL/TLVEncoder.h
openair3/NAS/COMMON/UTIL/TLVEncoder.h
+6
-3
openair3/NAS/NR_UE/nr_nas_msg_sim.c
openair3/NAS/NR_UE/nr_nas_msg_sim.c
+3
-1
No files found.
common/utils/time_meas.h
View file @
b735f8be
...
@@ -153,15 +153,17 @@ static inline void start_meas(time_stats_t *ts) {
...
@@ -153,15 +153,17 @@ static inline void start_meas(time_stats_t *ts) {
static
inline
void
stop_meas
(
time_stats_t
*
ts
)
{
static
inline
void
stop_meas
(
time_stats_t
*
ts
)
{
if
(
opp_enabled
)
{
if
(
opp_enabled
)
{
long
long
out
=
rdtsc_oai
();
long
long
out
=
rdtsc_oai
();
ts
->
diff
+=
(
out
-
ts
->
in
);
if
(
ts
->
in
)
{
ts
->
diff
+=
(
out
-
ts
->
in
);
/// process duration is the difference between two clock points
/// process duration is the difference between two clock points
ts
->
p_time
=
(
out
-
ts
->
in
);
ts
->
p_time
=
(
out
-
ts
->
in
);
ts
->
diff_square
+=
((
double
)
out
-
ts
->
in
)
*
((
double
)
out
-
ts
->
in
);
ts
->
diff_square
+=
((
double
)
out
-
ts
->
in
)
*
((
double
)
out
-
ts
->
in
);
if
((
out
-
ts
->
in
)
>
ts
->
max
)
if
((
out
-
ts
->
in
)
>
ts
->
max
)
ts
->
max
=
out
-
ts
->
in
;
ts
->
max
=
out
-
ts
->
in
;
ts
->
meas_flag
=
0
;
ts
->
meas_flag
=
0
;
}
}
}
}
}
...
...
openair1/PHY/CODING/crc_byte.c
View file @
b735f8be
...
@@ -44,16 +44,16 @@
...
@@ -44,16 +44,16 @@
/*ref 36-212 v8.6.0 , pp 8-9 */
/*ref 36-212 v8.6.0 , pp 8-9 */
/* the highest degree is set by default */
/* the highest degree is set by default */
u
nsigned
int
poly24a
=
0x864cfb00
;
// 1000 0110 0100 1100 1111 1011
u
int32_t
poly24a
=
0x864cfb00
;
// 1000 0110 0100 1100 1111 1011
// D^24 + D^23 + D^18 + D^17 + D^14 + D^11 + D^10 + D^7 + D^6 + D^5 + D^4 + D^3 + D + 1
// D^24 + D^23 + D^18 + D^17 + D^14 + D^11 + D^10 + D^7 + D^6 + D^5 + D^4 + D^3 + D + 1
u
nsigned
int
poly24b
=
0x80006300
;
// 1000 0000 0000 0000 0110 0011
u
int32_t
poly24b
=
0x80006300
;
// 1000 0000 0000 0000 0110 0011
// D^24 + D^23 + D^6 + D^5 + D + 1
// D^24 + D^23 + D^6 + D^5 + D + 1
u
nsigned
int
poly24c
=
0xb2b11700
;
// 1011 0010 1011 0001 0001 0111
u
int32_t
poly24c
=
0xb2b11700
;
// 1011 0010 1011 0001 0001 0111
// D^24+D^23+D^21+D^20+D^17+D^15+D^13+D^12+D^8+D^4+D^2+D+1
// D^24+D^23+D^21+D^20+D^17+D^15+D^13+D^12+D^8+D^4+D^2+D+1
u
nsigned
int
poly16
=
0x10210000
;
// 0001 0000 0010 0001 D^16 + D^12 + D^5 + 1
u
int32_t
poly16
=
0x10210000
;
// 0001 0000 0010 0001 D^16 + D^12 + D^5 + 1
u
nsigned
int
poly12
=
0x80F00000
;
// 1000 0000 1111 D^12 + D^11 + D^3 + D^2 + D + 1
u
int32_t
poly12
=
0x80F00000
;
// 1000 0000 1111 D^12 + D^11 + D^3 + D^2 + D + 1
u
nsigned
int
poly8
=
0x9B000000
;
// 1001 1011 D^8 + D^7 + D^4 + D^3 + D + 1
u
int32_t
poly8
=
0x9B000000
;
// 1001 1011 D^8 + D^7 + D^4 + D^3 + D + 1
uint32_t
poly6
=
0x84000000
;
// 10000100000... -> D^6+D^5+1
uint32_t
poly6
=
0x84000000
;
// 10000100000... -> D^6+D^5+1
uint32_t
poly11
=
0xc4200000
;
//11000100001000... -> D^11+D^10+D^9+D^5+1
uint32_t
poly11
=
0xc4200000
;
//11000100001000... -> D^11+D^10+D^9+D^5+1
...
@@ -65,14 +65,12 @@ For initialization && verification purposes,
...
@@ -65,14 +65,12 @@ For initialization && verification purposes,
The first bit is in the MSB of each byte
The first bit is in the MSB of each byte
*********************************************************/
*********************************************************/
unsigned
int
crcbit
(
unsigned
char
*
inputptr
,
uint32_t
crcbit
(
unsigned
char
*
inputptr
,
int
octetlen
,
uint32_t
poly
)
int
octetlen
,
unsigned
int
poly
)
{
{
u
nsigned
in
t
i
,
crc
=
0
,
c
;
u
int32_
t
i
,
crc
=
0
,
c
;
while
(
octetlen
--
>
0
)
{
while
(
octetlen
--
>
0
)
{
c
=
((
u
nsigned
in
t
)(
*
inputptr
++
))
<<
24
;
c
=
((
u
int32_
t
)(
*
inputptr
++
))
<<
24
;
for
(
i
=
8
;
i
!=
0
;
i
--
)
{
for
(
i
=
8
;
i
!=
0
;
i
--
)
{
if
((
1U
<<
31
)
&
(
c
^
crc
))
if
((
1U
<<
31
)
&
(
c
^
crc
))
...
@@ -92,14 +90,14 @@ unsigned int crcbit (unsigned char * inputptr,
...
@@ -92,14 +90,14 @@ unsigned int crcbit (unsigned char * inputptr,
crc table initialization
crc table initialization
*********************************************************/
*********************************************************/
static
u
nsigned
int
crc24aTable
[
256
];
static
u
int32_t
crc24aTable
[
256
];
static
u
nsigned
int
crc24bTable
[
256
];
static
u
int32_t
crc24bTable
[
256
];
static
u
nsigned
int
crc24cTable
[
256
];
static
u
int32_t
crc24cTable
[
256
];
static
u
nsigned
in
t
crc16Table
[
256
];
static
u
int32_
t
crc16Table
[
256
];
static
u
nsigned
in
t
crc12Table
[
256
];
static
u
int32_
t
crc12Table
[
256
];
static
u
nsigned
in
t
crc11Table
[
256
];
static
u
int32_
t
crc11Table
[
256
];
static
u
nsigned
in
t
crc8Table
[
256
];
static
u
int32_
t
crc8Table
[
256
];
static
u
nsigned
in
t
crc6Table
[
256
];
static
u
int32_
t
crc6Table
[
256
];
#if USE_INTEL_CRC
#if USE_INTEL_CRC
static
DECLARE_ALIGNED
(
struct
crc_pclmulqdq_ctx
lte_crc24a_pclmulqdq
,
16
)
=
{
static
DECLARE_ALIGNED
(
struct
crc_pclmulqdq_ctx
lte_crc24a_pclmulqdq
,
16
)
=
{
...
@@ -151,14 +149,13 @@ assuming initial byte is 0 padded (in MSB) if necessary
...
@@ -151,14 +149,13 @@ assuming initial byte is 0 padded (in MSB) if necessary
can use SIMD optimized Intel CRC for LTE/NR 24a/24b variants
can use SIMD optimized Intel CRC for LTE/NR 24a/24b variants
*********************************************************/
*********************************************************/
unsigned
int
crc24a
(
unsigned
char
*
inptr
,
uint32_t
crc24a
(
unsigned
char
*
inptr
,
int
bitlen
)
int
bitlen
)
{
{
int
octetlen
=
bitlen
/
8
;
/* Change in octets */
int
octetlen
=
bitlen
/
8
;
/* Change in octets */
if
(
bitlen
%
8
||
!
USE_INTEL_CRC
)
{
if
(
bitlen
%
8
||
!
USE_INTEL_CRC
)
{
unsigned
int
crc
=
0
;
uint32_t
crc
=
0
;
int
resbit
=
(
bitlen
%
8
);
int
resbit
=
(
bitlen
%
8
);
while
(
octetlen
--
>
0
)
{
while
(
octetlen
--
>
0
)
{
// printf("crc24a: in %x => crc %x\n",crc,*inptr);
// printf("crc24a: in %x => crc %x\n",crc,*inptr);
...
@@ -188,13 +185,12 @@ static DECLARE_ALIGNED(struct crc_pclmulqdq_ctx lte_crc24b_pclmulqdq, 16) = {
...
@@ -188,13 +185,12 @@ static DECLARE_ALIGNED(struct crc_pclmulqdq_ctx lte_crc24b_pclmulqdq, 16) = {
0ULL
/**< res */
0ULL
/**< res */
};
};
#endif
#endif
unsigned
int
crc24b
(
unsigned
char
*
inptr
,
uint32_t
crc24b
(
unsigned
char
*
inptr
,
int
bitlen
)
int
bitlen
)
{
{
int
octetlen
=
bitlen
/
8
;
/* Change in octets */
int
octetlen
=
bitlen
/
8
;
/* Change in octets */
if
(
bitlen
%
8
||
!
USE_INTEL_CRC
)
{
if
(
bitlen
%
8
||
!
USE_INTEL_CRC
)
{
unsigned
in
t
crc
=
0
;
uint32_
t
crc
=
0
;
int
resbit
=
(
bitlen
%
8
);
int
resbit
=
(
bitlen
%
8
);
while
(
octetlen
--
>
0
)
{
while
(
octetlen
--
>
0
)
{
...
@@ -215,11 +211,10 @@ unsigned int crc24b (unsigned char * inptr,
...
@@ -215,11 +211,10 @@ unsigned int crc24b (unsigned char * inptr,
#endif
#endif
}
}
unsigned
int
crc24c
(
unsigned
char
*
inptr
,
uint32_t
crc24c
(
unsigned
char
*
inptr
,
int
bitlen
)
int
bitlen
)
{
{
int
octetlen
,
resbit
;
int
octetlen
,
resbit
;
u
nsigned
in
t
crc
=
0
;
u
int32_
t
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
resbit
=
(
bitlen
%
8
);
...
@@ -234,11 +229,10 @@ unsigned int crc24c (unsigned char * inptr,
...
@@ -234,11 +229,10 @@ unsigned int crc24c (unsigned char * inptr,
return
crc
;
return
crc
;
}
}
unsigned
int
uint32_t
crc16
(
unsigned
char
*
inptr
,
int
bitlen
)
crc16
(
unsigned
char
*
inptr
,
int
bitlen
)
{
{
int
octetlen
,
resbit
;
int
octetlen
,
resbit
;
u
nsigned
int
crc
=
0
;
u
int32_t
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
resbit
=
(
bitlen
%
8
);
...
@@ -253,11 +247,10 @@ crc16 (unsigned char * inptr, int bitlen)
...
@@ -253,11 +247,10 @@ crc16 (unsigned char * inptr, int bitlen)
return
crc
;
return
crc
;
}
}
unsigned
int
uint32_t
crc12
(
unsigned
char
*
inptr
,
int
bitlen
)
crc12
(
unsigned
char
*
inptr
,
int
bitlen
)
{
{
int
octetlen
,
resbit
;
int
octetlen
,
resbit
;
u
nsigned
int
crc
=
0
;
u
int32_t
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
resbit
=
(
bitlen
%
8
);
...
@@ -271,11 +264,10 @@ crc12 (unsigned char * inptr, int bitlen)
...
@@ -271,11 +264,10 @@ crc12 (unsigned char * inptr, int bitlen)
return
crc
;
return
crc
;
}
}
unsigned
int
uint32_t
crc11
(
unsigned
char
*
inptr
,
int
bitlen
)
crc11
(
unsigned
char
*
inptr
,
int
bitlen
)
{
{
int
octetlen
,
resbit
;
int
octetlen
,
resbit
;
u
nsigned
int
crc
=
0
;
u
int32_t
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
resbit
=
(
bitlen
%
8
);
...
@@ -289,29 +281,27 @@ crc11 (unsigned char * inptr, int bitlen)
...
@@ -289,29 +281,27 @@ crc11 (unsigned char * inptr, int bitlen)
return
crc
;
return
crc
;
}
}
unsigned
int
uint32_t
crc8
(
unsigned
char
*
inptr
,
int
bitlen
)
crc8
(
unsigned
char
*
inptr
,
int
bitlen
)
{
{
int
octetlen
,
resbit
;
int
octetlen
,
resbit
;
u
nsigned
int
crc
=
0
;
u
int32_t
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
resbit
=
(
bitlen
%
8
);
while
(
octetlen
--
>
0
)
{
while
(
octetlen
--
>
0
)
{
crc
=
((
u
nsigned
in
t
)
crc8Table
[(
*
inptr
++
)
^
(
crc
>>
24
)])
<<
24
;
crc
=
((
u
int32_
t
)
crc8Table
[(
*
inptr
++
)
^
(
crc
>>
24
)])
<<
24
;
}
}
if
(
resbit
>
0
)
if
(
resbit
>
0
)
crc
=
(
crc
<<
resbit
)
^
((
u
nsigned
in
t
)(
crc8Table
[((
*
inptr
)
>>
(
8
-
resbit
))
^
(
crc
>>
(
32
-
resbit
))])
<<
24
);
crc
=
(
crc
<<
resbit
)
^
((
u
int32_
t
)(
crc8Table
[((
*
inptr
)
>>
(
8
-
resbit
))
^
(
crc
>>
(
32
-
resbit
))])
<<
24
);
return
crc
;
return
crc
;
}
}
unsigned
int
uint32_t
crc6
(
unsigned
char
*
inptr
,
int
bitlen
)
crc6
(
unsigned
char
*
inptr
,
int
bitlen
)
{
{
int
octetlen
,
resbit
;
int
octetlen
,
resbit
;
u
nsigned
int
crc
=
0
;
u
int32_t
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
resbit
=
(
bitlen
%
8
);
...
...
openair1/PHY/INIT/nr_init.c
View file @
b735f8be
...
@@ -753,7 +753,9 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
...
@@ -753,7 +753,9 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
const
int
Prx
=
gNB
->
gNB_config
.
carrier_config
.
num_rx_ant
.
value
;
const
int
Prx
=
gNB
->
gNB_config
.
carrier_config
.
num_rx_ant
.
value
;
const
int
max_ul_mimo_layers
=
4
;
// taken from phy_init_nr_gNB()
const
int
max_ul_mimo_layers
=
4
;
// taken from phy_init_nr_gNB()
const
int
n_buf
=
Prx
*
max_ul_mimo_layers
;
const
int
n_buf
=
Prx
*
max_ul_mimo_layers
;
PHY_MEASUREMENTS_gNB
*
meas
=&
gNB
->
measurements
;
free_and_zero
(
meas
->
n0_subband_power
);
free_and_zero
(
meas
->
n0_subband_power_dB
);
int
max_dl_mimo_layers
=
(
fp
->
nb_antennas_tx
<
NR_MAX_NB_LAYERS
)
?
fp
->
nb_antennas_tx
:
NR_MAX_NB_LAYERS
;
int
max_dl_mimo_layers
=
(
fp
->
nb_antennas_tx
<
NR_MAX_NB_LAYERS
)
?
fp
->
nb_antennas_tx
:
NR_MAX_NB_LAYERS
;
if
(
fp
->
nb_antennas_tx
>
1
)
{
if
(
fp
->
nb_antennas_tx
>
1
)
{
for
(
int
nl
=
0
;
nl
<
max_dl_mimo_layers
;
nl
++
)
{
for
(
int
nl
=
0
;
nl
<
max_dl_mimo_layers
;
nl
++
)
{
...
...
openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
View file @
b735f8be
...
@@ -1024,7 +1024,7 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
...
@@ -1024,7 +1024,7 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
#elif defined(__arm__) || defined(__aarch64__)
#elif defined(__arm__) || defined(__aarch64__)
int16x8_t
*
dl_ch0_128
,
*
dl_ch1_128
;
int16x8_t
*
dl_ch0_128
,
*
dl_ch1_128
;
#endif
#endif
int
*
dl_ch0
,
*
dl_ch1
;
int
*
dl_ch0
=
NULL
,
*
dl_ch1
=
NULL
;
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
ue
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
ue
->
frame_parms
;
int
nb_subbands
,
subband_size
,
last_subband_size
;
int
nb_subbands
,
subband_size
,
last_subband_size
;
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools_common.c
View file @
b735f8be
...
@@ -352,7 +352,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
...
@@ -352,7 +352,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
if
(
ra_header
==
0
)
{
if
(
ra_header
==
0
)
{
for
(
i
=
16
;
i
>
0
;
i
--
)
{
for
(
i
=
16
;
i
>
0
;
i
--
)
{
if
((
rb_alloc
&
(
1
<<
i
))
!=
0
)
if
((
rb_alloc
&
(
1
<<
i
))
!=
0
)
rb_alloc2
[(
3
*
(
16
-
i
))
>>
5
]
|=
(
7U
<<
((
3
*
(
16
-
i
))
%
32
));
rb_alloc2
[(
3
*
(
16
-
i
))
>>
5
]
|=
(
7U
<<
((
3
*
(
16
-
i
))
%
32
));
}
}
...
@@ -361,7 +361,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
...
@@ -361,7 +361,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
rb_alloc2
[
1
]
|=
1
;
rb_alloc2
[
1
]
|=
1
;
if
((
rb_alloc
&
1
)
!=
0
)
if
((
rb_alloc
&
1
)
!=
0
)
rb_alloc2
[
1
]
|=
(
3
<<
16
);
rb_alloc2
[
1
]
|=
(
3
<<
16
);
}
}
else
{
else
{
LOG_W
(
PHY
,
"resource type 1 not supported for N_RB_DL=50
\n
"
);
LOG_W
(
PHY
,
"resource type 1 not supported for N_RB_DL=50
\n
"
);
...
@@ -371,7 +371,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
...
@@ -371,7 +371,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
case
100
:
case
100
:
if
(
ra_header
==
0
)
{
if
(
ra_header
==
0
)
{
for
(
i
=
0
;
i
<
25
;
i
++
)
{
for
(
i
=
0
;
i
<
25
;
i
++
)
{
if
((
rb_alloc
&
(
1
<<
(
24
-
i
)))
!=
0
)
if
((
rb_alloc
&
(
1
<<
(
24
-
i
)))
!=
0
)
rb_alloc2
[(
4
*
i
)
>>
5
]
|=
(
0xfU
<<
((
4
*
i
)
%
32
));
rb_alloc2
[(
4
*
i
)
>>
5
]
|=
(
0xfU
<<
((
4
*
i
)
%
32
));
// printf("rb_alloc2[%d] (type 0) %x (%d)\n",(4*i)>>5,rb_alloc2[(4*i)>>5],rb_alloc&(1<<i));
// printf("rb_alloc2[%d] (type 0) %x (%d)\n",(4*i)>>5,rb_alloc2[(4*i)>>5],rb_alloc&(1<<i));
...
@@ -960,8 +960,8 @@ uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t
...
@@ -960,8 +960,8 @@ uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t
case
2
:
case
2
:
if
((
subframe
!=
2
)
&&
(
subframe
!=
7
))
{
if
((
subframe
!=
2
)
&&
(
subframe
!=
7
))
{
LOG_E
(
PHY
,
"subframe2_harq_pid, Illegal subframe %d for TDD mode %d
\n
"
,
subframe
,
frame_parms
->
tdd_config
);
LOG_E
(
PHY
,
"subframe2_harq_pid, Illegal subframe %d for TDD mode %d
\n
"
,
subframe
,
frame_parms
->
tdd_config
);
ret
=
255
;
ret
=
255
;
}
}
else
ret
=
(
subframe
/
7
);
else
ret
=
(
subframe
/
7
);
break
;
break
;
...
@@ -996,8 +996,7 @@ uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t
...
@@ -996,8 +996,7 @@ uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t
}
}
}
}
AssertFatal
(
ret
!=
255
,
AssertFatal
(
ret
!=
255
,
"invalid harq_pid(%d) at SFN/SF = %d/%d
\n
"
,
(
int8_t
)
ret
,
frame
,
subframe
);
"invalid harq_pid(%d) at SFN/SF = %d/%d
\n
"
,
(
int8_t
)
ret
,
frame
,
subframe
);
return
ret
;
return
ret
;
}
}
...
...
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
View file @
b735f8be
...
@@ -4706,11 +4706,8 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
...
@@ -4706,11 +4706,8 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
}
}
if
(
rb_alloc_ind
==
1
)
{
if
(
rb_alloc_ind
==
1
)
{
int
tmp
=
(
rb
>>
2
)
<<
1
;
uint32_t
tmp
=
(
rb
>>
2
)
<<
1
;
if
(
tmp
>=
16
)
*
pmi_ext
=
tmp
>=
16
?
0
:
(
pmi
>>
tmp
)
&
3
;
*
pmi_ext
=
0
;
else
*
pmi_ext
=
(
pmi
>>
tmp
)
&
3
;
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int
));
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int
));
/*
/*
...
...
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
View file @
b735f8be
...
@@ -150,13 +150,15 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
...
@@ -150,13 +150,15 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
unsigned
int
,
unsigned
int
,
gNB
->
measurements
.
n0_subband_power
,
gNB
->
measurements
.
n0_subband_power
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
N_RB_UL
);
frame_parms
->
N_RB_UL
,
false
);
clearArray
(
gNB
->
measurements
.
n0_subband_power
,
unsigned
int
);
clearArray
(
gNB
->
measurements
.
n0_subband_power
,
unsigned
int
);
allocCast2D
(
n0_subband_power_dB
,
allocCast2D
(
n0_subband_power_dB
,
unsigned
int
,
unsigned
int
,
gNB
->
measurements
.
n0_subband_power_dB
,
gNB
->
measurements
.
n0_subband_power_dB
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
N_RB_UL
);
frame_parms
->
N_RB_UL
,
false
);
for
(
int
s
=
first_symb
;
s
<
(
first_symb
+
num_symb
);
s
++
)
{
for
(
int
s
=
first_symb
;
s
<
(
first_symb
+
num_symb
);
s
++
)
{
int
offset0
=
((
slot
&
3
)
*
frame_parms
->
symbols_per_slot
+
s
)
*
frame_parms
->
ofdm_symbol_size
;
int
offset0
=
((
slot
&
3
)
*
frame_parms
->
symbols_per_slot
+
s
)
*
frame_parms
->
ofdm_symbol_size
;
...
@@ -233,31 +235,26 @@ void nr_gnb_measurements(PHY_VARS_gNB *gNB,
...
@@ -233,31 +235,26 @@ void nr_gnb_measurements(PHY_VARS_gNB *gNB,
PHY_MEASUREMENTS_gNB
*
meas
=
&
gNB
->
measurements
;
PHY_MEASUREMENTS_gNB
*
meas
=
&
gNB
->
measurements
;
NR_DL_FRAME_PARMS
*
fp
=
&
gNB
->
frame_parms
;
NR_DL_FRAME_PARMS
*
fp
=
&
gNB
->
frame_parms
;
int
ch_offset
=
fp
->
ofdm_symbol_size
*
symbol
;
int
ch_offset
=
fp
->
ofdm_symbol_size
*
symbol
;
int
N_RB_UL
=
ulsch
->
harq_process
->
ulsch_pdu
.
rb_size
;
ulsch_measurements_gNB
*
ulsch_measurements
=
&
ulsch
->
ulsch_measurements
;
int
N_RB_UL
=
gNB
->
ulsch
->
harq_processes
->
ulsch_pdu
.
rb_size
;
int
rx_power
[
fp
->
nb_antennas_rx
];
int
rx_power
[
NUMBER_OF_NR_ULSCH_MAX
][
fp
->
nb_antennas_rx
];
allocCast2D
(
rx_spatial_power
,
int
,
ulsch_measurements
->
rx_spatial_power
,
nrOfLayers
,
fp
->
nb_antennas_rx
,
true
);
rx_power_tot
[
ulsch_id
]
=
0
;
allocCast2D
(
rx_spatial_power_dB
,
unsigned
short
,
ulsch_measurements
->
rx_spatial_power_dB
,
nrOfLayers
,
fp
->
nb_antennas_rx
,
true
);
allocCast3D
(
rx_spatial_power
,
int
,
meas
->
rx_spatial_power
,
NUMBER_OF_NR_ULSCH_MAX
,
nrOfLayers
,
fp
->
nb_antennas_rx
);
allocCast3D
(
rx_spatial_power_dB
,
unsigned
short
,
meas
->
rx_spatial_power_dB
,
NUMBER_OF_NR_ULSCH_MAX
,
nrOfLayers
,
fp
->
nb_antennas_rx
);
for
(
int
aarx
=
0
;
aarx
<
fp
->
nb_antennas_rx
;
aarx
++
){
for
(
int
aarx
=
0
;
aarx
<
fp
->
nb_antennas_rx
;
aarx
++
){
rx_power
[
aarx
]
=
0
;
rx_power
[
aarx
]
=
0
;
for
(
int
aatx
=
0
;
aatx
<
nrOfLayers
;
aatx
++
){
for
(
int
aatx
=
0
;
aatx
<
nrOfLayers
;
aatx
++
){
rx_spatial_power
[
ulsch_id
][
aatx
][
aarx
]
=
rx_spatial_power
[
aatx
][
aarx
]
=
(
signal_energy_nodc
(
&
gNB
->
pusch_vars
[
ulsch_id
]
->
ul_ch_estimates
[
aatx
*
fp
->
nb_antennas_rx
+
aarx
][
ch_offset
],
(
signal_energy_nodc
(
&
pusch_vars
->
ul_ch_estimates
[
aatx
*
fp
->
nb_antennas_rx
+
aarx
][
ch_offset
],
N_RB_UL
*
NR_NB_SC_PER_RB
));
N_RB_UL
*
NR_NB_SC_PER_RB
));
if
(
rx_spatial_power
[
ulsch_id
][
aatx
][
aarx
]
<
0
)
{
if
(
rx_spatial_power
[
aatx
][
aarx
]
<
0
)
{
rx_spatial_power
[
ulsch_id
][
aatx
][
aarx
]
=
0
;
rx_spatial_power
[
aatx
][
aarx
]
=
0
;
}
}
rx_spatial_power_dB
[
ulsch_id
][
aatx
][
aarx
]
=
(
unsigned
short
)
dB_fixed
(
rx_spatial_power
[
ulsch_id
]
[
aatx
][
aarx
]);
rx_spatial_power_dB
[
aatx
][
aarx
]
=
(
unsigned
short
)
dB_fixed
(
rx_spatial_power
[
aatx
][
aarx
]);
rx_power
[
ulsch_id
][
aarx
]
+=
rx_spatial_power
[
ulsch_id
]
[
aatx
][
aarx
];
rx_power
[
aarx
]
+=
rx_spatial_power
[
aatx
][
aarx
];
}
}
LOG_D
(
PHY
,
"[RNTI %04x] RX power in antenna %d = %d
\n
"
,
ulsch
->
rnti
,
aarx
,
rx_power
[
aarx
]);
LOG_D
(
PHY
,
"[RNTI %04x] RX power in antenna %d = %d
\n
"
,
ulsch
->
rnti
,
aarx
,
rx_power
[
aarx
]);
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
View file @
b735f8be
...
@@ -88,8 +88,7 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB, int frame, int slot, nfapi_nr_pusch_pdu_t
...
@@ -88,8 +88,7 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB, int frame, int slot, nfapi_nr_pusch_pdu_t
harq
->
round
++
;
harq
->
round
++
;
memcpy
(
&
ulsch
->
harq_process
->
ulsch_pdu
,
ulsch_pdu
,
sizeof
(
ulsch
->
harq_process
->
ulsch_pdu
));
memcpy
(
&
ulsch
->
harq_process
->
ulsch_pdu
,
ulsch_pdu
,
sizeof
(
ulsch
->
harq_process
->
ulsch_pdu
));
LOG_D
(
PHY
,
"Initializing nFAPI for ULSCH, harq_pid %d, layers %d
\n
"
,
harq_pid
,
ulsch_pdu
->
nrOfLayers
);
LOG_D
(
PHY
,
"Initializing nFAPI for ULSCH, harq_pid %d
\n
"
,
harq_pid
);
}
}
void
reset_active_ulsch
(
PHY_VARS_gNB
*
gNB
,
int
frame
)
void
reset_active_ulsch
(
PHY_VARS_gNB
*
gNB
,
int
frame
)
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
View file @
b735f8be
...
@@ -93,7 +93,7 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
...
@@ -93,7 +93,7 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
}
}
uint32_t
ulsch_bytes
=
a_segments
*
1056
;
// allocated bytes per segment
uint32_t
ulsch_bytes
=
a_segments
*
1056
;
// allocated bytes per segment
NR_gNB_ULSCH_t
ulsch
;
NR_gNB_ULSCH_t
ulsch
=
{
0
}
;
ulsch
.
max_ldpc_iterations
=
max_ldpc_iterations
;
ulsch
.
max_ldpc_iterations
=
max_ldpc_iterations
;
ulsch
.
harq_pid
=
-
1
;
ulsch
.
harq_pid
=
-
1
;
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
View file @
b735f8be
...
@@ -1909,7 +1909,8 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
...
@@ -1909,7 +1909,8 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
unsigned
int
,
unsigned
int
,
gNB
->
measurements
.
n0_subband_power
,
gNB
->
measurements
.
n0_subband_power
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
N_RB_UL
);
frame_parms
->
N_RB_UL
,
false
);
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
if
(
symbol
==
rel15_ul
->
start_symbol_index
)
{
if
(
symbol
==
rel15_ul
->
start_symbol_index
)
{
pusch_vars
->
ulsch_power
[
aarx
]
=
0
;
pusch_vars
->
ulsch_power
[
aarx
]
=
0
;
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
View file @
b735f8be
...
@@ -92,14 +92,16 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue,
...
@@ -92,14 +92,16 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue,
int
,
int
,
ue
->
measurements
.
rx_spatial_power
,
ue
->
measurements
.
rx_spatial_power
,
NUMBER_OF_CONNECTED_gNB_MAX
,
NUMBER_OF_CONNECTED_gNB_MAX
,
frame_parms
->
nb_antenna_ports_gNB
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
nb_antennas_rx
,
f
rame_parms
->
nb_antenna_ports_gNB
);
f
alse
);
allocCast3D
(
rx_spatial_power_dB
,
allocCast3D
(
rx_spatial_power_dB
,
unsigned
short
,
unsigned
short
,
ue
->
measurements
.
rx_spatial_power_dB
,
ue
->
measurements
.
rx_spatial_power_dB
,
NUMBER_OF_CONNECTED_gNB_MAX
,
NUMBER_OF_CONNECTED_gNB_MAX
,
frame_parms
->
nb_antenna_ports_gNB
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
nb_antennas_rx
,
f
rame_parms
->
nb_antenna_ports_gNB
);
f
alse
);
// signal measurements
// signal measurements
for
(
gNB_id
=
0
;
gNB_id
<
ue
->
n_connected_gNB
;
gNB_id
++
){
for
(
gNB_id
=
0
;
gNB_id
<
ue
->
n_connected_gNB
;
gNB_id
++
){
...
@@ -111,7 +113,8 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue,
...
@@ -111,7 +113,8 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue,
ue
->
measurements
.
rx_power
[
gNB_id
][
aarx
]
=
0
;
ue
->
measurements
.
rx_power
[
gNB_id
][
aarx
]
=
0
;
for
(
aatx
=
0
;
aatx
<
frame_parms
->
nb_antenna_ports_gNB
;
aatx
++
){
for
(
aatx
=
0
;
aatx
<
frame_parms
->
nb_antenna_ports_gNB
;
aatx
++
){
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]
=
(
signal_energy_nodc
(
&
dl_ch_estimates
[
gNB_id
][
ch_offset
],
N_RB_DL
*
NR_NB_SC_PER_RB
));
const
int
z
=
signal_energy_nodc
(
&
dl_ch_estimates
[
gNB_id
][
ch_offset
],
N_RB_DL
*
NR_NB_SC_PER_RB
);
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]
=
z
;
if
(
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]
<
0
)
if
(
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]
<
0
)
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]
=
0
;
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]
=
0
;
...
...
openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
View file @
b735f8be
...
@@ -403,7 +403,7 @@ int generate_srs_nr(nfapi_nr_srs_pdu_t *srs_config_pdu,
...
@@ -403,7 +403,7 @@ int generate_srs_nr(nfapi_nr_srs_pdu_t *srs_config_pdu,
LOG_I
(
NR_PHY
,
"(%d)
\t
%i
\t
%i
\n
"
,
subcarrier_log
,
(
int16_t
)(
r_real_amp
&
0xFFFF
),
(
int16_t
)(
r_imag_amp
&
0xFFFF
));
LOG_I
(
NR_PHY
,
"(%d)
\t
%i
\t
%i
\n
"
,
subcarrier_log
,
(
int16_t
)(
r_real_amp
&
0xFFFF
),
(
int16_t
)(
r_imag_amp
&
0xFFFF
));
#endif
#endif
txdataF
[
p_index
][
symbol_offset
+
l_line_offset
+
subcarrier
]
=
(
r_real_amp
&
0xFFFF
)
+
((
r_imag_amp
<<
16
)
&
0xFFFF0000
)
;
*
(
c16_t
*
)
&
txdataF
[
p_index
][
symbol_offset
+
l_line_offset
+
subcarrier
]
=
(
c16_t
){
r_real_amp
,
r_imag_amp
}
;
// Subcarrier increment
// Subcarrier increment
subcarrier
+=
K_TC
;
subcarrier
+=
K_TC
;
...
...
openair1/PHY/TOOLS/tools_defs.h
View file @
b735f8be
...
@@ -100,6 +100,7 @@ extern "C" {
...
@@ -100,6 +100,7 @@ extern "C" {
int
dim2
;
int
dim2
;
int
dim3
;
int
dim3
;
int
dim4
;
int
dim4
;
uint8_t
data
[];
}
fourDimArray_t
;
}
fourDimArray_t
;
static
inline
fourDimArray_t
*
allocateFourDimArray
(
int
elmtSz
,
int
dim1
,
int
dim2
,
int
dim3
,
int
dim4
)
static
inline
fourDimArray_t
*
allocateFourDimArray
(
int
elmtSz
,
int
dim1
,
int
dim2
,
int
dim3
,
int
dim4
)
...
@@ -115,49 +116,55 @@ extern "C" {
...
@@ -115,49 +116,55 @@ extern "C" {
sz
*=
dim4
;
sz
*=
dim4
;
}
}
}
}
fourDimArray_t
*
tmp
=
(
fourDimArray_t
*
)
malloc16
(
sizeof
(
*
tmp
)
+
sz
);
fourDimArray_t
*
tmp
=
(
fourDimArray_t
*
)
malloc16
_clear
(
sizeof
(
*
tmp
)
+
sz
);
AssertFatal
(
tmp
,
"no more memory
\n
"
);
AssertFatal
(
tmp
,
"no more memory
\n
"
);
*
tmp
=
(
fourDimArray_t
){
dim1
,
dim2
,
dim3
,
dim4
};
*
tmp
=
(
fourDimArray_t
){
dim1
,
dim2
,
dim3
,
dim4
};
return
tmp
;
return
tmp
;
}
}
#define CheckArrAllocated(workingVar, elementType, ArraY, diM1, diM2, diM3, diM4
)
\
#define CheckArrAllocated(workingVar, elementType, ArraY, diM1, diM2, diM3, diM4
, resizeAllowed)
\
if (!(ArraY)) \
if (!(ArraY)) \
ArraY = allocateFourDimArray(sizeof(elementType), diM1, diM2, diM3, diM4); \
ArraY = allocateFourDimArray(sizeof(elementType), diM1, diM2, diM3, diM4); \
else { \
else { \
if ((resizeAllowed) \
&& ((diM1) != (ArraY)->dim1 || (diM2) != (ArraY)->dim2 || (diM3) != (ArraY)->dim3 || (diM4) != (ArraY)->dim4)) { \
LOG_I(PHY, "resizing %s to %d/%d/%d/%d\n", #ArraY, (diM1), (diM2), (diM3), (diM4)); \
free(ArraY); \
ArraY = allocateFourDimArray(sizeof(elementType), diM1, diM2, diM3, diM4); \
} else \
DevAssert((diM1) == (ArraY)->dim1 && (diM2) == (ArraY)->dim2 && (diM3) == (ArraY)->dim3 && (diM4) == (ArraY)->dim4); \
DevAssert((diM1) == (ArraY)->dim1 && (diM2) == (ArraY)->dim2 && (diM3) == (ArraY)->dim3 && (diM4) == (ArraY)->dim4); \
}
}
#define cast1Darray(workingVar, elementType, ArraY) elementType *workingVar = (elementType *)((ArraY)
+ 1
);
#define cast1Darray(workingVar, elementType, ArraY) elementType *workingVar = (elementType *)((ArraY)
->data
);
#define allocCast1D(workingVar, elementType, ArraY, dim1) \
#define allocCast1D(workingVar, elementType, ArraY, dim1
, resizeAllowed
) \
CheckArrAllocated(workingVar, elementType, ArraY, dim1, 0, 0, 0); \
CheckArrAllocated(workingVar, elementType, ArraY, dim1, 0, 0, 0
, resizeAllowed
); \
cast1Darray(workingVar, elementType, ArraY);
cast1Darray(workingVar, elementType, ArraY);
#define cast2Darray(workingVar, elementType, ArraY) \
#define cast2Darray(workingVar, elementType, ArraY) \
elementType(*workingVar)[(ArraY)->dim2] = (elementType(*)[(ArraY)->dim2])((ArraY)
+ 1
);
elementType(*workingVar)[(ArraY)->dim2] = (elementType(*)[(ArraY)->dim2])((ArraY)
->data
);
#define allocCast2D(workingVar, elementType, ArraY, dim1, dim2) \
#define allocCast2D(workingVar, elementType, ArraY, dim1, dim2
, resizeAllowed
) \
CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, 0, 0); \
CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, 0, 0
, resizeAllowed
); \
cast2Darray(workingVar, elementType, ArraY);
cast2Darray(workingVar, elementType, ArraY);
#define cast3Darray(workingVar, elementType, ArraY) \
#define cast3Darray(workingVar, elementType, ArraY) \
elementType(*workingVar)[(ArraY)->dim2][(ArraY)->dim3] = (elementType(*)[(ArraY)->dim2][(ArraY)->dim3])((ArraY)
+ 1
);
elementType(*workingVar)[(ArraY)->dim2][(ArraY)->dim3] = (elementType(*)[(ArraY)->dim2][(ArraY)->dim3])((ArraY)
->data
);
#define allocCast3D(workingVar, elementType, ArraY, dim1, dim2, dim3) \
#define allocCast3D(workingVar, elementType, ArraY, dim1, dim2, dim3
, resizeAllowed
) \
CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, 0); \
CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, 0
, resizeAllowed
); \
cast3Darray(workingVar, elementType, ArraY);
cast3Darray(workingVar, elementType, ArraY);
#define cast4Darray(workingVar, elementType, ArraY) \
#define cast4Darray(workingVar, elementType, ArraY) \
elementType(*workingVar)[(ArraY)->dim2][(ArraY)->dim3][(ArraY)->dim4] = \
elementType(*workingVar)[(ArraY)->dim2][(ArraY)->dim3][(ArraY)->dim4] = \
(elementType(*)[(ArraY)->dim2][(ArraY)->dim3][(ArraY)->dim4])((ArraY)
+ 1
);
(elementType(*)[(ArraY)->dim2][(ArraY)->dim3][(ArraY)->dim4])((ArraY)
->data
);
#define allocCast4D(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4) \
#define allocCast4D(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4
, resizeAllowed
) \
CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4); \
CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4
, resizeAllowed
); \
cast4Darray(workingVar, elementType, ArraY);
cast4Darray(workingVar, elementType, ArraY);
#define clearArray(ArraY, elementType) \
#define clearArray(ArraY, elementType) \
memset((ArraY)
+ 1
, \
memset((ArraY)
->data
, \
0, \
0, \
sizeof(elementType) * (ArraY)->dim1 * max((ArraY)->dim2, 1) * max((ArraY)->dim3, 1) * max((ArraY)->dim4, 1))
sizeof(elementType) * (ArraY)->dim1 * max((ArraY)->dim2, 1) * max((ArraY)->dim3, 1) * max((ArraY)->dim4, 1))
...
...
openair1/PHY/defs_gNB.h
View file @
b735f8be
...
@@ -229,9 +229,9 @@ typedef struct {
...
@@ -229,9 +229,9 @@ typedef struct {
typedef
struct
{
typedef
struct
{
//! estimated received spatial signal power (linear)
//! estimated received spatial signal power (linear)
unsigned
int
rx_spatial_power
[
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
]
;
fourDimArray_t
*
rx_spatial_power
;
//! estimated received spatial signal power (dB)
//! estimated received spatial signal power (dB)
unsigned
int
rx_spatial_power_dB
[
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
]
;
fourDimArray_t
*
rx_spatial_power_dB
;
//! estimated rssi (dBm)
//! estimated rssi (dBm)
int
rx_rssi_dBm
;
int
rx_rssi_dBm
;
//! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
//! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
b735f8be
...
@@ -631,7 +631,8 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
...
@@ -631,7 +631,8 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
nfapi_nr_srs_pdu_t
*
srs_pdu
=
&
srs
->
srs_pdu
;
nfapi_nr_srs_pdu_t
*
srs_pdu
=
&
srs
->
srs_pdu
;
for
(
int
symbol
=
0
;
symbol
<
(
1
<<
srs_pdu
->
num_symbols
);
symbol
++
)
{
for
(
int
symbol
=
0
;
symbol
<
(
1
<<
srs_pdu
->
num_symbols
);
symbol
++
)
{
for
(
rb
=
srs_pdu
->
bwp_start
;
rb
<
(
srs_pdu
->
bwp_start
+
srs_pdu
->
bwp_size
);
rb
++
)
{
for
(
rb
=
srs_pdu
->
bwp_start
;
rb
<
(
srs_pdu
->
bwp_start
+
srs_pdu
->
bwp_size
);
rb
++
)
{
gNB
->
rb_mask_ul
[
gNB
->
frame_parms
.
symbols_per_slot
-
srs_pdu
->
time_start_position
-
1
+
symbol
][
rb
>>
5
]
|=
1
<<
(
rb
&
31
);
gNB
->
rb_mask_ul
[
gNB
->
frame_parms
.
symbols_per_slot
-
srs_pdu
->
time_start_position
-
1
+
symbol
][
rb
>>
5
]
|=
1U
<<
(
rb
&
31
);
}
}
}
}
}
}
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
b735f8be
This diff is collapsed.
Click to expand it.
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
b735f8be
...
@@ -544,7 +544,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -544,7 +544,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
if
(
!
(
NR_MAX_NB_LAYERS
>
4
))
{
if
(
!
(
NR_MAX_NB_LAYERS
>
4
))
{
NR_UE_DLSCH_t
*
dlsch0
=
&
dlsch
[
0
];
NR_UE_DLSCH_t
*
dlsch0
=
&
dlsch
[
0
];
int
harq_pid
=
dlsch0
->
dlsch_config
.
harq_process_nbr
;
int
harq_pid
=
dlsch0
->
dlsch_config
.
harq_process_nbr
;
NR_DL_UE_HARQ_t
*
dlsch0_harq
=
ue
->
dl_harq_processes
[
harq_pid
];
NR_DL_UE_HARQ_t
*
dlsch0_harq
=
&
ue
->
dl_harq_processes
[
0
]
[
harq_pid
];
uint16_t
BWPStart
=
dlsch0
->
dlsch_config
.
BWPStart
;
uint16_t
BWPStart
=
dlsch0
->
dlsch_config
.
BWPStart
;
uint16_t
pdsch_start_rb
=
dlsch0
->
dlsch_config
.
start_rb
;
uint16_t
pdsch_start_rb
=
dlsch0
->
dlsch_config
.
start_rb
;
uint16_t
pdsch_nb_rb
=
dlsch0
->
dlsch_config
.
number_rbs
;
uint16_t
pdsch_nb_rb
=
dlsch0
->
dlsch_config
.
number_rbs
;
...
...
openair1/SIMULATION/LTE_PHY/ulsim.c
View file @
b735f8be
...
@@ -53,8 +53,7 @@
...
@@ -53,8 +53,7 @@
#include "executables/lte-softmodem.h"
#include "executables/lte-softmodem.h"
#include "common/ran_context.h"
#include "common/ran_context.h"
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
#include "openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h"
#include "openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h"
const
char
*
__asan_default_options
()
const
char
*
__asan_default_options
()
{
{
/* don't do leak checking in ulsim, not finished yet */
/* don't do leak checking in ulsim, not finished yet */
...
@@ -806,7 +805,7 @@ int main(int argc, char **argv) {
...
@@ -806,7 +805,7 @@ int main(int argc, char **argv) {
if
(
cqi_flag
==
1
)
coded_bits_per_codeword
-=
UE
->
ulsch
[
0
]
->
O
;
if
(
cqi_flag
==
1
)
coded_bits_per_codeword
-=
UE
->
ulsch
[
0
]
->
O
;
rate
=
(
double
)
dlsch_tbs25
[
get_I_TBS
(
mcs
)][
nb_rb
-
1
]
/
(
coded_bits_per_codeword
);
rate
=
(
double
)
TBStable
[
get_I_TBS
(
mcs
)][
nb_rb
-
1
]
/
(
coded_bits_per_codeword
);
printf
(
"Rate = %f (mod %d), coded bits %u
\n
"
,
rate
,
get_Qm_ul
(
mcs
),
coded_bits_per_codeword
);
printf
(
"Rate = %f (mod %d), coded bits %u
\n
"
,
rate
,
get_Qm_ul
(
mcs
),
coded_bits_per_codeword
);
for
(
ch_realization
=
0
;
ch_realization
<
n_ch_rlz
;
ch_realization
++
)
{
for
(
ch_realization
=
0
;
ch_realization
<
n_ch_rlz
;
ch_realization
++
)
{
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
b735f8be
...
@@ -831,6 +831,7 @@ int main(int argc, char **argv)
...
@@ -831,6 +831,7 @@ int main(int argc, char **argv)
PHY_vars_UE_g
[
0
][
0
]
=
UE
;
PHY_vars_UE_g
[
0
][
0
]
=
UE
;
memcpy
(
&
UE
->
frame_parms
,
frame_parms
,
sizeof
(
NR_DL_FRAME_PARMS
));
memcpy
(
&
UE
->
frame_parms
,
frame_parms
,
sizeof
(
NR_DL_FRAME_PARMS
));
UE
->
frame_parms
.
nb_antennas_rx
=
n_rx
;
UE
->
frame_parms
.
nb_antennas_rx
=
n_rx
;
UE
->
frame_parms
.
nb_antenna_ports_gNB
=
n_tx
;
UE
->
max_ldpc_iterations
=
max_ldpc_iterations
;
UE
->
max_ldpc_iterations
=
max_ldpc_iterations
;
if
(
run_initial_sync
==
1
)
if
(
run_initial_sync
==
1
)
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
b735f8be
...
@@ -2609,6 +2609,7 @@ uint8_t get_ssb_rsrp_payload(NR_UE_MAC_INST_t *mac,
...
@@ -2609,6 +2609,7 @@ uint8_t get_ssb_rsrp_payload(NR_UE_MAC_INST_t *mac,
int
ssbri_bits
=
ceil
(
log2
(
nb_ssb
));
int
ssbri_bits
=
ceil
(
log2
(
nb_ssb
));
int
ssb_rsrp
[
2
][
nb_meas
];
// the array contains index and RSRP of each SSB to be reported (nb_meas highest RSRPs)
int
ssb_rsrp
[
2
][
nb_meas
];
// the array contains index and RSRP of each SSB to be reported (nb_meas highest RSRPs)
memset
(
ssb_rsrp
,
0
,
sizeof
(
ssb_rsrp
));
//TODO replace the following 2 lines with a function to order the nb_meas highest SSB RSRPs
//TODO replace the following 2 lines with a function to order the nb_meas highest SSB RSRPs
for
(
int
i
=
0
;
i
<
nb_ssb
;
i
++
)
{
for
(
int
i
=
0
;
i
<
nb_ssb
;
i
++
)
{
...
...
openair2/LAYER2/nr_rlc/nr_rlc_pdu.c
View file @
b735f8be
...
@@ -151,7 +151,7 @@ void nr_rlc_pdu_encoder_init(nr_rlc_pdu_encoder_t *encoder,
...
@@ -151,7 +151,7 @@ void nr_rlc_pdu_encoder_init(nr_rlc_pdu_encoder_t *encoder,
{
{
encoder
->
byte
=
0
;
encoder
->
byte
=
0
;
encoder
->
bit
=
0
;
encoder
->
bit
=
0
;
encoder
->
buffer
=
buffer
;
encoder
->
buffer
=
(
unsigned
char
*
)
buffer
;
encoder
->
size
=
size
;
encoder
->
size
=
size
;
}
}
...
...
openair2/LAYER2/nr_rlc/nr_rlc_pdu.h
View file @
b735f8be
...
@@ -71,7 +71,7 @@ int nr_rlc_pdu_decoder_get_bits(nr_rlc_pdu_decoder_t *decoder, int count);
...
@@ -71,7 +71,7 @@ int nr_rlc_pdu_decoder_get_bits(nr_rlc_pdu_decoder_t *decoder, int count);
typedef
struct
{
typedef
struct
{
int
byte
;
/* next byte to encode */
int
byte
;
/* next byte to encode */
int
bit
;
/* next bit in next byte to encode */
int
bit
;
/* next bit in next byte to encode */
char
*
buffer
;
unsigned
char
*
buffer
;
int
size
;
int
size
;
}
nr_rlc_pdu_encoder_t
;
}
nr_rlc_pdu_encoder_t
;
...
...
openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.c
View file @
b735f8be
...
@@ -55,9 +55,11 @@ int encode_fgs_payload_container(FGSPayloadContainer *paycontainer, uint8_t iei,
...
@@ -55,9 +55,11 @@ int encode_fgs_payload_container(FGSPayloadContainer *paycontainer, uint8_t iei,
encoded
+=
encode_result
;
encoded
+=
encode_result
;
}
}
if
(
iei
>
0
){
if
(
iei
>
0
){
*
(
uint16_t
*
)
(
buffer
+
1
)
=
htons
(
encoded
-
3
);
uint16_t
tmp
=
htons
(
encoded
-
3
);
memcpy
(
buffer
+
1
,
&
tmp
,
sizeof
(
tmp
));
}
else
{
}
else
{
*
(
uint16_t
*
)
(
buffer
)
=
htons
(
encoded
-
2
);
uint16_t
tmp
=
htons
(
encoded
-
2
);
memcpy
(
buffer
,
&
tmp
,
sizeof
(
tmp
));
}
}
return
encoded
;
return
encoded
;
...
...
openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c
View file @
b735f8be
...
@@ -35,14 +35,18 @@ void capture_pdu_session_establishment_accept_msg(uint8_t *buffer, uint32_t msg_
...
@@ -35,14 +35,18 @@ void capture_pdu_session_establishment_accept_msg(uint8_t *buffer, uint32_t msg_
pdu_session_establishment_accept_msg_t
psea_msg
;
pdu_session_establishment_accept_msg_t
psea_msg
;
sec_nas_hdr
.
epd
=
*
(
buffer
+
(
offset
++
));
sec_nas_hdr
.
epd
=
*
(
buffer
+
(
offset
++
));
sec_nas_hdr
.
sht
=
*
(
buffer
+
(
offset
++
));
sec_nas_hdr
.
sht
=
*
(
buffer
+
(
offset
++
));
sec_nas_hdr
.
mac
=
htonl
(
*
(
uint32_t
*
)(
buffer
+
offset
));
uint32_t
tmp
;
memcpy
(
&
tmp
,
buffer
+
offset
,
sizeof
(
tmp
));
sec_nas_hdr
.
mac
=
htonl
(
tmp
);
offset
+=
sizeof
(
sec_nas_hdr
.
mac
);
offset
+=
sizeof
(
sec_nas_hdr
.
mac
);
sec_nas_hdr
.
sqn
=
*
(
buffer
+
(
offset
++
));
sec_nas_hdr
.
sqn
=
*
(
buffer
+
(
offset
++
));
sec_nas_msg
.
epd
=
*
(
buffer
+
(
offset
++
));
sec_nas_msg
.
epd
=
*
(
buffer
+
(
offset
++
));
sec_nas_msg
.
sht
=
*
(
buffer
+
(
offset
++
));
sec_nas_msg
.
sht
=
*
(
buffer
+
(
offset
++
));
sec_nas_msg
.
msg_type
=
*
(
buffer
+
(
offset
++
));
sec_nas_msg
.
msg_type
=
*
(
buffer
+
(
offset
++
));
sec_nas_msg
.
payload_type
=
*
(
buffer
+
(
offset
++
));
sec_nas_msg
.
payload_type
=
*
(
buffer
+
(
offset
++
));
sec_nas_msg
.
payload_len
=
htons
(
*
(
uint16_t
*
)(
buffer
+
offset
));
uint16_t
tmp16
;
memcpy
(
&
tmp16
,
buffer
+
offset
,
sizeof
(
tmp16
));
sec_nas_msg
.
payload_len
=
htons
(
tmp16
);
offset
+=
sizeof
(
sec_nas_msg
.
payload_len
);
offset
+=
sizeof
(
sec_nas_msg
.
payload_len
);
/* Mandatory Presence IEs */
/* Mandatory Presence IEs */
psea_msg
.
epd
=
*
(
buffer
+
(
offset
++
));
psea_msg
.
epd
=
*
(
buffer
+
(
offset
++
));
...
@@ -51,12 +55,14 @@ void capture_pdu_session_establishment_accept_msg(uint8_t *buffer, uint32_t msg_
...
@@ -51,12 +55,14 @@ void capture_pdu_session_establishment_accept_msg(uint8_t *buffer, uint32_t msg_
psea_msg
.
msg_type
=
*
(
buffer
+
(
offset
++
));
psea_msg
.
msg_type
=
*
(
buffer
+
(
offset
++
));
psea_msg
.
pdu_type
=
*
(
buffer
+
offset
)
&
0x0f
;
psea_msg
.
pdu_type
=
*
(
buffer
+
offset
)
&
0x0f
;
psea_msg
.
ssc_mode
=
(
*
(
buffer
+
(
offset
++
))
&
0xf0
)
>>
4
;
psea_msg
.
ssc_mode
=
(
*
(
buffer
+
(
offset
++
))
&
0xf0
)
>>
4
;
psea_msg
.
qos_rules
.
length
=
htons
(
*
(
uint16_t
*
)(
buffer
+
offset
));
memcpy
(
&
tmp16
,
buffer
+
offset
,
sizeof
(
tmp16
));
psea_msg
.
qos_rules
.
length
=
htons
(
tmp16
);
offset
+=
sizeof
(
psea_msg
.
qos_rules
.
length
);
offset
+=
sizeof
(
psea_msg
.
qos_rules
.
length
);
/* Supports the capture of only one QoS Rule, it should be changed for multiple QoS Rules */
/* Supports the capture of only one QoS Rule, it should be changed for multiple QoS Rules */
qos_rule_t
qos_rule
;
qos_rule_t
qos_rule
;
qos_rule
.
id
=
*
(
buffer
+
(
offset
++
));
qos_rule
.
id
=
*
(
buffer
+
(
offset
++
));
qos_rule
.
length
=
htons
(
*
(
uint16_t
*
)(
buffer
+
offset
));
memcpy
(
&
tmp16
,
buffer
+
offset
,
sizeof
(
tmp16
));
qos_rule
.
length
=
htons
(
tmp16
);
offset
+=
sizeof
(
qos_rule
.
length
);
offset
+=
sizeof
(
qos_rule
.
length
);
qos_rule
.
oc
=
(
*
(
buffer
+
offset
)
&
0xE0
)
>>
5
;
qos_rule
.
oc
=
(
*
(
buffer
+
offset
)
&
0xE0
)
>>
5
;
qos_rule
.
dqr
=
(
*
(
buffer
+
offset
)
&
0x10
)
>>
4
;
qos_rule
.
dqr
=
(
*
(
buffer
+
offset
)
&
0x10
)
>>
4
;
...
...
openair3/NAS/COMMON/IES/FGCNasMessageContainer.c
View file @
b735f8be
...
@@ -76,7 +76,8 @@ int encode_fgc_nas_message_container(FGCNasMessageContainer *nasmessagecontainer
...
@@ -76,7 +76,8 @@ int encode_fgc_nas_message_container(FGCNasMessageContainer *nasmessagecontainer
if
((
encode_result
=
encode_octet_string
(
&
nasmessagecontainer
->
nasmessagecontainercontents
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
{
if
((
encode_result
=
encode_octet_string
(
&
nasmessagecontainer
->
nasmessagecontainercontents
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
{
return
encode_result
;
return
encode_result
;
}
else
{
}
else
{
*
(
uint16_t
*
)
(
buffer
+
1
)
=
htons
(
encoded
+
encode_result
-
3
);
uint16_t
tmp
=
htons
(
encoded
+
encode_result
-
3
);
memcpy
(
buffer
+
1
,
&
tmp
,
sizeof
(
tmp
));
encoded
+=
encode_result
;
encoded
+=
encode_result
;
}
}
...
...
openair3/NAS/COMMON/IES/FGSMobileIdentity.c
View file @
b735f8be
...
@@ -53,8 +53,9 @@ int decode_5gs_mobile_identity(FGSMobileIdentity *fgsmobileidentity, uint8_t iei
...
@@ -53,8 +53,9 @@ int decode_5gs_mobile_identity(FGSMobileIdentity *fgsmobileidentity, uint8_t iei
CHECK_IEI_DECODER
(
iei
,
*
buffer
);
CHECK_IEI_DECODER
(
iei
,
*
buffer
);
decoded
++
;
decoded
++
;
}
}
uint16_t
tmp
;
ielen
=
*
(
uint16_t
*
)(
buffer
+
decoded
);
/* length is two bytes */
memcpy
(
&
tmp
,
buffer
+
decoded
,
sizeof
(
tmp
));
ielen
=
(
uint8_t
)
tmp
;
decoded
+=
2
;
decoded
+=
2
;
CHECK_LENGTH_DECODER
(
len
-
decoded
,
ielen
);
CHECK_LENGTH_DECODER
(
len
-
decoded
,
ielen
);
...
@@ -106,9 +107,11 @@ int encode_5gs_mobile_identity(FGSMobileIdentity *fgsmobileidentity, uint8_t iei
...
@@ -106,9 +107,11 @@ int encode_5gs_mobile_identity(FGSMobileIdentity *fgsmobileidentity, uint8_t iei
}
}
if
(
iei
>
0
){
if
(
iei
>
0
){
*
(
uint16_t
*
)
(
buffer
+
1
)
=
htons
(
encoded
+
encoded_rc
-
3
);
uint16_t
tmp
=
htons
(
encoded
+
encoded_rc
-
3
);
memcpy
(
buffer
+
1
,
&
tmp
,
sizeof
(
tmp
));
}
else
{
}
else
{
*
(
uint16_t
*
)
buffer
=
htons
(
encoded
+
encoded_rc
-
2
);
uint16_t
tmp
=
htons
(
encoded
+
encoded_rc
-
2
);
memcpy
(
buffer
,
&
tmp
,
sizeof
(
tmp
));
}
}
return
(
encoded
+
encoded_rc
);
return
(
encoded
+
encoded_rc
);
...
...
openair3/NAS/COMMON/UTIL/TLVDecoder.h
View file @
b735f8be
...
@@ -42,7 +42,11 @@
...
@@ -42,7 +42,11 @@
sIZE += sizeof(uint8_t) + sizeof(uint16_t)
sIZE += sizeof(uint8_t) + sizeof(uint16_t)
#define DECODE_U32(bUFFER, vALUE, sIZE) \
#define DECODE_U32(bUFFER, vALUE, sIZE) \
vALUE = ntohl(*(uint32_t*)(bUFFER)); \
{ \
uint32_t v; \
memcpy(&v, bUFFER, sizeof(v)); \
vALUE = ntohl(v); \
} \
sIZE += sizeof(uint32_t)
sIZE += sizeof(uint32_t)
#if (BYTE_ORDER == LITTLE_ENDIAN)
#if (BYTE_ORDER == LITTLE_ENDIAN)
...
...
openair3/NAS/COMMON/UTIL/TLVEncoder.h
View file @
b735f8be
...
@@ -37,7 +37,10 @@
...
@@ -37,7 +37,10 @@
size += sizeof(uint8_t) + sizeof(uint16_t)
size += sizeof(uint8_t) + sizeof(uint16_t)
#define ENCODE_U32(buffer, value, size) \
#define ENCODE_U32(buffer, value, size) \
*(uint32_t*)(buffer) = htonl(value); \
{ \
uint32_t tmp = htonl(value); \
memcpy(buffer, &tmp, sizeof(tmp)); \
} \
size += sizeof(uint32_t)
size += sizeof(uint32_t)
#define IES_ENCODE_U8(buffer, encoded, value) \
#define IES_ENCODE_U8(buffer, encoded, value) \
...
...
openair3/NAS/NR_UE/nr_nas_msg_sim.c
View file @
b735f8be
...
@@ -883,7 +883,9 @@ uint8_t get_msg_type(uint8_t *pdu_buffer, uint32_t length) {
...
@@ -883,7 +883,9 @@ uint8_t get_msg_type(uint8_t *pdu_buffer, uint32_t length) {
msg_type
=
((
mm_msg_header_t
*
)(
pdu_buffer
+
offset
))
->
message_type
;
msg_type
=
((
mm_msg_header_t
*
)(
pdu_buffer
+
offset
))
->
message_type
;
if
(
msg_type
==
FGS_DOWNLINK_NAS_TRANSPORT
)
{
if
(
msg_type
==
FGS_DOWNLINK_NAS_TRANSPORT
)
{
msg_type
=
((
dl_nas_transport_t
*
)(
pdu_buffer
+
offset
))
->
sm_nas_msg_header
.
message_type
;
dl_nas_transport_t
tmp
;
memcpy
(
&
tmp
,
pdu_buffer
+
offset
,
sizeof
(
tmp
));
msg_type
=
tmp
.
sm_nas_msg_header
.
message_type
;
}
}
}
}
}
else
{
// plain 5GS NAS message
}
else
{
// plain 5GS NAS message
...
...
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