Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
JenRungHuang
openairinterface5G
Commits
1ec934f9
Commit
1ec934f9
authored
Oct 16, 2017
by
David Price
Browse files
Works up to message 3 reception at VNF
parent
5be8cf7b
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
nfapi/nfapi_pnf.c
View file @
1ec934f9
This diff is collapsed.
Click to expand it.
nfapi/nfapi_vnf.c
View file @
1ec934f9
...
...
@@ -294,24 +294,10 @@ extern void init_eNB_afterRU(void);
void
oai_create_enb
(
void
)
{
static
int
bodge_counter
=
0
;
PHY_VARS_eNB
*
eNB
;
int
bodge_counter
=
0
;
PHY_VARS_eNB
*
eNB
=
RC
.
eNB
[
0
][
0
]
;
if
(
RC
.
eNB
&&
RC
.
eNB
[
0
]
&&
RC
.
eNB
[
0
][
0
])
{
eNB
=
RC
.
eNB
[
0
][
0
];
printf
(
"[VNF] RC.eNB[0][0]. Mod_id:%d CC_id:%d
\n
"
,
eNB
->
Mod_id
,
eNB
->
CC_id
);
}
else
{
printf
(
"[VNF] DJP ***** RC.eNB[] and RC.eNB[%d][%d] RC.nb_CC[%d]=1 MALLOCING structure and zeroing *******
\n
"
,
bodge_counter
,
bodge_counter
,
bodge_counter
);
RC
.
eNB
[
bodge_counter
]
=
(
PHY_VARS_eNB
**
)
malloc
((
1
+
MAX_NUM_CCs
)
*
sizeof
(
PHY_VARS_eNB
**
));
RC
.
eNB
[
bodge_counter
][
bodge_counter
]
=
(
PHY_VARS_eNB
*
)
malloc
(
sizeof
(
PHY_VARS_eNB
));
memset
((
void
*
)
RC
.
eNB
[
bodge_counter
][
bodge_counter
],
0
,
sizeof
(
PHY_VARS_eNB
));
eNB
=
RC
.
eNB
[
bodge_counter
][
bodge_counter
];
}
printf
(
"[VNF] RC.eNB[0][0]. Mod_id:%d CC_id:%d nb_CC[0]:%d abstraction_flag:%d single_thread_flag:%d td:%p te:%p if_inst:%p
\n
"
,
eNB
->
Mod_id
,
eNB
->
CC_id
,
RC
.
nb_CC
[
0
],
eNB
->
abstraction_flag
,
eNB
->
single_thread_flag
,
eNB
->
td
,
eNB
->
te
,
eNB
->
if_inst
);
eNB
->
Mod_id
=
bodge_counter
;
eNB
->
CC_id
=
bodge_counter
;
...
...
@@ -326,8 +312,6 @@ void oai_create_enb(void)
eNB
->
if_inst
=
IF_Module_init
(
bodge_counter
);
}
//init_eNB_proc(bodge_counter);
// This will cause phy_config_request to be installed. That will result in RRC configuring the PHY
// that will result in eNB->configured being set to TRUE.
// See we need to wait for that to happen otherwise the NFAPI message exchanges won't contain the right parameter values
...
...
@@ -343,7 +327,6 @@ void oai_create_enb(void)
}
while
(
eNB
->
configured
!=
1
);
}
void
oai_enb_init
(
void
)
{
init_eNB_afterRU
();
...
...
@@ -598,9 +581,6 @@ int phy_sync_indication(struct nfapi_vnf_p7_config* config, uint8_t sync)
}
}
//if (RC.eNB && RC.eNB[0][0]->configured)
//wake_eNB_rxtx(RC.eNB[0][0], 0, 0);
return
(
0
);
}
...
...
@@ -679,22 +659,101 @@ int phy_rach_indication(struct nfapi_vnf_p7_config* config, nfapi_rach_indicatio
int
phy_harq_indication
(
struct
nfapi_vnf_p7_config
*
config
,
nfapi_harq_indication_t
*
ind
)
{
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_harq_ind(p7_vnf->mac, ind);
return
1
;
LOG_E
(
MAC
,
"%s() NFAPI SFN/SF:%d number_of_preambles:%u
\n
"
,
__FUNCTION__
,
NFAPI_SFNSF2DEC
(
ind
->
sfn_sf
),
ind
->
harq_indication_body
.
number_of_harqs
);
for
(
int
i
=
0
;
i
<
ind
->
harq_indication_body
.
number_of_harqs
;
i
++
)
{
harq_indication
(
0
,
// DJP - fixme
0
,
// DJP - fixme
NFAPI_SFNSF2SFN
(
ind
->
sfn_sf
),
NFAPI_SFNSF2SF
(
ind
->
sfn_sf
),
&
ind
->
harq_indication_body
.
harq_pdu_list
[
i
]
);
}
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_harq_ind(p7_vnf->mac, ind);
return
1
;
}
int
phy_crc_indication
(
struct
nfapi_vnf_p7_config
*
config
,
nfapi_crc_indication_t
*
ind
)
{
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
struct
PHY_VARS_eNB_s
*
eNB
=
RC
.
eNB
[
0
][
0
];
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
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
;
*
dest_ind
=
*
ind
;
dest_ind
->
crc_indication_body
.
crc_pdu_list
=
dest_pdu_list
;
LOG_E
(
MAC
,
"%s() NFAPI SFN/SF:%d IND:number_of_crcs:%u UL_INFO:crcs:%d
\n
"
,
__FUNCTION__
,
NFAPI_SFNSF2DEC
(
ind
->
sfn_sf
),
ind
->
crc_indication_body
.
number_of_crcs
,
eNB
->
UL_INFO
.
crc_ind
.
crc_indication_body
.
number_of_crcs
);
for
(
int
i
=
0
;
i
<
ind
->
crc_indication_body
.
number_of_crcs
;
i
++
)
{
LOG_D
(
MAC
,
"%s() PDU[%d] rnti:%04x UL_INFO:rnti:%04x
\n
"
,
__FUNCTION__
,
i
,
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
);
memcpy
(
&
dest_ind
->
crc_indication_body
.
crc_pdu_list
[
i
],
&
ind
->
crc_indication_body
.
crc_pdu_list
[
i
],
sizeof
(
ind
->
crc_indication_body
.
crc_pdu_list
[
0
]));
}
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);
return
1
;
return
1
;
}
int
phy_rx_indication
(
struct
nfapi_vnf_p7_config
*
config
,
nfapi_rx_indication_t
*
ind
)
{
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_rx_ind(p7_vnf->mac, ind);
return
1
;
struct
PHY_VARS_eNB_s
*
eNB
=
RC
.
eNB
[
0
][
0
];
LOG_E
(
MAC
,
"%s() NFAPI SFN/SF:%d number_of_pdus:%u
\n
"
,
__FUNCTION__
,
NFAPI_SFNSF2DEC
(
ind
->
sfn_sf
),
ind
->
rx_indication_body
.
number_of_pdus
);
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
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
;
dest_ind
->
rx_indication_body
.
rx_pdu_list
=
dest_pdu_list
;
for
(
int
i
=
0
;
i
<
ind
->
rx_indication_body
.
number_of_pdus
;
i
++
)
{
nfapi_rx_indication_pdu_t
*
dest_pdu
=
&
dest_ind
->
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
dest_pdu
->
data
=
malloc
(
dest_pdu
->
rx_indication_rel8
.
length
);
memcpy
(
dest_pdu
->
data
,
src_pdu
->
data
,
dest_pdu
->
rx_indication_rel8
.
length
);
LOG_E
(
PHY
,
"%s() handle:%d rnti:%04x length:%d offset:%d ul_cqi:%d ta:%d data:%p
\n
"
,
__FUNCTION__
,
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
);
}
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);
return
1
;
}
int
phy_srs_indication
(
struct
nfapi_vnf_p7_config
*
config
,
nfapi_srs_indication_t
*
ind
)
{
...
...
@@ -710,10 +769,21 @@ int phy_sr_indication(struct nfapi_vnf_p7_config* config, nfapi_sr_indication_t*
}
int
phy_cqi_indication
(
struct
nfapi_vnf_p7_config
*
config
,
nfapi_cqi_indication_t
*
ind
)
{
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_cqi_ind(p7_vnf->mac, ind);
return
1
;
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
//mac_cqi_ind(p7_vnf->mac, ind);
struct
PHY_VARS_eNB_s
*
eNB
=
RC
.
eNB
[
0
][
0
];
LOG_E
(
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
);
eNB
->
UL_INFO
.
cqi_ind
=
ind
->
cqi_indication_body
;
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
return
1
;
}
int
phy_lbt_dl_indication
(
struct
nfapi_vnf_p7_config
*
config
,
nfapi_lbt_dl_indication_t
*
ind
)
{
// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
...
...
@@ -1024,6 +1094,7 @@ printf("[VNF] DJP local_addr:%s\n", p7_vnf->local_addr);
req
->
nfapi_config
.
timing_window
.
tl
.
tag
=
NFAPI_NFAPI_TIMING_WINDOW_TAG
;
req
->
nfapi_config
.
timing_window
.
value
=
p7_vnf
->
timing_window
;
printf
(
"[VNF] Timing window:%d
\n
"
,
p7_vnf
->
timing_window
);
req
->
num_tlv
++
;
if
(
p7_vnf
->
periodic_timing_enabled
||
p7_vnf
->
aperiodic_timing_enabled
)
...
...
@@ -1300,3 +1371,49 @@ int oai_nfapi_tx_req(nfapi_tx_request_t *tx_req)
}
return
retval
;
}
int
oai_nfapi_hi_dci0_req
(
nfapi_hi_dci0_request_t
*
hi_dci0_req
)
{
nfapi_vnf_p7_config_t
*
p7_config
=
vnf
.
p7_vnfs
[
0
].
config
;
hi_dci0_req
->
header
.
phy_id
=
1
;
// DJP HACK TODO FIXME - need to pass this around!!!!
NFAPI_TRACE
(
NFAPI_TRACE_INFO
,
"[VNF] %s() HI_DCI0_REQ p7_config:%p phy_id:%d message_id:%d sfn_sf:%d number_of_dci:%d number_of_hi:%d
\n
"
,
__FUNCTION__
,
p7_config
,
hi_dci0_req
->
header
.
phy_id
,
hi_dci0_req
->
header
.
message_id
,
NFAPI_SFNSF2DEC
(
hi_dci0_req
->
sfn_sf
),
hi_dci0_req
->
hi_dci0_request_body
.
number_of_dci
,
hi_dci0_req
->
hi_dci0_request_body
.
number_of_hi
);
int
retval
=
nfapi_vnf_p7_hi_dci0_req
(
p7_config
,
hi_dci0_req
);
if
(
retval
!=
0
)
{
NFAPI_TRACE
(
NFAPI_TRACE_ERROR
,
"%s() Problem sending retval:%d
\n
"
,
__FUNCTION__
,
retval
);
}
return
retval
;
}
int
oai_nfapi_ul_config_req
(
nfapi_ul_config_request_t
*
ul_config_req
)
{
nfapi_vnf_p7_config_t
*
p7_config
=
vnf
.
p7_vnfs
[
0
].
config
;
ul_config_req
->
header
.
phy_id
=
1
;
// DJP HACK TODO FIXME - need to pass this around!!!!
//NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] %s() header message_id:%d\n", __FUNCTION__, ul_config_req->header.message_id);
NFAPI_TRACE
(
NFAPI_TRACE_INFO
,
"[VNF] %s() UL_CONFIG p7_config:%p phy_id:%d message_id:%d sfn_sf:%d PDUs:%d rach_prach_frequency_resources:%d srs_present:%d
\n
"
,
__FUNCTION__
,
p7_config
,
ul_config_req
->
header
.
phy_id
,
ul_config_req
->
header
.
message_id
,
NFAPI_SFNSF2DEC
(
ul_config_req
->
sfn_sf
),
ul_config_req
->
ul_config_request_body
.
number_of_pdus
,
ul_config_req
->
ul_config_request_body
.
rach_prach_frequency_resources
,
ul_config_req
->
ul_config_request_body
.
srs_present
);
int
retval
=
nfapi_vnf_p7_ul_config_req
(
p7_config
,
ul_config_req
);
if
(
retval
!=
0
)
{
NFAPI_TRACE
(
NFAPI_TRACE_ERROR
,
"%s() Problem sending retval:%d
\n
"
,
__FUNCTION__
,
retval
);
}
else
{
// Reset number of PDUs so that it is not resent
ul_config_req
->
ul_config_request_body
.
number_of_pdus
=
0
;
}
return
retval
;
}
open-nfapi.oai.patch
View file @
1ec934f9
...
...
@@ -181,7 +181,7 @@ index a3b0141..76be11a 100644
else
{
diff --git a/pnf/public_inc/nfapi_pnf_interface.h b/pnf/public_inc/nfapi_pnf_interface.h
index f93624d..
e48b93
2 100644
index f93624d..
b25caf
2 100644
--- a/pnf/public_inc/nfapi_pnf_interface.h
+++ b/pnf/public_inc/nfapi_pnf_interface.h
@@ -319,10 +319,10 @@
typedef struct nfapi_pnf_config
...
...
@@ -197,15 +197,6 @@ index f93624d..e48b932 100644
/*! Delete a pnf configuration
* \param config A pointer to a pnf configuraiton
@@ -338,7 +338,7 @@
int nfapi_pnf_config_destroy(nfapi_pnf_config_t* config);
*
* \code
* // Create the pnf config
- * nfapi_pnf_config_t* config = nfapi_pnf_config_create();
+ * nfapi_pnf_config_t* config = nfapi_pnf_config_create(void);
*
* // Assumed that the vnf_address and vnf_port are provided over the P9 interface
* config->vnf_ip_addr = vnf_address;
@@ -681,7 +681,7 @@
typedef struct nfapi_pnf_p7_config
/*! Create and initialise a nfapi_pnf_p7_config structure
* \return A pointer to a PNF P7 config structure
...
...
@@ -254,19 +245,75 @@ index 74f29a0..7310fc0 100644
}
diff --git a/pnf/src/pnf_p7.c b/pnf/src/pnf_p7.c
index 0fd7828..
94b4fba
100644
index 0fd7828..
263f93c
100644
--- a/pnf/src/pnf_p7.c
+++ b/pnf/src/pnf_p7.c
@@ -30,7 +30,7 @@
@@ -25,12 +25,13 @@
#include <unistd.h>
#include <errno.h>
#include <pthread.h>
+#include <stdio.h>
#include "pnf_p7.h"
#define FAPI2_IP_DSCP 0
-uint32_t get_current_time_hr()
+uint32_t pnf_get_current_time_hr()
+uint32_t pnf_get_current_time_hr(
void
)
{
struct timeval now;
(void)gettimeofday(&now, NULL);
@@ -307,11 +307,11 @@
void pnf_p7_rx_reassembly_queue_remove_old_msgs(pnf_p7_t* pnf_p7, pnf_p7_rx_reas
@@ -64,11 +65,14 @@
void pnf_p7_free(pnf_p7_t* pnf_p7, void* ptr)
// todo : for now these just malloc/free need to move to a memory cache
nfapi_dl_config_request_t* allocate_nfapi_dl_config_request(pnf_p7_t* pnf_p7)
{
- return pnf_p7_malloc(pnf_p7, sizeof(nfapi_dl_config_request_t));
+ void *ptr= pnf_p7_malloc(pnf_p7, sizeof(nfapi_dl_config_request_t));
+ //printf("%s() ptr:%p\n", __FUNCTION__, ptr);
+ return ptr;
}
void deallocate_nfapi_dl_config_request(nfapi_dl_config_request_t* req, pnf_p7_t* pnf_p7)
{
+ //printf("%s() SFN/SF:%d %s req:%p pdu_list:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->dl_config_request_body.dl_config_pdu_list);
if(pnf_p7->_public.codec_config.deallocate)
{
(pnf_p7->_public.codec_config.deallocate)(req->dl_config_request_body.dl_config_pdu_list);
@@ -83,11 +87,14 @@
void deallocate_nfapi_dl_config_request(nfapi_dl_config_request_t* req, pnf_p7_t
nfapi_ul_config_request_t* allocate_nfapi_ul_config_request(pnf_p7_t* pnf_p7)
{
- return pnf_p7_malloc(pnf_p7, sizeof(nfapi_ul_config_request_t));
+ void *ptr= pnf_p7_malloc(pnf_p7, sizeof(nfapi_ul_config_request_t));
+ //printf("%s() ptr:%p\n", __FUNCTION__, ptr);
+ return ptr;
}
void deallocate_nfapi_ul_config_request(nfapi_ul_config_request_t* req, pnf_p7_t* pnf_p7)
{
+ //printf("%s() SFN/SF:%d %s req:%p pdu_list:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->ul_config_request_body.ul_config_pdu_list);
if(pnf_p7->_public.codec_config.deallocate)
{
(pnf_p7->_public.codec_config.deallocate)(req->ul_config_request_body.ul_config_pdu_list);
@@ -107,6 +114,7 @@
nfapi_hi_dci0_request_t* allocate_nfapi_hi_dci0_request(pnf_p7_t* pnf_p7)
void deallocate_nfapi_hi_dci0_request(nfapi_hi_dci0_request_t* req, pnf_p7_t* pnf_p7)
{
+ //printf("%s() SFN/SF:%d %s req:%p pdu_list:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->hi_dci0_request_body.hi_dci0_pdu_list);
if(pnf_p7->_public.codec_config.deallocate)
{
(pnf_p7->_public.codec_config.deallocate)(req->hi_dci0_request_body.hi_dci0_pdu_list);
@@ -127,6 +135,9 @@
nfapi_tx_request_t* allocate_nfapi_tx_request(pnf_p7_t* pnf_p7)
void deallocate_nfapi_tx_request(nfapi_tx_request_t* req, pnf_p7_t* pnf_p7)
{
int i = 0;
+
+ //printf("%s() SFN/SF:%d %s req:%p pdu[0]:data:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->tx_request_body.tx_pdu_list[i].segments[0].segment_data);
+
for(i = 0; i < req->tx_request_body.number_of_pdus; ++i)
{
void* data = req->tx_request_body.tx_pdu_list[i].segments[0].segment_data;
@@ -307,11 +318,11 @@
void pnf_p7_rx_reassembly_queue_remove_old_msgs(pnf_p7_t* pnf_p7, pnf_p7_rx_reas
}
...
...
@@ -280,7 +327,7 @@ index 0fd7828..94b4fba 100644
return 0;
}
else
@@ -482,29 +4
82
,36 @@
void pnf_pack_and_send_timing_info(pnf_p7_t* pnf_p7)
@@ -482,29 +4
93
,36 @@
void pnf_pack_and_send_timing_info(pnf_p7_t* pnf_p7)
void send_dummy_subframe(pnf_p7_t* pnf_p7, uint16_t sfn_sf)
{
...
...
@@ -322,7 +369,7 @@ index 0fd7828..94b4fba 100644
(pnf_p7->_public.lbt_dl_config_req)(&pnf_p7->_public, pnf_p7->_public.dummy_subframe.lbt_dl_config_req);
}
}
@@ -527,7 +5
3
4,7 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
@@ -527,7 +54
5
,7 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
}
// save the curren time and sfn_sf
...
...
@@ -331,7 +378,7 @@ index 0fd7828..94b4fba 100644
pnf_p7->sfn_sf = sfn_sf;
// If the subframe_buffer has been configured
@@ -558,18 +56
5
,38 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
@@ -558,18 +5
7
6,38 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
nfapi_pnf_p7_subframe_buffer_t* subframe_buffer = &(pnf_p7->subframe_buffer[buffer_index]);
...
...
@@ -371,7 +418,7 @@ index 0fd7828..94b4fba 100644
}
else
{
@@ -586,7 +6
13
,7 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
@@ -586,7 +6
24
,7 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
if(pnf_p7->_public.ul_config_req)
(pnf_p7->_public.ul_config_req)(&(pnf_p7->_public), subframe_buffer->ul_config_req);
...
...
@@ -380,7 +427,7 @@ index 0fd7828..94b4fba 100644
}
else
{
@@ -603,7 +6
30
,7 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
@@ -603,7 +6
41
,7 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
if(pnf_p7->_public.hi_dci0_req)
(pnf_p7->_public.hi_dci0_req)(&(pnf_p7->_public), subframe_buffer->hi_dci0_req);
...
...
@@ -389,7 +436,7 @@ index 0fd7828..94b4fba 100644
}
else
{
@@ -615,29 +6
42
,12 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
@@ -615,29 +6
53
,12 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
}
}
...
...
@@ -420,7 +467,7 @@ index 0fd7828..94b4fba 100644
}
else
{
@@ -650,6 +6
60
,17 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
@@ -650,6 +6
71
,17 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
}
...
...
@@ -438,7 +485,7 @@ index 0fd7828..94b4fba 100644
memset(&(pnf_p7->subframe_buffer[buffer_index]), 0, sizeof(nfapi_pnf_p7_subframe_buffer_t));
pnf_p7->subframe_buffer[buffer_index].sfn_sf = -1;
}
@@ -685,7 +7
06
,7 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
@@ -685,7 +7
17
,7 @@
int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
if(pnf_p7->tick == 1000)
{
...
...
@@ -447,7 +494,7 @@ index 0fd7828..94b4fba 100644
pnf_p7->stats.dl_conf_ontime, pnf_p7->stats.dl_conf_late,
pnf_p7->stats.ul_conf_ontime, pnf_p7->stats.ul_conf_late,
pnf_p7->stats.hi_dci0_ontime, pnf_p7->stats.hi_dci0_late,
@@ -724,7 +7
4
5,7 @@
uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
@@ -724,7 +75
6
,7 @@
uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
if(recv_sfn_sf_dec > ((current_sfn_sf_dec + timing_window) % NFAPI_MAX_SFNSFDEC))
{
// out of window
...
...
@@ -456,7 +503,7 @@ index 0fd7828..94b4fba 100644
}
else
{
@@ -736,7 +7
57
,7 @@
uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
@@ -736,7 +7
68
,7 @@
uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
else
{
// too late
...
...
@@ -465,7 +512,7 @@ index 0fd7828..94b4fba 100644
}
}
@@ -751,8 +7
72
,8 @@
uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
@@ -751,8 +7
83
,8 @@
uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
}
else
{
...
...
@@ -476,7 +523,7 @@ index 0fd7828..94b4fba 100644
}
}
@@ -785,15 +8
06
,3
0
@@
void pnf_handle_dl_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_
@@ -785,15 +8
17
,3
2
@@
void pnf_handle_dl_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_
return;
}
...
...
@@ -503,6 +550,8 @@ index 0fd7828..94b4fba 100644
+ {
+ uint32_t sfn_sf_dec = NFAPI_SFNSF2DEC(req->sfn_sf);
+ uint8_t buffer_index = sfn_sf_dec % pnf_p7->_public.subframe_buffer_size;
+
+ //printf("%s() POPULATE DL_CONFIG_REQ sfn_sf:%d buffer_index:%d\n", __FUNCTION__, sfn_sf_dec, buffer_index);
// if there is already an dl_config_req make sure we free it.
if(pnf_p7->subframe_buffer[buffer_index].dl_config_req != 0)
...
...
@@ -512,10 +561,12 @@ index 0fd7828..94b4fba 100644
//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing dl_config_req at index %d (%d/%d)",
// pMyPhyInfo->sfnSf, bufferIdx,
// SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf));
@@ -994,6 +103
0
,1
1
@@
void pnf_handle_tx_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
@@ -994,6 +10
4
3,1
3
@@
void pnf_handle_tx_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
uint32_t sfn_sf_dec = NFAPI_SFNSF2DEC(req->sfn_sf);
uint8_t buffer_index = sfn_sf_dec % pnf_p7->_public.subframe_buffer_size;
+//printf("%s() POPULATE TX_REQ sfn_sf:%d buffer_index:%d\n", __FUNCTION__, sfn_sf_dec, buffer_index);
+
+ if (0 && NFAPI_SFNSF2DEC(req->sfn_sf)%100==0) NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() TX_REQ.req sfn_sf:%d pdus:%d - TX_REQ is within window\n",
+ __FUNCTION__,
+ NFAPI_SFNSF2DEC(req->sfn_sf),
...
...
@@ -524,7 +575,7 @@ index 0fd7828..94b4fba 100644
if(pnf_p7->subframe_buffer[buffer_index].tx_req != 0)
{
//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing tx_req at index %d (%d/%d)",
@@ -1126,12 +11
67
,27 @@
uint32_t calculate_t2(uint32_t now_time_hr, uint16_t sfn_sf, uint32_t sf_start_t
@@ -1126,12 +11
82
,27 @@
uint32_t calculate_t2(uint32_t now_time_hr, uint16_t sfn_sf, uint32_t sf_start_t
uint32_t sf_time_us = get_sf_time(now_time_hr, sf_start_time_hr);
uint32_t t2 = (NFAPI_SFNSF2DEC(sfn_sf) * 1000) + sf_time_us;
...
...
@@ -553,7 +604,7 @@ index 0fd7828..94b4fba 100644
uint32_t sf_time_us = get_sf_time(now_time_hr, sf_start_time_hr);
@@ -1391,6 +14
47
,8 @@
void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
@@ -1391,6 +14
62
,8 @@
void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
// read the segment
recvfrom_result = recvfrom(pnf_p7->p7_sock, pnf_p7->rx_message_buffer, header.message_length, MSG_DONTWAIT, (struct sockaddr*)&remote_addr, &remote_addr_size);
...
...
@@ -562,7 +613,7 @@ index 0fd7828..94b4fba 100644
if(recvfrom_result > 0)
{
pnf_handle_p7_message(pnf_p7->rx_message_buffer, recvfrom_result, pnf_p7, now_hr_time);
@@ -1417,7 +14
75
,10 @@
void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
@@ -1417,7 +14
90
,10 @@
void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
// need to update the time as we would only use the value from the
// select
...
...
@@ -574,7 +625,7 @@ index 0fd7828..94b4fba 100644
}
while(recvfrom_result > 0);
}
@@ -1512,7 +15
73
,7 @@
int pnf_p7_message_pump(pnf_p7_t* pnf_p7)
@@ -1512,7 +15
88
,7 @@
int pnf_p7_message_pump(pnf_p7_t* pnf_p7)
selectRetval = select(pnf_p7->p7_sock+1, &rfds, NULL, NULL, &timeout);
...
...
@@ -643,7 +694,7 @@ index fea3cf7..6800ee2 100644
curr = curr->next;
}
diff --git a/vnf/src/vnf_interface.c b/vnf/src/vnf_interface.c
index e559730..
163bb6b
100644
index e559730..
0aba0a2
100644
--- a/vnf/src/vnf_interface.c
+++ b/vnf/src/vnf_interface.c
@@ -342,6 +342,7 @@
int nfapi_vnf_start(nfapi_vnf_config_t* config)
...
...
@@ -654,6 +705,15 @@ index e559730..163bb6b 100644
memset(pnf, 0, sizeof(nfapi_vnf_pnf_info_t));
pnf->p5_sock = p5Sock;
pnf->p5_idx = p5_idx++;
@@ -663,7 +664,7 @@
int nfapi_vnf_allocate_phy(nfapi_vnf_config_t* config, int p5_idx, uint16_t* phy
info->p5_idx = p5_idx;
info->phy_id = vnf->next_phy_id++;
- info->timing_window = 10;
+ info->timing_window = 30; // This seems to override what gets set by the user - why???
info->timing_info_mode = 0x03;
info->timing_info_period = 128;
diff --git a/vnf/src/vnf_p7.c b/vnf/src/vnf_p7.c
index 8630385..4947c40 100644
--- a/vnf/src/vnf_p7.c
...
...
openair1/SCHED/fapi_l1.c
View file @
1ec934f9
...
...
@@ -39,6 +39,10 @@
int
oai_nfapi_dl_config_req
(
nfapi_dl_config_request_t
*
dl_config_req
);
int
oai_nfapi_tx_req
(
nfapi_tx_request_t
*
tx_req
);
int
oai_nfapi_hi_dci0_req
(
nfapi_hi_dci0_request_t
*
hi_dci0_req
);
int
oai_nfapi_ul_config_req
(
nfapi_ul_config_request_t
*
ul_config_req
);
extern
uint8_t
nfapi_pnf
;
void
handle_nfapi_dci_dl_pdu
(
PHY_VARS_eNB
*
eNB
,
...
...
@@ -640,7 +644,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
case
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
:
handle_nfapi_dci_dl_pdu
(
eNB
,
proc
,
dl_config_pdu
);
eNB
->
pdcch_vars
[
subframe
&
1
].
num_dci
++
;
LOG_
D
(
PHY
,
"Incremented num_dci:%d but already set??? dl_config:num_dci:%d
\n
"
,
eNB
->
pdcch_vars
[
subframe
&
1
].
num_dci
,
number_dci
);
LOG_
E
(
PHY
,
"Incremented num_dci:%d but already set??? dl_config:num_dci:%d
\n
"
,
eNB
->
pdcch_vars
[
subframe
&
1
].
num_dci
,
number_dci
);
do_oai
=
1
;
break
;
case
NFAPI_DL_CONFIG_BCH_PDU_TYPE
:
...
...
@@ -661,7 +665,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
// handle_nfapi_mch_dl_pdu(eNB,dl_config_pdu);
break
;
case
NFAPI_DL_CONFIG_DLSCH_PDU_TYPE
:
LOG_
D
(
PHY
,
"%s() NFAPI_DL_CONFIG_DLSCH_PDU_TYPE TX:%d/%d RX:%d/%d transport_blocks:%d pdu_index:%d data:%p
\n
"
,
__FUNCTION__
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
.
transport_blocks
,
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
.
pdu_index
,
TX_req
->
tx_request_body
.
tx_pdu_list
[
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
.
pdu_index
].
segments
[
0
].
segment_data
);
LOG_
E
(
PHY
,
"%s() NFAPI_DL_CONFIG_DLSCH_PDU_TYPE TX:%d/%d RX:%d/%d transport_blocks:%d pdu_index:%d data:%p
\n
"
,
__FUNCTION__
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
.
transport_blocks
,
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
.
pdu_index
,
TX_req
->
tx_request_body
.
tx_pdu_list
[
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
.
pdu_index
].
segments
[
0
].
segment_data
);
/*
AssertFatal(dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index<TX_req->tx_request_body.number_of_pdus,
...
...
@@ -712,14 +716,17 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
}
}
#if 1
if
(
do_oai
)
if
(
nfapi_pnf
&&
do_oai
)
{
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
}
#endif
if
(
nfapi_pnf
&&
number_hi_dci0_pdu
!=
0
)
{
oai_nfapi_hi_dci0_req
(
HI_DCI0_req
);
}
for
(
i
=
0
;
i
<
number_hi_dci0_pdu
;
i
++
)
{
...
...
@@ -731,7 +738,9 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
case
NFAPI_HI_DCI0_DCI_PDU_TYPE
:
handle_nfapi_hi_dci0_dci_pdu
(
eNB
,
proc
,
hi_dci0_req_pdu
);
eNB
->
pdcch_vars
[
subframe
&
1
].
num_dci
++
;
break
;
...
...
@@ -742,6 +751,20 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
}
}
if
(
nfapi_pnf
)
{
for
(
int
future_subframe
=
0
;
future_subframe
<
10
;
future_subframe
++
)
{
// DJP - indexing directly into the mac - not good - ??????
if
(
RC
.
mac
[
0
]
->
UL_req_tmp
[
CC_id
][
future_subframe
].
ul_config_request_body
.
number_of_pdus
>
0
)
{
LOG_D
(
PHY
,
"UL_CONFIG for the future future_subframe:%d PDUs:%d
\n
"
,
future_subframe
,
RC
.
mac
[
0
]
->
UL_req_tmp
[
CC_id
][
future_subframe
].
ul_config_request_body
.
number_of_pdus
);
oai_nfapi_ul_config_req
(
&
RC
.
mac
[
0
]
->
UL_req_tmp
[
CC_id
][
future_subframe
]);
}
}
}
for
(
i
=
0
;
i
<
number_ul_pdu
;
i
++
)
{
ul_config_pdu
=
&
UL_req
->
ul_config_request_body
.
ul_config_pdu_list
[
i
];
LOG_D
(
PHY
,
"NFAPI: ul_pdu %d : type %d
\n
"
,
i
,
ul_config_pdu
->
pdu_type
);
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
1ec934f9
...
...
@@ -477,8 +477,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
num_dci
=
eNB
->
pdcch_vars
[
subframe
&
1
].
num_dci
;
// LOG_D(PHY,"num_pdcch_symbols %"PRIu8",(dci common %"PRIu8", dci uespec %"PRIu8"\n",num_pdcch_symbols,
// DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
LOG_D
(
PHY
,
"num_pdcch_symbols %"
PRIu8
",(number dci %"
PRIu8
"
\n
"
,
num_pdcch_symbols
,
num_dci
);
//LOG_D(PHY,"num_pdcch_symbols %"PRIu8",number dci %"PRIu8"\n",num_pdcch_symbols, num_dci);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO
,
num_pdcch_symbols
);
...
...
@@ -487,10 +486,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
if
(
num_dci
>
0
)
LOG_D
(
PHY
,
"[eNB %"
PRIu8
"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (num_dci %"
PRIu8
") num_pdcch_symbols:%d
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
,
num_dci
,
num_pdcch_symbols
);
LOG_D
(
PHY
,
"Before generate_dci_top num_pdcch_symbols:%d num_dci:%d dci_alloc:dci_length:%d
\n
"
,
num_pdcch_symbols
,
num_dci
,
eNB
->
pdcch_vars
[
subframe
&
1
].
dci_alloc
[
0
].
dci_length
);
//LOG_D(PHY,"Before generate_dci_top num_pdcch_symbols:%d num_dci:%d dci_alloc:dci_length:%d\n", num_pdcch_symbols, num_dci, eNB->pdcch_vars[subframe&1].dci_alloc[0].dci_length);
generate_dci_top
(
num_pdcch_symbols
,
num_dci
,
...
...
@@ -786,6 +782,7 @@ void fill_sr_indication(PHY_VARS_eNB *eNB,uint16_t rnti,int frame,int subframe,u