adding pack_dl_tti_request function
This commit is contained in:
@@ -45,6 +45,8 @@ sudo <oai_codebase>/cmake_targets/ran_build/build/nr-softmodem -O <oai_codebase>
|
|||||||
### Testing
|
### Testing
|
||||||
* Test by running VNF on a terminal and PNF in rfsim parallely
|
* Test by running VNF on a terminal and PNF in rfsim parallely
|
||||||
* If all works fine, move to UE testing.
|
* If all works fine, move to UE testing.
|
||||||
|
* Check if the `FAPI` core functionality is not broken by running gNB in monolithic mode
|
||||||
|
* Syncwith the latest stable commit in `develop` branch
|
||||||
|
|
||||||
* Testing with a UE
|
* Testing with a UE
|
||||||
* Run VNF
|
* Run VNF
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#include <nfapi_interface.h>
|
#include <nfapi_interface.h>
|
||||||
#include <nfapi.h>
|
#include <nfapi.h>
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
#include "nfapi_nr_interface_scf.h"
|
||||||
|
|
||||||
extern int nfapi_unpack_p7_vendor_extension(nfapi_p7_message_header_t* header, uint8_t **ppReadPackedMsg, void* user_data);
|
extern int nfapi_unpack_p7_vendor_extension(nfapi_p7_message_header_t* header, uint8_t **ppReadPackedMsg, void* user_data);
|
||||||
extern int nfapi_pack_p7_vendor_extension(nfapi_p7_message_header_t* header, uint8_t **ppWritePackedMsg, void* user_data);
|
extern int nfapi_pack_p7_vendor_extension(nfapi_p7_message_header_t* header, uint8_t **ppWritePackedMsg, void* user_data);
|
||||||
@@ -81,19 +82,19 @@ void* nfapi_p7_allocate(size_t size, nfapi_p7_codec_config_t* config)
|
|||||||
if(size == 0)
|
if(size == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
void* buffer_p = NULL;
|
void* buffer_p = NULL;
|
||||||
if(config && config->allocate)
|
if(config && config->allocate)
|
||||||
{
|
{
|
||||||
buffer_p = (config->allocate)(size);
|
buffer_p = (config->allocate)(size);
|
||||||
if(buffer_p != NULL){
|
if(buffer_p != NULL){
|
||||||
memset(buffer_p,0,size);
|
memset(buffer_p,0,size);
|
||||||
}
|
}
|
||||||
return buffer_p;
|
return buffer_p;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buffer_p = calloc(1, size);
|
buffer_p = calloc(1, size);
|
||||||
return buffer_p;
|
return buffer_p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -697,6 +698,29 @@ static uint8_t pack_dl_config_request_body_value(void* tlv, uint8_t **ppWritePac
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static uint8_t pack_dl_tti_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
||||||
|
{
|
||||||
|
nfapi_nr_dl_tti_request_t *pNfapiMsg = (nfapi_nr_dl_tti_request_t*)msg;
|
||||||
|
|
||||||
|
//return ( push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end) &&
|
||||||
|
//pack_tlv(NFAPI_DL_CONFIG_REQUEST_BODY_TAG, &pNfapiMsg->dl_config_request_body, ppWritePackedMsg, end, &pack_dl_config_request_body_value) &&
|
||||||
|
//pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
|
||||||
|
{ uint8_t w = push16(pNfapiMsg->SFN, ppWritePackedMsg, end);
|
||||||
|
uint8_t x = push16(pNfapiMsg->Slot, ppWritePackedMsg, end);
|
||||||
|
uint8_t y = pack_tlv(NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST, &pNfapiMsg->dl_tti_request_body, ppWritePackedMsg, end, &pack_dl_tti_request_body_value);
|
||||||
|
uint8_t z = pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
|
||||||
|
|
||||||
|
if (!w || !x || !y || !z)
|
||||||
|
{
|
||||||
|
NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() NFAPI_DL_CONFIG_REQUEST w:%u x:%u y:%u z:%u \n", __FUNCTION__,w,x,y,z);
|
||||||
|
}
|
||||||
|
|
||||||
|
return w && x && y && z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static uint8_t pack_dl_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
static uint8_t pack_dl_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
||||||
{
|
{
|
||||||
nfapi_dl_config_request_t *pNfapiMsg = (nfapi_dl_config_request_t*)msg;
|
nfapi_dl_config_request_t *pNfapiMsg = (nfapi_dl_config_request_t*)msg;
|
||||||
@@ -1551,7 +1575,7 @@ static uint8_t pack_tx_request_body_value(void* tlv, uint8_t **ppWritePackedMsg,
|
|||||||
// DJP - if(pusharray8(pdu->segments[j].segment_data, (uint32_t)(-1), pdu->segments[j].segment_length, ppWritePackedMsg, end) == 0)
|
// DJP - if(pusharray8(pdu->segments[j].segment_data, (uint32_t)(-1), pdu->segments[j].segment_length, ppWritePackedMsg, end) == 0)
|
||||||
int push_ret = pusharray8(pdu->segments[j].segment_data, 65535, pdu->segments[j].segment_length, ppWritePackedMsg, end);
|
int push_ret = pusharray8(pdu->segments[j].segment_data, 65535, pdu->segments[j].segment_length, ppWritePackedMsg, end);
|
||||||
|
|
||||||
if (pdu->segments[j].segment_length == 3)
|
if (pdu->segments[j].segment_length == 3)
|
||||||
{
|
{
|
||||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() BCH? segment_data:%x %x %x\n", __FUNCTION__,
|
NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() BCH? segment_data:%x %x %x\n", __FUNCTION__,
|
||||||
pdu->segments[j].segment_data[0],
|
pdu->segments[j].segment_data[0],
|
||||||
@@ -1583,43 +1607,43 @@ static uint8_t pack_tx_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *e
|
|||||||
|
|
||||||
return x && y && z;
|
return x && y && z;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t pack_release_request_body_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
|
static uint8_t pack_release_request_body_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
|
||||||
{
|
{
|
||||||
nfapi_ue_release_request_body_t* value = (nfapi_ue_release_request_body_t*)tlv;
|
nfapi_ue_release_request_body_t* value = (nfapi_ue_release_request_body_t*)tlv;
|
||||||
if(push16(value->number_of_TLVs, ppWritePackedMsg, end) == 0){
|
if(push16(value->number_of_TLVs, ppWritePackedMsg, end) == 0){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t j;
|
uint8_t j;
|
||||||
uint16_t num = value->number_of_TLVs;
|
uint16_t num = value->number_of_TLVs;
|
||||||
for(j = 0; j < num; ++j){
|
for(j = 0; j < num; ++j){
|
||||||
if(push16(value->ue_release_request_TLVs_list[j].rnti, ppWritePackedMsg, end) == 0){
|
if(push16(value->ue_release_request_TLVs_list[j].rnti, ppWritePackedMsg, end) == 0){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t pack_ue_release_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
static uint8_t pack_ue_release_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
||||||
{
|
{
|
||||||
nfapi_ue_release_request_t *pNfapiMsg = (nfapi_ue_release_request_t*)msg;
|
nfapi_ue_release_request_t *pNfapiMsg = (nfapi_ue_release_request_t*)msg;
|
||||||
int x = push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end);
|
int x = push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end);
|
||||||
int y = pack_tlv(NFAPI_UE_RELEASE_BODY_TAG, &pNfapiMsg->ue_release_request_body, ppWritePackedMsg, end, &pack_release_request_body_value);
|
int y = pack_tlv(NFAPI_UE_RELEASE_BODY_TAG, &pNfapiMsg->ue_release_request_body, ppWritePackedMsg, end, &pack_release_request_body_value);
|
||||||
int z = pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
|
int z = pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
|
||||||
return x && y && z;
|
return x && y && z;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t pack_ue_release_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
static uint8_t pack_ue_release_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
||||||
{
|
{
|
||||||
|
|
||||||
nfapi_ue_release_response_t *pNfapiMsg = (nfapi_ue_release_response_t*)msg;
|
nfapi_ue_release_response_t *pNfapiMsg = (nfapi_ue_release_response_t*)msg;
|
||||||
|
|
||||||
int x = push32(pNfapiMsg->error_code, ppWritePackedMsg, end);
|
int x = push32(pNfapiMsg->error_code, ppWritePackedMsg, end);
|
||||||
int z = pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
|
int z = pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
|
||||||
return x && z;
|
return x && z;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t pack_rx_ue_information_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
|
static uint8_t pack_rx_ue_information_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
|
||||||
{
|
{
|
||||||
nfapi_rx_ue_information* value = (nfapi_rx_ue_information*)tlv;
|
nfapi_rx_ue_information* value = (nfapi_rx_ue_information*)tlv;
|
||||||
@@ -2707,15 +2731,15 @@ int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBu
|
|||||||
//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() NFAPI_TX_REQUEST\n", __FUNCTION__);
|
//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() NFAPI_TX_REQUEST\n", __FUNCTION__);
|
||||||
result = pack_tx_request(pMessageHeader, &pWritePackedMessage, end, config);
|
result = pack_tx_request(pMessageHeader, &pWritePackedMessage, end, config);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NFAPI_UE_RELEASE_REQUEST:
|
case NFAPI_UE_RELEASE_REQUEST:
|
||||||
result =pack_ue_release_request(pMessageHeader, &pWritePackedMessage, end, config);
|
result =pack_ue_release_request(pMessageHeader, &pWritePackedMessage, end, config);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NFAPI_UE_RELEASE_RESPONSE:
|
case NFAPI_UE_RELEASE_RESPONSE:
|
||||||
result =pack_ue_release_response(pMessageHeader, &pWritePackedMessage, end, config);
|
result =pack_ue_release_response(pMessageHeader, &pWritePackedMessage, end, config);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NFAPI_HARQ_INDICATION:
|
case NFAPI_HARQ_INDICATION:
|
||||||
result = pack_harq_indication(pMessageHeader, &pWritePackedMessage, end, config);
|
result = pack_harq_indication(pMessageHeader, &pWritePackedMessage, end, config);
|
||||||
break;
|
break;
|
||||||
@@ -3282,6 +3306,208 @@ static uint8_t unpack_dl_config_ndlsch_pdu_rel13_value(void *tlv, uint8_t **ppRe
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static uint8_t unpack_dl_tti_request_body_value(void *tlv, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
||||||
|
{
|
||||||
|
nfapi_nr_dl_tti_request_body_t* value = (nfapi_nr_dl_tti_request_body_t*)tlv;
|
||||||
|
|
||||||
|
if(!(pull8(ppReadPackedMsg, &value->nGroup, end) &&
|
||||||
|
pull8(ppReadPackedMsg, &value->nPDUs, end) &&
|
||||||
|
pull8(ppReadPackedMsg, &value->nUe, end) &&
|
||||||
|
pull8(ppReadPackedMsg, &value->PduIdx, end)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
|
if(value->number_pdu > NFAPI_DL_CONFIG_MAX_PDU)
|
||||||
|
{
|
||||||
|
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s number of dl config pdu's exceed maxium (count:%d max:%d)\n", __FUNCTION__, value->number_pdu, NFAPI_DL_CONFIG_MAX_PDU);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(value->number_pdu)
|
||||||
|
{
|
||||||
|
value->dl_config_pdu_list = (nfapi_dl_config_request_pdu_t*)nfapi_p7_allocate(sizeof(nfapi_dl_config_request_pdu_t) * value->number_pdu, config);
|
||||||
|
if(value->dl_config_pdu_list == NULL)
|
||||||
|
{
|
||||||
|
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate dl config pdu list (count:%d)\n", __FUNCTION__, value->number_pdu);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value->dl_config_pdu_list = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t i;
|
||||||
|
uint16_t total_number_of_pdus = value->number_pdu;
|
||||||
|
for(i = 0; i < total_number_of_pdus; ++i)
|
||||||
|
{
|
||||||
|
nfapi_dl_config_request_pdu_t* pdu = &(value->dl_config_pdu_list[i]);
|
||||||
|
|
||||||
|
if(!(pull8(ppReadPackedMsg, &pdu->pdu_type, end) &&
|
||||||
|
pull8(ppReadPackedMsg, &pdu->pdu_size, end)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
uint8_t *packedPduEnd = (*ppReadPackedMsg) + pdu->pdu_size - 2;
|
||||||
|
|
||||||
|
if(packedPduEnd > end)
|
||||||
|
{
|
||||||
|
// pdu end of beyond buffer end
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(pdu->pdu_type)
|
||||||
|
{
|
||||||
|
case NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel8, &unpack_dl_config_dci_dl_pdu_rel8_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL9_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel9, &unpack_dl_config_dci_dl_pdu_rel9_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL10_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel10, &unpack_dl_config_dci_dl_pdu_rel10_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL11_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel11, &unpack_dl_config_dci_dl_pdu_rel11_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL12_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel12, &unpack_dl_config_dci_dl_pdu_rel12_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL13_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel13, &unpack_dl_config_dci_dl_pdu_rel13_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_BCH_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG, &pdu->bch_pdu.bch_pdu_rel8, &unpack_dl_config_bch_pdu_rel8_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_MCH_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_MCH_PDU_REL8_TAG, &pdu->mch_pdu.mch_pdu_rel8, &unpack_dl_config_mch_pdu_rel8_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_DLSCH_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel8, &unpack_dl_config_dlsch_pdu_rel8_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL9_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel9, &unpack_dl_config_dlsch_pdu_rel9_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel10, &unpack_dl_config_dlsch_pdu_rel10_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL11_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel11, &unpack_dl_config_dlsch_pdu_rel11_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL12_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel12, &unpack_dl_config_dlsch_pdu_rel12_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel13, &unpack_dl_config_dlsch_pdu_rel13_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_PCH_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL8_TAG, &pdu->pch_pdu.pch_pdu_rel8, &unpack_dl_config_pch_pdu_rel8_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL13_TAG, &pdu->pch_pdu.pch_pdu_rel13, &unpack_dl_config_pch_pdu_rel13_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_PRS_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_PRS_PDU_REL9_TAG, &pdu->prs_pdu.prs_pdu_rel9, &unpack_dl_config_prs_pdu_rel9_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_CSI_RS_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL10_TAG, &pdu->csi_rs_pdu.csi_rs_pdu_rel10, &unpack_dl_config_csi_rs_pdu_rel10_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL13_TAG, &pdu->csi_rs_pdu.csi_rs_pdu_rel13, &unpack_dl_config_csi_rs_pdu_rel13_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_EPDCCH_DL_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL8_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel8, &unpack_dl_config_dci_dl_pdu_rel8_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL9_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel9, &unpack_dl_config_dci_dl_pdu_rel9_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL10_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel10, &unpack_dl_config_dci_dl_pdu_rel10_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL11_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel11, &unpack_dl_config_dci_dl_pdu_rel11_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL12_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel12, &unpack_dl_config_dci_dl_pdu_rel12_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL13_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel13, &unpack_dl_config_dci_dl_pdu_rel13_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL11_TAG, &pdu->epdcch_pdu.epdcch_params_rel11, &unpack_dl_config_epdcch_params_rel11_value},
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL13_TAG, &pdu->epdcch_pdu.epdcch_params_rel13, &unpack_dl_config_epdcch_params_rel13_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_MPDCCH_PDU_REL13_TAG, &pdu->mpdcch_pdu.mpdcch_pdu_rel13, &unpack_dl_config_mpdcch_pdu_rel13_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_NBCH_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_NBCH_PDU_REL13_TAG, &pdu->nbch_pdu.nbch_pdu_rel13, &unpack_dl_config_nbch_pdu_rel13_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_NPDCCH_PDU_REL13_TAG, &pdu->npdcch_pdu.npdcch_pdu_rel13, &unpack_dl_config_npdcch_pdu_rel13_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NFAPI_DL_CONFIG_NDLSCH_PDU_TYPE:
|
||||||
|
{
|
||||||
|
unpack_tlv_t unpack_fns[] =
|
||||||
|
{
|
||||||
|
{ NFAPI_DL_CONFIG_REQUEST_NDLSCH_PDU_REL13_TAG, &pdu->ndlsch_pdu.ndlsch_pdu_rel13, &unpack_dl_config_ndlsch_pdu_rel13_value},
|
||||||
|
};
|
||||||
|
|
||||||
|
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Need to log an error
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static uint8_t unpack_dl_config_request_body_value(void *tlv, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
static uint8_t unpack_dl_config_request_body_value(void *tlv, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
||||||
{
|
{
|
||||||
nfapi_dl_config_request_body_t* value = (nfapi_dl_config_request_body_t*)tlv;
|
nfapi_dl_config_request_body_t* value = (nfapi_dl_config_request_body_t*)tlv;
|
||||||
@@ -4479,43 +4705,43 @@ static uint8_t unpack_tx_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *
|
|||||||
for(i = 0; i < totalNumPdus; ++i)
|
for(i = 0; i < totalNumPdus; ++i)
|
||||||
{
|
{
|
||||||
nfapi_tx_request_pdu_t* pdu = &(pNfapiMsg->tx_request_body.tx_pdu_list[i]);
|
nfapi_tx_request_pdu_t* pdu = &(pNfapiMsg->tx_request_body.tx_pdu_list[i]);
|
||||||
if (pdu) {
|
if (pdu) {
|
||||||
uint16_t length = 0;
|
uint16_t length = 0;
|
||||||
uint16_t index = 0;
|
uint16_t index = 0;
|
||||||
|
|
||||||
if(!(pull16(ppReadPackedMsg, &length, end) &&
|
if(!(pull16(ppReadPackedMsg, &length, end) &&
|
||||||
pull16(ppReadPackedMsg, &index, end)))
|
pull16(ppReadPackedMsg, &index, end)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
pdu->pdu_length = length;
|
pdu->pdu_length = length;
|
||||||
pdu->pdu_index = index;
|
pdu->pdu_index = index;
|
||||||
|
|
||||||
|
|
||||||
// TODO : May need to rethink this bit
|
// TODO : May need to rethink this bit
|
||||||
pdu->num_segments = 1;
|
pdu->num_segments = 1;
|
||||||
pdu->segments[0].segment_length = pdu->pdu_length;
|
pdu->segments[0].segment_length = pdu->pdu_length;
|
||||||
pdu->segments[0].segment_data = nfapi_p7_allocate(pdu->pdu_length, config);
|
pdu->segments[0].segment_data = nfapi_p7_allocate(pdu->pdu_length, config);
|
||||||
|
|
||||||
if(pdu->segments[0].segment_data)
|
if(pdu->segments[0].segment_data)
|
||||||
{
|
{
|
||||||
if(!pullarray8(ppReadPackedMsg, pdu->segments[0].segment_data, pdu->segments[0].segment_length, pdu->segments[0].segment_length, end))
|
if(!pullarray8(ppReadPackedMsg, pdu->segments[0].segment_data, pdu->segments[0].segment_length, pdu->segments[0].segment_length, end))
|
||||||
return 0;
|
return 0;
|
||||||
if (pdu->segments[0].segment_length == 3)
|
if (pdu->segments[0].segment_length == 3)
|
||||||
{
|
{
|
||||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() BCH? segment_data:%x %x %x\n", __FUNCTION__,
|
NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() BCH? segment_data:%x %x %x\n", __FUNCTION__,
|
||||||
pdu->segments[0].segment_data[0],
|
pdu->segments[0].segment_data[0],
|
||||||
pdu->segments[0].segment_data[1],
|
pdu->segments[0].segment_data[1],
|
||||||
pdu->segments[0].segment_data[2]
|
pdu->segments[0].segment_data[2]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "unpack_tx_request: Failed to allocate pdu (len:%d) %d/%d %d\n", pdu->pdu_length, totalNumPdus, i, pdu->pdu_index);
|
NFAPI_TRACE(NFAPI_TRACE_ERROR, "unpack_tx_request: Failed to allocate pdu (len:%d) %d/%d %d\n", pdu->pdu_length, totalNumPdus, i, pdu->pdu_index);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "NULL pdu\n");
|
NFAPI_TRACE(NFAPI_TRACE_ERROR, "NULL pdu\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -4529,55 +4755,55 @@ static uint8_t unpack_tx_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *
|
|||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t unpack_ue_release_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t* config)
|
static uint8_t unpack_ue_release_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t* config)
|
||||||
{
|
{
|
||||||
uint8_t proceed = 1;
|
uint8_t proceed = 1;
|
||||||
nfapi_ue_release_request_t *pNfapiMsg = (nfapi_ue_release_request_t*)msg;
|
nfapi_ue_release_request_t *pNfapiMsg = (nfapi_ue_release_request_t*)msg;
|
||||||
|
|
||||||
if(pull16(ppReadPackedMsg, &pNfapiMsg->sfn_sf, end) == 0)
|
if(pull16(ppReadPackedMsg, &pNfapiMsg->sfn_sf, end) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
while (((uint8_t*)(*ppReadPackedMsg) < end) && proceed)
|
while (((uint8_t*)(*ppReadPackedMsg) < end) && proceed)
|
||||||
{
|
{
|
||||||
nfapi_tl_t generic_tl;
|
nfapi_tl_t generic_tl;
|
||||||
if(unpack_tl(ppReadPackedMsg, &generic_tl, end) == 0)
|
if(unpack_tl(ppReadPackedMsg, &generic_tl, end) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch(generic_tl.tag)
|
switch(generic_tl.tag)
|
||||||
{
|
{
|
||||||
case NFAPI_UE_RELEASE_BODY_TAG:
|
case NFAPI_UE_RELEASE_BODY_TAG:
|
||||||
{
|
{
|
||||||
pNfapiMsg->ue_release_request_body.tl = generic_tl;
|
pNfapiMsg->ue_release_request_body.tl = generic_tl;
|
||||||
if( pull16(ppReadPackedMsg, &pNfapiMsg->ue_release_request_body.number_of_TLVs, end) == 0)
|
if( pull16(ppReadPackedMsg, &pNfapiMsg->ue_release_request_body.number_of_TLVs, end) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if(pNfapiMsg->ue_release_request_body.number_of_TLVs > NFAPI_RELEASE_MAX_RNTI)
|
if(pNfapiMsg->ue_release_request_body.number_of_TLVs > NFAPI_RELEASE_MAX_RNTI)
|
||||||
{
|
{
|
||||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s number of relese rnti's exceed maxium (count:%d max:%d)\n", __FUNCTION__, pNfapiMsg->ue_release_request_body.number_of_TLVs, NFAPI_RELEASE_MAX_RNTI);
|
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s number of relese rnti's exceed maxium (count:%d max:%d)\n", __FUNCTION__, pNfapiMsg->ue_release_request_body.number_of_TLVs, NFAPI_RELEASE_MAX_RNTI);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
uint8_t j;
|
uint8_t j;
|
||||||
uint16_t num = pNfapiMsg->ue_release_request_body.number_of_TLVs;
|
uint16_t num = pNfapiMsg->ue_release_request_body.number_of_TLVs;
|
||||||
for(j = 0; j < num; ++j){
|
for(j = 0; j < num; ++j){
|
||||||
if(pull16(ppReadPackedMsg, &pNfapiMsg->ue_release_request_body.ue_release_request_TLVs_list[j].rnti, end) == 0){
|
if(pull16(ppReadPackedMsg, &pNfapiMsg->ue_release_request_body.ue_release_request_TLVs_list[j].rnti, end) == 0){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "unpack_ue_release_request FIXME : Invalid type %d \n", generic_tl.tag );
|
NFAPI_TRACE(NFAPI_TRACE_ERROR, "unpack_ue_release_request FIXME : Invalid type %d \n", generic_tl.tag );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t unpack_harq_indication_tdd_harq_data_bundling(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end)
|
static uint8_t unpack_harq_indication_tdd_harq_data_bundling(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end)
|
||||||
{
|
{
|
||||||
nfapi_harq_indication_tdd_harq_data_bundling_t* value = (nfapi_harq_indication_tdd_harq_data_bundling_t*)tlv;
|
nfapi_harq_indication_tdd_harq_data_bundling_t* value = (nfapi_harq_indication_tdd_harq_data_bundling_t*)tlv;
|
||||||
@@ -5825,18 +6051,18 @@ static uint8_t unpack_nrach_indication_rel13_value(void *tlv, uint8_t **ppReadPa
|
|||||||
pull8(ppReadPackedMsg, &value->nrach_ce_level, end));
|
pull8(ppReadPackedMsg, &value->nrach_ce_level, end));
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t unpack_ue_release_resp(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t* config)
|
static uint8_t unpack_ue_release_resp(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t* config)
|
||||||
{
|
{
|
||||||
nfapi_ue_release_response_t *pNfapiMsg = (nfapi_ue_release_response_t*)msg;
|
nfapi_ue_release_response_t *pNfapiMsg = (nfapi_ue_release_response_t*)msg;
|
||||||
if(pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end) == 0){
|
if(pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end) == 0){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "ue_release_response:error_code = %d\n", pNfapiMsg->error_code);
|
NFAPI_TRACE(NFAPI_TRACE_INFO, "ue_release_response:error_code = %d\n", pNfapiMsg->error_code);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t unpack_nrach_indication_body_value(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
static uint8_t unpack_nrach_indication_body_value(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
|
||||||
{
|
{
|
||||||
nfapi_nrach_indication_body_t* value = (nfapi_nrach_indication_body_t*)tlv;
|
nfapi_nrach_indication_body_t* value = (nfapi_nrach_indication_body_t*)tlv;
|
||||||
@@ -6049,17 +6275,17 @@ static int check_unpack_length(nfapi_message_id_e msgId, uint32_t unpackedBufLen
|
|||||||
if (unpackedBufLen >= sizeof(nfapi_timing_info_t))
|
if (unpackedBufLen >= sizeof(nfapi_timing_info_t))
|
||||||
retLen = sizeof(nfapi_timing_info_t);
|
retLen = sizeof(nfapi_timing_info_t);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NFAPI_UE_RELEASE_REQUEST:
|
case NFAPI_UE_RELEASE_REQUEST:
|
||||||
if (unpackedBufLen >= sizeof(nfapi_ue_release_request_t))
|
if (unpackedBufLen >= sizeof(nfapi_ue_release_request_t))
|
||||||
retLen = sizeof(nfapi_ue_release_request_t);
|
retLen = sizeof(nfapi_ue_release_request_t);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NFAPI_UE_RELEASE_RESPONSE:
|
case NFAPI_UE_RELEASE_RESPONSE:
|
||||||
if (unpackedBufLen >= sizeof(nfapi_ue_release_response_t))
|
if (unpackedBufLen >= sizeof(nfapi_ue_release_response_t))
|
||||||
retLen = sizeof(nfapi_ue_release_response_t);
|
retLen = sizeof(nfapi_ue_release_response_t);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown message ID %d\n", msgId);
|
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown message ID %d\n", msgId);
|
||||||
break;
|
break;
|
||||||
@@ -6179,14 +6405,14 @@ int nfapi_p7_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUn
|
|||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NFAPI_UE_RELEASE_REQUEST:
|
case NFAPI_UE_RELEASE_REQUEST:
|
||||||
if (check_unpack_length(NFAPI_UE_RELEASE_REQUEST, unpackedBufLen))
|
if (check_unpack_length(NFAPI_UE_RELEASE_REQUEST, unpackedBufLen))
|
||||||
result = unpack_ue_release_request(&pReadPackedMessage, end, pMessageHeader, config);
|
result = unpack_ue_release_request(&pReadPackedMessage, end, pMessageHeader, config);
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NFAPI_HARQ_INDICATION:
|
case NFAPI_HARQ_INDICATION:
|
||||||
if (check_unpack_length(NFAPI_HARQ_INDICATION, unpackedBufLen))
|
if (check_unpack_length(NFAPI_HARQ_INDICATION, unpackedBufLen))
|
||||||
result = unpack_harq_indication(&pReadPackedMessage, end, pMessageHeader, config);
|
result = unpack_harq_indication(&pReadPackedMessage, end, pMessageHeader, config);
|
||||||
@@ -6284,14 +6510,14 @@ int nfapi_p7_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUn
|
|||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NFAPI_UE_RELEASE_RESPONSE:
|
case NFAPI_UE_RELEASE_RESPONSE:
|
||||||
if (check_unpack_length(NFAPI_UE_RELEASE_RESPONSE, unpackedBufLen))
|
if (check_unpack_length(NFAPI_UE_RELEASE_RESPONSE, unpackedBufLen))
|
||||||
result = unpack_ue_release_resp(&pReadPackedMessage, end, pMessageHeader, config);
|
result = unpack_ue_release_resp(&pReadPackedMessage, end, pMessageHeader, config);
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
if(pMessageHeader->message_id >= NFAPI_VENDOR_EXT_MSG_MIN &&
|
if(pMessageHeader->message_id >= NFAPI_VENDOR_EXT_MSG_MIN &&
|
||||||
|
|||||||
Reference in New Issue
Block a user