Merge remote-tracking branch 'origin/fix-gnb-ue-memory-leaks' into integration_2024_w32
This commit is contained in:
@@ -2051,35 +2051,6 @@ int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RCconfig_nr_parallel(void) {
|
||||
char *parallel_conf = NULL;
|
||||
char *worker_conf = NULL;
|
||||
extern char *parallel_config;
|
||||
extern char *worker_config;
|
||||
paramdef_t ThreadParams[] = THREAD_CONF_DESC;
|
||||
paramlist_def_t THREADParamList = {THREAD_CONFIG_STRING_THREAD_STRUCT,NULL,0};
|
||||
config_getlist(config_get_if(), &THREADParamList, NULL, 0, NULL);
|
||||
|
||||
if(THREADParamList.numelt>0) {
|
||||
config_getlist(config_get_if(), &THREADParamList, ThreadParams, sizeofArray(ThreadParams), NULL);
|
||||
parallel_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr));
|
||||
} else {
|
||||
parallel_conf = strdup("PARALLEL_RU_L1_TRX_SPLIT");
|
||||
}
|
||||
|
||||
if(THREADParamList.numelt>0) {
|
||||
config_getlist(config_get_if(), &THREADParamList, ThreadParams, sizeofArray(ThreadParams), NULL);
|
||||
worker_conf = strdup(*(THREADParamList.paramarray[0][THREAD_WORKER_IDX].strptr));
|
||||
} else {
|
||||
worker_conf = strdup("WORKER_ENABLE");
|
||||
}
|
||||
|
||||
if(parallel_config == NULL) set_parallel_conf(parallel_conf);
|
||||
if(worker_config == NULL) set_worker_conf(worker_conf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void NRRCConfig(void) {
|
||||
|
||||
paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
|
||||
@@ -2104,10 +2075,6 @@ void NRRCConfig(void) {
|
||||
// Get num RU instances
|
||||
config_getlist(config_get_if(), &RUParamList, NULL, 0, NULL);
|
||||
RC.nb_RU = RUParamList.numelt;
|
||||
|
||||
RCconfig_nr_parallel();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -604,33 +604,6 @@ typedef enum {
|
||||
#define MACRLC_REMOTE_S_PORTD_IDX 14
|
||||
#define MACRLC_SCHED_MODE_IDX 15
|
||||
|
||||
|
||||
/* thread configuration parameters section name */
|
||||
#define THREAD_CONFIG_STRING_THREAD_STRUCT "THREAD_STRUCT"
|
||||
|
||||
/* thread configuration parameters names */
|
||||
#define THREAD_CONFIG_STRING_PARALLEL "parallel_config"
|
||||
#define THREAD_CONFIG_STRING_WORKER "worker_config"
|
||||
|
||||
|
||||
#define THREAD_PARALLEL_IDX 0
|
||||
#define THREAD_WORKER_IDX 1
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* thread configuration parameters */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define THREAD_CONF_DESC { \
|
||||
{THREAD_CONFIG_STRING_PARALLEL, CONFIG_HLP_PARALLEL, 0, .strptr=NULL, .defstrval="PARALLEL_RU_L1_TRX_SPLIT", TYPE_STRING, 0}, \
|
||||
{THREAD_CONFIG_STRING_WORKER, CONFIG_HLP_WORKER, 0, .strptr=NULL, .defstrval="WORKER_ENABLE", TYPE_STRING, 0} \
|
||||
}
|
||||
|
||||
|
||||
#define CONFIG_HLP_WORKER "coding and FEP worker thread WORKER_DISABLE or WORKER_ENABLE\n"
|
||||
#define CONFIG_HLP_PARALLEL "PARALLEL_SINGLE_THREAD, PARALLEL_RU_L1_SPLIT, or PARALLEL_RU_L1_TRX_SPLIT(RU_L1_TRX_SPLIT by defult)\n"
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* security configuration */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
@@ -775,13 +775,13 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(NR_UE_RRC_INST_t *rrc,
|
||||
LOG_I(NR_RRC, "[UE %ld] Decoding SI\n", rrc->ue_id);
|
||||
NR_SystemInformation_t *si = bcch_message->message.choice.c1->choice.systemInformation;
|
||||
nr_decode_SI(SI_info, si);
|
||||
SEQUENCE_free(&asn_DEF_NR_BCCH_DL_SCH_Message, (void *)bcch_message, 1);
|
||||
break;
|
||||
case NR_BCCH_DL_SCH_MessageType__c1_PR_NOTHING:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
SEQUENCE_free(&asn_DEF_NR_BCCH_DL_SCH_Message, bcch_message, ASFM_FREE_EVERYTHING);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT );
|
||||
return 0;
|
||||
}
|
||||
@@ -1693,7 +1693,7 @@ static int nr_rrc_ue_decode_dcch(NR_UE_RRC_INST_t *rrc,
|
||||
break;
|
||||
}
|
||||
// release memory allocation
|
||||
SEQUENCE_free(&asn_DEF_NR_DL_DCCH_Message, (void *)dl_dcch_msg, 1);
|
||||
SEQUENCE_free(&asn_DEF_NR_DL_DCCH_Message, dl_dcch_msg, ASFM_FREE_EVERYTHING);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1798,6 +1798,9 @@ void *rrc_nrue(void *notUsed)
|
||||
NR_RRC_DCCH_DATA_IND(msg_p).sdu_size,
|
||||
NR_RRC_DCCH_DATA_IND(msg_p).gNB_index,
|
||||
&NR_RRC_DCCH_DATA_IND(msg_p).msg_integrity);
|
||||
/* this is allocated by itti_malloc in PDCP task (deliver_sdu_srb)
|
||||
then passed to the RRC task and freed after use */
|
||||
free(NR_RRC_DCCH_DATA_IND(msg_p).sdu_p);
|
||||
break;
|
||||
|
||||
case NAS_KENB_REFRESH_REQ:
|
||||
@@ -1816,7 +1819,7 @@ void *rrc_nrue(void *notUsed)
|
||||
|
||||
case NAS_UPLINK_DATA_REQ: {
|
||||
uint32_t length;
|
||||
uint8_t *buffer;
|
||||
uint8_t *buffer = NULL;
|
||||
NasUlDataReq *req = &NAS_UPLINK_DATA_REQ(msg_p);
|
||||
/* Create message for PDCP (ULInformationTransfer_t) */
|
||||
length = do_NR_ULInformationTransfer(&buffer, req->nasMsg.length, req->nasMsg.data);
|
||||
@@ -1825,6 +1828,7 @@ void *rrc_nrue(void *notUsed)
|
||||
// error: the remote gNB is hardcoded here
|
||||
rb_id_t srb_id = rrc->Srb[2] == RB_ESTABLISHED ? 2 : 1;
|
||||
nr_pdcp_data_req_srb(rrc->ue_id, srb_id, 0, length, buffer, deliver_pdu_srb_rlc, NULL);
|
||||
free(buffer);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1867,8 +1871,6 @@ static void nr_rrc_ue_process_ueCapabilityEnquiry(NR_UE_RRC_INST_t *rrc, NR_UECa
|
||||
c1->present = NR_UL_DCCH_MessageType__c1_PR_ueCapabilityInformation;
|
||||
asn1cCalloc(c1->choice.ueCapabilityInformation, info);
|
||||
info->rrc_TransactionIdentifier = UECapabilityEnquiry->rrc_TransactionIdentifier;
|
||||
NR_UE_CapabilityRAT_Container_t ue_CapabilityRAT_Container = {.rat_Type = NR_RAT_Type_nr};
|
||||
|
||||
if (!rrc->UECap.UE_NR_Capability) {
|
||||
rrc->UECap.UE_NR_Capability = CALLOC(1, sizeof(NR_UE_NR_Capability_t));
|
||||
asn1cSequenceAdd(rrc->UECap.UE_NR_Capability->rf_Parameters.supportedBandListNR.list, NR_BandNR_t, nr_bandnr);
|
||||
@@ -1885,9 +1887,10 @@ static void nr_rrc_ue_process_ueCapabilityEnquiry(NR_UE_RRC_INST_t *rrc, NR_UECa
|
||||
enc_rval.failed_type->name, enc_rval.encoded);
|
||||
rrc->UECap.sdu_size = (enc_rval.encoded + 7) / 8;
|
||||
LOG_I(PHY, "[RRC]UE NR Capability encoded, %d bytes (%zd bits)\n", rrc->UECap.sdu_size, enc_rval.encoded + 7);
|
||||
|
||||
OCTET_STRING_fromBuf(&ue_CapabilityRAT_Container.ue_CapabilityRAT_Container, (const char *)rrc->UECap.sdu, rrc->UECap.sdu_size);
|
||||
|
||||
/* RAT Container */
|
||||
NR_UE_CapabilityRAT_Container_t *ue_CapabilityRAT_Container = CALLOC(1, sizeof(NR_UE_CapabilityRAT_Container_t));
|
||||
ue_CapabilityRAT_Container->rat_Type = NR_RAT_Type_nr;
|
||||
OCTET_STRING_fromBuf(&ue_CapabilityRAT_Container->ue_CapabilityRAT_Container, (const char *)rrc->UECap.sdu, rrc->UECap.sdu_size);
|
||||
NR_UECapabilityEnquiry_IEs_t *ueCapabilityEnquiry_ie = UECapabilityEnquiry->criticalExtensions.choice.ueCapabilityEnquiry;
|
||||
if (get_softmodem_params()->nsa == 1) {
|
||||
OCTET_STRING_t *requestedFreqBandsNR = ueCapabilityEnquiry_ie->ue_CapabilityEnquiryExt;
|
||||
@@ -1907,7 +1910,7 @@ static void nr_rrc_ue_process_ueCapabilityEnquiry(NR_UE_RRC_INST_t *rrc, NR_UECa
|
||||
|
||||
for (int i = 0; i < ueCapabilityEnquiry_ie->ue_CapabilityRAT_RequestList.list.count; i++) {
|
||||
if (ueCapabilityEnquiry_ie->ue_CapabilityRAT_RequestList.list.array[i]->rat_Type == NR_RAT_Type_nr) {
|
||||
asn1cSeqAdd(&UEcapList->list, &ue_CapabilityRAT_Container);
|
||||
asn1cSeqAdd(&UEcapList->list, ue_CapabilityRAT_Container);
|
||||
uint8_t buffer[500];
|
||||
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_UL_DCCH_Message, NULL, (void *)&ul_dcch_msg, buffer, 500);
|
||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
||||
@@ -1921,6 +1924,9 @@ static void nr_rrc_ue_process_ueCapabilityEnquiry(NR_UE_RRC_INST_t *rrc, NR_UECa
|
||||
nr_pdcp_data_req_srb(rrc->ue_id, srb_id, 0, (enc_rval.encoded + 7) / 8, buffer, deliver_pdu_srb_rlc, NULL);
|
||||
}
|
||||
}
|
||||
/* Free struct members after it's done
|
||||
including locally allocated ue_CapabilityRAT_Container */
|
||||
ASN_STRUCT_RESET(asn_DEF_NR_UL_DCCH_Message, &ul_dcch_msg);
|
||||
}
|
||||
|
||||
void nr_rrc_initiate_rrcReestablishment(NR_UE_RRC_INST_t *rrc,
|
||||
|
||||
Reference in New Issue
Block a user