Merge tag '2025.w42' into HEAD
Integration 2025 week 42 * !3623 Optimization of PDSCH precoding operation * !3691 \[CI\] Ensure multi-arch DockerHub Push after successful image build * !3696 asn1c doesn't follow c99 variables alias rules, it needs to be compiled this... * !3685 Assign antenna ports correctly for 1 and 2 layers for aerial. * !3495 Type0 PDSCH frequency allocation at L1 UE * !3686 Remove NR L2 simulator code from UE * !3693 Remove B200-specific clock-rate setting * !3701 OAI UE: add shared RSRP Table 10.1.6.1-1 mapping function to helpers and adopt it RRC UE * !3662 RRC UE file cleanup * update doc/README.md * !3608 use common scale channel functions for DLSCH and ULSCH * !3694 fix non initialized DMRS port value in case of DCI00 at UE * !3702 Extend F1 rfsim CI test * !3704 remove unused global queues, dead code * !3673 CI: Aerial: Add an UL-heavy pipeline test * !3651 CI: Upgrade HO setup to use an attenuator * !3695 CI: Upgrade Aerial setup to 25-2.1
This commit is contained in:
@@ -129,4 +129,4 @@ add_subdirectory(flexric/src/util)
|
||||
add_subdirectory(RAN_FUNCTION)
|
||||
|
||||
add_library(e2_agent_arg STATIC e2_agent_arg.c)
|
||||
add_dependencies(e2_agent_arg generate_T)
|
||||
target_link_libraries(e2_agent_arg PRIVATE CONFIG_LIB log_headers)
|
||||
|
||||
@@ -27,10 +27,11 @@
|
||||
#include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h"
|
||||
#include "openair2/E2AP/flexric/src/util/time_now_us.h"
|
||||
#include "openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h"
|
||||
|
||||
#include "ds/seq_arr.h"
|
||||
|
||||
#if defined (NGRAN_GNB_CUCP)
|
||||
#include "openair2/RRC/NR/rrc_gNB_UE_context.h"
|
||||
#include "openair2/RRC/NR/rrc_gNB_radio_bearers.h"
|
||||
#endif
|
||||
|
||||
bool read_gtp_sm(void * data)
|
||||
@@ -62,16 +63,15 @@ bool read_gtp_sm(void * data)
|
||||
rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[0], ue_id_list[i]);
|
||||
|
||||
gtp->msg.ngut[i].rnti = ue_id_list[i];
|
||||
int nb_pdu_session = ue_context_p->ue_context.nb_of_pdusessions;
|
||||
if (nb_pdu_session > 0) {
|
||||
int nb_pdu_idx = nb_pdu_session - 1;
|
||||
gtp->msg.ngut[i].teidgnb = ue_context_p->ue_context.pduSession[nb_pdu_idx].param.gNB_teid_N3;
|
||||
gtp->msg.ngut[i].teidupf = ue_context_p->ue_context.pduSession[nb_pdu_idx].param.UPF_teid_N3;
|
||||
FOR_EACH_SEQ_ARR(rrc_pdu_session_param_t*, session, &ue_context_p->ue_context.pduSessions) {
|
||||
gtp->msg.ngut[i].teidgnb = session->param.n3_outgoing.teid;
|
||||
gtp->msg.ngut[i].teidupf = session->param.n3_incoming.teid;
|
||||
// TODO: one PDU session has multiple QoS Flow
|
||||
int nb_qos_flow = ue_context_p->ue_context.pduSession[nb_pdu_idx].param.nb_qos;
|
||||
if (nb_qos_flow > 0) {
|
||||
gtp->msg.ngut[i].qfi = ue_context_p->ue_context.pduSession[nb_pdu_idx].param.qos[nb_qos_flow - 1].qfi;
|
||||
DevAssert(seq_arr_size(&session->param.qos) == 1);
|
||||
FOR_EACH_SEQ_ARR(nr_rrc_qos_t *, qos, &session->param.qos) {
|
||||
gtp->msg.ngut[i].qfi = qos->qos.qfi;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ bool read_mac_sm(void* data)
|
||||
}
|
||||
if (is_ul_slot(rd->slot, &RC.nrmac[mod_id]->frame_structure)) {
|
||||
rd->ul_curr_tbs = UE->mac_stats.ul.current_bytes;
|
||||
rd->ul_sched_rb = sched_ctrl->sched_pusch.rbSize;
|
||||
rd->ul_sched_rb = UE->mac_stats.ul.current_rbs;
|
||||
}
|
||||
|
||||
rd->rnti = UE->rnti;
|
||||
|
||||
@@ -30,7 +30,12 @@ ue_id_e2sm_t fill_e2sm_gnb_ue_id_data(const gNB_RRC_UE_t *rrc_ue_context, __attr
|
||||
// 6.2.3.16
|
||||
// Mandatory
|
||||
// AMF UE NGAP ID
|
||||
ue_id.gnb.amf_ue_ngap_id = rrc_ue_context->amf_ue_ngap_id;
|
||||
// it seems that certain messages can be triggered before the ue has an AMF
|
||||
// UE NGAP ID (e.g., RRC setup). In that case, the AMF UE NGAP ID is set to
|
||||
// an invalid value. Below, check for this, and set 0 in that case (which
|
||||
// historically used to be in amf_ue_ngap_id).
|
||||
uint64_t auni = rrc_ue_context->amf_ue_ngap_id;
|
||||
ue_id.gnb.amf_ue_ngap_id = auni < (1LL << 40) ? auni : 0;
|
||||
|
||||
// Mandatory
|
||||
//GUAMI 6.2.3.17
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "openair2/E1AP/e1ap_common.h"
|
||||
#include "openair2/E2AP/flexric/src/util/time_now_us.h"
|
||||
#include "openair2/F1AP/f1ap_ids.h"
|
||||
#include "ds/seq_arr.h"
|
||||
|
||||
static pthread_once_t once_kpm_mutex = PTHREAD_ONCE_INIT;
|
||||
|
||||
@@ -209,8 +210,11 @@ static arr_ue_id_t filter_ues_by_s_nssai_in_cu(const test_info_lst_t test_info)
|
||||
struct rrc_gNB_ue_context_s* rrc_ue_context = NULL;
|
||||
RB_FOREACH(rrc_ue_context, rrc_nr_ue_tree_s, &RC.nrrrc[0]->rrc_ue_head) {
|
||||
gNB_RRC_UE_t *ue = &rrc_ue_context->ue_context;
|
||||
for (int p = 0; p < ue->nb_of_pdusessions; ++p) {
|
||||
pdusession_t *pdu = &ue->pduSession[p].param;
|
||||
/* UE has no AMF UE NGAP ID yet => can't send message */
|
||||
if (ue->amf_ue_ngap_id >= (1LL << 40))
|
||||
continue;
|
||||
FOR_EACH_SEQ_ARR(rrc_pdu_session_param_t*, item, &ue->pduSessions) {
|
||||
pdusession_t* pdu = &item->param;
|
||||
if (nssai_matches(pdu->nssai, sst, sd)) {
|
||||
arr_ue_id.ue_id[arr_ue_id.sz] = fill_ue_id_data[ngran_gNB_CU](ue, 0, 0);
|
||||
|
||||
@@ -296,6 +300,9 @@ static arr_ue_id_t filter_ues_by_s_nssai_in_du_or_monolithic(const test_info_lst
|
||||
arr_ue_id.ue_id[arr_ue_id.sz] = fill_ue_id_data[ngran_gNB_DU](NULL, rrc_ue_id.secondary_ue, 0);
|
||||
} else {
|
||||
rrc_gNB_ue_context_t* rrc_ue_context = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[0], -1, ue->rnti);
|
||||
/* UE has no AMF UE NGAP ID yet => can't send message */
|
||||
if (rrc_ue_context->ue_context.amf_ue_ngap_id >= (1LL << 40))
|
||||
continue;
|
||||
arr_ue_id.ue_id[arr_ue_id.sz] = fill_ue_id_data[ngran_gNB](&rrc_ue_context->ue_context, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user