LTE to NR conversions
This commit is contained in:
@@ -587,6 +587,26 @@ typedef struct {
|
||||
#define NFAPI_PNF_PHY_RF_TAG 0x1003
|
||||
|
||||
// Generic strucutre for single tlv value.
|
||||
typedef struct {
|
||||
nfapi_tl_t tl;
|
||||
int32_t value;
|
||||
} nfapi_int32_tlv_t;
|
||||
|
||||
typedef struct {
|
||||
nfapi_tl_t tl;
|
||||
uint32_t value;
|
||||
} nfapi_uint32_tlv_t;
|
||||
|
||||
typedef struct {
|
||||
nfapi_tl_t tl;
|
||||
int64_t value;
|
||||
} nfapi_int64_tlv_t;
|
||||
|
||||
typedef struct {
|
||||
nfapi_tl_t tl;
|
||||
uint64_t value;
|
||||
} nfapi_uint64_tlv_t;
|
||||
|
||||
typedef struct {
|
||||
nfapi_tl_t tl;
|
||||
uint16_t value;
|
||||
@@ -3653,6 +3673,42 @@ typedef struct {
|
||||
nfapi_vendor_extension_tlv_t vendor_extension;
|
||||
} nfapi_nmm_stop_response_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
// TODO: see if this needs to be uncommented
|
||||
|
||||
// These TLVs are used to setup the transport connection between VNF and PNF
|
||||
nfapi_ipv4_address_t p7_vnf_address_ipv4;
|
||||
nfapi_ipv6_address_t p7_vnf_address_ipv6;
|
||||
nfapi_uint16_tlv_t p7_vnf_port;
|
||||
|
||||
nfapi_ipv4_address_t p7_pnf_address_ipv4;
|
||||
nfapi_ipv6_address_t p7_pnf_address_ipv6;
|
||||
nfapi_uint16_tlv_t p7_pnf_port;
|
||||
|
||||
// // These TLVs are used to setup the transport connection between VNF and PNF
|
||||
nfapi_uint8_tlv_t dl_ue_per_sf;
|
||||
nfapi_uint8_tlv_t ul_ue_per_sf;
|
||||
|
||||
// These TLVs are used by PNF to report its RF capabilities to the VNF software
|
||||
nfapi_rf_bands_t rf_bands;
|
||||
|
||||
// These TLVs are used by the VNF to configure the synchronization with the PNF.
|
||||
nfapi_uint8_tlv_t timing_window;
|
||||
nfapi_uint8_tlv_t timing_info_mode;
|
||||
nfapi_uint8_tlv_t timing_info_period;
|
||||
|
||||
// These TLVs are used by the VNF to configure the RF in the PNF
|
||||
nfapi_uint16_tlv_t max_transmit_power;
|
||||
nfapi_uint32_tlv_t nrarfcn;
|
||||
|
||||
// nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands;
|
||||
// nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands;
|
||||
// nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands;
|
||||
// nfapi_uint8_tlv_t nmm_uplink_rssi_supported;
|
||||
|
||||
} nfapi_nr_nfapi_t;
|
||||
|
||||
//
|
||||
// Configuration options for the encode decode functions
|
||||
//
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#define _NFAPI_NR_INTERFACE_H_
|
||||
|
||||
#include "nfapi_interface.h"
|
||||
#include <nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h>
|
||||
#include "/home/glab/NR_nfapi/openairinterface5g/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h"
|
||||
|
||||
#define NFAPI_NR_MAX_NB_CCE_AGGREGATION_LEVELS 5
|
||||
#define NFAPI_NR_MAX_NB_TCI_STATES_PDCCH 64
|
||||
@@ -22,41 +22,8 @@
|
||||
// nFAPI enums
|
||||
|
||||
|
||||
|
||||
//These TLVs are used exclusively by nFAPI
|
||||
typedef struct
|
||||
{
|
||||
// These TLVs are used to setup the transport connection between VNF and PNF
|
||||
// nfapi_ipv4_address_t p7_vnf_address_ipv4;
|
||||
// nfapi_ipv6_address_t p7_vnf_address_ipv6;
|
||||
// nfapi_uint16_tlv_t p7_vnf_port;
|
||||
|
||||
// nfapi_ipv4_address_t p7_pnf_address_ipv4;
|
||||
// nfapi_ipv6_address_t p7_pnf_address_ipv6;
|
||||
// nfapi_uint16_tlv_t p7_pnf_port;
|
||||
|
||||
// // These TLVs are used to setup the transport connection between VNF and PNF
|
||||
// nfapi_uint8_tlv_t dl_ue_per_sf;
|
||||
// nfapi_uint8_tlv_t ul_ue_per_sf;
|
||||
|
||||
// These TLVs are used by PNF to report its RF capabilities to the VNF software
|
||||
nfapi_rf_bands_t rf_bands;
|
||||
|
||||
// These TLVs are used by the VNF to configure the synchronization with the PNF.
|
||||
// nfapi_uint8_tlv_t timing_window;
|
||||
// nfapi_uint8_tlv_t timing_info_mode;
|
||||
// nfapi_uint8_tlv_t timing_info_period;
|
||||
|
||||
// These TLVs are used by the VNF to configure the RF in the PNF
|
||||
// nfapi_uint16_tlv_t max_transmit_power;
|
||||
nfapi_uint32_tlv_t nrarfcn;
|
||||
|
||||
// nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands;
|
||||
// nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands;
|
||||
// nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands;
|
||||
// nfapi_uint8_tlv_t nmm_uplink_rssi_supported;
|
||||
|
||||
} nfapi_nr_nfapi_t;
|
||||
|
||||
#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x5100
|
||||
#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x5101
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include "stddef.h"
|
||||
#include "nfapi_interface.h"
|
||||
#include "nfapi_nr_interface.h"
|
||||
|
||||
#define NFAPI_NR_MAX_NB_CCE_AGGREGATION_LEVELS 5
|
||||
#define NFAPI_NR_MAX_NB_TCI_STATES_PDCCH 64
|
||||
@@ -24,25 +25,7 @@
|
||||
#define NFAPI_MAX_NUM_CB 8
|
||||
|
||||
// Extension to the generic structures for single tlv values
|
||||
typedef struct {
|
||||
nfapi_tl_t tl;
|
||||
int32_t value;
|
||||
} nfapi_int32_tlv_t;
|
||||
|
||||
typedef struct {
|
||||
nfapi_tl_t tl;
|
||||
uint32_t value;
|
||||
} nfapi_uint32_tlv_t;
|
||||
|
||||
typedef struct {
|
||||
nfapi_tl_t tl;
|
||||
int64_t value;
|
||||
} nfapi_int64_tlv_t;
|
||||
|
||||
typedef struct {
|
||||
nfapi_tl_t tl;
|
||||
uint64_t value;
|
||||
} nfapi_uint64_tlv_t;
|
||||
|
||||
typedef enum {
|
||||
NFAPI_NR_DMRS_TYPE1=0,
|
||||
@@ -94,6 +77,8 @@ typedef enum {
|
||||
|
||||
//3.3.1 PARAM
|
||||
|
||||
|
||||
|
||||
//same with nfapi_param_request_t
|
||||
typedef struct {
|
||||
nfapi_p4_p5_message_header_t header;
|
||||
@@ -463,9 +448,39 @@ typedef struct
|
||||
|
||||
} nfapi_nr_measurement_config_t;
|
||||
|
||||
|
||||
/* PARAM.REQUEST */
|
||||
typedef struct {
|
||||
uint8_t num_tlv;
|
||||
nfapi_p4_p5_message_header_t header;
|
||||
nfapi_vendor_extension_tlv_t vendor_extension;
|
||||
} nfapi_nr_param_request_scf_t;
|
||||
|
||||
/* PARAM.RESPONSE */
|
||||
typedef struct {
|
||||
nfapi_p4_p5_message_header_t header;
|
||||
nfapi_nr_param_errors_e error_code;
|
||||
|
||||
uint8_t number_of_tlvs;
|
||||
nfapi_vendor_extension_tlv_t vendor_extension;
|
||||
|
||||
nfapi_nr_cell_param_t cell_param;
|
||||
nfapi_nr_carrier_param_t carrier_param;
|
||||
nfapi_nr_pdcch_param_t pdcch_param;
|
||||
nfapi_nr_pucch_param_t pucch_param;
|
||||
nfapi_nr_pdsch_param_t pdsch_param;
|
||||
nfapi_nr_pusch_param_t pusch_param;
|
||||
nfapi_nr_prach_param_t prach_param;
|
||||
nfapi_nr_measurement_param_t measurement_param;
|
||||
nfapi_nr_nfapi_t nfapi_config;
|
||||
} nfapi_nr_param_response_scf_t;
|
||||
|
||||
/* CONFIG.REQUEST */
|
||||
typedef struct {
|
||||
nfapi_p4_p5_message_header_t header;
|
||||
nfapi_nr_param_errors_e error_code;
|
||||
|
||||
uint8_t num_tlv;
|
||||
nfapi_vendor_extension_tlv_t vendor_extension;
|
||||
|
||||
nfapi_nr_carrier_config_t carrier_config;
|
||||
nfapi_nr_cell_config_t cell_config;
|
||||
nfapi_nr_ssb_config_t ssb_config;
|
||||
@@ -473,8 +488,13 @@ typedef struct {
|
||||
nfapi_nr_ssb_table_t ssb_table;
|
||||
nfapi_nr_tdd_table_t tdd_table;
|
||||
nfapi_nr_measurement_config_t measurement_config;
|
||||
nfapi_nr_nfapi_t nfapi_config;
|
||||
} nfapi_nr_config_request_scf_t;
|
||||
|
||||
/* CONFIG.RESPONSE */
|
||||
typedef struct {
|
||||
// TODO: add here
|
||||
} nfapi_nr_config_response_scf_t;
|
||||
|
||||
//------------------------------//
|
||||
//3.3.3 START
|
||||
|
||||
@@ -33,11 +33,13 @@
|
||||
|
||||
#include <nfapi_interface.h>
|
||||
#include <nfapi.h>
|
||||
#include "nfapi_nr_interface.h"
|
||||
#include "nfapi_nr_interface_scf.h"
|
||||
#include <debug.h>
|
||||
|
||||
|
||||
// Pack routines
|
||||
|
||||
//TODO: Add pacl/unpack fns for uint32 and uint64
|
||||
static uint8_t pack_pnf_param_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t* end, nfapi_p4_p5_codec_config_t* config)
|
||||
{
|
||||
nfapi_pnf_param_request_t* request = (nfapi_pnf_param_request_t*)msg;
|
||||
|
||||
@@ -25,9 +25,12 @@ extern "C" {
|
||||
#include "nfapi_interface.h"
|
||||
#include "debug.h"
|
||||
#include <openair2/PHY_INTERFACE/IF_Module.h>
|
||||
#include "nfapi_nr_interface.h"
|
||||
#include "nfapi_nr_interface_scf.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
/*! This enum is used to describe the states of the pnf
|
||||
*/
|
||||
typedef enum
|
||||
@@ -166,7 +169,7 @@ typedef struct nfapi_pnf_config
|
||||
* The client is expected to send the PARAM.response after receiving the
|
||||
* PARAM.request. This can be done in the call back.
|
||||
*/
|
||||
int (*param_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_param_request_t* req);
|
||||
int (*param_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_nr_param_request_scf_t* req);
|
||||
|
||||
/*! A callback for the CONFIG.request
|
||||
* \param config A pointer to the pnf configuration
|
||||
@@ -178,7 +181,7 @@ typedef struct nfapi_pnf_config
|
||||
* The client is expected to send the CONFIG.response after receiving the
|
||||
* CONFIG.request. This can be done in the call back.
|
||||
*/
|
||||
int (*config_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_config_request_t* req);
|
||||
int (*config_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_nr_config_request_scf_t* req);
|
||||
|
||||
/*! A callback for the START.request
|
||||
* \param config A pointer to the pnf configuration
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "nfapi_nr_interface.h"
|
||||
#include "nfapi_nr_interface_scf.h"
|
||||
#include "pnf.h"
|
||||
|
||||
#define MAX_SCTP_STREAMS 16
|
||||
@@ -267,7 +268,7 @@ void pnf_handle_param_request(pnf_t* pnf, void *pRecvMsg, int recvMsgLen)
|
||||
}
|
||||
else
|
||||
{
|
||||
nfapi_param_request_t req;
|
||||
nfapi_nr_param_request_scf_t req;
|
||||
|
||||
nfapi_pnf_config_t* config = &(pnf->_public);
|
||||
|
||||
@@ -340,7 +341,7 @@ void pnf_handle_config_request(pnf_t* pnf, void *pRecvMsg, int recvMsgLen)
|
||||
}
|
||||
else
|
||||
{
|
||||
nfapi_config_request_t req;
|
||||
nfapi_nr_config_request_scf_t req;
|
||||
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "CONFIG.request received\n");
|
||||
|
||||
@@ -1393,8 +1394,15 @@ int pnf_connect(pnf_t* pnf)
|
||||
|
||||
int pnf_send_message(pnf_t* pnf, uint8_t *msg, uint32_t len, uint16_t stream)
|
||||
{
|
||||
|
||||
if (pnf->sctp)
|
||||
{
|
||||
printf("\nPNF SENDS: \n");
|
||||
for(int i=0; i<len; i++){
|
||||
printf("%d", msg[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
if (sctp_sendmsg(pnf->p5_sock, msg, len, NULL, 0, 42/*config->sctp_stream_number*/, 0, stream/*P5_STREAM_ID*/, 0, 0) < 0)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "sctp_sendmsg failed errno: %d\n", errno);
|
||||
@@ -1486,6 +1494,13 @@ int pnf_read_dispatch_message(pnf_t* pnf)
|
||||
}
|
||||
else
|
||||
{
|
||||
// print the received message
|
||||
printf("\n MESSAGE RECEIVED: \n");
|
||||
for(int i=0; i<message_size; i++){
|
||||
printf("%d", read_buffer[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
if (flags & MSG_NOTIFICATION)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "Notification received from %s:%u\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include "nfapi_nr_interface.h"
|
||||
#include "nfapi_nr_interface_scf.h"
|
||||
|
||||
nfapi_pnf_config_t* nfapi_pnf_config_create()
|
||||
{
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#include "nfapi_interface.h"
|
||||
#include "nfapi_nr_interface_scf.h"
|
||||
#include "nfapi_nr_interface.h"
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
@@ -248,7 +249,7 @@ typedef struct nfapi_vnf_config
|
||||
* then the substructure pointers should be set to 0 and then the client should
|
||||
* use the codec_config.deallocate function to release it at a future point
|
||||
*/
|
||||
int (*param_resp)(nfapi_vnf_config_t* config, int p5_idx, nfapi_param_response_t* resp);
|
||||
int (*param_resp)(nfapi_vnf_config_t* config, int p5_idx, nfapi_nr_param_response_scf_t* resp);
|
||||
|
||||
/*! A callback for the CONFIG.response
|
||||
* \param config A pointer to the vnf configuration
|
||||
@@ -266,7 +267,8 @@ typedef struct nfapi_vnf_config
|
||||
* then the substructure pointers should be set to 0 and then the client should
|
||||
* use the codec_config.deallocate function to release it at a future point
|
||||
*/
|
||||
int (*config_resp)(nfapi_vnf_config_t* config, int p5_idx, nfapi_config_response_t* resp);
|
||||
//TODO: Add nfapi_nr_config_response_scf_t struct
|
||||
int (*config_resp)(nfapi_vnf_config_t* config, int p5_idx, nfapi_nr_config_response_scf_t* resp);
|
||||
|
||||
/*! A callback for the START.resp
|
||||
* \param config A pointer to the vnf configuration
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
#include <errno.h>
|
||||
|
||||
#include "vnf.h"
|
||||
#include "nfapi_nr_interface.h"
|
||||
#include "nfapi_nr_interface_scf.h"
|
||||
|
||||
|
||||
void* vnf_malloc(nfapi_vnf_config_t* config, size_t size)
|
||||
@@ -1024,6 +1026,12 @@ int vnf_read_dispatch_message(nfapi_vnf_config_t* config, nfapi_vnf_pnf_info_t*
|
||||
// handle now if complete message in one or more segments
|
||||
if ((flags & 0x80) == 0x80)
|
||||
{
|
||||
printf("\nVNF RECEIVES:\n");
|
||||
for(int i=0; i<message_size; i++){
|
||||
printf("%d", read_buffer[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
vnf_handle_p4_p5_message(read_buffer, message_size, pnf->p5_idx, config);
|
||||
}
|
||||
else
|
||||
@@ -1051,6 +1059,12 @@ int vnf_read_dispatch_message(nfapi_vnf_config_t* config, nfapi_vnf_pnf_info_t*
|
||||
|
||||
static int vnf_send_p5_msg(nfapi_vnf_pnf_info_t* pnf, const void *msg, int len, uint8_t stream)
|
||||
{
|
||||
printf("\n MESSAGE SENT: \n");
|
||||
for(int i=0; i<len; i++){
|
||||
printf("%d", *(uint8_t *)(msg + i));
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
//NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s len:%d stream:%d\n", __FUNCTION__, len, stream);
|
||||
|
||||
int result = sctp_sendmsg(pnf->p5_sock, msg, len, (struct sockaddr*)&pnf->p5_pnf_sockaddr, sizeof(pnf->p5_pnf_sockaddr),1, 0, stream, 0, 4);
|
||||
|
||||
Reference in New Issue
Block a user