Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
4c6b27f4
Commit
4c6b27f4
authored
Jun 08, 2019
by
wujing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix issue that output hoping not to have mis-match between CRC ind and RX in VNF-PNF mode
parent
67499677
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
344 additions
and
7 deletions
+344
-7
nfapi/oai_integration/nfapi_vnf.c
nfapi/oai_integration/nfapi_vnf.c
+193
-5
openair1/PHY/phy_vars.h
openair1/PHY/phy_vars.h
+1
-0
openair1/SCHED/fapi_l1.c
openair1/SCHED/fapi_l1.c
+3
-1
openair2/PHY_INTERFACE/IF_Module.c
openair2/PHY_INTERFACE/IF_Module.c
+127
-1
openair2/PHY_INTERFACE/IF_Module.h
openair2/PHY_INTERFACE/IF_Module.h
+20
-0
No files found.
nfapi/oai_integration/nfapi_vnf.c
View file @
4c6b27f4
...
...
@@ -42,6 +42,7 @@
#include "common/ran_context.h"
extern
RAN_CONTEXT_t
RC
;
extern
UL_RCC_IND_t
UL_RCC_INFO
;
typedef
struct
{
uint8_t
enabled
;
...
...
@@ -424,6 +425,40 @@ int phy_rach_indication(struct nfapi_vnf_p7_config *config, nfapi_rach_indicatio
struct
PHY_VARS_eNB_s
*
eNB
=
RC
.
eNB
[
0
][
0
];
printf
(
"[VNF] RACH_IND eNB:%p sfn_sf:%d number_of_preambles:%d
\n
"
,
eNB
,
NFAPI_SFNSF2DEC
(
ind
->
sfn_sf
),
ind
->
rach_indication_body
.
number_of_preambles
);
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
int8_t
index
=
-
1
;
for
(
uint8_t
i
=
0
;
i
<
NUM_NFPAI_SUBFRAME
;
i
++
){
if
((
UL_RCC_INFO
.
rach_ind
[
i
].
header
.
message_id
==
0
)
&&
(
index
==
-
1
)){
index
=
i
;
break
;
}
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_rach_indication : num of rach reach max
\n
"
);
return
0
;
}
UL_RCC_INFO
.
rach_ind
[
index
]
=
*
ind
;
if
(
ind
->
rach_indication_body
.
number_of_preambles
>
0
)
UL_RCC_INFO
.
rach_ind
[
index
].
rach_indication_body
.
preamble_list
=
malloc
(
sizeof
(
nfapi_preamble_pdu_t
)
*
ind
->
rach_indication_body
.
number_of_preambles
);
for
(
int
i
=
0
;
i
<
ind
->
rach_indication_body
.
number_of_preambles
;
i
++
)
{
if
(
ind
->
rach_indication_body
.
preamble_list
[
i
].
preamble_rel8
.
tl
.
tag
==
NFAPI_PREAMBLE_REL8_TAG
)
{
printf
(
"preamble[%d]: rnti:%02x preamble:%d timing_advance:%d
\n
"
,
i
,
ind
->
rach_indication_body
.
preamble_list
[
i
].
preamble_rel8
.
rnti
,
ind
->
rach_indication_body
.
preamble_list
[
i
].
preamble_rel8
.
preamble
,
ind
->
rach_indication_body
.
preamble_list
[
i
].
preamble_rel8
.
timing_advance
);
}
if
(
ind
->
rach_indication_body
.
preamble_list
[
i
].
preamble_rel13
.
tl
.
tag
==
NFAPI_PREAMBLE_REL13_TAG
)
{
printf
(
"RACH PREAMBLE REL13 present
\n
"
);
}
UL_RCC_INFO
.
rach_ind
[
index
].
rach_indication_body
.
preamble_list
[
i
]
=
ind
->
rach_indication_body
.
preamble_list
[
i
];
}
}
else
{
eNB
->
UL_INFO
.
rach_ind
=
*
ind
;
eNB
->
UL_INFO
.
rach_ind
.
rach_indication_body
.
preamble_list
=
eNB
->
preamble_list
;
...
...
@@ -443,7 +478,7 @@ int phy_rach_indication(struct nfapi_vnf_p7_config *config, nfapi_rach_indicatio
eNB
->
preamble_list
[
i
]
=
ind
->
rach_indication_body
.
preamble_list
[
i
];
}
}
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_rach_ind(p7_vnf->mac, ind);
...
...
@@ -454,13 +489,33 @@ int phy_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_harq_indicatio
struct
PHY_VARS_eNB_s
*
eNB
=
RC
.
eNB
[
0
][
0
];
LOG_D
(
MAC
,
"%s() NFAPI SFN/SF:%d number_of_harqs:%u
\n
"
,
__FUNCTION__
,
NFAPI_SFNSF2DEC
(
ind
->
sfn_sf
),
ind
->
harq_indication_body
.
number_of_harqs
);
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
int8_t
index
=
-
1
;
for
(
uint8_t
i
=
0
;
i
<
NUM_NFPAI_SUBFRAME
;
i
++
){
if
((
UL_RCC_INFO
.
harq_ind
[
i
].
header
.
message_id
==
0
)
&&
(
index
==
-
1
)){
index
=
i
;
break
;
}
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_harq_indication : num of harq reach max
\n
"
);
return
0
;
}
UL_RCC_INFO
.
harq_ind
[
index
]
=
*
ind
;
if
(
ind
->
harq_indication_body
.
number_of_harqs
>
0
)
UL_RCC_INFO
.
harq_ind
[
index
].
harq_indication_body
.
harq_pdu_list
=
malloc
(
sizeof
(
nfapi_harq_indication_pdu_t
)
*
ind
->
harq_indication_body
.
number_of_harqs
);
for
(
int
i
=
0
;
i
<
ind
->
harq_indication_body
.
number_of_harqs
;
i
++
)
{
memcpy
(
&
UL_RCC_INFO
.
harq_ind
[
index
].
harq_indication_body
.
harq_pdu_list
[
i
],
&
ind
->
harq_indication_body
.
harq_pdu_list
[
i
],
sizeof
(
nfapi_harq_indication_pdu_t
));
}
}
else
{
eNB
->
UL_INFO
.
harq_ind
=
*
ind
;
eNB
->
UL_INFO
.
harq_ind
.
harq_indication_body
.
harq_pdu_list
=
eNB
->
harq_pdu_list
;
for
(
int
i
=
0
;
i
<
ind
->
harq_indication_body
.
number_of_harqs
;
i
++
)
{
memcpy
(
&
eNB
->
UL_INFO
.
harq_ind
.
harq_indication_body
.
harq_pdu_list
[
i
],
&
ind
->
harq_indication_body
.
harq_pdu_list
[
i
],
sizeof
(
eNB
->
UL_INFO
.
harq_ind
.
harq_indication_body
.
harq_pdu_list
[
i
]));
}
}
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_harq_ind(p7_vnf->mac, ind);
...
...
@@ -470,6 +525,37 @@ int phy_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_harq_indicatio
int
phy_crc_indication
(
struct
nfapi_vnf_p7_config
*
config
,
nfapi_crc_indication_t
*
ind
)
{
struct
PHY_VARS_eNB_s
*
eNB
=
RC
.
eNB
[
0
][
0
];
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
int8_t
index
=
-
1
;
for
(
uint8_t
i
=
0
;
i
<
NUM_NFPAI_SUBFRAME
;
i
++
){
if
((
UL_RCC_INFO
.
crc_ind
[
i
].
header
.
message_id
==
0
)
&&
(
index
==
-
1
)){
index
=
i
;
}
if
(
UL_RCC_INFO
.
rx_ind
[
i
].
sfn_sf
==
ind
->
sfn_sf
){
index
=
i
;
break
;
}
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_crc_indication : num of crc reach max
\n
"
);
return
0
;
}
UL_RCC_INFO
.
crc_ind
[
index
]
=
*
ind
;
if
(
ind
->
crc_indication_body
.
number_of_crcs
>
0
)
UL_RCC_INFO
.
crc_ind
[
index
].
crc_indication_body
.
crc_pdu_list
=
malloc
(
sizeof
(
nfapi_crc_indication_pdu_t
)
*
ind
->
crc_indication_body
.
number_of_crcs
);
for
(
int
i
=
0
;
i
<
ind
->
crc_indication_body
.
number_of_crcs
;
i
++
)
{
memcpy
(
&
UL_RCC_INFO
.
crc_ind
[
index
].
crc_indication_body
.
crc_pdu_list
[
i
],
&
ind
->
crc_indication_body
.
crc_pdu_list
[
i
],
sizeof
(
ind
->
crc_indication_body
.
crc_pdu_list
[
0
]));
LOG_D
(
MAC
,
"%s() NFAPI SFN/SF:%d CRC_IND:number_of_crcs:%u UL_INFO:crcs:%d PDU[%d] rnti:%04x UL_INFO:rnti:%04x
\n
"
,
__FUNCTION__
,
NFAPI_SFNSF2DEC
(
ind
->
sfn_sf
),
ind
->
crc_indication_body
.
number_of_crcs
,
UL_RCC_INFO
.
crc_ind
[
index
].
crc_indication_body
.
number_of_crcs
,
i
,
ind
->
crc_indication_body
.
crc_pdu_list
[
i
].
rx_ue_information
.
rnti
,
UL_RCC_INFO
.
crc_ind
[
index
].
crc_indication_body
.
crc_pdu_list
[
i
].
rx_ue_information
.
rnti
);
}
}
else
{
eNB
->
UL_INFO
.
crc_ind
=
*
ind
;
nfapi_crc_indication_t
*
dest_ind
=
&
eNB
->
UL_INFO
.
crc_ind
;
nfapi_crc_indication_pdu_t
*
dest_pdu_list
=
eNB
->
crc_pdu_list
;
...
...
@@ -489,7 +575,7 @@ int phy_crc_indication(struct nfapi_vnf_p7_config *config, nfapi_crc_indication_
ind
->
crc_indication_body
.
crc_pdu_list
[
i
].
rx_ue_information
.
rnti
,
eNB
->
UL_INFO
.
crc_ind
.
crc_indication_body
.
crc_pdu_list
[
i
].
rx_ue_information
.
rnti
);
}
}
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_crc_ind(p7_vnf->mac, ind);
...
...
@@ -504,6 +590,52 @@ int phy_rx_indication(struct nfapi_vnf_p7_config *config, nfapi_rx_indication_t
}
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
int8_t
index
=
-
1
;
for
(
uint8_t
i
=
0
;
i
<
NUM_NFPAI_SUBFRAME
;
i
++
){
if
((
UL_RCC_INFO
.
rx_ind
[
i
].
header
.
message_id
==
0
)
&&
(
index
==
-
1
)){
index
=
i
;
}
if
(
UL_RCC_INFO
.
crc_ind
[
i
].
sfn_sf
==
ind
->
sfn_sf
){
index
=
i
;
break
;
}
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_rx_indication : num of rx reach max
\n
"
);
return
0
;
}
UL_RCC_INFO
.
rx_ind
[
index
]
=
*
ind
;
if
(
ind
->
rx_indication_body
.
number_of_pdus
>
0
)
UL_RCC_INFO
.
rx_ind
[
index
].
rx_indication_body
.
rx_pdu_list
=
malloc
(
sizeof
(
nfapi_rx_indication_pdu_t
)
*
ind
->
rx_indication_body
.
number_of_pdus
);
for
(
int
i
=
0
;
i
<
ind
->
rx_indication_body
.
number_of_pdus
;
i
++
)
{
nfapi_rx_indication_pdu_t
*
dest_pdu
=
&
UL_RCC_INFO
.
rx_ind
[
index
].
rx_indication_body
.
rx_pdu_list
[
i
];
nfapi_rx_indication_pdu_t
*
src_pdu
=
&
ind
->
rx_indication_body
.
rx_pdu_list
[
i
];
memcpy
(
dest_pdu
,
src_pdu
,
sizeof
(
*
src_pdu
));
// DJP - TODO FIXME - intentional memory leak
if
(
dest_pdu
->
rx_indication_rel8
.
length
>
0
){
dest_pdu
->
data
=
malloc
(
dest_pdu
->
rx_indication_rel8
.
length
);
memcpy
(
dest_pdu
->
data
,
src_pdu
->
data
,
dest_pdu
->
rx_indication_rel8
.
length
);
}
else
{
dest_pdu
->
data
=
NULL
;
}
LOG_D
(
PHY
,
"%s() NFAPI SFN/SF:%d PDUs:%d [PDU:%d] handle:%d rnti:%04x length:%d offset:%d ul_cqi:%d ta:%d data:%p
\n
"
,
__FUNCTION__
,
NFAPI_SFNSF2DEC
(
ind
->
sfn_sf
),
ind
->
rx_indication_body
.
number_of_pdus
,
i
,
dest_pdu
->
rx_ue_information
.
handle
,
dest_pdu
->
rx_ue_information
.
rnti
,
dest_pdu
->
rx_indication_rel8
.
length
,
dest_pdu
->
rx_indication_rel8
.
offset
,
dest_pdu
->
rx_indication_rel8
.
ul_cqi
,
dest_pdu
->
rx_indication_rel8
.
timing_advance
,
dest_pdu
->
data
);
}
}
else
{
nfapi_rx_indication_t
*
dest_ind
=
&
eNB
->
UL_INFO
.
rx_ind
;
nfapi_rx_indication_pdu_t
*
dest_pdu_list
=
eNB
->
rx_pdu_list
;
*
dest_ind
=
*
ind
;
...
...
@@ -528,7 +660,7 @@ int phy_rx_indication(struct nfapi_vnf_p7_config *config, nfapi_rx_indication_t
dest_pdu
->
data
);
}
}
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_rx_ind(p7_vnf->mac, ind);
...
...
@@ -544,6 +676,32 @@ int phy_sr_indication(struct nfapi_vnf_p7_config *config, nfapi_sr_indication_t
struct
PHY_VARS_eNB_s
*
eNB
=
RC
.
eNB
[
0
][
0
];
LOG_D
(
MAC
,
"%s() NFAPI SFN/SF:%d srs:%d
\n
"
,
__FUNCTION__
,
NFAPI_SFNSF2DEC
(
ind
->
sfn_sf
),
ind
->
sr_indication_body
.
number_of_srs
);
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
int8_t
index
=
-
1
;
for
(
uint8_t
i
=
0
;
i
<
NUM_NFPAI_SUBFRAME
;
i
++
){
if
((
UL_RCC_INFO
.
sr_ind
[
i
].
header
.
message_id
==
0
)
&&
(
index
==
-
1
)){
index
=
i
;
break
;
}
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_sr_indication : num of sr reach max
\n
"
);
return
0
;
}
UL_RCC_INFO
.
sr_ind
[
index
]
=
*
ind
;
LOG_D
(
MAC
,
"%s() UL_INFO[%d].sr_ind.sr_indication_body.number_of_srs:%d
\n
"
,
__FUNCTION__
,
index
,
eNB
->
UL_INFO
.
sr_ind
.
sr_indication_body
.
number_of_srs
);
if
(
ind
->
sr_indication_body
.
number_of_srs
>
0
)
UL_RCC_INFO
.
sr_ind
[
index
].
sr_indication_body
.
sr_pdu_list
=
malloc
(
sizeof
(
nfapi_sr_indication_pdu_t
)
*
ind
->
sr_indication_body
.
number_of_srs
);
for
(
int
i
=
0
;
i
<
ind
->
sr_indication_body
.
number_of_srs
;
i
++
)
{
nfapi_sr_indication_pdu_t
*
dest_pdu
=
&
UL_RCC_INFO
.
sr_ind
[
index
].
sr_indication_body
.
sr_pdu_list
[
i
];
nfapi_sr_indication_pdu_t
*
src_pdu
=
&
ind
->
sr_indication_body
.
sr_pdu_list
[
i
];
LOG_D
(
MAC
,
"SR_IND[PDU:%d %d][rnti:%x cqi:%d channel:%d]
\n
"
,
index
,
i
,
src_pdu
->
rx_ue_information
.
rnti
,
src_pdu
->
ul_cqi_information
.
ul_cqi
,
src_pdu
->
ul_cqi_information
.
channel
);
memcpy
(
dest_pdu
,
src_pdu
,
sizeof
(
*
src_pdu
));
}
}
else
{
nfapi_sr_indication_t
*
dest_ind
=
&
eNB
->
UL_INFO
.
sr_ind
;
nfapi_sr_indication_pdu_t
*
dest_pdu_list
=
eNB
->
sr_pdu_list
;
*
dest_ind
=
*
ind
;
...
...
@@ -556,7 +714,7 @@ int phy_sr_indication(struct nfapi_vnf_p7_config *config, nfapi_sr_indication_t
LOG_D
(
MAC
,
"SR_IND[PDU:%d][rnti:%x cqi:%d channel:%d]
\n
"
,
i
,
src_pdu
->
rx_ue_information
.
rnti
,
src_pdu
->
ul_cqi_information
.
ul_cqi
,
src_pdu
->
ul_cqi_information
.
channel
);
memcpy
(
dest_pdu
,
src_pdu
,
sizeof
(
*
src_pdu
));
}
}
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_sr_ind(p7_vnf->mac, ind);
...
...
@@ -569,7 +727,36 @@ int phy_cqi_indication(struct nfapi_vnf_p7_config *config, nfapi_cqi_indication_
struct
PHY_VARS_eNB_s
*
eNB
=
RC
.
eNB
[
0
][
0
];
LOG_D
(
MAC
,
"%s() NFAPI SFN/SF:%d number_of_cqis:%u
\n
"
,
__FUNCTION__
,
NFAPI_SFNSF2DEC
(
ind
->
sfn_sf
),
ind
->
cqi_indication_body
.
number_of_cqis
);
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
int8_t
index
=
-
1
;
for
(
uint8_t
i
=
0
;
i
<
NUM_NFPAI_SUBFRAME
;
i
++
){
if
((
UL_RCC_INFO
.
cqi_ind
[
i
].
header
.
message_id
==
0
)
&&
(
index
==
-
1
)){
index
=
i
;
break
;
}
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_cqi_indication : num of cqi reach max
\n
"
);
return
0
;
}
UL_RCC_INFO
.
cqi_ind
[
index
]
=
*
ind
;
if
(
ind
->
cqi_indication_body
.
number_of_cqis
>
0
){
UL_RCC_INFO
.
cqi_ind
[
index
].
cqi_indication_body
.
cqi_pdu_list
=
malloc
(
sizeof
(
nfapi_cqi_indication_pdu_t
)
*
ind
->
cqi_indication_body
.
number_of_cqis
);
UL_RCC_INFO
.
cqi_ind
[
index
].
cqi_indication_body
.
cqi_raw_pdu_list
=
malloc
(
sizeof
(
nfapi_cqi_indication_raw_pdu_t
)
*
ind
->
cqi_indication_body
.
number_of_cqis
);
}
for
(
int
i
=
0
;
i
<
ind
->
cqi_indication_body
.
number_of_cqis
;
i
++
)
{
nfapi_cqi_indication_pdu_t
*
src_pdu
=
&
ind
->
cqi_indication_body
.
cqi_pdu_list
[
i
];
LOG_D
(
MAC
,
"SR_IND[PDU:%d][rnti:%x cqi:%d channel:%d]
\n
"
,
i
,
src_pdu
->
rx_ue_information
.
rnti
,
src_pdu
->
ul_cqi_information
.
ul_cqi
,
src_pdu
->
ul_cqi_information
.
channel
);
memcpy
(
&
UL_RCC_INFO
.
cqi_ind
[
index
].
cqi_indication_body
.
cqi_pdu_list
[
i
],
src_pdu
,
sizeof
(
nfapi_cqi_indication_pdu_t
));
memcpy
(
&
UL_RCC_INFO
.
cqi_ind
[
index
].
cqi_indication_body
.
cqi_raw_pdu_list
[
i
],
&
ind
->
cqi_indication_body
.
cqi_raw_pdu_list
[
i
],
sizeof
(
nfapi_cqi_indication_raw_pdu_t
));
}
}
else
{
eNB
->
UL_INFO
.
cqi_ind
=
ind
->
cqi_indication_body
;
}
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
return
1
;
}
...
...
@@ -947,6 +1134,7 @@ void configure_nfapi_vnf(char *vnf_addr, int vnf_p5_port) {
config
->
deallocate_p4_p5_vendor_ext
=
&
vnf_deallocate_p4_p5_vendor_ext
;
config
->
codec_config
.
allocate
=
&
vnf_allocate
;
config
->
codec_config
.
deallocate
=
&
vnf_deallocate
;
memset
(
&
UL_RCC_INFO
,
0
,
sizeof
(
UL_RCC_IND_t
));
NFAPI_TRACE
(
NFAPI_TRACE_INFO
,
"[VNF] Creating VNF NFAPI start thread %s
\n
"
,
__FUNCTION__
);
pthread_create
(
&
vnf_start_pthread
,
NULL
,
(
void
*
)
&
vnf_start_thread
,
config
);
NFAPI_TRACE
(
NFAPI_TRACE_INFO
,
"[VNF] Created VNF NFAPI start thread %s
\n
"
,
__FUNCTION__
);
...
...
openair1/PHY/phy_vars.h
View file @
4c6b27f4
...
...
@@ -45,6 +45,7 @@ int16_t *primary_synch2_time;
#ifndef OCP_FRAMEWORK
PHY_VARS_UE
***
PHY_vars_UE_g
;
RAN_CONTEXT_t
RC
;
UL_RCC_IND_t
UL_RCC_INFO
;
//PHY_VARS_eNB ***PHY_vars_eNB_g;
//PHY_VARS_RN **PHY_vars_RN_g;
...
...
openair1/SCHED/fapi_l1.c
View file @
4c6b27f4
...
...
@@ -924,7 +924,9 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) {
}
if
((
NFAPI_MODE
!=
NFAPI_MONOLITHIC
)
&&
do_oai
&&
!
dont_send
)
{
if
(
Sched_INFO
->
TX_req
->
tx_request_body
.
number_of_pdus
>
0
){
oai_nfapi_tx_req
(
Sched_INFO
->
TX_req
);
}
oai_nfapi_dl_config_req
(
Sched_INFO
->
DL_req
);
// DJP - .dl_config_request_body.dl_config_pdu_list[0]); // DJP - FIXME TODO - yuk - only copes with 1 pdu
}
...
...
openair2/PHY_INTERFACE/IF_Module.c
View file @
4c6b27f4
...
...
@@ -17,10 +17,34 @@ extern int oai_nfapi_sr_indication(nfapi_sr_indication_t *ind);
extern
int
oai_nfapi_rx_ind
(
nfapi_rx_indication_t
*
ind
);
extern
uint16_t
sf_ahead
;
extern
UL_RCC_IND_t
UL_RCC_INFO
;
uint16_t
frame_cnt
=
0
;
void
handle_rach
(
UL_IND_t
*
UL_info
)
{
int
i
;
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
for
(
uint8_t
j
=
0
;
j
<
NUM_NFPAI_SUBFRAME
;
j
++
){
if
(
UL_RCC_INFO
.
rach_ind
[
j
].
rach_indication_body
.
number_of_preambles
>
0
)
{
AssertFatal
(
UL_RCC_INFO
.
rach_ind
[
j
].
rach_indication_body
.
number_of_preambles
==
1
,
"More than 1 preamble not supported
\n
"
);
LOG_D
(
MAC
,
"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d
\n
"
,
UL_info
->
frame
,
UL_info
->
subframe
,
NFAPI_SFNSF2DEC
(
UL_RCC_INFO
.
rach_ind
[
j
].
sfn_sf
));
initiate_ra_proc
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
NFAPI_SFNSF2SFN
(
UL_RCC_INFO
.
rach_ind
[
j
].
sfn_sf
),
NFAPI_SFNSF2SF
(
UL_RCC_INFO
.
rach_ind
[
j
].
sfn_sf
),
UL_RCC_INFO
.
rach_ind
[
j
].
rach_indication_body
.
preamble_list
[
0
].
preamble_rel8
.
preamble
,
UL_RCC_INFO
.
rach_ind
[
j
].
rach_indication_body
.
preamble_list
[
0
].
preamble_rel8
.
timing_advance
,
UL_RCC_INFO
.
rach_ind
[
j
].
rach_indication_body
.
preamble_list
[
0
].
preamble_rel8
.
rnti
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
,
0
#endif
);
free
(
UL_RCC_INFO
.
rach_ind
[
j
].
rach_indication_body
.
preamble_list
);
UL_RCC_INFO
.
rach_ind
[
j
].
rach_indication_body
.
number_of_preambles
=
0
;
UL_RCC_INFO
.
rach_ind
[
j
].
header
.
message_id
=
0
;
}
}
}
else
{
if
(
UL_info
->
rach_ind
.
rach_indication_body
.
number_of_preambles
>
0
)
{
AssertFatal
(
UL_info
->
rach_ind
.
rach_indication_body
.
number_of_preambles
==
1
,
"More than 1 preamble not supported
\n
"
);
UL_info
->
rach_ind
.
rach_indication_body
.
number_of_preambles
=
0
;
...
...
@@ -37,6 +61,7 @@ void handle_rach(UL_IND_t *UL_info) {
#endif
);
}
}
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
...
...
@@ -72,6 +97,22 @@ void handle_sr(UL_IND_t *UL_info) {
if
(
UL_info
->
sr_ind
.
sr_indication_body
.
number_of_srs
>
0
)
{
oai_nfapi_sr_indication
(
&
UL_info
->
sr_ind
);
}
}
else
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
for
(
uint8_t
j
=
0
;
j
<
NUM_NFPAI_SUBFRAME
;
j
++
){
if
(
UL_RCC_INFO
.
sr_ind
[
j
].
sr_indication_body
.
number_of_srs
>
0
){
for
(
i
=
0
;
i
<
UL_RCC_INFO
.
sr_ind
[
j
].
sr_indication_body
.
number_of_srs
;
i
++
){
SR_indication
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
NFAPI_SFNSF2SFN
(
UL_RCC_INFO
.
sr_ind
[
j
].
sfn_sf
),
NFAPI_SFNSF2SF
(
UL_RCC_INFO
.
sr_ind
[
j
].
sfn_sf
),
UL_RCC_INFO
.
sr_ind
[
j
].
sr_indication_body
.
sr_pdu_list
[
i
].
rx_ue_information
.
rnti
,
UL_RCC_INFO
.
sr_ind
[
j
].
sr_indication_body
.
sr_pdu_list
[
i
].
ul_cqi_information
.
ul_cqi
);
}
free
(
UL_RCC_INFO
.
sr_ind
[
j
].
sr_indication_body
.
sr_pdu_list
);
UL_RCC_INFO
.
sr_ind
[
j
].
sr_indication_body
.
number_of_srs
=
0
;
UL_RCC_INFO
.
sr_ind
[
j
].
header
.
message_id
=
0
;
}
}
}
else
{
for
(
i
=
0
;
i
<
UL_info
->
sr_ind
.
sr_indication_body
.
number_of_srs
;
i
++
)
SR_indication
(
UL_info
->
module_id
,
...
...
@@ -98,6 +139,26 @@ void handle_cqi(UL_IND_t *UL_info) {
oai_nfapi_cqi_indication
(
&
ind
);
UL_info
->
cqi_ind
.
number_of_cqis
=
0
;
}
}
else
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
)
{
for
(
uint8_t
j
=
0
;
j
<
NUM_NFPAI_SUBFRAME
;
j
++
){
if
(
UL_RCC_INFO
.
cqi_ind
[
j
].
cqi_indication_body
.
number_of_cqis
>
0
){
for
(
i
=
0
;
i
<
UL_RCC_INFO
.
cqi_ind
[
j
].
cqi_indication_body
.
number_of_cqis
;
i
++
){
cqi_indication
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
NFAPI_SFNSF2SFN
(
UL_RCC_INFO
.
cqi_ind
[
j
].
sfn_sf
),
NFAPI_SFNSF2SF
(
UL_RCC_INFO
.
cqi_ind
[
j
].
sfn_sf
),
UL_RCC_INFO
.
cqi_ind
[
j
].
cqi_indication_body
.
cqi_pdu_list
[
i
].
rx_ue_information
.
rnti
,
&
UL_RCC_INFO
.
cqi_ind
[
j
].
cqi_indication_body
.
cqi_pdu_list
[
i
].
cqi_indication_rel9
,
UL_RCC_INFO
.
cqi_ind
[
j
].
cqi_indication_body
.
cqi_raw_pdu_list
[
i
].
pdu
,
&
UL_RCC_INFO
.
cqi_ind
[
j
].
cqi_indication_body
.
cqi_pdu_list
[
i
].
ul_cqi_information
);
}
free
(
UL_RCC_INFO
.
cqi_ind
[
j
].
cqi_indication_body
.
cqi_pdu_list
);
free
(
UL_RCC_INFO
.
cqi_ind
[
j
].
cqi_indication_body
.
cqi_raw_pdu_list
);
UL_RCC_INFO
.
cqi_ind
[
j
].
cqi_indication_body
.
number_of_cqis
=
0
;
UL_RCC_INFO
.
cqi_ind
[
j
].
header
.
message_id
=
0
;
}
}
}
else
{
for
(
i
=
0
;
i
<
UL_info
->
cqi_ind
.
number_of_cqis
;
i
++
)
cqi_indication
(
UL_info
->
module_id
,
...
...
@@ -123,7 +184,22 @@ void handle_harq(UL_IND_t *UL_info) {
}
UL_info
->
harq_ind
.
harq_indication_body
.
number_of_harqs
=
0
;
}
else
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
for
(
uint8_t
j
=
0
;
j
<
NUM_NFPAI_SUBFRAME
;
j
++
){
if
(
UL_RCC_INFO
.
harq_ind
[
j
].
harq_indication_body
.
number_of_harqs
>
0
){
for
(
int
i
=
0
;
i
<
UL_RCC_INFO
.
harq_ind
[
j
].
harq_indication_body
.
number_of_harqs
;
i
++
){
harq_indication
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
NFAPI_SFNSF2SFN
(
UL_RCC_INFO
.
harq_ind
[
j
].
sfn_sf
),
NFAPI_SFNSF2SF
(
UL_RCC_INFO
.
harq_ind
[
j
].
sfn_sf
),
&
UL_RCC_INFO
.
harq_ind
[
j
].
harq_indication_body
.
harq_pdu_list
[
i
]);
}
free
(
UL_RCC_INFO
.
harq_ind
[
j
].
harq_indication_body
.
harq_pdu_list
);
UL_RCC_INFO
.
harq_ind
[
j
].
harq_indication_body
.
number_of_harqs
=
0
;
UL_RCC_INFO
.
harq_ind
[
j
].
header
.
message_id
=
0
;
}
}
}
else
{
for
(
int
i
=
0
;
i
<
UL_info
->
harq_ind
.
harq_indication_body
.
number_of_harqs
;
i
++
)
harq_indication
(
UL_info
->
module_id
,
...
...
@@ -151,6 +227,56 @@ void handle_ulsch(UL_IND_t *UL_info) {
oai_nfapi_rx_ind
(
&
UL_info
->
rx_ind
);
UL_info
->
rx_ind
.
rx_indication_body
.
number_of_pdus
=
0
;
}
}
else
if
(
NFAPI_MODE
==
NFAPI_MODE_VNF
){
for
(
uint8_t
k
=
0
;
k
<
NUM_NFPAI_SUBFRAME
;
k
++
){
if
((
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
number_of_pdus
>
0
)
&&
(
UL_RCC_INFO
.
crc_ind
[
k
].
crc_indication_body
.
number_of_crcs
>
0
)){
for
(
i
=
0
;
i
<
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
number_of_pdus
;
i
++
)
{
for
(
j
=
0
;
j
<
UL_RCC_INFO
.
crc_ind
[
k
].
crc_indication_body
.
number_of_crcs
;
j
++
)
{
// find crc_indication j corresponding rx_indication i
LOG_D
(
PHY
,
"UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].rx_ue_information.rnti:%04x UL_info->rx_ind.rx_indication_body.rx_pdu_list[%d].rx_ue_information.rnti:%04x
\n
"
,
j
,
UL_RCC_INFO
.
crc_ind
[
k
].
crc_indication_body
.
crc_pdu_list
[
j
].
rx_ue_information
.
rnti
,
i
,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_ue_information
.
rnti
);
if
(
UL_RCC_INFO
.
crc_ind
[
k
].
crc_indication_body
.
crc_pdu_list
[
j
].
rx_ue_information
.
rnti
==
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_ue_information
.
rnti
)
{
LOG_D
(
PHY
,
"UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].crc_indication_rel8.crc_flag:%d
\n
"
,
j
,
UL_RCC_INFO
.
crc_ind
[
k
].
crc_indication_body
.
crc_pdu_list
[
j
].
crc_indication_rel8
.
crc_flag
);
if
(
UL_RCC_INFO
.
crc_ind
[
k
].
crc_indication_body
.
crc_pdu_list
[
j
].
crc_indication_rel8
.
crc_flag
==
1
)
{
// CRC error indication
LOG_D
(
MAC
,
"Frame %d, Subframe %d Calling rx_sdu (CRC error)
\n
"
,
UL_info
->
frame
,
UL_info
->
subframe
);
rx_sdu
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
NFAPI_SFNSF2SFN
(
UL_RCC_INFO
.
rx_ind
[
k
].
sfn_sf
),
//UL_info->frame,
NFAPI_SFNSF2SF
(
UL_RCC_INFO
.
rx_ind
[
k
].
sfn_sf
),
//UL_info->subframe,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_ue_information
.
rnti
,
(
uint8_t
*
)
NULL
,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
length
,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
timing_advance
,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
ul_cqi
);
}
else
{
LOG_D
(
MAC
,
"Frame %d, Subframe %d Calling rx_sdu (CRC ok)
\n
"
,
UL_info
->
frame
,
UL_info
->
subframe
);
rx_sdu
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
NFAPI_SFNSF2SFN
(
UL_RCC_INFO
.
rx_ind
[
k
].
sfn_sf
),
//UL_info->frame,
NFAPI_SFNSF2SF
(
UL_RCC_INFO
.
rx_ind
[
k
].
sfn_sf
),
//UL_info->subframe,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_ue_information
.
rnti
,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
data
,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
length
,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
timing_advance
,
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
ul_cqi
);
}
if
(
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
data
!=
NULL
){
free
(
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
[
i
].
data
);
}
break
;
}
//if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti == UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti)
}
// for (j=0;j<UL_info->crc_ind.crc_indication_body.number_of_crcs;j++)
}
// for (i=0;i<UL_info->rx_ind.number_of_pdus;i++)
free
(
UL_RCC_INFO
.
crc_ind
[
k
].
crc_indication_body
.
crc_pdu_list
);
free
(
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
rx_pdu_list
);
UL_RCC_INFO
.
crc_ind
[
k
].
crc_indication_body
.
number_of_crcs
=
0
;
UL_RCC_INFO
.
crc_ind
[
k
].
header
.
message_id
=
0
;
UL_RCC_INFO
.
rx_ind
[
k
].
rx_indication_body
.
number_of_pdus
=
0
;
UL_RCC_INFO
.
rx_ind
[
k
].
header
.
message_id
=
0
;
}
}
}
else
{
if
(
UL_info
->
rx_ind
.
rx_indication_body
.
number_of_pdus
>
0
&&
UL_info
->
crc_ind
.
crc_indication_body
.
number_of_crcs
>
0
)
{
for
(
i
=
0
;
i
<
UL_info
->
rx_ind
.
rx_indication_body
.
number_of_pdus
;
i
++
)
{
...
...
openair2/PHY_INTERFACE/IF_Module.h
View file @
4c6b27f4
...
...
@@ -90,7 +90,27 @@ typedef struct{
}
UL_IND_t
;
// Downlink subframe P7
#define NUM_NFPAI_SUBFRAME 5
typedef
struct
{
/// harq indication list
nfapi_harq_indication_t
harq_ind
[
NUM_NFPAI_SUBFRAME
];
/// crc indication list
nfapi_crc_indication_t
crc_ind
[
NUM_NFPAI_SUBFRAME
];
/// SR indication list
nfapi_sr_indication_t
sr_ind
[
NUM_NFPAI_SUBFRAME
];
/// CQI indication list
nfapi_cqi_indication_t
cqi_ind
[
NUM_NFPAI_SUBFRAME
];
/// RACH indication list
nfapi_rach_indication_t
rach_ind
[
NUM_NFPAI_SUBFRAME
];
/// RX indication
nfapi_rx_indication_t
rx_ind
[
NUM_NFPAI_SUBFRAME
];
}
UL_RCC_IND_t
;
typedef
struct
{
/// Module ID
...
...
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