mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
RRC starts random access via NR_MAC_RRC_START_RA with an explicit
cause. RA trigger is no longer piggybacked on NR_MAC_RRC_CONFIG_RESET.
T300 expiry and RRC re-establishment are the call sites switched in this
commit. MAC handles setup/T300 and re-establishment paths in
nr_mac_start_ra().
Changes:
- Add nr_mac_rrc_types.h (nr_mac_ra_start_cause_t)
- Add nr_mac_rrc_start_ra_t in rrc_messages_types.h
- In rrc_UE.c, add nr_rrc_trigger_mac_ra(), call it from
handle_t300_expiry and nr_rrc_initiate_rrcReestablishment
- In config_ue.c:
- add nr_mac_start_ra() entry point with causes switch
- add nr_rrc_mac_start_ra() handler
- remove T300_EXPIRY, RE_ESTABLISHMENT reset handling
in nr_rrc_mac_config_req_reset, now delegated to
nr_mac_start_ra
- mac_defs.h: drop T300_EXPIRY from NR_UE_MAC_reset_cause_t
Signed-off-by: Guido Casati <guido.casati@openairinterface.org>
259 lines
6.4 KiB
C
259 lines
6.4 KiB
C
/*
|
|
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
|
*/
|
|
|
|
/*
|
|
* \brief RRC structures/types definition
|
|
*/
|
|
|
|
#ifndef __OPENAIR_NR_RRC_DEFS_H__
|
|
#define __OPENAIR_NR_RRC_DEFS_H__
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "common/platform_types.h"
|
|
#include "commonDef.h"
|
|
#include "common/platform_constants.h"
|
|
|
|
#include "NR_asn_constant.h"
|
|
#include "NR_MeasConfig.h"
|
|
#include "NR_CellGroupConfig.h"
|
|
#include "NR_RadioBearerConfig.h"
|
|
#include "NR_RLC-BearerConfig.h"
|
|
#include "NR_TAG.h"
|
|
#include "NR_asn_constant.h"
|
|
#include "NR_MIB.h"
|
|
#include "NR_SIB1.h"
|
|
#include "NR_BCCH-BCH-Message.h"
|
|
#include "NR_DL-DCCH-Message.h"
|
|
#include "NR_SystemInformation.h"
|
|
#include "NR_UE-NR-Capability.h"
|
|
#include "NR_SL-PreconfigurationNR-r16.h"
|
|
#include "NR_MasterInformationBlockSidelink.h"
|
|
#include "NR_ReestablishmentCause.h"
|
|
#include "NR_MeasurementReport.h"
|
|
#include "NR_VarMeasReport.h"
|
|
|
|
#include "RRC/NR/nr_rrc_common.h"
|
|
#include "as_message.h"
|
|
#include "common/utils/nr/nr_common.h"
|
|
#include "notified_fifo.h"
|
|
#include "RRC/NR_UE/nr_mac_rrc_types.h"
|
|
|
|
#define NB_CNX_UE 2//MAX_MANAGED_RG_PER_MOBILE
|
|
#define MAX_MEAS_OBJ 64
|
|
#define MAX_MEAS_CONFIG 64
|
|
#define MAX_MEAS_ID 64
|
|
#define MAX_QUANTITY_CONFIG 2
|
|
#define NUMBER_OF_NEIGHBORING_CELLS_MAX 1
|
|
|
|
typedef enum {
|
|
nr_SecondaryCellGroupConfig_r15=0,
|
|
nr_RadioBearerConfigX_r15=1
|
|
} nsa_message_t;
|
|
|
|
#define MAX_UE_NR_CAPABILITY_SIZE 2048
|
|
typedef struct OAI_NR_UECapability_s {
|
|
uint8_t sdu[MAX_UE_NR_CAPABILITY_SIZE];
|
|
uint16_t sdu_size;
|
|
NR_UE_NR_Capability_t *UE_NR_Capability;
|
|
} OAI_NR_UECapability_t;
|
|
|
|
typedef enum Rrc_State_NR_e {
|
|
RRC_STATE_IDLE_NR = 0,
|
|
RRC_STATE_INACTIVE_NR,
|
|
RRC_STATE_CONNECTED_NR,
|
|
RRC_STATE_DETACH_NR,
|
|
} Rrc_State_NR_t;
|
|
|
|
// 3GPP TS 38.300 Section 9.2.6
|
|
typedef enum RA_trigger_e {
|
|
RA_NOT_RUNNING,
|
|
RRC_CONNECTION_SETUP,
|
|
RRC_CONNECTION_REESTABLISHMENT,
|
|
RRC_RESUME_REQUEST,
|
|
DURING_HANDOVER,
|
|
NON_SYNCHRONISED,
|
|
TRANSITION_FROM_RRC_INACTIVE,
|
|
TO_ESTABLISH_TA,
|
|
REQUEST_FOR_OTHER_SI,
|
|
BEAM_FAILURE_RECOVERY,
|
|
} RA_trigger_t;
|
|
|
|
typedef struct UE_RRC_SI_INFO_NR_r17_s {
|
|
bool sib15_validity;
|
|
NR_timer_t sib15_timer;
|
|
bool sib16_validity;
|
|
NR_timer_t sib16_timer;
|
|
bool sib17_validity;
|
|
NR_timer_t sib17_timer;
|
|
bool sib18_validity;
|
|
NR_timer_t sib18_timer;
|
|
bool sib19_validity;
|
|
NR_timer_t sib19_timer;
|
|
bool sib20_validity;
|
|
NR_timer_t sib20_timer;
|
|
bool sib21_validity;
|
|
NR_timer_t sib21_timer;
|
|
} NR_UE_RRC_SI_INFO_r17;
|
|
|
|
typedef struct UE_RRC_SI_INFO_NR_s {
|
|
bool sib_pending;
|
|
uint32_t default_otherSI_map[MAX_SI_GROUPS];
|
|
bool sib1_validity;
|
|
NR_timer_t sib1_timer;
|
|
bool sib2_validity;
|
|
NR_timer_t sib2_timer;
|
|
bool sib3_validity;
|
|
NR_timer_t sib3_timer;
|
|
bool sib4_validity;
|
|
NR_timer_t sib4_timer;
|
|
bool sib5_validity;
|
|
NR_timer_t sib5_timer;
|
|
bool sib6_validity;
|
|
NR_timer_t sib6_timer;
|
|
bool sib7_validity;
|
|
NR_timer_t sib7_timer;
|
|
bool sib8_validity;
|
|
NR_timer_t sib8_timer;
|
|
bool sib9_validity;
|
|
NR_timer_t sib9_timer;
|
|
bool sib10_validity;
|
|
NR_timer_t sib10_timer;
|
|
bool sib11_validity;
|
|
NR_timer_t sib11_timer;
|
|
bool sib12_validity;
|
|
NR_timer_t sib12_timer;
|
|
bool sib13_validity;
|
|
NR_timer_t sib13_timer;
|
|
bool sib14_validity;
|
|
NR_timer_t sib14_timer;
|
|
NR_UE_RRC_SI_INFO_r17 SInfo_r17;
|
|
// Extracted from SIB1
|
|
int scs;
|
|
int sib19_periodicity;
|
|
int sib19_windowposition;
|
|
int si_windowlength;
|
|
} NR_UE_RRC_SI_INFO;
|
|
|
|
typedef struct NR_UE_Timers_Constants_s {
|
|
// timers
|
|
NR_timer_t T300;
|
|
NR_timer_t T301;
|
|
NR_timer_t T302;
|
|
NR_timer_t T304;
|
|
NR_timer_t T310;
|
|
NR_timer_t T311;
|
|
NR_timer_t T319;
|
|
NR_timer_t T320;
|
|
NR_timer_t T321;
|
|
NR_timer_t T325;
|
|
NR_timer_t T380;
|
|
NR_timer_t T390;
|
|
// NTN timer T430 which guards UL SYNC
|
|
NR_timer_t T430;
|
|
// counters
|
|
uint32_t N310_cnt;
|
|
uint32_t N311_cnt;
|
|
// constants (limits configured by the network)
|
|
uint32_t N310_k;
|
|
uint32_t N311_k;
|
|
NR_UE_TimersAndConstants_t *sib1_TimersAndConstants;
|
|
} NR_UE_Timers_Constants_t;
|
|
|
|
typedef enum {
|
|
OUT_OF_SYNC = 0,
|
|
IN_SYNC = 1
|
|
} nr_sync_msg_t;
|
|
|
|
typedef enum { RB_NOT_PRESENT, RB_ESTABLISHED, RB_SUSPENDED } NR_RB_status_t;
|
|
|
|
typedef struct l3_measurements_s {
|
|
float ssb_filter_coeff_rsrp;
|
|
float csi_RS_filter_coeff_rsrp;
|
|
meas_t serving_cell;
|
|
meas_t neighboring_cell[NUMBER_OF_NEIGHBORING_CELLS_MAX];
|
|
long trigger_to_measid;
|
|
long trigger_quantity;
|
|
long rs_type;
|
|
int reports_sent;
|
|
int max_reports;
|
|
long report_interval_ms;
|
|
bool neighbor_cell_valid;
|
|
NR_timer_t TA2;
|
|
NR_timer_t TA3;
|
|
NR_timer_t periodic_report_timer;
|
|
} l3_measurements_t;
|
|
|
|
typedef struct rrcPerNB {
|
|
NR_MeasObjectToAddMod_t *MeasObj[MAX_MEAS_OBJ];
|
|
NR_ReportConfigToAddMod_t *ReportConfig[MAX_MEAS_CONFIG];
|
|
NR_QuantityConfigNR_t *QuantityConfig[MAX_QUANTITY_CONFIG];
|
|
NR_MeasIdToAddMod_t *MeasId[MAX_MEAS_ID];
|
|
NR_VarMeasReport_t *MeasReport[MAX_MEAS_ID];
|
|
NR_MeasGapConfig_t *measGapConfig;
|
|
NR_UE_RRC_SI_INFO SInfo;
|
|
NR_RSRP_Range_t s_measure;
|
|
l3_measurements_t l3_measurements;
|
|
} rrcPerNB_t;
|
|
|
|
typedef struct NR_UE_RRC_INST_s {
|
|
instance_t ue_id;
|
|
rrcPerNB_t perNB[NB_CNX_UE];
|
|
bool access_barred;
|
|
rnti_t rnti;
|
|
uint32_t phyCellID;
|
|
long arfcn_ssb;
|
|
|
|
OAI_NR_UECapability_t UECap;
|
|
NR_UE_Timers_Constants_t timers_and_constants;
|
|
|
|
RA_trigger_t ra_trigger;
|
|
NR_ReestablishmentCause_t reestablishment_cause;
|
|
plmn_t plmnID;
|
|
|
|
NR_BWP_Id_t dl_bwp_id;
|
|
NR_BWP_Id_t ul_bwp_id;
|
|
|
|
NR_RB_status_t Srb[NR_NUM_SRB];
|
|
NR_RB_status_t status_DRBs[MAX_DRBS_PER_UE];
|
|
bool active_RLC_entity[NR_MAX_NUM_LCID];
|
|
|
|
/* KgNB as computed from parameters within USIM card */
|
|
uint8_t kgnb[32];
|
|
/* Used integrity/ciphering algorithms */
|
|
//RRC_LIST_TYPE(NR_SecurityAlgorithmConfig_t, NR_SecurityAlgorithmConfig) SecurityAlgorithmConfig_list;
|
|
NR_CipheringAlgorithm_t cipheringAlgorithm;
|
|
e_NR_IntegrityProtAlgorithm integrityProtAlgorithm;
|
|
long keyToUse;
|
|
bool as_security_activated;
|
|
/// Next Hop Chaining Count
|
|
uint8_t nh[32];
|
|
uint64_t nhcc;
|
|
|
|
bool detach_after_release;
|
|
NR_timer_t release_timer;
|
|
NR_RRCRelease_t *RRCRelease;
|
|
long selected_plmn_identity;
|
|
Rrc_State_NR_t nrRrcState;
|
|
// flag to identify 1st reconfiguration after reestablishment
|
|
bool reconfig_after_reestab;
|
|
// 5G-S-TMSI
|
|
uint64_t fiveG_S_TMSI;
|
|
// Frame timing received from MAC
|
|
int current_hfn;
|
|
int current_frame;
|
|
bool sched_reconfsync_sib1;
|
|
//Sidelink params
|
|
NR_SL_PreconfigurationNR_r16_t *sl_preconfig;
|
|
// NTN params
|
|
bool is_NTN_UE;
|
|
NR_NTN_Config_r17_t *target_ntncfg;
|
|
bool process_target_ntncfg;
|
|
notifiedFIFO_t *mac_input_nf;
|
|
} NR_UE_RRC_INST_t;
|
|
|
|
#endif
|