Introduced MAX_QOS_FLOWS (64) and replaced QOSFLOW_MAX_VALUE
The maximum number of QoS flows is 64. - Replace QOSFLOW_MAX_VALUE with MAX_QOS_FLOWS constant - Move MAX_QOS_FLOWS definition to common/platform_constants.h - Remove duplicate QOSFLOW_MAX_VALUE definition from ngap_messages_types.h This improves maintainability by centralizing the QoS flow limit constant and eliminates duplicate definitions across different header files.
This commit is contained in:
@@ -97,4 +97,7 @@
|
||||
#define UNUSED_VARIABLE(vARIABLE) (void)(vARIABLE)
|
||||
#define NUM_PRACH_RX_FOR_NOISE_ESTIMATE 100
|
||||
|
||||
// SDAP
|
||||
#define MAX_QOS_FLOWS 64
|
||||
|
||||
#endif /* __PLATFORM_CONSTANTS_H__ */
|
||||
|
||||
@@ -91,8 +91,6 @@
|
||||
#define NGAP_MAX_NB_AMF_IP_ADDRESS 10
|
||||
#define NGAP_IMSI_LENGTH 16
|
||||
|
||||
#define QOSFLOW_MAX_VALUE 64
|
||||
|
||||
#define NGAP_MAX_NO_TAI_PAGING 16 // 9.2.4.1 3GPP TS 38.413
|
||||
|
||||
/* Security key length used within gNB
|
||||
@@ -241,7 +239,7 @@ typedef struct ngap_mobility_restriction_s{
|
||||
/* PDU Session Resource Setup Request Transfer (9.3.4.1 3GPP TS 38.413) */
|
||||
typedef struct {
|
||||
uint8_t nb_qos;
|
||||
pdusession_level_qos_parameter_t qos[QOSFLOW_MAX_VALUE];
|
||||
pdusession_level_qos_parameter_t qos[MAX_QOS_FLOWS];
|
||||
pdu_session_type_t pdu_session_type;
|
||||
// UPF endpoint of the NG-U (N3) transport bearer
|
||||
gtpu_tunnel_t n3_incoming;
|
||||
@@ -272,7 +270,7 @@ typedef struct pdusession_setup_s {
|
||||
uint8_t nb_of_qos_flow;
|
||||
|
||||
/* qos flow list(1 ~ 64) */
|
||||
pdusession_associate_qosflow_t associated_qos_flows[QOSFLOW_MAX_VALUE];
|
||||
pdusession_associate_qosflow_t associated_qos_flows[MAX_QOS_FLOWS];
|
||||
} pdusession_setup_t;
|
||||
|
||||
typedef struct qos_flow_tobe_modified_s {
|
||||
@@ -286,7 +284,7 @@ typedef struct pdusession_modify_s {
|
||||
uint8_t nb_of_qos_flow;
|
||||
|
||||
// qos_flow_add_or_modify
|
||||
qos_flow_tobe_modified_t qos[QOSFLOW_MAX_VALUE];
|
||||
qos_flow_tobe_modified_t qos[MAX_QOS_FLOWS];
|
||||
} pdusession_modify_t;
|
||||
|
||||
/* Cause (9.3.1.2 of 3GPP TS 38.413) */
|
||||
@@ -506,7 +504,7 @@ typedef struct {
|
||||
uint8_t pdusession_id;
|
||||
// QoS Flow Information List
|
||||
uint8_t nb_of_qos_flow;
|
||||
qosflow_info_t qos_flow_info[QOSFLOW_MAX_VALUE];
|
||||
qosflow_info_t qos_flow_info[MAX_QOS_FLOWS];
|
||||
} pdusession_resource_info_t;
|
||||
|
||||
/* 3GPP TS 38.413 9.3.1.97 */
|
||||
@@ -627,7 +625,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
// QoS Flow Setup Response List
|
||||
uint8_t nb_of_qos_flow;
|
||||
pdusession_associate_qosflow_t qos_setup_list[QOSFLOW_MAX_VALUE];
|
||||
pdusession_associate_qosflow_t qos_setup_list[MAX_QOS_FLOWS];
|
||||
// DL NG-U UP TNL Information
|
||||
uint32_t gtp_teid;
|
||||
transport_layer_addr_t gNB_addr;
|
||||
@@ -657,7 +655,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
// QoS Flow to be Forwarded List
|
||||
uint8_t nb_of_qos_flow;
|
||||
pdusession_associate_qosflow_t qos_setup_list[QOSFLOW_MAX_VALUE];
|
||||
pdusession_associate_qosflow_t qos_setup_list[MAX_QOS_FLOWS];
|
||||
// UL Forwarding UP TNL Information
|
||||
uint32_t gtp_teid;
|
||||
transport_layer_addr_t gNB_addr;
|
||||
|
||||
@@ -132,7 +132,7 @@ typedef struct drb_s {
|
||||
int pdusession_id;
|
||||
int sdap_HeaderDL;
|
||||
int sdap_HeaderUL;
|
||||
int mappedQoS_FlowsToAdd[QOSFLOW_MAX_VALUE];
|
||||
int mappedQoS_FlowsToAdd[MAX_QOS_FLOWS];
|
||||
} sdap_config;
|
||||
} cnAssociation;
|
||||
struct pdcp_config_s {
|
||||
|
||||
@@ -176,7 +176,7 @@ static void cp_pdusession_transfer_to_pdusession(pdusession_t *dst, const pduses
|
||||
dst->n3_incoming = src->n3_incoming;
|
||||
/* QoS handling */
|
||||
DevAssert(!dst->qos.data);
|
||||
DevAssert(src->nb_qos < QOSFLOW_MAX_VALUE);
|
||||
DevAssert(src->nb_qos < MAX_QOS_FLOWS);
|
||||
// Initialise mapped QoS list per PDU Session
|
||||
seq_arr_init(&dst->qos, sizeof(nr_rrc_qos_t));
|
||||
// Add QoS flow to list
|
||||
@@ -355,7 +355,7 @@ bool trigger_bearer_setup(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, int n, pdusession
|
||||
|
||||
FOR_EACH_SEQ_ARR(nr_rrc_qos_t *, qos, &session->qos) {
|
||||
pdusession_level_qos_parameter_t *qos_session = &qos->qos;
|
||||
DevAssert(drb->numQosFlow2Setup < QOSFLOW_MAX_VALUE);
|
||||
DevAssert(drb->numQosFlow2Setup < MAX_QOS_FLOWS);
|
||||
qos_flow_to_setup_t *qos_flow = &drb->qosFlows[drb->numQosFlow2Setup++];
|
||||
qos_characteristics_t *qos_char = &qos_flow->qos_params.qos_characteristics;
|
||||
qos_flow->qfi = qos_session->qfi;
|
||||
@@ -515,7 +515,7 @@ static pdusession_setup_t fill_ngap_pdusession_setup(pdusession_t *session)
|
||||
out.pdu_session_type = session->pdu_session_type;
|
||||
out.n3_outgoing = cp_gtp_tunnel(session->n3_outgoing);
|
||||
FOR_EACH_SEQ_ARR(nr_rrc_qos_t *, qos_session, &session->qos) {
|
||||
DevAssert(out.nb_of_qos_flow < QOSFLOW_MAX_VALUE);
|
||||
DevAssert(out.nb_of_qos_flow < MAX_QOS_FLOWS);
|
||||
pdusession_associate_qosflow_t *q = &out.associated_qos_flows[out.nb_of_qos_flow++];
|
||||
q->qfi = qos_session->qos.qfi;
|
||||
q->qos_flow_mapping_ind = QOSFLOW_MAPPING_INDICATION_DL;
|
||||
@@ -882,7 +882,7 @@ void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t ins
|
||||
static void nr_rrc_update_qos(seq_arr_t *list, const int nb_qos, const pdusession_level_qos_parameter_t *in_qos)
|
||||
{
|
||||
DevAssert(nb_qos == 1);
|
||||
DevAssert(nb_qos < QOSFLOW_MAX_VALUE);
|
||||
DevAssert(nb_qos < MAX_QOS_FLOWS);
|
||||
for (uint8_t i = 0; i < nb_qos; ++i) {
|
||||
nr_rrc_qos_t *qos = find_qos(list, in_qos[i].qfi);
|
||||
if (qos) {
|
||||
@@ -1012,7 +1012,7 @@ int rrc_gNB_send_NGAP_PDUSESSION_MODIFY_RESP(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE
|
||||
pdusession_modify_t *p = &resp->pdusessions[pdu_sessions_done++];
|
||||
p->pdusession_id = session->param.pdusession_id;
|
||||
FOR_EACH_SEQ_ARR(nr_rrc_qos_t *, qos_session, &session->param.qos) {
|
||||
DevAssert(p->nb_of_qos_flow < QOSFLOW_MAX_VALUE);
|
||||
DevAssert(p->nb_of_qos_flow < MAX_QOS_FLOWS);
|
||||
qos_flow_tobe_modified_t *q = &p->qos[p->nb_of_qos_flow++];
|
||||
q->qfi = qos_session->qos.qfi;
|
||||
}
|
||||
@@ -1414,7 +1414,7 @@ void rrc_gNB_send_NGAP_HANDOVER_REQUEST_ACKNOWLEDGE(gNB_RRC_INST *rrc, gNB_RRC_U
|
||||
memcpy(transfer->gNB_addr.buffer, session->param.n3_outgoing.addr.buffer, session->param.n3_outgoing.addr.length);
|
||||
transfer->gNB_addr.length = session->param.n3_outgoing.addr.length;
|
||||
FOR_EACH_SEQ_ARR(nr_rrc_qos_t *, qos, &session->param.qos) {
|
||||
DevAssert(transfer->nb_of_qos_flow < QOSFLOW_MAX_VALUE);
|
||||
DevAssert(transfer->nb_of_qos_flow < MAX_QOS_FLOWS);
|
||||
pdusession_associate_qosflow_t *qos_setup = &transfer->qos_setup_list[transfer->nb_of_qos_flow++];
|
||||
qos_setup->qfi = qos->qos.qfi;
|
||||
qos_setup->qos_flow_mapping_ind = QOSFLOW_MAPPING_INDICATION_DL;
|
||||
@@ -1662,7 +1662,7 @@ void rrc_gNB_send_NGAP_HANDOVER_REQUIRED(gNB_RRC_INST *rrc,
|
||||
pdusession_resource_info_t *pdu_info = &msg.source2target->pdu_session_resource[msg.source2target->nb_pdu_session_resource++];
|
||||
pdu_info->pdusession_id = session->pdusession_id;
|
||||
FOR_EACH_SEQ_ARR(nr_rrc_qos_t *, qos, &session->qos) {
|
||||
DevAssert(pdu_info->nb_of_qos_flow < QOSFLOW_MAX_VALUE);
|
||||
DevAssert(pdu_info->nb_of_qos_flow < MAX_QOS_FLOWS);
|
||||
qosflow_info_t *qos_flow = &pdu_info->qos_flow_info[pdu_info->nb_of_qos_flow++];
|
||||
qos_flow->qfi = qos->qos.qfi;
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ nr_rrc_qos_t *add_qos(seq_arr_t *qos, const pdusession_level_qos_parameter_t *in
|
||||
DevAssert(qos);
|
||||
DevAssert(in);
|
||||
|
||||
if (seq_arr_size(qos) == QOSFLOW_MAX_VALUE) {
|
||||
if (seq_arr_size(qos) == MAX_QOS_FLOWS) {
|
||||
LOG_W(NR_RRC, "Reached maximum number of QoS flows = %ld\n", seq_arr_size(qos));
|
||||
return NULL;
|
||||
}
|
||||
@@ -270,7 +270,7 @@ drb_t *generateDRB(gNB_RRC_UE_t *ue,
|
||||
FOR_EACH_SEQ_ARR(nr_rrc_qos_t *, qos_session, &pduSession->qos) {
|
||||
qos_session->drb_id = est_drb->drb_id; // Map DRB to QoS
|
||||
est_drb->cnAssociation.sdap_config.mappedQoS_FlowsToAdd[qos_flow_index++] = qos_session->qos.qfi;
|
||||
DevAssert(qos_flow_index <= QOSFLOW_MAX_VALUE);
|
||||
DevAssert(qos_flow_index <= MAX_QOS_FLOWS);
|
||||
}
|
||||
/* PDCP Configuration */
|
||||
set_default_drb_pdcp_config(&est_drb->pdcp_config, do_drb_integrity, do_drb_ciphering, pdcp_config, ue->redcap_cap);
|
||||
@@ -299,7 +299,7 @@ NR_DRB_ToAddMod_t *generateDRB_ASN1(const drb_t *drb_asn1)
|
||||
SDAP_config->sdap_HeaderUL = drb_asn1->cnAssociation.sdap_config.sdap_HeaderUL;
|
||||
SDAP_config->defaultDRB = drb_asn1->cnAssociation.sdap_config.defaultDRB;
|
||||
|
||||
for (int qos_flow_index = 0; qos_flow_index < QOSFLOW_MAX_VALUE; qos_flow_index++) {
|
||||
for (int qos_flow_index = 0; qos_flow_index < MAX_QOS_FLOWS; qos_flow_index++) {
|
||||
if (drb_asn1->cnAssociation.sdap_config.mappedQoS_FlowsToAdd[qos_flow_index] != 0) {
|
||||
asn1cSequenceAdd(sdapFlows->list, NR_QFI_t, qfi);
|
||||
*qfi = drb_asn1->cnAssociation.sdap_config.mappedQoS_FlowsToAdd[qos_flow_index];
|
||||
|
||||
Reference in New Issue
Block a user