Merge remote-tracking branch 'origin/develop' into nr-dl-mimo-2layer
This commit is contained in:
@@ -28,12 +28,19 @@
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "LTE_asn_constant.h"
|
||||
#include "NR_asn_constant.h"
|
||||
|
||||
#ifndef __PLATFORM_CONSTANTS_H__
|
||||
# define __PLATFORM_CONSTANTS_H__
|
||||
|
||||
#ifndef NO_RRC
|
||||
#include "LTE_asn_constant.h"
|
||||
#include "NR_asn_constant.h"
|
||||
#else
|
||||
#define LTE_maxDRB 14
|
||||
#define LTE_maxDRB_NB_r13 5
|
||||
#define NR_MAXDRB 14
|
||||
#endif
|
||||
|
||||
#ifdef JUMBO_FRAME
|
||||
#define NL_MAX_PAYLOAD 18000 /* this should cover the max mtu size*/
|
||||
#else
|
||||
@@ -87,13 +94,6 @@
|
||||
#define MAX_gNB 2
|
||||
#endif
|
||||
|
||||
#define NUMBER_OF_NR_DLSCH_MAX 2//16
|
||||
#define NUMBER_OF_NR_ULSCH_MAX 2//16
|
||||
#define NUMBER_OF_NR_SCH_STATS_MAX 16
|
||||
#define NUMBER_OF_NR_PUCCH_MAX 16
|
||||
#define NUMBER_OF_NR_SR_MAX 16
|
||||
#define NUMBER_OF_NR_PDCCH_MAX 16
|
||||
|
||||
#define MAX_MANAGED_ENB_PER_MOBILE 2
|
||||
#define MAX_MANAGED_GNB_PER_MOBILE 2
|
||||
|
||||
|
||||
@@ -42,6 +42,9 @@
|
||||
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "common/ran_context.h"
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
/*Array containing the Agent-MAC interfaces*/
|
||||
AGENT_MAC_xface *agent_mac_xface[NUM_MAX_ENB];
|
||||
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
#include "flexran_agent_mac_internal.h"
|
||||
#include "flexran_agent_mac_slice_verification.h"
|
||||
|
||||
#include "common/ran_context.h"
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
extern SLIST_HEAD(flexran_so_handle,
|
||||
flexran_agent_so_handle_s) flexran_handles[NUM_MAX_ENB];
|
||||
|
||||
|
||||
@@ -56,10 +56,14 @@
|
||||
#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd"
|
||||
#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd"
|
||||
#define CONFIG_STRING_MACRLC_SCHED_MODE "scheduler_mode"
|
||||
#define CONFIG_MACRLC_PUSCH10xSNR "puSch10xSnr"
|
||||
#define CONFIG_MACRLC_PUCCH10xSNR "puCch10xSnr"
|
||||
#define CONFIG_STRING_MACRLC_PUSCH10xSNR "puSch10xSnr"
|
||||
#define CONFIG_STRING_MACRLC_PUCCH10xSNR "puCch10xSnr"
|
||||
#define CONFIG_STRING_MACRLC_DEFAULT_SCHED_DL_ALGO "default_sched_dl_algo"
|
||||
|
||||
#define CONFIG_STRING_MACRLC_UE_MULTIPLE_MAX "ue_multiple_max"
|
||||
#define CONFIG_STRING_MACRLC_USE_MCS_OFFSET "use_mcs_offset"
|
||||
#define CONFIG_STRING_MACRLC_BLER_TARGET_LOWER "bler_target_lower"
|
||||
#define CONFIG_STRING_MACRLC_BLER_TARGET_UPPER "bler_target_upper"
|
||||
#define CONFIG_STRING_MACRLC_MAX_UL_RB_INDEX "max_ul_rb_index"
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* MacRLC configuration parameters */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
@@ -83,10 +87,15 @@
|
||||
{CONFIG_STRING_MACRLC_LOCAL_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_MACRLC_REMOTE_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_MACRLC_SCHED_MODE, NULL, 0, strptr:NULL, defstrval:"default", TYPE_STRING, 0}, \
|
||||
{CONFIG_MACRLC_PUSCH10xSNR, NULL, 0, iptr:NULL, defintval:200, TYPE_INT, 0}, \
|
||||
{CONFIG_MACRLC_PUCCH10xSNR, NULL, 0, iptr:NULL, defintval:200, TYPE_INT, 0}, \
|
||||
{CONFIG_STRING_MACRLC_DEFAULT_SCHED_DL_ALGO, NULL, 0, strptr:NULL, defstrval:"round_robin_dl", TYPE_STRING, 0}, \
|
||||
}
|
||||
{CONFIG_STRING_MACRLC_PUSCH10xSNR, NULL, 0, iptr:NULL, defintval:200, TYPE_INT, 0}, \
|
||||
{CONFIG_STRING_MACRLC_PUCCH10xSNR, NULL, 0, iptr:NULL, defintval:200, TYPE_INT, 0}, \
|
||||
{CONFIG_STRING_MACRLC_DEFAULT_SCHED_DL_ALGO, NULL, 0, strptr:NULL, defstrval:"round_robin_dl", TYPE_STRING, 0}, \
|
||||
{CONFIG_STRING_MACRLC_UE_MULTIPLE_MAX, NULL, 0, iptr:NULL, defintval:4, TYPE_INT, 0}, \
|
||||
{CONFIG_STRING_MACRLC_USE_MCS_OFFSET, NULL, 0, iptr:NULL, defintval:1, TYPE_INT, 0}, \
|
||||
{CONFIG_STRING_MACRLC_BLER_TARGET_LOWER, NULL, 0, dblptr:NULL, defdblval:.5, TYPE_DOUBLE, 0}, \
|
||||
{CONFIG_STRING_MACRLC_BLER_TARGET_UPPER, NULL, 0, dblptr:NULL, defdblval:2, TYPE_DOUBLE, 0}, \
|
||||
{CONFIG_STRING_MACRLC_MAX_UL_RB_INDEX, NULL, 0, iptr:NULL, defintval:22, TYPE_INT, 0}}
|
||||
|
||||
#define MACRLC_CC_IDX 0
|
||||
#define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1
|
||||
#define MACRLC_LOCAL_N_IF_NAME_IDX 2
|
||||
@@ -108,6 +117,11 @@
|
||||
#define MACRLC_PUSCH10xSNR_IDX 18
|
||||
#define MACRLC_PUCCH10xSNR_IDX 19
|
||||
#define MACRLC_DEFAULT_SCHED_DL_ALGO_IDX 20
|
||||
#define MACRLC_UE_MULTIPLE_MAX_IDX 21
|
||||
#define MACRLC_USE_MCS_OFFSET_IDX 22
|
||||
#define MACRLC_BLER_TARGET_LOWER_IDX 23
|
||||
#define MACRLC_BLER_TARGET_UPPER_IDX 24
|
||||
#define MACRLC_MAX_UL_RB_INDEX_IDX 25
|
||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
#endif
|
||||
|
||||
@@ -35,6 +35,9 @@
|
||||
#define NBIOT_INTERFACE_SOURCE
|
||||
#include "NB_IoT_interface.h"
|
||||
|
||||
#include "common/ran_context.h"
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
|
||||
|
||||
#define NBIOT_MODULENAME "NB_IoT"
|
||||
#include "common/ran_context.h"
|
||||
|
||||
typedef void(*RCConfig_NbIoT_f_t)(RAN_CONTEXT_t *RC);
|
||||
#define NBIOT_RCCONFIG_FNAME "RCConfig_NbIoT"
|
||||
|
||||
@@ -244,6 +244,8 @@ void *eNB_app_task(void *args_p) {
|
||||
|
||||
}
|
||||
|
||||
LOG_I(ENB_APP,"TASK_ENB_APP is ready\n");
|
||||
|
||||
do {
|
||||
// Wait for a message
|
||||
itti_receive_msg (TASK_ENB_APP, &msg_p);
|
||||
|
||||
@@ -64,6 +64,8 @@ extern uint32_t to_earfcn_UL(int eutra_bandP, uint32_t ul_CarrierFreq, uint32_t
|
||||
extern char *parallel_config;
|
||||
extern char *worker_config;
|
||||
|
||||
RAN_CONTEXT_t RC;
|
||||
|
||||
void RCconfig_flexran() {
|
||||
/* get number of eNBs */
|
||||
paramdef_t ENBSParams[] = ENBSPARAMS_DESC;
|
||||
@@ -218,13 +220,26 @@ void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]) {
|
||||
for (j = 0; j < RC.nb_macrlc_inst; j++) {
|
||||
RC.mac[j]->puSch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCH10xSNR_IDX ].iptr);
|
||||
RC.mac[j]->puCch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCH10xSNR_IDX ].iptr);
|
||||
RC.mac[j]->ue_multiple_max = *(MacRLC_ParamList.paramarray[j][MACRLC_UE_MULTIPLE_MAX_IDX ].iptr);
|
||||
RC.mac[j]->use_mcs_offset = *(MacRLC_ParamList.paramarray[j][MACRLC_USE_MCS_OFFSET_IDX ].iptr);
|
||||
RC.mac[j]->bler_lower = *(MacRLC_ParamList.paramarray[j][MACRLC_BLER_TARGET_LOWER_IDX ].dblptr);
|
||||
RC.mac[j]->bler_upper = *(MacRLC_ParamList.paramarray[j][MACRLC_BLER_TARGET_UPPER_IDX ].dblptr);
|
||||
RC.mac[j]->max_ul_rb_index = *(MacRLC_ParamList.paramarray[j][MACRLC_MAX_UL_RB_INDEX_IDX ].iptr);
|
||||
RC.nb_mac_CC[j] = *(MacRLC_ParamList.paramarray[j][MACRLC_CC_IDX].iptr);
|
||||
|
||||
LOG_I(ENB_APP,"MAC instance %d parameters : pusch_snr %lf, pucch_snr %lf, ue_multiple_max %d, use_mcs_offset %d, bler_lower %lf, bler_upper %lf,max_ul_rb_index %d\n",
|
||||
j,
|
||||
RC.mac[j]->puSch10xSnr/10.0,
|
||||
RC.mac[j]->puCch10xSnr/10.0,
|
||||
RC.mac[j]->ue_multiple_max,
|
||||
RC.mac[j]->use_mcs_offset,
|
||||
RC.mac[j]->bler_lower,
|
||||
RC.mac[j]->bler_upper,
|
||||
RC.mac[j]->max_ul_rb_index);
|
||||
if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) {
|
||||
// check number of instances is same as RRC/PDCP
|
||||
printf("Configuring local RRC for MACRLC\n");
|
||||
LOG_I(ENB_APP,"Configuring local RRC for MACRLC\n");
|
||||
} else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "f1") == 0) {
|
||||
printf("Configuring F1 interfaces for MACRLC\n");
|
||||
LOG_I(ENB_APP,"Configuring F1 interfaces for MACRLC\n");
|
||||
RC.mac[j]->eth_params_n.local_if_name = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_IF_NAME_IDX].strptr));
|
||||
RC.mac[j]->eth_params_n.my_addr = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_ADDRESS_IDX].strptr));
|
||||
RC.mac[j]->eth_params_n.remote_addr = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_ADDRESS_IDX].strptr));
|
||||
@@ -1993,7 +2008,7 @@ int RCconfig_DU_F1(MessageDef *msg_p, uint32_t i) {
|
||||
F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nrb = rrc->carrier[0].mib.message.dl_Bandwidth;
|
||||
F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.num_frequency_bands = 1;
|
||||
F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nr_band[0] = rrc->carrier[0].sib1->freqBandIndicator;
|
||||
F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.sul_active = 0;
|
||||
F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.sul_active = 0;
|
||||
} else {
|
||||
LOG_I(ENB_APP,"ngran_DU: Configuring Cell %d for FDD\n",k);
|
||||
F1AP_SETUP_REQ (msg_p).fdd_flag = 1;
|
||||
@@ -2779,12 +2794,13 @@ int RCconfig_X2(MessageDef *msg_p, uint32_t i) {
|
||||
"value of X2ParamList.numelt %d must be lower than X2AP_MAX_NB_ENB_IP_ADDRESS %d value: reconsider to increase X2AP_MAX_NB_ENB_IP_ADDRESS\n",
|
||||
X2ParamList.numelt,X2AP_MAX_NB_ENB_IP_ADDRESS);
|
||||
X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 = 0;
|
||||
|
||||
LOG_I(X2AP,"X2ParamList.numelt %d\n",X2ParamList.numelt);
|
||||
for (l = 0; l < X2ParamList.numelt; l++) {
|
||||
X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 += 1;
|
||||
strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4_address,*(X2ParamList.paramarray[l][ENB_X2_IPV4_ADDRESS_IDX].strptr));
|
||||
strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6_address,*(X2ParamList.paramarray[l][ENB_X2_IPV6_ADDRESS_IDX].strptr));
|
||||
|
||||
LOG_I(X2AP,"registering with ip : %s\n",*(X2ParamList.paramarray[l][ENB_X2_IPV4_ADDRESS_IDX].strptr));
|
||||
if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
|
||||
X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4 = 1;
|
||||
X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6 = 0;
|
||||
@@ -2964,7 +2980,7 @@ void extract_and_decode_SI(int inst,int si_ind,uint8_t *si_container,int si_cont
|
||||
eNB_RRC_INST *rrc = RC.rrc[inst];
|
||||
rrc_eNB_carrier_data_t *carrier = &rrc->carrier[0];
|
||||
LTE_BCCH_DL_SCH_Message_t *bcch_message ;
|
||||
AssertFatal(si_ind==0,"Can only handle a single SI block for now\n");
|
||||
AssertFatal(si_ind==2,"Can only handle a single SI block for now\n");
|
||||
LOG_I(ENB_APP, "rrc inst %d: Trying to decode SI block %d @ %p, length %d\n",inst,si_ind,si_container,si_container_length);
|
||||
// point to first SI block
|
||||
bcch_message = &carrier->systemInformation;
|
||||
@@ -3151,15 +3167,19 @@ void handle_f1ap_setup_resp(f1ap_setup_resp_t *resp) {
|
||||
(check_plmn_identity(carrier, resp->mcc[j], resp->mnc[j], resp->mnc_digit_length[j])>0 &&
|
||||
resp->nrpci[j] == carrier->physCellId)) {
|
||||
// copy system information and decode it
|
||||
for (si_ind=0; si_ind<resp->num_SI[j]; si_ind++) {
|
||||
for (si_ind=2; si_ind<10; si_ind++) {
|
||||
//printf("SI %d size %d: ", si_ind, resp->SI_container_length[j][si_ind]);
|
||||
//for (int n=0;n<resp->SI_container_length[j][si_ind];n++)
|
||||
// printf("%02x ",resp->SI_container[j][si_ind][n]);
|
||||
//printf("\n");
|
||||
extract_and_decode_SI(i,
|
||||
si_ind,
|
||||
resp->SI_container[j][si_ind],
|
||||
resp->SI_container_length[j][si_ind]);
|
||||
if (si_ind==6) si_ind=9;
|
||||
if (resp->SI_container[j][si_ind] != NULL) {
|
||||
extract_and_decode_SI(i,
|
||||
si_ind,
|
||||
resp->SI_container[j][si_ind],
|
||||
resp->SI_container_length[j][si_ind]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// perform MAC/L1 common configuration
|
||||
|
||||
@@ -100,7 +100,6 @@ typedef struct ru_config_s {
|
||||
uint8_t if_compress;
|
||||
} ru_config_t;
|
||||
|
||||
extern void RCconfig_RU(void);
|
||||
extern void RCconfig_flexran(void);
|
||||
extern void RCconfig_L1(void);
|
||||
extern void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]);
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
#include <pthread.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "common/ran_context.h"
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
int agent_task_created = 0;
|
||||
/*
|
||||
* enb agent task mainly wakes up the tx thread for periodic and oneshot messages to the controller
|
||||
|
||||
@@ -53,6 +53,9 @@
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
#include "rrc_eNB_UE_context.h"
|
||||
|
||||
#include "common/ran_context.h"
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
/*
|
||||
* message primitives
|
||||
*/
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
#include "s1ap_eNB_management_procedures.h"
|
||||
#include "openair2/LAYER2/MAC/slicing/slicing.h"
|
||||
|
||||
#include "common/ran_context.h"
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
static inline int phy_is_present(mid_t mod_id, uint8_t cc_id) {
|
||||
return RC.eNB && RC.eNB[mod_id] && RC.eNB[mod_id][cc_id];
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,32 @@
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Common definitions
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-CommonDataTypes {
|
||||
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
|
||||
ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-CommonDataTypes (3) }
|
||||
|
||||
DEFINITIONS AUTOMATIC TAGS ::=
|
||||
|
||||
BEGIN
|
||||
|
||||
Criticality ::= ENUMERATED { reject, ignore, notify }
|
||||
|
||||
Presence ::= ENUMERATED { optional, conditional, mandatory }
|
||||
|
||||
PrivateIE-ID ::= CHOICE {
|
||||
local INTEGER (0..65535),
|
||||
global OBJECT IDENTIFIER
|
||||
}
|
||||
|
||||
ProcedureCode ::= INTEGER (0..255)
|
||||
|
||||
ProtocolExtensionID ::= INTEGER (0..65535)
|
||||
|
||||
ProtocolIE-ID ::= INTEGER (0..65535)
|
||||
|
||||
TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome }
|
||||
|
||||
END
|
||||
@@ -0,0 +1,622 @@
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Constant definitions
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-Constants {
|
||||
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
|
||||
ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-Constants (4) }
|
||||
|
||||
DEFINITIONS AUTOMATIC TAGS ::=
|
||||
|
||||
BEGIN
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- IE parameter types from other modules.
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
IMPORTS
|
||||
ProcedureCode,
|
||||
ProtocolIE-ID
|
||||
|
||||
FROM F1AP-CommonDataTypes;
|
||||
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Elementary Procedures
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
id-Reset ProcedureCode ::= 0
|
||||
id-F1Setup ProcedureCode ::= 1
|
||||
id-ErrorIndication ProcedureCode ::= 2
|
||||
id-gNBDUConfigurationUpdate ProcedureCode ::= 3
|
||||
id-gNBCUConfigurationUpdate ProcedureCode ::= 4
|
||||
id-UEContextSetup ProcedureCode ::= 5
|
||||
id-UEContextRelease ProcedureCode ::= 6
|
||||
id-UEContextModification ProcedureCode ::= 7
|
||||
id-UEContextModificationRequired ProcedureCode ::= 8
|
||||
id-UEMobilityCommand ProcedureCode ::= 9
|
||||
id-UEContextReleaseRequest ProcedureCode ::= 10
|
||||
id-InitialULRRCMessageTransfer ProcedureCode ::= 11
|
||||
id-DLRRCMessageTransfer ProcedureCode ::= 12
|
||||
id-ULRRCMessageTransfer ProcedureCode ::= 13
|
||||
id-privateMessage ProcedureCode ::= 14
|
||||
id-UEInactivityNotification ProcedureCode ::= 15
|
||||
id-GNBDUResourceCoordination ProcedureCode ::= 16
|
||||
id-SystemInformationDeliveryCommand ProcedureCode ::= 17
|
||||
id-Paging ProcedureCode ::= 18
|
||||
id-Notify ProcedureCode ::= 19
|
||||
id-WriteReplaceWarning ProcedureCode ::= 20
|
||||
id-PWSCancel ProcedureCode ::= 21
|
||||
id-PWSRestartIndication ProcedureCode ::= 22
|
||||
id-PWSFailureIndication ProcedureCode ::= 23
|
||||
id-GNBDUStatusIndication ProcedureCode ::= 24
|
||||
id-RRCDeliveryReport ProcedureCode ::= 25
|
||||
id-F1Removal ProcedureCode ::= 26
|
||||
id-NetworkAccessRateReduction ProcedureCode ::= 27
|
||||
id-TraceStart ProcedureCode ::= 28
|
||||
id-DeactivateTrace ProcedureCode ::= 29
|
||||
id-DUCURadioInformationTransfer ProcedureCode ::= 30
|
||||
id-CUDURadioInformationTransfer ProcedureCode ::= 31
|
||||
id-BAPMappingConfiguration ProcedureCode ::= 32
|
||||
id-GNBDUResourceConfiguration ProcedureCode ::= 33
|
||||
id-IABTNLAddressAllocation ProcedureCode ::= 34
|
||||
id-IABUPConfigurationUpdate ProcedureCode ::= 35
|
||||
id-resourceStatusReportingInitiation ProcedureCode ::= 36
|
||||
id-resourceStatusReporting ProcedureCode ::= 37
|
||||
id-accessAndMobilityIndication ProcedureCode ::= 38
|
||||
id-accessSuccess ProcedureCode ::= 39
|
||||
id-cellTrafficTrace ProcedureCode ::= 40
|
||||
id-PositioningMeasurementExchange ProcedureCode ::= 41
|
||||
id-PositioningAssistanceInformationControl ProcedureCode ::= 42
|
||||
id-PositioningAssistanceInformationFeedback ProcedureCode ::= 43
|
||||
id-PositioningMeasurementReport ProcedureCode ::= 44
|
||||
id-PositioningMeasurementAbort ProcedureCode ::= 45
|
||||
id-PositioningMeasurementFailureIndication ProcedureCode ::= 46
|
||||
id-PositioningMeasurementUpdate ProcedureCode ::= 47
|
||||
id-TRPInformationExchange ProcedureCode ::= 48
|
||||
id-PositioningInformationExchange ProcedureCode ::= 49
|
||||
id-PositioningActivation ProcedureCode ::= 50
|
||||
id-PositioningDeactivation ProcedureCode ::= 51
|
||||
id-E-CIDMeasurementInitiation ProcedureCode ::= 52
|
||||
id-E-CIDMeasurementFailureIndication ProcedureCode ::= 53
|
||||
id-E-CIDMeasurementReport ProcedureCode ::= 54
|
||||
id-E-CIDMeasurementTermination ProcedureCode ::= 55
|
||||
id-PositioningInformationUpdate ProcedureCode ::= 56
|
||||
id-ReferenceTimeInformationReport ProcedureCode ::= 57
|
||||
id-ReferenceTimeInformationReportingControl ProcedureCode ::= 58
|
||||
|
||||
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Extension constants
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
maxPrivateIEs INTEGER ::= 65535
|
||||
maxProtocolExtensions INTEGER ::= 65535
|
||||
maxProtocolIEs INTEGER ::= 65535
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Lists
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
maxNRARFCN INTEGER ::= 3279165
|
||||
maxnoofErrors INTEGER ::= 256
|
||||
maxnoofIndividualF1ConnectionsToReset INTEGER ::= 65536
|
||||
maxCellingNBDU INTEGER ::= 512
|
||||
maxnoofSCells INTEGER ::= 32
|
||||
maxnoofSRBs INTEGER ::= 8
|
||||
maxnoofDRBs INTEGER ::= 64
|
||||
maxnoofULUPTNLInformation INTEGER ::= 2
|
||||
maxnoofDLUPTNLInformation INTEGER ::= 2
|
||||
maxnoofBPLMNs INTEGER ::= 6
|
||||
maxnoofCandidateSpCells INTEGER ::= 64
|
||||
maxnoofPotentialSpCells INTEGER ::= 64
|
||||
maxnoofNrCellBands INTEGER ::= 32
|
||||
maxnoofSIBTypes INTEGER ::= 32
|
||||
maxnoofSITypes INTEGER ::= 32
|
||||
maxnoofPagingCells INTEGER ::= 512
|
||||
maxnoofTNLAssociations INTEGER ::= 32
|
||||
maxnoofQoSFlows INTEGER ::= 64
|
||||
maxnoofSliceItems INTEGER ::= 1024
|
||||
maxCellineNB INTEGER ::= 256
|
||||
maxnoofExtendedBPLMNs INTEGER ::= 6
|
||||
maxnoofUEIDs INTEGER ::= 65536
|
||||
maxnoofBPLMNsNR INTEGER ::= 12
|
||||
maxnoofUACPLMNs INTEGER ::= 12
|
||||
maxnoofUACperPLMN INTEGER ::= 64
|
||||
maxnoofAdditionalSIBs INTEGER ::= 63
|
||||
maxnoofslots INTEGER ::= 5120
|
||||
maxnoofTLAs INTEGER ::= 16
|
||||
maxnoofGTPTLAs INTEGER ::= 16
|
||||
maxnoofBHRLCChannels INTEGER ::= 65536
|
||||
maxnoofRoutingEntries INTEGER ::= 1024
|
||||
maxnoofIABSTCInfo INTEGER ::= 45
|
||||
maxnoofSymbols INTEGER ::= 14
|
||||
maxnoofServingCells INTEGER ::= 32
|
||||
maxnoofDUFSlots INTEGER ::= 320
|
||||
maxnoofHSNASlots INTEGER ::= 5120
|
||||
maxnoofServedCellsIAB INTEGER ::= 512
|
||||
maxnoofChildIABNodes INTEGER ::= 1024
|
||||
maxnoofNonUPTrafficMappings INTEGER ::= 32
|
||||
maxnoofTLAsIAB INTEGER ::= 1024
|
||||
maxnoofMappingEntries INTEGER ::= 67108864
|
||||
maxnoofDSInfo INTEGER ::= 64
|
||||
maxnoofEgressLinks INTEGER ::= 2
|
||||
maxnoofULUPTNLInformationforIAB INTEGER ::= 32678
|
||||
maxnoofUPTNLAddresses INTEGER ::= 8
|
||||
maxnoofSLDRBs INTEGER ::= 512
|
||||
maxnoofQoSParaSets INTEGER ::= 8
|
||||
maxnoofPC5QoSFlows INTEGER ::= 2048
|
||||
maxnoofSSBAreas INTEGER ::= 64
|
||||
maxnoofPhysicalResourceBlocks INTEGER ::= 275
|
||||
maxnoofPhysicalResourceBlocks-1 INTEGER ::= 274
|
||||
maxnoofPRACHconfigs INTEGER ::= 16
|
||||
maxnoofRACHReports INTEGER ::= 64
|
||||
maxnoofRLFReports INTEGER ::= 64
|
||||
maxnoofAdditionalPDCPDuplicationTNL INTEGER ::= 2
|
||||
maxnoofRLCDuplicationState INTEGER ::= 3
|
||||
maxnoofCHOcells INTEGER ::= 8
|
||||
maxnoofMDTPLMNs INTEGER ::= 16
|
||||
maxnoofCAGsupported INTEGER ::= 12
|
||||
maxnoofNIDsupported INTEGER ::= 12
|
||||
maxnoofNRSCSs INTEGER ::= 5
|
||||
maxnoofExtSliceItems INTEGER ::= 65535
|
||||
maxnoofPosMeas INTEGER ::= 16384
|
||||
maxnoofTRPInfoTypes INTEGER ::= 64
|
||||
maxnoofTRPs INTEGER ::= 65535
|
||||
maxnoofSRSTriggerStates INTEGER ::= 3
|
||||
maxnoofSpatialRelations INTEGER ::= 64
|
||||
maxnoBcastCell INTEGER ::= 16384
|
||||
maxnoofAngleInfo INTEGER ::= 65535
|
||||
maxnooflcs-gcs-translation INTEGER ::= 3
|
||||
maxnoofPath INTEGER ::= 2
|
||||
maxnoofMeasE-CID INTEGER ::= 64
|
||||
maxnoofSSBs INTEGER ::= 255
|
||||
maxnoSRS-ResourceSets INTEGER ::= 16
|
||||
maxnoSRS-ResourcePerSet INTEGER ::= 16
|
||||
maxnoSRS-Carriers INTEGER ::= 32
|
||||
maxnoSCSs INTEGER ::= 5
|
||||
maxnoSRS-Resources INTEGER ::= 64
|
||||
maxnoSRS-PosResources INTEGER ::= 64
|
||||
maxnoSRS-PosResourceSets INTEGER ::= 16
|
||||
maxnoSRS-PosResourcePerSet INTEGER ::= 16
|
||||
maxnoofPRS-ResourceSets INTEGER ::= 2
|
||||
maxnoofPRS-ResourcesPerSet INTEGER ::= 64
|
||||
maxNoOfMeasTRPs INTEGER ::= 64
|
||||
maxnoofPRSresourceSets INTEGER ::= 8
|
||||
maxnoofPRSresources INTEGER ::= 64
|
||||
|
||||
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- IEs
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
id-Cause ProtocolIE-ID ::= 0
|
||||
id-Cells-Failed-to-be-Activated-List ProtocolIE-ID ::= 1
|
||||
id-Cells-Failed-to-be-Activated-List-Item ProtocolIE-ID ::= 2
|
||||
id-Cells-to-be-Activated-List ProtocolIE-ID ::= 3
|
||||
id-Cells-to-be-Activated-List-Item ProtocolIE-ID ::= 4
|
||||
id-Cells-to-be-Deactivated-List ProtocolIE-ID ::= 5
|
||||
id-Cells-to-be-Deactivated-List-Item ProtocolIE-ID ::= 6
|
||||
id-CriticalityDiagnostics ProtocolIE-ID ::= 7
|
||||
id-CUtoDURRCInformation ProtocolIE-ID ::= 9
|
||||
id-DRBs-FailedToBeModified-Item ProtocolIE-ID ::= 12
|
||||
id-DRBs-FailedToBeModified-List ProtocolIE-ID ::= 13
|
||||
id-DRBs-FailedToBeSetup-Item ProtocolIE-ID ::= 14
|
||||
id-DRBs-FailedToBeSetup-List ProtocolIE-ID ::= 15
|
||||
id-DRBs-FailedToBeSetupMod-Item ProtocolIE-ID ::= 16
|
||||
id-DRBs-FailedToBeSetupMod-List ProtocolIE-ID ::= 17
|
||||
id-DRBs-ModifiedConf-Item ProtocolIE-ID ::= 18
|
||||
id-DRBs-ModifiedConf-List ProtocolIE-ID ::= 19
|
||||
id-DRBs-Modified-Item ProtocolIE-ID ::= 20
|
||||
id-DRBs-Modified-List ProtocolIE-ID ::= 21
|
||||
id-DRBs-Required-ToBeModified-Item ProtocolIE-ID ::= 22
|
||||
id-DRBs-Required-ToBeModified-List ProtocolIE-ID ::= 23
|
||||
id-DRBs-Required-ToBeReleased-Item ProtocolIE-ID ::= 24
|
||||
id-DRBs-Required-ToBeReleased-List ProtocolIE-ID ::= 25
|
||||
id-DRBs-Setup-Item ProtocolIE-ID ::= 26
|
||||
id-DRBs-Setup-List ProtocolIE-ID ::= 27
|
||||
id-DRBs-SetupMod-Item ProtocolIE-ID ::= 28
|
||||
id-DRBs-SetupMod-List ProtocolIE-ID ::= 29
|
||||
id-DRBs-ToBeModified-Item ProtocolIE-ID ::= 30
|
||||
id-DRBs-ToBeModified-List ProtocolIE-ID ::= 31
|
||||
id-DRBs-ToBeReleased-Item ProtocolIE-ID ::= 32
|
||||
id-DRBs-ToBeReleased-List ProtocolIE-ID ::= 33
|
||||
id-DRBs-ToBeSetup-Item ProtocolIE-ID ::= 34
|
||||
id-DRBs-ToBeSetup-List ProtocolIE-ID ::= 35
|
||||
id-DRBs-ToBeSetupMod-Item ProtocolIE-ID ::= 36
|
||||
id-DRBs-ToBeSetupMod-List ProtocolIE-ID ::= 37
|
||||
id-DRXCycle ProtocolIE-ID ::= 38
|
||||
id-DUtoCURRCInformation ProtocolIE-ID ::= 39
|
||||
id-gNB-CU-UE-F1AP-ID ProtocolIE-ID ::= 40
|
||||
id-gNB-DU-UE-F1AP-ID ProtocolIE-ID ::= 41
|
||||
id-gNB-DU-ID ProtocolIE-ID ::= 42
|
||||
id-GNB-DU-Served-Cells-Item ProtocolIE-ID ::= 43
|
||||
id-gNB-DU-Served-Cells-List ProtocolIE-ID ::= 44
|
||||
id-gNB-DU-Name ProtocolIE-ID ::= 45
|
||||
id-NRCellID ProtocolIE-ID ::= 46
|
||||
id-oldgNB-DU-UE-F1AP-ID ProtocolIE-ID ::= 47
|
||||
id-ResetType ProtocolIE-ID ::= 48
|
||||
id-ResourceCoordinationTransferContainer ProtocolIE-ID ::= 49
|
||||
id-RRCContainer ProtocolIE-ID ::= 50
|
||||
id-SCell-ToBeRemoved-Item ProtocolIE-ID ::= 51
|
||||
id-SCell-ToBeRemoved-List ProtocolIE-ID ::= 52
|
||||
id-SCell-ToBeSetup-Item ProtocolIE-ID ::= 53
|
||||
id-SCell-ToBeSetup-List ProtocolIE-ID ::= 54
|
||||
id-SCell-ToBeSetupMod-Item ProtocolIE-ID ::= 55
|
||||
id-SCell-ToBeSetupMod-List ProtocolIE-ID ::= 56
|
||||
id-Served-Cells-To-Add-Item ProtocolIE-ID ::= 57
|
||||
id-Served-Cells-To-Add-List ProtocolIE-ID ::= 58
|
||||
id-Served-Cells-To-Delete-Item ProtocolIE-ID ::= 59
|
||||
id-Served-Cells-To-Delete-List ProtocolIE-ID ::= 60
|
||||
id-Served-Cells-To-Modify-Item ProtocolIE-ID ::= 61
|
||||
id-Served-Cells-To-Modify-List ProtocolIE-ID ::= 62
|
||||
id-SpCell-ID ProtocolIE-ID ::= 63
|
||||
id-SRBID ProtocolIE-ID ::= 64
|
||||
id-SRBs-FailedToBeSetup-Item ProtocolIE-ID ::= 65
|
||||
id-SRBs-FailedToBeSetup-List ProtocolIE-ID ::= 66
|
||||
id-SRBs-FailedToBeSetupMod-Item ProtocolIE-ID ::= 67
|
||||
id-SRBs-FailedToBeSetupMod-List ProtocolIE-ID ::= 68
|
||||
id-SRBs-Required-ToBeReleased-Item ProtocolIE-ID ::= 69
|
||||
id-SRBs-Required-ToBeReleased-List ProtocolIE-ID ::= 70
|
||||
id-SRBs-ToBeReleased-Item ProtocolIE-ID ::= 71
|
||||
id-SRBs-ToBeReleased-List ProtocolIE-ID ::= 72
|
||||
id-SRBs-ToBeSetup-Item ProtocolIE-ID ::= 73
|
||||
id-SRBs-ToBeSetup-List ProtocolIE-ID ::= 74
|
||||
id-SRBs-ToBeSetupMod-Item ProtocolIE-ID ::= 75
|
||||
id-SRBs-ToBeSetupMod-List ProtocolIE-ID ::= 76
|
||||
id-TimeToWait ProtocolIE-ID ::= 77
|
||||
id-TransactionID ProtocolIE-ID ::= 78
|
||||
id-TransmissionActionIndicator ProtocolIE-ID ::= 79
|
||||
id-UE-associatedLogicalF1-ConnectionItem ProtocolIE-ID ::= 80
|
||||
id-UE-associatedLogicalF1-ConnectionListResAck ProtocolIE-ID ::= 81
|
||||
id-gNB-CU-Name ProtocolIE-ID ::= 82
|
||||
id-SCell-FailedtoSetup-List ProtocolIE-ID ::= 83
|
||||
id-SCell-FailedtoSetup-Item ProtocolIE-ID ::= 84
|
||||
id-SCell-FailedtoSetupMod-List ProtocolIE-ID ::= 85
|
||||
id-SCell-FailedtoSetupMod-Item ProtocolIE-ID ::= 86
|
||||
id-RRCReconfigurationCompleteIndicator ProtocolIE-ID ::= 87
|
||||
id-Cells-Status-Item ProtocolIE-ID ::= 88
|
||||
id-Cells-Status-List ProtocolIE-ID ::= 89
|
||||
id-Candidate-SpCell-List ProtocolIE-ID ::= 90
|
||||
id-Candidate-SpCell-Item ProtocolIE-ID ::= 91
|
||||
id-Potential-SpCell-List ProtocolIE-ID ::= 92
|
||||
id-Potential-SpCell-Item ProtocolIE-ID ::= 93
|
||||
id-FullConfiguration ProtocolIE-ID ::= 94
|
||||
id-C-RNTI ProtocolIE-ID ::= 95
|
||||
id-SpCellULConfigured ProtocolIE-ID ::= 96
|
||||
id-InactivityMonitoringRequest ProtocolIE-ID ::= 97
|
||||
id-InactivityMonitoringResponse ProtocolIE-ID ::= 98
|
||||
id-DRB-Activity-Item ProtocolIE-ID ::= 99
|
||||
id-DRB-Activity-List ProtocolIE-ID ::= 100
|
||||
id-EUTRA-NR-CellResourceCoordinationReq-Container ProtocolIE-ID ::= 101
|
||||
id-EUTRA-NR-CellResourceCoordinationReqAck-Container ProtocolIE-ID ::= 102
|
||||
id-Protected-EUTRA-Resources-List ProtocolIE-ID ::= 105
|
||||
id-RequestType ProtocolIE-ID ::= 106
|
||||
id-ServCellIndex ProtocolIE-ID ::= 107
|
||||
id-RAT-FrequencyPriorityInformation ProtocolIE-ID ::= 108
|
||||
id-ExecuteDuplication ProtocolIE-ID ::= 109
|
||||
id-NRCGI ProtocolIE-ID ::= 111
|
||||
id-PagingCell-Item ProtocolIE-ID ::= 112
|
||||
id-PagingCell-List ProtocolIE-ID ::= 113
|
||||
id-PagingDRX ProtocolIE-ID ::= 114
|
||||
id-PagingPriority ProtocolIE-ID ::= 115
|
||||
id-SItype-List ProtocolIE-ID ::= 116
|
||||
id-UEIdentityIndexValue ProtocolIE-ID ::= 117
|
||||
id-gNB-CUSystemInformation ProtocolIE-ID ::= 118
|
||||
id-HandoverPreparationInformation ProtocolIE-ID ::= 119
|
||||
id-GNB-CU-TNL-Association-To-Add-Item ProtocolIE-ID ::= 120
|
||||
id-GNB-CU-TNL-Association-To-Add-List ProtocolIE-ID ::= 121
|
||||
id-GNB-CU-TNL-Association-To-Remove-Item ProtocolIE-ID ::= 122
|
||||
id-GNB-CU-TNL-Association-To-Remove-List ProtocolIE-ID ::= 123
|
||||
id-GNB-CU-TNL-Association-To-Update-Item ProtocolIE-ID ::= 124
|
||||
id-GNB-CU-TNL-Association-To-Update-List ProtocolIE-ID ::= 125
|
||||
id-MaskedIMEISV ProtocolIE-ID ::= 126
|
||||
id-PagingIdentity ProtocolIE-ID ::= 127
|
||||
id-DUtoCURRCContainer ProtocolIE-ID ::= 128
|
||||
id-Cells-to-be-Barred-List ProtocolIE-ID ::= 129
|
||||
id-Cells-to-be-Barred-Item ProtocolIE-ID ::= 130
|
||||
id-TAISliceSupportList ProtocolIE-ID ::= 131
|
||||
id-GNB-CU-TNL-Association-Setup-List ProtocolIE-ID ::= 132
|
||||
id-GNB-CU-TNL-Association-Setup-Item ProtocolIE-ID ::= 133
|
||||
id-GNB-CU-TNL-Association-Failed-To-Setup-List ProtocolIE-ID ::= 134
|
||||
id-GNB-CU-TNL-Association-Failed-To-Setup-Item ProtocolIE-ID ::= 135
|
||||
id-DRB-Notify-Item ProtocolIE-ID ::= 136
|
||||
id-DRB-Notify-List ProtocolIE-ID ::= 137
|
||||
id-NotficationControl ProtocolIE-ID ::= 138
|
||||
id-RANAC ProtocolIE-ID ::= 139
|
||||
id-PWSSystemInformation ProtocolIE-ID ::= 140
|
||||
id-RepetitionPeriod ProtocolIE-ID ::= 141
|
||||
id-NumberofBroadcastRequest ProtocolIE-ID ::= 142
|
||||
id-Cells-To-Be-Broadcast-List ProtocolIE-ID ::= 144
|
||||
id-Cells-To-Be-Broadcast-Item ProtocolIE-ID ::= 145
|
||||
id-Cells-Broadcast-Completed-List ProtocolIE-ID ::= 146
|
||||
id-Cells-Broadcast-Completed-Item ProtocolIE-ID ::= 147
|
||||
id-Broadcast-To-Be-Cancelled-List ProtocolIE-ID ::= 148
|
||||
id-Broadcast-To-Be-Cancelled-Item ProtocolIE-ID ::= 149
|
||||
id-Cells-Broadcast-Cancelled-List ProtocolIE-ID ::= 150
|
||||
id-Cells-Broadcast-Cancelled-Item ProtocolIE-ID ::= 151
|
||||
id-NR-CGI-List-For-Restart-List ProtocolIE-ID ::= 152
|
||||
id-NR-CGI-List-For-Restart-Item ProtocolIE-ID ::= 153
|
||||
id-PWS-Failed-NR-CGI-List ProtocolIE-ID ::= 154
|
||||
id-PWS-Failed-NR-CGI-Item ProtocolIE-ID ::= 155
|
||||
id-ConfirmedUEID ProtocolIE-ID ::= 156
|
||||
id-Cancel-all-Warning-Messages-Indicator ProtocolIE-ID ::= 157
|
||||
id-GNB-DU-UE-AMBR-UL ProtocolIE-ID ::= 158
|
||||
id-DRXConfigurationIndicator ProtocolIE-ID ::= 159
|
||||
id-RLC-Status ProtocolIE-ID ::= 160
|
||||
id-DLPDCPSNLength ProtocolIE-ID ::= 161
|
||||
id-GNB-DUConfigurationQuery ProtocolIE-ID ::= 162
|
||||
id-MeasurementTimingConfiguration ProtocolIE-ID ::= 163
|
||||
id-DRB-Information ProtocolIE-ID ::= 164
|
||||
id-ServingPLMN ProtocolIE-ID ::= 165
|
||||
id-Protected-EUTRA-Resources-Item ProtocolIE-ID ::= 168
|
||||
id-GNB-CU-RRC-Version ProtocolIE-ID ::= 170
|
||||
id-GNB-DU-RRC-Version ProtocolIE-ID ::= 171
|
||||
id-GNBDUOverloadInformation ProtocolIE-ID ::= 172
|
||||
id-CellGroupConfig ProtocolIE-ID ::= 173
|
||||
id-RLCFailureIndication ProtocolIE-ID ::= 174
|
||||
id-UplinkTxDirectCurrentListInformation ProtocolIE-ID ::= 175
|
||||
id-DC-Based-Duplication-Configured ProtocolIE-ID ::= 176
|
||||
id-DC-Based-Duplication-Activation ProtocolIE-ID ::= 177
|
||||
id-SULAccessIndication ProtocolIE-ID ::= 178
|
||||
id-AvailablePLMNList ProtocolIE-ID ::= 179
|
||||
id-PDUSessionID ProtocolIE-ID ::= 180
|
||||
id-ULPDUSessionAggregateMaximumBitRate ProtocolIE-ID ::= 181
|
||||
id-ServingCellMO ProtocolIE-ID ::= 182
|
||||
id-QoSFlowMappingIndication ProtocolIE-ID ::= 183
|
||||
id-RRCDeliveryStatusRequest ProtocolIE-ID ::= 184
|
||||
id-RRCDeliveryStatus ProtocolIE-ID ::= 185
|
||||
id-BearerTypeChange ProtocolIE-ID ::= 186
|
||||
id-RLCMode ProtocolIE-ID ::= 187
|
||||
id-Duplication-Activation ProtocolIE-ID ::= 188
|
||||
id-Dedicated-SIDelivery-NeededUE-List ProtocolIE-ID ::= 189
|
||||
id-Dedicated-SIDelivery-NeededUE-Item ProtocolIE-ID ::= 190
|
||||
id-DRX-LongCycleStartOffset ProtocolIE-ID ::= 191
|
||||
id-ULPDCPSNLength ProtocolIE-ID ::= 192
|
||||
id-SelectedBandCombinationIndex ProtocolIE-ID ::= 193
|
||||
id-SelectedFeatureSetEntryIndex ProtocolIE-ID ::= 194
|
||||
id-ResourceCoordinationTransferInformation ProtocolIE-ID ::= 195
|
||||
id-ExtendedServedPLMNs-List ProtocolIE-ID ::= 196
|
||||
id-ExtendedAvailablePLMN-List ProtocolIE-ID ::= 197
|
||||
id-Associated-SCell-List ProtocolIE-ID ::= 198
|
||||
id-latest-RRC-Version-Enhanced ProtocolIE-ID ::= 199
|
||||
id-Associated-SCell-Item ProtocolIE-ID ::= 200
|
||||
id-Cell-Direction ProtocolIE-ID ::= 201
|
||||
id-SRBs-Setup-List ProtocolIE-ID ::= 202
|
||||
id-SRBs-Setup-Item ProtocolIE-ID ::= 203
|
||||
id-SRBs-SetupMod-List ProtocolIE-ID ::= 204
|
||||
id-SRBs-SetupMod-Item ProtocolIE-ID ::= 205
|
||||
id-SRBs-Modified-List ProtocolIE-ID ::= 206
|
||||
id-SRBs-Modified-Item ProtocolIE-ID ::= 207
|
||||
id-Ph-InfoSCG ProtocolIE-ID ::= 208
|
||||
id-RequestedBandCombinationIndex ProtocolIE-ID ::= 209
|
||||
id-RequestedFeatureSetEntryIndex ProtocolIE-ID ::= 210
|
||||
id-RequestedP-MaxFR2 ProtocolIE-ID ::= 211
|
||||
id-DRX-Config ProtocolIE-ID ::= 212
|
||||
id-IgnoreResourceCoordinationContainer ProtocolIE-ID ::= 213
|
||||
id-UEAssistanceInformation ProtocolIE-ID ::= 214
|
||||
id-NeedforGap ProtocolIE-ID ::= 215
|
||||
id-PagingOrigin ProtocolIE-ID ::= 216
|
||||
id-new-gNB-CU-UE-F1AP-ID ProtocolIE-ID ::= 217
|
||||
id-RedirectedRRCmessage ProtocolIE-ID ::= 218
|
||||
id-new-gNB-DU-UE-F1AP-ID ProtocolIE-ID ::= 219
|
||||
id-NotificationInformation ProtocolIE-ID ::= 220
|
||||
id-PLMNAssistanceInfoForNetShar ProtocolIE-ID ::= 221
|
||||
id-UEContextNotRetrievable ProtocolIE-ID ::= 222
|
||||
id-BPLMN-ID-Info-List ProtocolIE-ID ::= 223
|
||||
id-SelectedPLMNID ProtocolIE-ID ::= 224
|
||||
id-UAC-Assistance-Info ProtocolIE-ID ::= 225
|
||||
id-RANUEID ProtocolIE-ID ::= 226
|
||||
id-GNB-DU-TNL-Association-To-Remove-Item ProtocolIE-ID ::= 227
|
||||
id-GNB-DU-TNL-Association-To-Remove-List ProtocolIE-ID ::= 228
|
||||
id-TNLAssociationTransportLayerAddressgNBDU ProtocolIE-ID ::= 229
|
||||
id-portNumber ProtocolIE-ID ::= 230
|
||||
id-AdditionalSIBMessageList ProtocolIE-ID ::= 231
|
||||
id-Cell-Type ProtocolIE-ID ::= 232
|
||||
id-IgnorePRACHConfiguration ProtocolIE-ID ::= 233
|
||||
id-CG-Config ProtocolIE-ID ::= 234
|
||||
id-PDCCH-BlindDetectionSCG ProtocolIE-ID ::= 235
|
||||
id-Requested-PDCCH-BlindDetectionSCG ProtocolIE-ID ::= 236
|
||||
id-Ph-InfoMCG ProtocolIE-ID ::= 237
|
||||
id-MeasGapSharingConfig ProtocolIE-ID ::= 238
|
||||
id-systemInformationAreaID ProtocolIE-ID ::= 239
|
||||
id-areaScope ProtocolIE-ID ::= 240
|
||||
id-RRCContainer-RRCSetupComplete ProtocolIE-ID ::= 241
|
||||
id-TraceActivation ProtocolIE-ID ::= 242
|
||||
id-TraceID ProtocolIE-ID ::= 243
|
||||
id-Neighbour-Cell-Information-List ProtocolIE-ID ::= 244
|
||||
id-SymbolAllocInSlot ProtocolIE-ID ::= 246
|
||||
id-NumDLULSymbols ProtocolIE-ID ::= 247
|
||||
id-AdditionalRRMPriorityIndex ProtocolIE-ID ::= 248
|
||||
id-DUCURadioInformationType ProtocolIE-ID ::= 249
|
||||
id-CUDURadioInformationType ProtocolIE-ID ::= 250
|
||||
id-AggressorgNBSetID ProtocolIE-ID ::= 251
|
||||
id-VictimgNBSetID ProtocolIE-ID ::= 252
|
||||
id-LowerLayerPresenceStatusChange ProtocolIE-ID ::= 253
|
||||
id-Transport-Layer-Address-Info ProtocolIE-ID ::= 254
|
||||
id-Neighbour-Cell-Information-Item ProtocolIE-ID ::= 255
|
||||
id-IntendedTDD-DL-ULConfig ProtocolIE-ID ::= 256
|
||||
id-QosMonitoringRequest ProtocolIE-ID ::= 257
|
||||
id-BHChannels-ToBeSetup-List ProtocolIE-ID ::= 258
|
||||
id-BHChannels-ToBeSetup-Item ProtocolIE-ID ::= 259
|
||||
id-BHChannels-Setup-List ProtocolIE-ID ::= 260
|
||||
id-BHChannels-Setup-Item ProtocolIE-ID ::= 261
|
||||
id-BHChannels-ToBeModified-Item ProtocolIE-ID ::= 262
|
||||
id-BHChannels-ToBeModified-List ProtocolIE-ID ::= 263
|
||||
id-BHChannels-ToBeReleased-Item ProtocolIE-ID ::= 264
|
||||
id-BHChannels-ToBeReleased-List ProtocolIE-ID ::= 265
|
||||
id-BHChannels-ToBeSetupMod-Item ProtocolIE-ID ::= 266
|
||||
id-BHChannels-ToBeSetupMod-List ProtocolIE-ID ::= 267
|
||||
id-BHChannels-FailedToBeModified-Item ProtocolIE-ID ::= 268
|
||||
id-BHChannels-FailedToBeModified-List ProtocolIE-ID ::= 269
|
||||
id-BHChannels-FailedToBeSetupMod-Item ProtocolIE-ID ::= 270
|
||||
id-BHChannels-FailedToBeSetupMod-List ProtocolIE-ID ::= 271
|
||||
id-BHChannels-Modified-Item ProtocolIE-ID ::= 272
|
||||
id-BHChannels-Modified-List ProtocolIE-ID ::= 273
|
||||
id-BHChannels-SetupMod-Item ProtocolIE-ID ::= 274
|
||||
id-BHChannels-SetupMod-List ProtocolIE-ID ::= 275
|
||||
id-BHChannels-Required-ToBeReleased-Item ProtocolIE-ID ::= 276
|
||||
id-BHChannels-Required-ToBeReleased-List ProtocolIE-ID ::= 277
|
||||
id-BHChannels-FailedToBeSetup-Item ProtocolIE-ID ::= 278
|
||||
id-BHChannels-FailedToBeSetup-List ProtocolIE-ID ::= 279
|
||||
id-BHInfo ProtocolIE-ID ::= 280
|
||||
id-BAPAddress ProtocolIE-ID ::= 281
|
||||
id-ConfiguredBAPAddress ProtocolIE-ID ::= 282
|
||||
id-BH-Routing-Information-Added-List ProtocolIE-ID ::= 283
|
||||
id-BH-Routing-Information-Added-List-Item ProtocolIE-ID ::= 284
|
||||
id-BH-Routing-Information-Removed-List ProtocolIE-ID ::= 285
|
||||
id-BH-Routing-Information-Removed-List-Item ProtocolIE-ID ::= 286
|
||||
id-UL-BH-Non-UP-Traffic-Mapping ProtocolIE-ID ::= 287
|
||||
id-Activated-Cells-to-be-Updated-List ProtocolIE-ID ::= 288
|
||||
id-Child-Nodes-List ProtocolIE-ID ::= 289
|
||||
id-IAB-Info-IAB-DU ProtocolIE-ID ::= 290
|
||||
id-IAB-Info-IAB-donor-CU ProtocolIE-ID ::= 291
|
||||
id-IAB-TNL-Addresses-To-Remove-List ProtocolIE-ID ::= 292
|
||||
id-IAB-TNL-Addresses-To-Remove-Item ProtocolIE-ID ::= 293
|
||||
id-IAB-Allocated-TNL-Address-List ProtocolIE-ID ::= 294
|
||||
id-IAB-Allocated-TNL-Address-Item ProtocolIE-ID ::= 295
|
||||
id-IABIPv6RequestType ProtocolIE-ID ::= 296
|
||||
id-IABv4AddressesRequested ProtocolIE-ID ::= 297
|
||||
id-IAB-Barred ProtocolIE-ID ::= 298
|
||||
id-TrafficMappingInformation ProtocolIE-ID ::= 299
|
||||
id-UL-UP-TNL-Information-to-Update-List ProtocolIE-ID ::= 300
|
||||
id-UL-UP-TNL-Information-to-Update-List-Item ProtocolIE-ID ::= 301
|
||||
id-UL-UP-TNL-Address-to-Update-List ProtocolIE-ID ::= 302
|
||||
id-UL-UP-TNL-Address-to-Update-List-Item ProtocolIE-ID ::= 303
|
||||
id-DL-UP-TNL-Address-to-Update-List ProtocolIE-ID ::= 304
|
||||
id-DL-UP-TNL-Address-to-Update-List-Item ProtocolIE-ID ::= 305
|
||||
id-NRV2XServicesAuthorized ProtocolIE-ID ::= 306
|
||||
id-LTEV2XServicesAuthorized ProtocolIE-ID ::= 307
|
||||
id-NRUESidelinkAggregateMaximumBitrate ProtocolIE-ID ::= 308
|
||||
id-LTEUESidelinkAggregateMaximumBitrate ProtocolIE-ID ::= 309
|
||||
id-SIB12-message ProtocolIE-ID ::= 310
|
||||
id-SIB13-message ProtocolIE-ID ::= 311
|
||||
id-SIB14-message ProtocolIE-ID ::= 312
|
||||
id-SLDRBs-FailedToBeModified-Item ProtocolIE-ID ::= 313
|
||||
id-SLDRBs-FailedToBeModified-List ProtocolIE-ID ::= 314
|
||||
id-SLDRBs-FailedToBeSetup-Item ProtocolIE-ID ::= 315
|
||||
id-SLDRBs-FailedToBeSetup-List ProtocolIE-ID ::= 316
|
||||
id-SLDRBs-Modified-Item ProtocolIE-ID ::= 317
|
||||
id-SLDRBs-Modified-List ProtocolIE-ID ::= 318
|
||||
id-SLDRBs-Required-ToBeModified-Item ProtocolIE-ID ::= 319
|
||||
id-SLDRBs-Required-ToBeModified-List ProtocolIE-ID ::= 320
|
||||
id-SLDRBs-Required-ToBeReleased-Item ProtocolIE-ID ::= 321
|
||||
id-SLDRBs-Required-ToBeReleased-List ProtocolIE-ID ::= 322
|
||||
id-SLDRBs-Setup-Item ProtocolIE-ID ::= 323
|
||||
id-SLDRBs-Setup-List ProtocolIE-ID ::= 324
|
||||
id-SLDRBs-ToBeModified-Item ProtocolIE-ID ::= 325
|
||||
id-SLDRBs-ToBeModified-List ProtocolIE-ID ::= 326
|
||||
id-SLDRBs-ToBeReleased-Item ProtocolIE-ID ::= 327
|
||||
id-SLDRBs-ToBeReleased-List ProtocolIE-ID ::= 328
|
||||
id-SLDRBs-ToBeSetup-Item ProtocolIE-ID ::= 329
|
||||
id-SLDRBs-ToBeSetup-List ProtocolIE-ID ::= 330
|
||||
id-SLDRBs-ToBeSetupMod-Item ProtocolIE-ID ::= 331
|
||||
id-SLDRBs-ToBeSetupMod-List ProtocolIE-ID ::= 332
|
||||
id-SLDRBs-SetupMod-List ProtocolIE-ID ::= 333
|
||||
id-SLDRBs-FailedToBeSetupMod-List ProtocolIE-ID ::= 334
|
||||
id-SLDRBs-SetupMod-Item ProtocolIE-ID ::= 335
|
||||
id-SLDRBs-FailedToBeSetupMod-Item ProtocolIE-ID ::= 336
|
||||
id-SLDRBs-ModifiedConf-List ProtocolIE-ID ::= 337
|
||||
id-SLDRBs-ModifiedConf-Item ProtocolIE-ID ::= 338
|
||||
id-UEAssistanceInformationEUTRA ProtocolIE-ID ::= 339
|
||||
id-PC5LinkAMBR ProtocolIE-ID ::= 340
|
||||
id-SL-PHY-MAC-RLC-Config ProtocolIE-ID ::= 341
|
||||
id-SL-ConfigDedicatedEUTRA ProtocolIE-ID ::= 342
|
||||
id-AlternativeQoSParaSetList ProtocolIE-ID ::= 343
|
||||
id-CurrentQoSParaSetIndex ProtocolIE-ID ::= 344
|
||||
id-gNBCUMeasurementID ProtocolIE-ID ::= 345
|
||||
id-gNBDUMeasurementID ProtocolIE-ID ::= 346
|
||||
id-RegistrationRequest ProtocolIE-ID ::= 347
|
||||
id-ReportCharacteristics ProtocolIE-ID ::= 348
|
||||
id-CellToReportList ProtocolIE-ID ::= 349
|
||||
id-CellMeasurementResultList ProtocolIE-ID ::= 350
|
||||
id-HardwareLoadIndicator ProtocolIE-ID ::= 351
|
||||
id-ReportingPeriodicity ProtocolIE-ID ::= 352
|
||||
id-TNLCapacityIndicator ProtocolIE-ID ::= 353
|
||||
id-CarrierList ProtocolIE-ID ::= 354
|
||||
id-ULCarrierList ProtocolIE-ID ::= 355
|
||||
id-FrequencyShift7p5khz ProtocolIE-ID ::= 356
|
||||
id-SSB-PositionsInBurst ProtocolIE-ID ::= 357
|
||||
id-NRPRACHConfig ProtocolIE-ID ::= 358
|
||||
id-RACHReportInformationList ProtocolIE-ID ::= 359
|
||||
id-RLFReportInformationList ProtocolIE-ID ::= 360
|
||||
id-TDD-UL-DLConfigCommonNR ProtocolIE-ID ::= 361
|
||||
id-CNPacketDelayBudgetDownlink ProtocolIE-ID ::= 362
|
||||
id-ExtendedPacketDelayBudget ProtocolIE-ID ::= 363
|
||||
id-TSCTrafficCharacteristics ProtocolIE-ID ::= 364
|
||||
id-ReportingRequestType ProtocolIE-ID ::= 365
|
||||
id-TimeReferenceInformation ProtocolIE-ID ::= 366
|
||||
id-CNPacketDelayBudgetUplink ProtocolIE-ID ::= 369
|
||||
id-AdditionalPDCPDuplicationTNL-List ProtocolIE-ID ::= 370
|
||||
id-RLCDuplicationInformation ProtocolIE-ID ::= 371
|
||||
id-AdditionalDuplicationIndication ProtocolIE-ID ::= 372
|
||||
id-ConditionalInterDUMobilityInformation ProtocolIE-ID ::= 373
|
||||
id-ConditionalIntraDUMobilityInformation ProtocolIE-ID ::= 374
|
||||
id-targetCellsToCancel ProtocolIE-ID ::= 375
|
||||
id-requestedTargetCellGlobalID ProtocolIE-ID ::= 376
|
||||
id-ManagementBasedMDTPLMNList ProtocolIE-ID ::= 377
|
||||
id-TraceCollectionEntityIPAddress ProtocolIE-ID ::= 378
|
||||
id-PrivacyIndicator ProtocolIE-ID ::= 379
|
||||
id-TraceCollectionEntityURI ProtocolIE-ID ::= 380
|
||||
id-mdtConfiguration ProtocolIE-ID ::= 381
|
||||
id-ServingNID ProtocolIE-ID ::= 382
|
||||
id-NPNBroadcastInformation ProtocolIE-ID ::= 383
|
||||
id-NPNSupportInfo ProtocolIE-ID ::= 384
|
||||
id-NID ProtocolIE-ID ::= 385
|
||||
id-AvailableSNPN-ID-List ProtocolIE-ID ::= 386
|
||||
id-SIB10-message ProtocolIE-ID ::= 387
|
||||
id-DLCarrierList ProtocolIE-ID ::= 389
|
||||
id-ExtendedTAISliceSupportList ProtocolIE-ID ::= 390
|
||||
id-RequestedSRSTransmissionCharacteristics ProtocolIE-ID ::= 391
|
||||
id-PosAssistance-Information ProtocolIE-ID ::= 392
|
||||
id-PosBroadcast ProtocolIE-ID ::= 393
|
||||
id-RoutingID ProtocolIE-ID ::= 394
|
||||
id-PosAssistanceInformationFailureList ProtocolIE-ID ::= 395
|
||||
id-PosMeasurementQuantities ProtocolIE-ID ::= 396
|
||||
id-PosMeasurementResultList ProtocolIE-ID ::= 397
|
||||
id-TRPInformationTypeListTRPReq ProtocolIE-ID ::= 398
|
||||
id-TRPInformationTypeItem ProtocolIE-ID ::= 399
|
||||
id-TRPInformationListTRPResp ProtocolIE-ID ::= 400
|
||||
id-TRPInformationItem ProtocolIE-ID ::= 401
|
||||
id-LMF-MeasurementID ProtocolIE-ID ::= 402
|
||||
id-SRSType ProtocolIE-ID ::= 403
|
||||
id-ActivationTime ProtocolIE-ID ::= 404
|
||||
id-AbortTransmission ProtocolIE-ID ::= 405
|
||||
id-PositioningBroadcastCells ProtocolIE-ID ::= 406
|
||||
id-SRSConfiguration ProtocolIE-ID ::= 407
|
||||
id-PosReportCharacteristics ProtocolIE-ID ::= 408
|
||||
id-PosMeasurementPeriodicity ProtocolIE-ID ::= 409
|
||||
id-TRPList ProtocolIE-ID ::= 410
|
||||
id-RAN-MeasurementID ProtocolIE-ID ::= 411
|
||||
id-LMF-UE-MeasurementID ProtocolIE-ID ::= 412
|
||||
id-RAN-UE-MeasurementID ProtocolIE-ID ::= 413
|
||||
id-E-CID-MeasurementQuantities ProtocolIE-ID ::= 414
|
||||
id-E-CID-MeasurementQuantities-Item ProtocolIE-ID ::= 415
|
||||
id-E-CID-MeasurementPeriodicity ProtocolIE-ID ::= 416
|
||||
id-E-CID-MeasurementResult ProtocolIE-ID ::= 417
|
||||
id-Cell-Portion-ID ProtocolIE-ID ::= 418
|
||||
id-SFNInitialisationTime ProtocolIE-ID ::= 419
|
||||
id-SystemFrameNumber ProtocolIE-ID ::= 420
|
||||
id-SlotNumber ProtocolIE-ID ::= 421
|
||||
id-TRP-MeasurementRequestList ProtocolIE-ID ::= 422
|
||||
id-MeasurementBeamInfoRequest ProtocolIE-ID ::= 423
|
||||
id-E-CID-ReportCharacteristics ProtocolIE-ID ::= 424
|
||||
id-ConfiguredTACIndication ProtocolIE-ID ::= 425
|
||||
id-Extended-GNB-DU-Name ProtocolIE-ID ::= 426
|
||||
id-Extended-GNB-CU-Name ProtocolIE-ID ::= 427
|
||||
|
||||
|
||||
END
|
||||
@@ -0,0 +1,178 @@
|
||||
F1AP-Containers {
|
||||
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
|
||||
ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-Containers (5) }
|
||||
|
||||
DEFINITIONS AUTOMATIC TAGS ::=
|
||||
|
||||
BEGIN
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- IE parameter types from other modules.
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
IMPORTS
|
||||
Criticality,
|
||||
Presence,
|
||||
PrivateIE-ID,
|
||||
ProtocolExtensionID,
|
||||
ProtocolIE-ID
|
||||
|
||||
FROM F1AP-CommonDataTypes
|
||||
maxPrivateIEs,
|
||||
maxProtocolExtensions,
|
||||
maxProtocolIEs
|
||||
|
||||
FROM F1AP-Constants;
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Class Definition for Protocol IEs
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-PROTOCOL-IES ::= CLASS {
|
||||
&id ProtocolIE-ID UNIQUE,
|
||||
&criticality Criticality,
|
||||
&Value,
|
||||
&presence Presence
|
||||
}
|
||||
WITH SYNTAX {
|
||||
ID &id
|
||||
CRITICALITY &criticality
|
||||
TYPE &Value
|
||||
PRESENCE &presence
|
||||
}
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Class Definition for Protocol IEs
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-PROTOCOL-IES-PAIR ::= CLASS {
|
||||
&id ProtocolIE-ID UNIQUE,
|
||||
&firstCriticality Criticality,
|
||||
&FirstValue,
|
||||
&secondCriticality Criticality,
|
||||
&SecondValue,
|
||||
&presence Presence
|
||||
}
|
||||
WITH SYNTAX {
|
||||
ID &id
|
||||
FIRST CRITICALITY &firstCriticality
|
||||
FIRST TYPE &FirstValue
|
||||
SECOND CRITICALITY &secondCriticality
|
||||
SECOND TYPE &SecondValue
|
||||
PRESENCE &presence
|
||||
}
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Class Definition for Protocol Extensions
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-PROTOCOL-EXTENSION ::= CLASS {
|
||||
&id ProtocolExtensionID UNIQUE,
|
||||
&criticality Criticality,
|
||||
&Extension,
|
||||
&presence Presence
|
||||
}
|
||||
WITH SYNTAX {
|
||||
ID &id
|
||||
CRITICALITY &criticality
|
||||
EXTENSION &Extension
|
||||
PRESENCE &presence
|
||||
}
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Class Definition for Private IEs
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-PRIVATE-IES ::= CLASS {
|
||||
&id PrivateIE-ID,
|
||||
&criticality Criticality,
|
||||
&Value,
|
||||
&presence Presence
|
||||
}
|
||||
WITH SYNTAX {
|
||||
ID &id
|
||||
CRITICALITY &criticality
|
||||
TYPE &Value
|
||||
PRESENCE &presence
|
||||
}
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Container for Protocol IEs
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
ProtocolIE-Container {F1AP-PROTOCOL-IES : IEsSetParam} ::=
|
||||
SEQUENCE (SIZE (0..maxProtocolIEs)) OF
|
||||
ProtocolIE-Field {{IEsSetParam}}
|
||||
|
||||
ProtocolIE-SingleContainer {F1AP-PROTOCOL-IES : IEsSetParam} ::=
|
||||
ProtocolIE-Field {{IEsSetParam}}
|
||||
|
||||
ProtocolIE-Field {F1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE {
|
||||
id F1AP-PROTOCOL-IES.&id ({IEsSetParam}),
|
||||
criticality F1AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}),
|
||||
value F1AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id})
|
||||
}
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Container for Protocol IE Pairs
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
ProtocolIE-ContainerPair {F1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
|
||||
SEQUENCE (SIZE (0..maxProtocolIEs)) OF
|
||||
ProtocolIE-FieldPair {{IEsSetParam}}
|
||||
|
||||
ProtocolIE-FieldPair {F1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE {
|
||||
id F1AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}),
|
||||
firstCriticality F1AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}),
|
||||
firstValue F1AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}),
|
||||
secondCriticality F1AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}),
|
||||
secondValue F1AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id})
|
||||
}
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Container for Protocol Extensions
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
ProtocolExtensionContainer {F1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::=
|
||||
SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
|
||||
ProtocolExtensionField {{ExtensionSetParam}}
|
||||
|
||||
ProtocolExtensionField {F1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
|
||||
id F1AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}),
|
||||
criticality F1AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}),
|
||||
extensionValue F1AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id})
|
||||
}
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Container for Private IEs
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
PrivateIE-Container {F1AP-PRIVATE-IES : IEsSetParam } ::=
|
||||
SEQUENCE (SIZE (1.. maxPrivateIEs)) OF
|
||||
PrivateIE-Field {{IEsSetParam}}
|
||||
|
||||
PrivateIE-Field {F1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE {
|
||||
id F1AP-PRIVATE-IES.&id ({IEsSetParam}),
|
||||
criticality F1AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}),
|
||||
value F1AP-PRIVATE-IES.&Value ({IEsSetParam}{@id})
|
||||
}
|
||||
|
||||
END
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,723 @@
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Elementary Procedure definitions
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-PDU-Descriptions {
|
||||
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
|
||||
ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-PDU-Descriptions (0)}
|
||||
|
||||
DEFINITIONS AUTOMATIC TAGS ::=
|
||||
|
||||
BEGIN
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- IE parameter types from other modules.
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
IMPORTS
|
||||
Criticality,
|
||||
ProcedureCode
|
||||
|
||||
FROM F1AP-CommonDataTypes
|
||||
Reset,
|
||||
ResetAcknowledge,
|
||||
F1SetupRequest,
|
||||
F1SetupResponse,
|
||||
F1SetupFailure,
|
||||
GNBDUConfigurationUpdate,
|
||||
GNBDUConfigurationUpdateAcknowledge,
|
||||
GNBDUConfigurationUpdateFailure,
|
||||
GNBCUConfigurationUpdate,
|
||||
GNBCUConfigurationUpdateAcknowledge,
|
||||
GNBCUConfigurationUpdateFailure,
|
||||
UEContextSetupRequest,
|
||||
UEContextSetupResponse,
|
||||
UEContextSetupFailure,
|
||||
UEContextReleaseCommand,
|
||||
UEContextReleaseComplete,
|
||||
UEContextModificationRequest,
|
||||
UEContextModificationResponse,
|
||||
UEContextModificationFailure,
|
||||
UEContextModificationRequired,
|
||||
UEContextModificationConfirm,
|
||||
ErrorIndication,
|
||||
UEContextReleaseRequest,
|
||||
DLRRCMessageTransfer,
|
||||
ULRRCMessageTransfer,
|
||||
GNBDUResourceCoordinationRequest,
|
||||
GNBDUResourceCoordinationResponse,
|
||||
PrivateMessage,
|
||||
UEInactivityNotification,
|
||||
InitialULRRCMessageTransfer,
|
||||
SystemInformationDeliveryCommand,
|
||||
Paging,
|
||||
Notify,
|
||||
WriteReplaceWarningRequest,
|
||||
WriteReplaceWarningResponse,
|
||||
PWSCancelRequest,
|
||||
PWSCancelResponse,
|
||||
PWSRestartIndication,
|
||||
PWSFailureIndication,
|
||||
GNBDUStatusIndication,
|
||||
RRCDeliveryReport,
|
||||
UEContextModificationRefuse,
|
||||
F1RemovalRequest,
|
||||
F1RemovalResponse,
|
||||
F1RemovalFailure,
|
||||
NetworkAccessRateReduction,
|
||||
TraceStart,
|
||||
DeactivateTrace,
|
||||
DUCURadioInformationTransfer,
|
||||
CUDURadioInformationTransfer,
|
||||
BAPMappingConfiguration,
|
||||
BAPMappingConfigurationAcknowledge,
|
||||
GNBDUResourceConfiguration,
|
||||
GNBDUResourceConfigurationAcknowledge,
|
||||
IABTNLAddressRequest,
|
||||
IABTNLAddressResponse,
|
||||
IABUPConfigurationUpdateRequest,
|
||||
IABUPConfigurationUpdateResponse,
|
||||
IABUPConfigurationUpdateFailure,
|
||||
ResourceStatusRequest,
|
||||
ResourceStatusResponse,
|
||||
ResourceStatusFailure,
|
||||
ResourceStatusUpdate,
|
||||
AccessAndMobilityIndication,
|
||||
ReferenceTimeInformationReportingControl,
|
||||
ReferenceTimeInformationReport,
|
||||
AccessSuccess,
|
||||
CellTrafficTrace,
|
||||
PositioningMeasurementRequest,
|
||||
PositioningMeasurementResponse,
|
||||
PositioningMeasurementFailure,
|
||||
PositioningAssistanceInformationControl,
|
||||
PositioningAssistanceInformationFeedback,
|
||||
PositioningMeasurementReport,
|
||||
PositioningMeasurementAbort,
|
||||
PositioningMeasurementFailureIndication,
|
||||
PositioningMeasurementUpdate,
|
||||
TRPInformationRequest,
|
||||
TRPInformationResponse,
|
||||
TRPInformationFailure,
|
||||
PositioningInformationRequest,
|
||||
PositioningInformationResponse,
|
||||
PositioningInformationFailure,
|
||||
PositioningActivationRequest,
|
||||
PositioningActivationResponse,
|
||||
PositioningActivationFailure,
|
||||
PositioningDeactivation,
|
||||
PositioningInformationUpdate,
|
||||
E-CIDMeasurementInitiationRequest,
|
||||
E-CIDMeasurementInitiationResponse,
|
||||
E-CIDMeasurementInitiationFailure,
|
||||
E-CIDMeasurementFailureIndication,
|
||||
E-CIDMeasurementReport,
|
||||
E-CIDMeasurementTerminationCommand
|
||||
|
||||
|
||||
|
||||
FROM F1AP-PDU-Contents
|
||||
id-Reset,
|
||||
id-F1Setup,
|
||||
id-gNBDUConfigurationUpdate,
|
||||
id-gNBCUConfigurationUpdate,
|
||||
id-UEContextSetup,
|
||||
id-UEContextRelease,
|
||||
id-UEContextModification,
|
||||
id-UEContextModificationRequired,
|
||||
id-ErrorIndication,
|
||||
id-UEContextReleaseRequest,
|
||||
id-DLRRCMessageTransfer,
|
||||
id-ULRRCMessageTransfer,
|
||||
id-GNBDUResourceCoordination,
|
||||
id-privateMessage,
|
||||
id-UEInactivityNotification,
|
||||
id-InitialULRRCMessageTransfer,
|
||||
id-SystemInformationDeliveryCommand,
|
||||
id-Paging,
|
||||
id-Notify,
|
||||
id-WriteReplaceWarning,
|
||||
id-PWSCancel,
|
||||
id-PWSRestartIndication,
|
||||
id-PWSFailureIndication,
|
||||
id-GNBDUStatusIndication,
|
||||
id-RRCDeliveryReport,
|
||||
id-F1Removal,
|
||||
id-NetworkAccessRateReduction,
|
||||
id-TraceStart,
|
||||
id-DeactivateTrace,
|
||||
id-DUCURadioInformationTransfer,
|
||||
id-CUDURadioInformationTransfer,
|
||||
id-BAPMappingConfiguration,
|
||||
id-GNBDUResourceConfiguration,
|
||||
id-IABTNLAddressAllocation,
|
||||
id-IABUPConfigurationUpdate,
|
||||
id-resourceStatusReportingInitiation,
|
||||
id-resourceStatusReporting,
|
||||
id-accessAndMobilityIndication,
|
||||
id-ReferenceTimeInformationReportingControl,
|
||||
id-ReferenceTimeInformationReport,
|
||||
id-accessSuccess,
|
||||
id-cellTrafficTrace,
|
||||
id-PositioningMeasurementExchange,
|
||||
id-PositioningAssistanceInformationControl,
|
||||
id-PositioningAssistanceInformationFeedback,
|
||||
id-PositioningMeasurementReport,
|
||||
id-PositioningMeasurementAbort,
|
||||
id-PositioningMeasurementFailureIndication,
|
||||
id-PositioningMeasurementUpdate,
|
||||
id-TRPInformationExchange,
|
||||
id-PositioningInformationExchange,
|
||||
id-PositioningActivation,
|
||||
id-PositioningDeactivation,
|
||||
id-PositioningInformationUpdate,
|
||||
id-E-CIDMeasurementInitiation,
|
||||
id-E-CIDMeasurementFailureIndication,
|
||||
id-E-CIDMeasurementReport,
|
||||
id-E-CIDMeasurementTermination
|
||||
|
||||
|
||||
FROM F1AP-Constants
|
||||
|
||||
ProtocolIE-SingleContainer{},
|
||||
F1AP-PROTOCOL-IES
|
||||
|
||||
FROM F1AP-Containers;
|
||||
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Interface Elementary Procedure Class
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-ELEMENTARY-PROCEDURE ::= CLASS {
|
||||
&InitiatingMessage ,
|
||||
&SuccessfulOutcome OPTIONAL,
|
||||
&UnsuccessfulOutcome OPTIONAL,
|
||||
&procedureCode ProcedureCode UNIQUE,
|
||||
&criticality Criticality DEFAULT ignore
|
||||
}
|
||||
WITH SYNTAX {
|
||||
INITIATING MESSAGE &InitiatingMessage
|
||||
[SUCCESSFUL OUTCOME &SuccessfulOutcome]
|
||||
[UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome]
|
||||
PROCEDURE CODE &procedureCode
|
||||
[CRITICALITY &criticality]
|
||||
}
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Interface PDU Definition
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-PDU ::= CHOICE {
|
||||
initiatingMessage InitiatingMessage,
|
||||
successfulOutcome SuccessfulOutcome,
|
||||
unsuccessfulOutcome UnsuccessfulOutcome,
|
||||
choice-extension ProtocolIE-SingleContainer { { F1AP-PDU-ExtIEs} }
|
||||
}
|
||||
|
||||
F1AP-PDU-ExtIEs F1AP-PROTOCOL-IES ::= { -- this extension is not used
|
||||
...
|
||||
}
|
||||
|
||||
InitiatingMessage ::= SEQUENCE {
|
||||
procedureCode F1AP-ELEMENTARY-PROCEDURE.&procedureCode ({F1AP-ELEMENTARY-PROCEDURES}),
|
||||
criticality F1AP-ELEMENTARY-PROCEDURE.&criticality ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
|
||||
value F1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
|
||||
}
|
||||
|
||||
SuccessfulOutcome ::= SEQUENCE {
|
||||
procedureCode F1AP-ELEMENTARY-PROCEDURE.&procedureCode ({F1AP-ELEMENTARY-PROCEDURES}),
|
||||
criticality F1AP-ELEMENTARY-PROCEDURE.&criticality ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
|
||||
value F1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
|
||||
}
|
||||
|
||||
UnsuccessfulOutcome ::= SEQUENCE {
|
||||
procedureCode F1AP-ELEMENTARY-PROCEDURE.&procedureCode ({F1AP-ELEMENTARY-PROCEDURES}),
|
||||
criticality F1AP-ELEMENTARY-PROCEDURE.&criticality ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
|
||||
value F1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
|
||||
}
|
||||
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Interface Elementary Procedure List
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
F1AP-ELEMENTARY-PROCEDURES F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
F1AP-ELEMENTARY-PROCEDURES-CLASS-1 |
|
||||
F1AP-ELEMENTARY-PROCEDURES-CLASS-2,
|
||||
...
|
||||
}
|
||||
|
||||
|
||||
F1AP-ELEMENTARY-PROCEDURES-CLASS-1 F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
reset |
|
||||
f1Setup |
|
||||
gNBDUConfigurationUpdate |
|
||||
gNBCUConfigurationUpdate |
|
||||
uEContextSetup |
|
||||
uEContextRelease |
|
||||
uEContextModification |
|
||||
uEContextModificationRequired |
|
||||
writeReplaceWarning |
|
||||
pWSCancel |
|
||||
gNBDUResourceCoordination |
|
||||
f1Removal |
|
||||
bAPMappingConfiguration |
|
||||
gNBDUResourceConfiguration |
|
||||
iABTNLAddressAllocation |
|
||||
iABUPConfigurationUpdate |
|
||||
resourceStatusReportingInitiation |
|
||||
positioningMeasurementExchange |
|
||||
tRPInformationExchange |
|
||||
positioningInformationExchange |
|
||||
positioningActivation |
|
||||
e-CIDMeasurementInitiation,
|
||||
...
|
||||
}
|
||||
|
||||
F1AP-ELEMENTARY-PROCEDURES-CLASS-2 F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
errorIndication |
|
||||
uEContextReleaseRequest |
|
||||
dLRRCMessageTransfer |
|
||||
uLRRCMessageTransfer |
|
||||
uEInactivityNotification |
|
||||
privateMessage |
|
||||
initialULRRCMessageTransfer |
|
||||
systemInformationDelivery |
|
||||
paging |
|
||||
notify |
|
||||
pWSRestartIndication |
|
||||
pWSFailureIndication |
|
||||
gNBDUStatusIndication |
|
||||
rRCDeliveryReport |
|
||||
networkAccessRateReduction |
|
||||
traceStart |
|
||||
deactivateTrace |
|
||||
dUCURadioInformationTransfer |
|
||||
cUDURadioInformationTransfer |
|
||||
resourceStatusReporting |
|
||||
accessAndMobilityIndication |
|
||||
referenceTimeInformationReportingControl|
|
||||
referenceTimeInformationReport |
|
||||
accessSuccess |
|
||||
cellTrafficTrace |
|
||||
positioningAssistanceInformationControl |
|
||||
positioningAssistanceInformationFeedback |
|
||||
positioningMeasurementReport |
|
||||
positioningMeasurementAbort |
|
||||
positioningMeasurementFailureIndication |
|
||||
positioningMeasurementUpdate |
|
||||
positioningDeactivation |
|
||||
e-CIDMeasurementFailureIndication |
|
||||
e-CIDMeasurementReport |
|
||||
e-CIDMeasurementTermination |
|
||||
positioningInformationUpdate,
|
||||
...
|
||||
}
|
||||
-- **************************************************************
|
||||
--
|
||||
-- Interface Elementary Procedures
|
||||
--
|
||||
-- **************************************************************
|
||||
|
||||
reset F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE Reset
|
||||
SUCCESSFUL OUTCOME ResetAcknowledge
|
||||
PROCEDURE CODE id-Reset
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
f1Setup F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE F1SetupRequest
|
||||
SUCCESSFUL OUTCOME F1SetupResponse
|
||||
UNSUCCESSFUL OUTCOME F1SetupFailure
|
||||
PROCEDURE CODE id-F1Setup
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
gNBDUConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE GNBDUConfigurationUpdate
|
||||
SUCCESSFUL OUTCOME GNBDUConfigurationUpdateAcknowledge
|
||||
UNSUCCESSFUL OUTCOME GNBDUConfigurationUpdateFailure
|
||||
PROCEDURE CODE id-gNBDUConfigurationUpdate
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
gNBCUConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE GNBCUConfigurationUpdate
|
||||
SUCCESSFUL OUTCOME GNBCUConfigurationUpdateAcknowledge
|
||||
UNSUCCESSFUL OUTCOME GNBCUConfigurationUpdateFailure
|
||||
PROCEDURE CODE id-gNBCUConfigurationUpdate
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
uEContextSetup F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE UEContextSetupRequest
|
||||
SUCCESSFUL OUTCOME UEContextSetupResponse
|
||||
UNSUCCESSFUL OUTCOME UEContextSetupFailure
|
||||
PROCEDURE CODE id-UEContextSetup
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
uEContextRelease F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE UEContextReleaseCommand
|
||||
SUCCESSFUL OUTCOME UEContextReleaseComplete
|
||||
PROCEDURE CODE id-UEContextRelease
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
uEContextModification F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE UEContextModificationRequest
|
||||
SUCCESSFUL OUTCOME UEContextModificationResponse
|
||||
UNSUCCESSFUL OUTCOME UEContextModificationFailure
|
||||
PROCEDURE CODE id-UEContextModification
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
uEContextModificationRequired F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE UEContextModificationRequired
|
||||
SUCCESSFUL OUTCOME UEContextModificationConfirm
|
||||
UNSUCCESSFUL OUTCOME UEContextModificationRefuse
|
||||
PROCEDURE CODE id-UEContextModificationRequired
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
writeReplaceWarning F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE WriteReplaceWarningRequest
|
||||
SUCCESSFUL OUTCOME WriteReplaceWarningResponse
|
||||
PROCEDURE CODE id-WriteReplaceWarning
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
pWSCancel F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PWSCancelRequest
|
||||
SUCCESSFUL OUTCOME PWSCancelResponse
|
||||
PROCEDURE CODE id-PWSCancel
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
errorIndication F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE ErrorIndication
|
||||
PROCEDURE CODE id-ErrorIndication
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
uEContextReleaseRequest F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE UEContextReleaseRequest
|
||||
PROCEDURE CODE id-UEContextReleaseRequest
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
|
||||
initialULRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE InitialULRRCMessageTransfer
|
||||
PROCEDURE CODE id-InitialULRRCMessageTransfer
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
dLRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE DLRRCMessageTransfer
|
||||
PROCEDURE CODE id-DLRRCMessageTransfer
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
uLRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE ULRRCMessageTransfer
|
||||
PROCEDURE CODE id-ULRRCMessageTransfer
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
|
||||
uEInactivityNotification F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE UEInactivityNotification
|
||||
PROCEDURE CODE id-UEInactivityNotification
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
gNBDUResourceCoordination F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE GNBDUResourceCoordinationRequest
|
||||
SUCCESSFUL OUTCOME GNBDUResourceCoordinationResponse
|
||||
PROCEDURE CODE id-GNBDUResourceCoordination
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
privateMessage F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PrivateMessage
|
||||
PROCEDURE CODE id-privateMessage
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
systemInformationDelivery F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE SystemInformationDeliveryCommand
|
||||
PROCEDURE CODE id-SystemInformationDeliveryCommand
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
|
||||
paging F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE Paging
|
||||
PROCEDURE CODE id-Paging
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
notify F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE Notify
|
||||
PROCEDURE CODE id-Notify
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
networkAccessRateReduction F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE NetworkAccessRateReduction
|
||||
PROCEDURE CODE id-NetworkAccessRateReduction
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
|
||||
pWSRestartIndication F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PWSRestartIndication
|
||||
PROCEDURE CODE id-PWSRestartIndication
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
pWSFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PWSFailureIndication
|
||||
PROCEDURE CODE id-PWSFailureIndication
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
gNBDUStatusIndication F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE GNBDUStatusIndication
|
||||
PROCEDURE CODE id-GNBDUStatusIndication
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
|
||||
rRCDeliveryReport F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE RRCDeliveryReport
|
||||
PROCEDURE CODE id-RRCDeliveryReport
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
f1Removal F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE F1RemovalRequest
|
||||
SUCCESSFUL OUTCOME F1RemovalResponse
|
||||
UNSUCCESSFUL OUTCOME F1RemovalFailure
|
||||
PROCEDURE CODE id-F1Removal
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
traceStart F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE TraceStart
|
||||
PROCEDURE CODE id-TraceStart
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
deactivateTrace F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE DeactivateTrace
|
||||
PROCEDURE CODE id-DeactivateTrace
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
dUCURadioInformationTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE DUCURadioInformationTransfer
|
||||
PROCEDURE CODE id-DUCURadioInformationTransfer
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
cUDURadioInformationTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE CUDURadioInformationTransfer
|
||||
PROCEDURE CODE id-CUDURadioInformationTransfer
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
bAPMappingConfiguration F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE BAPMappingConfiguration
|
||||
SUCCESSFUL OUTCOME BAPMappingConfigurationAcknowledge
|
||||
PROCEDURE CODE id-BAPMappingConfiguration
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
gNBDUResourceConfiguration F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE GNBDUResourceConfiguration
|
||||
SUCCESSFUL OUTCOME GNBDUResourceConfigurationAcknowledge
|
||||
PROCEDURE CODE id-GNBDUResourceConfiguration
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
iABTNLAddressAllocation F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE IABTNLAddressRequest
|
||||
SUCCESSFUL OUTCOME IABTNLAddressResponse
|
||||
PROCEDURE CODE id-IABTNLAddressAllocation
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
iABUPConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE IABUPConfigurationUpdateRequest
|
||||
SUCCESSFUL OUTCOME IABUPConfigurationUpdateResponse
|
||||
UNSUCCESSFUL OUTCOME IABUPConfigurationUpdateFailure
|
||||
PROCEDURE CODE id-IABUPConfigurationUpdate
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
resourceStatusReportingInitiation F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE ResourceStatusRequest
|
||||
SUCCESSFUL OUTCOME ResourceStatusResponse
|
||||
UNSUCCESSFUL OUTCOME ResourceStatusFailure
|
||||
PROCEDURE CODE id-resourceStatusReportingInitiation
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
resourceStatusReporting F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE ResourceStatusUpdate
|
||||
PROCEDURE CODE id-resourceStatusReporting
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
accessAndMobilityIndication F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE AccessAndMobilityIndication
|
||||
PROCEDURE CODE id-accessAndMobilityIndication
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
referenceTimeInformationReportingControl F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE ReferenceTimeInformationReportingControl
|
||||
PROCEDURE CODE id-ReferenceTimeInformationReportingControl
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
referenceTimeInformationReport F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE ReferenceTimeInformationReport
|
||||
PROCEDURE CODE id-ReferenceTimeInformationReport
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
accessSuccess F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE AccessSuccess
|
||||
PROCEDURE CODE id-accessSuccess
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
cellTrafficTrace F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE CellTrafficTrace
|
||||
PROCEDURE CODE id-cellTrafficTrace
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
positioningAssistanceInformationControl F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningAssistanceInformationControl
|
||||
PROCEDURE CODE id-PositioningAssistanceInformationControl
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
positioningAssistanceInformationFeedback F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningAssistanceInformationFeedback
|
||||
PROCEDURE CODE id-PositioningAssistanceInformationFeedback
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
positioningMeasurementExchange F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningMeasurementRequest
|
||||
SUCCESSFUL OUTCOME PositioningMeasurementResponse
|
||||
UNSUCCESSFUL OUTCOME PositioningMeasurementFailure
|
||||
PROCEDURE CODE id-PositioningMeasurementExchange
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
positioningMeasurementReport F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningMeasurementReport
|
||||
PROCEDURE CODE id-PositioningMeasurementReport
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
positioningMeasurementAbort F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningMeasurementAbort
|
||||
PROCEDURE CODE id-PositioningMeasurementAbort
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
positioningMeasurementFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningMeasurementFailureIndication
|
||||
PROCEDURE CODE id-PositioningMeasurementFailureIndication
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
positioningMeasurementUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningMeasurementUpdate
|
||||
PROCEDURE CODE id-PositioningMeasurementUpdate
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
|
||||
tRPInformationExchange F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE TRPInformationRequest
|
||||
SUCCESSFUL OUTCOME TRPInformationResponse
|
||||
UNSUCCESSFUL OUTCOME TRPInformationFailure
|
||||
PROCEDURE CODE id-TRPInformationExchange
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
positioningInformationExchange F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningInformationRequest
|
||||
SUCCESSFUL OUTCOME PositioningInformationResponse
|
||||
UNSUCCESSFUL OUTCOME PositioningInformationFailure
|
||||
PROCEDURE CODE id-PositioningInformationExchange
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
positioningActivation F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningActivationRequest
|
||||
SUCCESSFUL OUTCOME PositioningActivationResponse
|
||||
UNSUCCESSFUL OUTCOME PositioningActivationFailure
|
||||
PROCEDURE CODE id-PositioningActivation
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
positioningDeactivation F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningDeactivation
|
||||
PROCEDURE CODE id-PositioningDeactivation
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
e-CIDMeasurementInitiation F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE E-CIDMeasurementInitiationRequest
|
||||
SUCCESSFUL OUTCOME E-CIDMeasurementInitiationResponse
|
||||
UNSUCCESSFUL OUTCOME E-CIDMeasurementInitiationFailure
|
||||
PROCEDURE CODE id-E-CIDMeasurementInitiation
|
||||
CRITICALITY reject
|
||||
}
|
||||
|
||||
e-CIDMeasurementFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE E-CIDMeasurementFailureIndication
|
||||
PROCEDURE CODE id-E-CIDMeasurementFailureIndication
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
e-CIDMeasurementReport F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE E-CIDMeasurementReport
|
||||
PROCEDURE CODE id-E-CIDMeasurementReport
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
e-CIDMeasurementTermination F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE E-CIDMeasurementTerminationCommand
|
||||
PROCEDURE CODE id-E-CIDMeasurementTermination
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
positioningInformationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
|
||||
INITIATING MESSAGE PositioningInformationUpdate
|
||||
PROCEDURE CODE id-PositioningInformationUpdate
|
||||
CRITICALITY ignore
|
||||
}
|
||||
|
||||
|
||||
END
|
||||
@@ -46,7 +46,6 @@
|
||||
inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#endif
|
||||
|
||||
#include "F1AP_Active-Cells-List.h"
|
||||
#include "F1AP_RAT-FrequencyPriorityInformation.h"
|
||||
#include "F1AP_DLUPTNLInformation-ToBeSetup-Item.h"
|
||||
#include "F1AP_PrivateMessage.h"
|
||||
@@ -55,6 +54,7 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_NRPCI.h"
|
||||
#include "F1AP_Transmission-Bandwidth.h"
|
||||
#include "F1AP_SIB1-message.h"
|
||||
#include "F1AP_SibtypetobeupdatedListItem.h"
|
||||
#include "F1AP_GNBCUConfigurationUpdateAcknowledge.h"
|
||||
#include "F1AP_DRBs-Setup-Item.h"
|
||||
#include "F1AP_EUTRA-NR-CellResourceCoordinationReqAck-Container.h"
|
||||
@@ -75,7 +75,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_DRBs-Required-ToBeModified-Item.h"
|
||||
#include "F1AP_BitRate.h"
|
||||
#include "F1AP_SRBs-ToBeSetup-List.h"
|
||||
#include "F1AP_ConcurrentWarningMessageIndicator.h"
|
||||
#include "F1AP_CriticalityDiagnostics-IE-Item.h"
|
||||
#include "F1AP_GNB-CU-TNL-Association-To-Update-List.h"
|
||||
#include "F1AP_DRB-Notify-List.h"
|
||||
@@ -85,6 +84,7 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_PWS-Failed-NR-CGI-List.h"
|
||||
#include "F1AP_InitialULRRCMessageTransfer.h"
|
||||
#include "F1AP_Served-Cell-Information.h"
|
||||
#include "F1AP_ServedPLMNs-Item.h"
|
||||
#include "F1AP_Served-EUTRA-Cells-Information.h"
|
||||
#include "F1AP_Cells-Broadcast-Cancelled-Item.h"
|
||||
#include "F1AP_F1SetupRequest.h"
|
||||
@@ -128,13 +128,11 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_TransactionID.h"
|
||||
#include "F1AP_AllocationAndRetentionPriority.h"
|
||||
#include "F1AP_ShortDRXCycleLength.h"
|
||||
#include "F1AP_BroadcastPLMNs-Item.h"
|
||||
#include "F1AP_DRB-Information.h"
|
||||
#include "F1AP_TimeToWait.h"
|
||||
#include "F1AP_NonDynamic5QIDescriptor.h"
|
||||
#include "F1AP_C-RNTI.h"
|
||||
#include "F1AP_MIB-message.h"
|
||||
#include "F1AP_SIBtype-Item.h"
|
||||
#include "F1AP_Served-Cells-To-Modify-List.h"
|
||||
#include "F1AP_NRCGI.h"
|
||||
#include "F1AP_DuplicationActivation.h"
|
||||
@@ -187,6 +185,7 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_CellULConfigured.h"
|
||||
#include "F1AP_DRB-Activity.h"
|
||||
#include "F1AP_GNB-CU-TNL-Association-Failed-To-Setup-Item.h"
|
||||
#include "F1AP_ProtocolIE-ID.h"
|
||||
#include "F1AP_PrivateIE-ID.h"
|
||||
#include "F1AP_WriteReplaceWarningResponse.h"
|
||||
#include "F1AP_CauseMisc.h"
|
||||
@@ -231,9 +230,7 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_SUL-Information.h"
|
||||
#include "F1AP_CriticalityDiagnostics-IE-List.h"
|
||||
#include "F1AP_EUTRA-FDD-Info.h"
|
||||
#include "F1AP_BroadcastPLMNs-List.h"
|
||||
#include "F1AP_Served-Cells-To-Delete-Item.h"
|
||||
#include "F1AP_ListofEUTRACellsinGNBDUCoordination.h"
|
||||
#include "F1AP_Candidate-SpCell-Item.h"
|
||||
#include "F1AP_Cells-To-Be-Broadcast-List.h"
|
||||
#include "F1AP_ULRRCMessageTransfer.h"
|
||||
@@ -255,7 +252,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_SRBs-ToBeReleased-List.h"
|
||||
#include "F1AP_MeasGapConfig.h"
|
||||
#include "F1AP_NR-Mode-Info.h"
|
||||
#include "F1AP_Active-Cells-Item.h"
|
||||
#include "F1AP_Protected-EUTRA-Resources-List.h"
|
||||
#include "F1AP_SRBs-FailedToBeSetup-Item.h"
|
||||
#include "F1AP_ResetAll.h"
|
||||
@@ -287,7 +283,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_UEContextReleaseRequest.h"
|
||||
#include "F1AP_GNB-DU-Name.h"
|
||||
#include "F1AP_DRBs-ToBeModified-Item.h"
|
||||
#include "F1AP_SIBtype-List.h"
|
||||
#include "F1AP_EUTRA-NR-CellResourceCoordinationReq-Container.h"
|
||||
#include "F1AP_DRBs-SetupMod-List.h"
|
||||
#include "F1AP_DRBs-Required-ToBeModified-List.h"
|
||||
@@ -296,7 +291,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_PacketDelayBudget.h"
|
||||
#include "F1AP_GNBCUConfigurationUpdate.h"
|
||||
#include "F1AP_Cells-Broadcast-Completed-Item.h"
|
||||
#include "F1AP_RRCRconfigurationCompleteIndicator.h"
|
||||
#include "F1AP_PagingPriority.h"
|
||||
#include "F1AP_Cells-Failed-to-be-Activated-List.h"
|
||||
#include "F1AP_Endpoint-IP-address-and-port.h"
|
||||
@@ -306,7 +300,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_ResetType.h"
|
||||
#include "F1AP_FDD-Info.h"
|
||||
#include "F1AP_DLUPTNLInformation-ToBeSetup-List.h"
|
||||
#include "F1AP_QoSFlowIndicator.h"
|
||||
#include "F1AP_NR-CGI-List-For-Restart-List.h"
|
||||
#include "F1AP_F1SetupResponse.h"
|
||||
#include "F1AP_UEContextSetupResponse.h"
|
||||
@@ -325,7 +318,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_Cells-to-be-Barred-List.h"
|
||||
#include "F1AP_Presence.h"
|
||||
#include "F1AP_CellBarred.h"
|
||||
#include "F1AP_SIBtype.h"
|
||||
#include "F1AP_RequestType.h"
|
||||
#include "F1AP_NRFreqInfo.h"
|
||||
#include "F1AP_Potential-SpCell-Item.h"
|
||||
@@ -348,7 +340,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
|
||||
#include "F1AP_GBR-QoSFlowInformation.h"
|
||||
#include "F1AP_SCellIndex.h"
|
||||
#include "F1AP_DRBs-SetupMod-Item.h"
|
||||
#include "F1AP_TransmissionStopIndicator.h"
|
||||
#include "F1AP_UEContextSetupFailure.h"
|
||||
#include "F1AP_DRBs-FailedToBeModified-List.h"
|
||||
#include "F1AP_DRBs-FailedToBeSetupMod-Item.h"
|
||||
|
||||
@@ -139,10 +139,11 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
||||
served_celles_item_p = &(((F1AP_GNB_DU_Served_Cells_ItemIEs_t *)ie->value.choice.GNB_DU_Served_Cells_List.list.array[i])->value.choice.GNB_DU_Served_Cells_Item);
|
||||
|
||||
/* tac */
|
||||
OCTET_STRING_TO_INT16(&(served_celles_item_p->served_Cell_Information.fiveGS_TAC), F1AP_SETUP_REQ(message_p).tac[i]);
|
||||
LOG_D(F1AP, "F1AP_SETUP_REQ(message_p).tac[%d] %d \n",
|
||||
i, F1AP_SETUP_REQ(message_p).tac[i]);
|
||||
|
||||
if (served_celles_item_p->served_Cell_Information.fiveGS_TAC) {
|
||||
OCTET_STRING_TO_INT16(served_celles_item_p->served_Cell_Information.fiveGS_TAC, F1AP_SETUP_REQ(message_p).tac[i]);
|
||||
LOG_D(F1AP, "F1AP_SETUP_REQ(message_p).tac[%d] %d \n",
|
||||
i, F1AP_SETUP_REQ(message_p).tac[i]);
|
||||
}
|
||||
/* - nRCGI */
|
||||
TBCD_TO_MCC_MNC(&(served_celles_item_p->served_Cell_Information.nRCGI.pLMN_Identity), F1AP_SETUP_REQ(message_p).mcc[i],
|
||||
F1AP_SETUP_REQ(message_p).mnc[i],
|
||||
@@ -356,20 +357,32 @@ int CU_send_F1_SETUP_RESPONSE(instance_t instance,
|
||||
//for (int n = 0; n < f1ap_setup_resp->SI_container_length[i][0]; n++)
|
||||
// printf("%02x ", f1ap_setup_resp->SI_container[i][0][n]);
|
||||
//printf("\n");
|
||||
OCTET_STRING_fromBuf(&gNB_CUSystemInformation->sImessage,
|
||||
(const char*)f1ap_setup_resp->SI_container[i][0],
|
||||
f1ap_setup_resp->SI_container_length[i][0]);
|
||||
|
||||
LOG_D(F1AP, "f1ap_setup_resp->SI_container_length = %d \n", f1ap_setup_resp->SI_container_length[0][0]);
|
||||
for (int j=2;
|
||||
j<10;
|
||||
j++) {
|
||||
if (j==6) j=9;
|
||||
if (f1ap_setup_resp->SI_container[i][j]!=NULL) {
|
||||
LOG_I(F1AP,"SETUP RESP: SI %d, Type %d\n",i,j);
|
||||
AssertFatal((j < 6) || (j == 9), "Illegal SI type %d\n",j);
|
||||
F1AP_SibtypetobeupdatedListItem_t *sib_item = calloc(1,sizeof(*sib_item));
|
||||
sib_item->sIBtype = j;
|
||||
OCTET_STRING_fromBuf(&sib_item->sIBmessage,
|
||||
(const char*)f1ap_setup_resp->SI_container[i][j],
|
||||
f1ap_setup_resp->SI_container_length[i][j]);
|
||||
|
||||
LOG_I(F1AP, "f1ap_setup_resp->SI_container_length[%d][%d] = %d \n", i,j,f1ap_setup_resp->SI_container_length[i][j]);
|
||||
ASN_SEQUENCE_ADD(&gNB_CUSystemInformation->sibtypetobeupdatedlist.list,sib_item);
|
||||
}
|
||||
}
|
||||
cells_to_be_activated_list_itemExtIEs->extensionValue.choice.GNB_CUSystemInformation = *gNB_CUSystemInformation;
|
||||
|
||||
|
||||
F1AP_ProtocolExtensionContainer_160P9_t p_160P9_t;
|
||||
memset((void *)&p_160P9_t, 0, sizeof(F1AP_ProtocolExtensionContainer_160P9_t));
|
||||
F1AP_ProtocolExtensionContainer_154P112_t p_154P112_t;
|
||||
memset((void *)&p_154P112_t, 0, sizeof(F1AP_ProtocolExtensionContainer_154P112_t));
|
||||
|
||||
ASN_SEQUENCE_ADD(&p_160P9_t.list,
|
||||
ASN_SEQUENCE_ADD(&p_154P112_t.list,
|
||||
cells_to_be_activated_list_itemExtIEs);
|
||||
cells_to_be_activated_list_item.iE_Extensions = (struct F1AP_ProtocolExtensionContainer*)&p_160P9_t;
|
||||
cells_to_be_activated_list_item.iE_Extensions = (struct F1AP_ProtocolExtensionContainer*)&p_154P112_t;
|
||||
|
||||
free(gNB_CUSystemInformation);
|
||||
gNB_CUSystemInformation = NULL;
|
||||
@@ -829,17 +842,13 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, module_id_t du_mod_
|
||||
protected_eutra_resources_item_ies = (F1AP_Protected_EUTRA_Resources_ItemIEs_t *)calloc(1, sizeof(F1AP_Protected_EUTRA_Resources_ItemIEs_t));
|
||||
protected_eutra_resources_item_ies->id = F1AP_ProtocolIE_ID_id_Protected_EUTRA_Resources_List;
|
||||
protected_eutra_resources_item_ies->criticality = F1AP_Criticality_reject;
|
||||
protected_eutra_resources_item_ies->value.present = F1AP_Protected_EUTRA_Resources_ItemIEs__value_PR_SpectrumSharingGroupID;
|
||||
protected_eutra_resources_item_ies->value.choice.SpectrumSharingGroupID = 1L;
|
||||
|
||||
protected_eutra_resources_item_ies->value.present = F1AP_Protected_EUTRA_Resources_ItemIEs__value_PR_Protected_EUTRA_Resources_Item;
|
||||
((F1AP_Protected_EUTRA_Resources_Item_t*)&protected_eutra_resources_item_ies->value.choice.Protected_EUTRA_Resources_Item)->spectrumSharingGroupID = 123L;
|
||||
memset(&protected_eutra_resources_item_ies->value.choice.Protected_EUTRA_Resources_Item,0,
|
||||
sizeof(F1AP_Protected_EUTRA_Resources_Item_t));
|
||||
ASN_SEQUENCE_ADD(&ie->value.choice.Protected_EUTRA_Resources_List.list, protected_eutra_resources_item_ies);
|
||||
|
||||
/* 8.2 ListofEUTRACellsinGNBDUCoordination */
|
||||
protected_eutra_resources_item_ies = (F1AP_Protected_EUTRA_Resources_ItemIEs_t *)calloc(1, sizeof(F1AP_Protected_EUTRA_Resources_ItemIEs_t));
|
||||
protected_eutra_resources_item_ies->id = F1AP_ProtocolIE_ID_id_Protected_EUTRA_Resources_List;
|
||||
protected_eutra_resources_item_ies->criticality = F1AP_Criticality_reject;
|
||||
protected_eutra_resources_item_ies->value.present = F1AP_Protected_EUTRA_Resources_ItemIEs__value_PR_ListofEUTRACellsinGNBDUCoordination;
|
||||
|
||||
/*
|
||||
F1AP_Served_EUTRA_Cells_Information_t served_eutra_cells_information;
|
||||
memset((void *)&served_eutra_cells_information, 0, sizeof(F1AP_Served_EUTRA_Cells_Information_t));
|
||||
|
||||
@@ -870,6 +879,7 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, module_id_t du_mod_
|
||||
ASN_SEQUENCE_ADD(&protected_eutra_resources_item_ies->value.choice.ListofEUTRACellsinGNBDUCoordination.list, &served_eutra_cells_information);
|
||||
|
||||
ASN_SEQUENCE_ADD(&ie->value.choice.Protected_EUTRA_Resources_List.list, protected_eutra_resources_item_ies);
|
||||
*/
|
||||
}
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
||||
/* RNTI */
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_C_RNTI, true);
|
||||
BUFFER_TO_INT16(ie->value.choice.C_RNTI.buf, rnti);
|
||||
rnti = ie->value.choice.C_RNTI;
|
||||
|
||||
/* RRC Container */
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container,
|
||||
@@ -260,19 +260,22 @@ int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
||||
/* optional */
|
||||
/* c7. RAT_FrequencyPriorityInformation */
|
||||
/* TODO */
|
||||
if (0) {
|
||||
ie = (F1AP_DLRRCMessageTransferIEs_t *)calloc(1, sizeof(F1AP_DLRRCMessageTransferIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_RAT_FrequencyPriorityInformation;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_DLRRCMessageTransferIEs__value_PR_RAT_FrequencyPriorityInformation;
|
||||
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_subscriberProfileIDforRFP;
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.choice.subscriberProfileIDforRFP = 123L;
|
||||
|
||||
int endc=1;
|
||||
ie = (F1AP_DLRRCMessageTransferIEs_t *)calloc(1, sizeof(F1AP_DLRRCMessageTransferIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_RAT_FrequencyPriorityInformation;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_DLRRCMessageTransferIEs__value_PR_RAT_FrequencyPriorityInformation;
|
||||
if (endc==1) {
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_eNDC;
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.choice.eNDC = 123L;
|
||||
}
|
||||
else {
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_nGRAN;
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.choice.nGRAN = 11L;
|
||||
}
|
||||
//ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_rAT_FrequencySelectionPriority;
|
||||
//ie->value.choice.RAT_FrequencyPriorityInformation.choice.rAT_FrequencySelectionPriority = 123L;
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
}
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
/* encode */
|
||||
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||
|
||||
@@ -108,7 +108,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
/* mandatory */
|
||||
/* c4. ServCellIndex */
|
||||
ie = (F1AP_UEContextSetupRequestIEs_t *)calloc(1, sizeof(F1AP_UEContextSetupRequestIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_ServCellndex;
|
||||
ie->id = F1AP_ProtocolIE_ID_id_ServCellIndex;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_UEContextSetupRequestIEs__value_PR_ServCellIndex;
|
||||
ie->value.choice.ServCellIndex = 2;
|
||||
@@ -379,75 +379,86 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
}
|
||||
|
||||
} else {
|
||||
/* 12.1.2 dRB_Information */
|
||||
drbs_toBeSetup_item.qoSInformation.present = F1AP_QoSInformation_PR_dRB_Information;
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information = (F1AP_DRB_Information_t *)calloc(1, sizeof(F1AP_DRB_Information_t));
|
||||
|
||||
/* 12.1.2 DRB_Information */
|
||||
drbs_toBeSetup_item.qoSInformation.present = F1AP_QoSInformation_PR_choice_extension;
|
||||
|
||||
F1AP_QoSInformation_ExtIEs_t *ie;
|
||||
ie = (F1AP_QoSInformation_ExtIEs_t *)calloc(1, sizeof(F1AP_QoS_Characteristics_ExtIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_DRB_Information;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_QoSInformation_ExtIEs__value_PR_DRB_Information;
|
||||
F1AP_DRB_Information_t *DRB_Information = &ie->value.choice.DRB_Information;
|
||||
|
||||
drbs_toBeSetup_item.qoSInformation.choice.choice_extension = (struct F1AP_ProtocolIE_SingleContainer*)ie;
|
||||
|
||||
|
||||
/* 12.1.2.1 dRB_QoS */
|
||||
{
|
||||
/* qoS_Characteristics */
|
||||
{
|
||||
int some_decide_qoS_characteristics = 1; // BK: Need Check
|
||||
if (some_decide_qoS_characteristics) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.present = F1AP_QoS_Characteristics_PR_non_Dynamic_5QI;
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI = (F1AP_NonDynamic5QIDescriptor_t *)calloc(1, sizeof(F1AP_NonDynamic5QIDescriptor_t));
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.present = F1AP_QoS_Characteristics_PR_non_Dynamic_5QI;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI = (F1AP_NonDynamic5QIDescriptor_t *)calloc(1, sizeof(F1AP_NonDynamic5QIDescriptor_t));
|
||||
|
||||
/* fiveQI */
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->fiveQI = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->fiveQI = 1L;
|
||||
|
||||
/* OPTIONAL */
|
||||
/* qoSPriorityLevel */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->qoSPriorityLevel = (long *)calloc(1, sizeof(long));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->qoSPriorityLevel = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->qoSPriorityLevel = (long *)calloc(1, sizeof(long));
|
||||
*DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->qoSPriorityLevel = 1L;
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
/* averagingWindow */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow = (F1AP_AveragingWindow_t *)calloc(1, sizeof(F1AP_AveragingWindow_t));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow = (F1AP_AveragingWindow_t *)calloc(1, sizeof(F1AP_AveragingWindow_t));
|
||||
*DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow = 1L;
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
/* maxDataBurstVolume */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume = (F1AP_MaxDataBurstVolume_t *)calloc(1, sizeof(F1AP_MaxDataBurstVolume_t));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume = (F1AP_MaxDataBurstVolume_t *)calloc(1, sizeof(F1AP_MaxDataBurstVolume_t));
|
||||
*DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume = 1L;
|
||||
}
|
||||
|
||||
} else {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.present = F1AP_QoS_Characteristics_PR_dynamic_5QI;
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI = (F1AP_Dynamic5QIDescriptor_t *)calloc(1, sizeof(F1AP_Dynamic5QIDescriptor_t));
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.present = F1AP_QoS_Characteristics_PR_dynamic_5QI;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI = (F1AP_Dynamic5QIDescriptor_t *)calloc(1, sizeof(F1AP_Dynamic5QIDescriptor_t));
|
||||
|
||||
/* qoSPriorityLevel */
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->qoSPriorityLevel = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->qoSPriorityLevel = 1L;
|
||||
|
||||
/* packetDelayBudget */
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetDelayBudget = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetDelayBudget = 1L;
|
||||
|
||||
/* packetErrorRate */
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate.pER_Scalar = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate.pER_Exponent = 6L;
|
||||
|
||||
|
||||
/* OPTIONAL */
|
||||
/* delayCritical */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->delayCritical = (long *)calloc(1, sizeof(long));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->delayCritical = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->delayCritical = (long *)calloc(1, sizeof(long));
|
||||
*DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->delayCritical = 1L;
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
/* averagingWindow */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->averagingWindow = (F1AP_AveragingWindow_t *)calloc(1, sizeof(F1AP_AveragingWindow_t));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->averagingWindow = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->averagingWindow = (F1AP_AveragingWindow_t *)calloc(1, sizeof(F1AP_AveragingWindow_t));
|
||||
*DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->averagingWindow = 1L;
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
/* maxDataBurstVolume */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->maxDataBurstVolume = (F1AP_MaxDataBurstVolume_t *)calloc(1, sizeof(F1AP_MaxDataBurstVolume_t));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->maxDataBurstVolume = 1L;
|
||||
DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->maxDataBurstVolume = (F1AP_MaxDataBurstVolume_t *)calloc(1, sizeof(F1AP_MaxDataBurstVolume_t));
|
||||
*DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->maxDataBurstVolume = 1L;
|
||||
}
|
||||
|
||||
} // if some_decide_qoS_characteristics
|
||||
@@ -456,32 +467,32 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
|
||||
/* nGRANallocationRetentionPriority */
|
||||
{
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.nGRANallocationRetentionPriority.priorityLevel = F1AP_PriorityLevel_highest; // enum
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.nGRANallocationRetentionPriority.pre_emptionCapability = F1AP_Pre_emptionCapability_shall_not_trigger_pre_emption; // enum
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.nGRANallocationRetentionPriority.pre_emptionVulnerability = F1AP_Pre_emptionVulnerability_not_pre_emptable; // enum
|
||||
DRB_Information->dRB_QoS.nGRANallocationRetentionPriority.priorityLevel = F1AP_PriorityLevel_highest; // enum
|
||||
DRB_Information->dRB_QoS.nGRANallocationRetentionPriority.pre_emptionCapability = F1AP_Pre_emptionCapability_shall_not_trigger_pre_emption; // enum
|
||||
DRB_Information->dRB_QoS.nGRANallocationRetentionPriority.pre_emptionVulnerability = F1AP_Pre_emptionVulnerability_not_pre_emptable; // enum
|
||||
} // nGRANallocationRetentionPriority
|
||||
|
||||
/* OPTIONAL */
|
||||
/* gBR_QoS_Flow_Information */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information = (F1AP_GBR_QoSFlowInformation_t *)calloc(1, sizeof(F1AP_GBR_QoSFlowInformation_t));
|
||||
asn_long2INTEGER(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxFlowBitRateDownlink, 1L);
|
||||
asn_long2INTEGER(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxFlowBitRateUplink, 1L);
|
||||
asn_long2INTEGER(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->guaranteedFlowBitRateDownlink, 1L);
|
||||
asn_long2INTEGER(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->guaranteedFlowBitRateUplink, 1L);
|
||||
DRB_Information->dRB_QoS.gBR_QoS_Flow_Information = (F1AP_GBR_QoSFlowInformation_t *)calloc(1, sizeof(F1AP_GBR_QoSFlowInformation_t));
|
||||
asn_long2INTEGER(&DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxFlowBitRateDownlink, 1L);
|
||||
asn_long2INTEGER(&DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxFlowBitRateUplink, 1L);
|
||||
asn_long2INTEGER(&DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->guaranteedFlowBitRateDownlink, 1L);
|
||||
asn_long2INTEGER(&DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->guaranteedFlowBitRateUplink, 1L);
|
||||
|
||||
/* OPTIONAL */
|
||||
/* maxPacketLossRateDownlink */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateDownlink = (F1AP_MaxPacketLossRate_t *)calloc(1, sizeof(F1AP_MaxPacketLossRate_t));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateDownlink = 1L;
|
||||
DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateDownlink = (F1AP_MaxPacketLossRate_t *)calloc(1, sizeof(F1AP_MaxPacketLossRate_t));
|
||||
*DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateDownlink = 1L;
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
/* maxPacketLossRateUplink */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateUplink = (F1AP_MaxPacketLossRate_t *)calloc(1, sizeof(F1AP_MaxPacketLossRate_t));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateUplink = 1L;
|
||||
DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateUplink = (F1AP_MaxPacketLossRate_t *)calloc(1, sizeof(F1AP_MaxPacketLossRate_t));
|
||||
*DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateUplink = 1L;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -489,8 +500,8 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
/* OPTIONAL */
|
||||
/* reflective_QoS_Attribute */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.reflective_QoS_Attribute = (long *)calloc(1, sizeof(long));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.reflective_QoS_Attribute = 1L;
|
||||
DRB_Information->dRB_QoS.reflective_QoS_Attribute = (long *)calloc(1, sizeof(long));
|
||||
*DRB_Information->dRB_QoS.reflective_QoS_Attribute = 1L;
|
||||
}
|
||||
|
||||
} // dRB_QoS
|
||||
@@ -498,21 +509,21 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
/* 12.1.2.2 sNSSAI */
|
||||
{
|
||||
/* sST */
|
||||
OCTET_STRING_fromBuf(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->sNSSAI.sST, "asdsa1d32sa1d31asd31as",
|
||||
OCTET_STRING_fromBuf(&DRB_Information->sNSSAI.sST, "asdsa1d32sa1d31asd31as",
|
||||
strlen("asdsa1d32sa1d31asd31as"));
|
||||
/* OPTIONAL */
|
||||
/* sD */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->sNSSAI.sD = (OCTET_STRING_t *)calloc(1, sizeof(OCTET_STRING_t));
|
||||
OCTET_STRING_fromBuf(drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->sNSSAI.sD, "asdsa1d32sa1d31asd31as",
|
||||
DRB_Information->sNSSAI.sD = (OCTET_STRING_t *)calloc(1, sizeof(OCTET_STRING_t));
|
||||
OCTET_STRING_fromBuf(DRB_Information->sNSSAI.sD, "asdsa1d32sa1d31asd31as",
|
||||
strlen("asdsa1d32sa1d31asd31as"));
|
||||
}
|
||||
}
|
||||
/* OPTIONAL */
|
||||
/* 12.1.2.3 notificationControl */
|
||||
if (0) {
|
||||
drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->notificationControl = (F1AP_NotificationControl_t *)calloc(1, sizeof(F1AP_NotificationControl_t));
|
||||
*drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->notificationControl = F1AP_NotificationControl_active; // enum
|
||||
DRB_Information->notificationControl = (F1AP_NotificationControl_t *)calloc(1, sizeof(F1AP_NotificationControl_t));
|
||||
*DRB_Information->notificationControl = F1AP_NotificationControl_active; // enum
|
||||
}
|
||||
|
||||
/* 12.1.2.4 flows_Mapped_To_DRB_List */ // BK: need verifiy
|
||||
@@ -523,7 +534,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
memset((void *)&flows_mapped_to_drb_item, 0, sizeof(F1AP_Flows_Mapped_To_DRB_Item_t));
|
||||
|
||||
/* qoSFlowIndicator */
|
||||
flows_mapped_to_drb_item.qoSFlowIndicator = 1L;
|
||||
flows_mapped_to_drb_item.qoSFlowIdentifier = 1L;
|
||||
|
||||
/* qoSFlowLevelQoSParameters */
|
||||
{
|
||||
@@ -569,8 +580,8 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
flows_mapped_to_drb_item.qoSFlowLevelQoSParameters.qoS_Characteristics.choice.dynamic_5QI->packetDelayBudget = 1L;
|
||||
|
||||
/* packetErrorRate */
|
||||
flows_mapped_to_drb_item.qoSFlowLevelQoSParameters.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate = 1L;
|
||||
|
||||
flows_mapped_to_drb_item.qoSFlowLevelQoSParameters.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate.pER_Scalar = 1L;
|
||||
flows_mapped_to_drb_item.qoSFlowLevelQoSParameters.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate.pER_Exponent = 6L;
|
||||
/* OPTIONAL */
|
||||
/* delayCritical */
|
||||
if (0) {
|
||||
@@ -637,7 +648,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
|
||||
} // qoSFlowLevelQoSParameters
|
||||
// BK: need check
|
||||
ASN_SEQUENCE_ADD(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->flows_Mapped_To_DRB_List.list, &flows_mapped_to_drb_item);
|
||||
ASN_SEQUENCE_ADD(&DRB_Information->flows_Mapped_To_DRB_List.list, &flows_mapped_to_drb_item);
|
||||
}
|
||||
|
||||
} // if some_decide_qos
|
||||
@@ -672,7 +683,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
drbs_toBeSetup_item.rLCMode = F1AP_RLCMode_rlc_am;
|
||||
break;
|
||||
default:
|
||||
drbs_toBeSetup_item.rLCMode = F1AP_RLCMode_rlc_um;
|
||||
drbs_toBeSetup_item.rLCMode = F1AP_RLCMode_rlc_um_bidirectional;
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
@@ -716,13 +727,13 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_UEContextSetupRequestIEs__value_PR_RAT_FrequencyPriorityInformation;
|
||||
|
||||
int some_decide_rat = 1; // BK: Need Check
|
||||
if (some_decide_rat) {
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_subscriberProfileIDforRFP;
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.choice.subscriberProfileIDforRFP = 11L;
|
||||
int endc = 1; // RK: Get this from somewhere ...
|
||||
if (endc) {
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_eNDC;
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.choice.eNDC = 11L;
|
||||
} else {
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_rAT_FrequencySelectionPriority;
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.choice.rAT_FrequencySelectionPriority = 11L;
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_nGRAN;
|
||||
ie->value.choice.RAT_FrequencyPriorityInformation.choice.nGRAN = 11L;
|
||||
}
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
}
|
||||
@@ -1070,7 +1081,7 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
|
||||
/* mandatory */
|
||||
/* c4. ServCellIndex */
|
||||
ie = (F1AP_UEContextModificationRequestIEs_t *)calloc(1, sizeof(F1AP_UEContextModificationRequestIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_ServCellndex;
|
||||
ie->id = F1AP_ProtocolIE_ID_id_ServCellIndex;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_UEContextModificationRequestIEs__value_PR_ServCellIndex;
|
||||
ie->value.choice.ServCellIndex = 5L;
|
||||
@@ -1114,13 +1125,13 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c6. TransmissionStopIndicator */
|
||||
/* c6. TransmissionActionIndicator */
|
||||
if (1) {
|
||||
ie = (F1AP_UEContextModificationRequestIEs_t *)calloc(1, sizeof(F1AP_UEContextModificationRequestIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_TransmissionStopIndicator;
|
||||
ie->id = F1AP_ProtocolIE_ID_id_TransmissionActionIndicator;
|
||||
ie->criticality = F1AP_Criticality_ignore;
|
||||
ie->value.present = F1AP_UEContextModificationRequestIEs__value_PR_TransmissionStopIndicator;
|
||||
ie->value.choice.TransmissionStopIndicator = F1AP_TransmissionStopIndicator_true;
|
||||
ie->value.present = F1AP_UEContextModificationRequestIEs__value_PR_TransmissionActionIndicator;
|
||||
ie->value.choice.TransmissionActionIndicator = F1AP_TransmissionActionIndicator_stop;
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
}
|
||||
|
||||
@@ -1140,10 +1151,10 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
|
||||
/* c7. RRCRconfigurationCompleteIndicator */
|
||||
if (1) {
|
||||
ie = (F1AP_UEContextModificationRequestIEs_t *)calloc(1, sizeof(F1AP_UEContextModificationRequestIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_RRCRconfigurationCompleteIndicator;
|
||||
ie->id = F1AP_ProtocolIE_ID_id_RRCReconfigurationCompleteIndicator;
|
||||
ie->criticality = F1AP_Criticality_ignore;
|
||||
ie->value.present = F1AP_UEContextModificationRequestIEs__value_PR_RRCRconfigurationCompleteIndicator;
|
||||
ie->value.choice.RRCRconfigurationCompleteIndicator = F1AP_RRCRconfigurationCompleteIndicator_true;
|
||||
ie->value.present = F1AP_UEContextModificationRequestIEs__value_PR_RRCReconfigurationCompleteIndicator;
|
||||
ie->value.choice.RRCReconfigurationCompleteIndicator = F1AP_RRCReconfigurationCompleteIndicator_true;
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
}
|
||||
|
||||
@@ -1325,7 +1336,7 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
|
||||
}
|
||||
|
||||
/* rLCMode */
|
||||
drbs_toBeSetupMod_item.rLCMode = F1AP_RLCMode_rlc_um; // enum
|
||||
drbs_toBeSetupMod_item.rLCMode = F1AP_RLCMode_rlc_um_bidirectional; // enum
|
||||
|
||||
/* OPTIONAL */
|
||||
/* ULConfiguration */
|
||||
@@ -1366,9 +1377,10 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
|
||||
drbs_toBeModified_item.dRBID = 30L;
|
||||
|
||||
/* qoSInformation */
|
||||
drbs_toBeModified_item.qoSInformation.present = F1AP_QoSInformation_PR_eUTRANQoS;
|
||||
drbs_toBeModified_item.qoSInformation.choice.eUTRANQoS = (F1AP_EUTRANQoS_t *)calloc(1, sizeof(F1AP_EUTRANQoS_t));
|
||||
drbs_toBeModified_item.qoSInformation.choice.eUTRANQoS->qCI = 254L;
|
||||
drbs_toBeModified_item.qoSInformation =calloc(1,sizeof(*drbs_toBeModified_item.qoSInformation));
|
||||
drbs_toBeModified_item.qoSInformation->present = F1AP_QoSInformation_PR_eUTRANQoS;
|
||||
drbs_toBeModified_item.qoSInformation->choice.eUTRANQoS = (F1AP_EUTRANQoS_t *)calloc(1, sizeof(F1AP_EUTRANQoS_t));
|
||||
drbs_toBeModified_item.qoSInformation->choice.eUTRANQoS->qCI = 254L;
|
||||
|
||||
/* ULTunnels_ToBeModified_List */
|
||||
int j = 0;
|
||||
|
||||
@@ -95,7 +95,6 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
|
||||
uint8_t *buffer;
|
||||
uint32_t len;
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
|
||||
/* Create */
|
||||
/* 0. pdu Type */
|
||||
@@ -189,7 +188,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
|
||||
served_cell_information.nRPCI = f1ap_du_data->nr_pci[i]; // int 0..1007
|
||||
|
||||
/* - fiveGS_TAC */
|
||||
OCTET_STRING_fromBuf(&served_cell_information.fiveGS_TAC,
|
||||
OCTET_STRING_fromBuf(served_cell_information.fiveGS_TAC,
|
||||
(const char*)&f1ap_du_data->tac[i],
|
||||
3);
|
||||
|
||||
@@ -201,19 +200,11 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
|
||||
2);
|
||||
}
|
||||
|
||||
/* - broadcast PLMNs */
|
||||
// RK: add the num_available_broadcast_PLMNs to the message
|
||||
int num_available_broadcast_PLMNs = 1; //f1ap_du_data->num_available_broadcast_PLMNs;
|
||||
LOG_D(F1AP, "num_available_broadcast_PLMNs = %d \n", num_available_broadcast_PLMNs);
|
||||
for (j=0;
|
||||
j<num_available_broadcast_PLMNs; // num_available_broadcast_PLMNs
|
||||
j++) {
|
||||
/* > PLMN BroadcastPLMNs Item */
|
||||
F1AP_BroadcastPLMNs_Item_t *broadcastPLMNs_Item = (F1AP_BroadcastPLMNs_Item_t *)calloc(1, sizeof(F1AP_BroadcastPLMNs_Item_t));
|
||||
//MCC_MNC_TO_PLMNID(208, 95, 2, &broadcastPLMNs_Item->pLMN_Identity);
|
||||
MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &broadcastPLMNs_Item->pLMN_Identity);
|
||||
ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, broadcastPLMNs_Item);
|
||||
}
|
||||
/* servedPLMN information */
|
||||
F1AP_ServedPLMNs_Item_t *servedPLMN_item = calloc(1,sizeof(*servedPLMN_item));
|
||||
memset(servedPLMN_item,0,sizeof(*servedPLMN_item));
|
||||
MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &servedPLMN_item->pLMN_Identity);
|
||||
ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, servedPLMN_item);
|
||||
|
||||
// // /* - CHOICE NR-MODE-Info */
|
||||
F1AP_NR_Mode_Info_t nR_Mode_Info;
|
||||
@@ -237,7 +228,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
|
||||
|
||||
/* FDD.1.3 freqBandListNr */
|
||||
int fdd_ul_num_available_freq_Bands = f1ap_du_data->nr_mode_info[i].fdd.ul_num_frequency_bands;
|
||||
LOG_D(F1AP, "fdd_ul_num_available_freq_Bands = %d \n", fdd_ul_num_available_freq_Bands);
|
||||
LOG_I(F1AP, "fdd_ul_num_available_freq_Bands = %d \n", fdd_ul_num_available_freq_Bands);
|
||||
int fdd_ul_j;
|
||||
for (fdd_ul_j=0;
|
||||
fdd_ul_j<fdd_ul_num_available_freq_Bands;
|
||||
@@ -279,7 +270,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
|
||||
|
||||
/* FDD.2.3 freqBandListNr */
|
||||
int fdd_dl_num_available_freq_Bands = f1ap_du_data->nr_mode_info[i].fdd.dl_num_frequency_bands;
|
||||
LOG_D(F1AP, "fdd_dl_num_available_freq_Bands = %d \n", fdd_dl_num_available_freq_Bands);
|
||||
LOG_I(F1AP, "fdd_dl_num_available_freq_Bands = %d \n", fdd_dl_num_available_freq_Bands);
|
||||
int fdd_dl_j;
|
||||
for (fdd_dl_j=0;
|
||||
fdd_dl_j<fdd_dl_num_available_freq_Bands;
|
||||
@@ -333,7 +324,8 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
|
||||
|
||||
/* TDD.1.3 freqBandListNr */
|
||||
int tdd_num_available_freq_Bands = f1ap_du_data->nr_mode_info[i].tdd.num_frequency_bands;
|
||||
LOG_D(F1AP, "tdd_num_available_freq_Bands = %d \n", tdd_num_available_freq_Bands);
|
||||
LOG_I(F1AP, "tdd_num_available_freq_Bands = %d \n", tdd_num_available_freq_Bands);
|
||||
AssertFatal(tdd_num_available_freq_Bands > 0, "should have at least one TDD band available\n");
|
||||
int j;
|
||||
for (j=0;
|
||||
j<tdd_num_available_freq_Bands;
|
||||
@@ -503,27 +495,59 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
|
||||
F1AP_SETUP_RESP (msg_p).nr_cellid[i]);
|
||||
F1AP_SETUP_RESP (msg_p).nrpci[i] = *cell->nRPCI;
|
||||
|
||||
F1AP_ProtocolExtensionContainer_160P9_t *ext = (F1AP_ProtocolExtensionContainer_160P9_t *)cell->iE_Extensions;
|
||||
AssertFatal(ext!=NULL,"Extension for SI is null\n");
|
||||
F1AP_SETUP_RESP (msg_p).num_SI[i] = ext->list.count;
|
||||
AssertFatal(ext->list.count==1,"At least one SI message should be there, and only 1 for now!\n");
|
||||
LOG_D(F1AP, "F1AP: F1Setup-Resp Cell %d MCC %d MNC %d NRCellid %lx num_si %d\n",
|
||||
i, F1AP_SETUP_RESP (msg_p).mcc[i], F1AP_SETUP_RESP (msg_p).mnc[i],
|
||||
F1AP_SETUP_RESP (msg_p).nr_cellid[i], F1AP_SETUP_RESP (msg_p).num_SI[i]);
|
||||
for (int si =0;si < ext->list.count;si++) {
|
||||
size_t size = ext->list.array[si]->extensionValue.choice.GNB_CUSystemInformation.sImessage.size;
|
||||
F1AP_SETUP_RESP (msg_p).SI_container_length[i][si] = size;
|
||||
LOG_D(F1AP, "F1AP: F1Setup-Resp SI_container_length[%d][%d] %ld bytes\n", i, si, size);
|
||||
F1AP_SETUP_RESP (msg_p).SI_container[i][si] = malloc(F1AP_SETUP_RESP (msg_p).SI_container_length[i][si]);
|
||||
|
||||
memcpy((void*)F1AP_SETUP_RESP (msg_p).SI_container[i][si],
|
||||
(void*)ext->list.array[si]->extensionValue.choice.GNB_CUSystemInformation.sImessage.buf,
|
||||
F1AP_SETUP_RESP (msg_p).SI_container_length[i][si]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
F1AP_ProtocolExtensionContainer_154P112_t *ext = (F1AP_ProtocolExtensionContainer_154P112_t *)cell->iE_Extensions;
|
||||
AssertFatal(ext!=NULL,"Extension is null\n");
|
||||
for (int cnt=0;cnt<ext->list.count;cnt++) {
|
||||
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t *cells_to_be_activated_list_itemExtIEs=(F1AP_Cells_to_be_Activated_List_ItemExtIEs_t *)ext->list.array[cnt];
|
||||
switch (cells_to_be_activated_list_itemExtIEs->id) {
|
||||
/*
|
||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_NOTHING:
|
||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_GNB_CUSystemInformation,
|
||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailablePLMNList,
|
||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_ExtendedAvailablePLMN_List,
|
||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_IAB_Info_IAB_donor_CU,
|
||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailableSNPN_ID_List
|
||||
*/
|
||||
case F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation:
|
||||
{
|
||||
F1AP_GNB_CUSystemInformation_t *gNB_CUSystemInformation = (F1AP_GNB_CUSystemInformation_t*)&cells_to_be_activated_list_itemExtIEs->extensionValue.choice.GNB_CUSystemInformation;
|
||||
F1AP_SETUP_RESP (msg_p).num_SI[i] = gNB_CUSystemInformation->sibtypetobeupdatedlist.list.count;
|
||||
AssertFatal(ext->list.count==1,"At least one SI message should be there, and only 1 for now!\n");
|
||||
LOG_D(F1AP, "F1AP: F1Setup-Resp Cell %d MCC %d MNC %d NRCellid %lx num_si %d\n",
|
||||
i, F1AP_SETUP_RESP (msg_p).mcc[i], F1AP_SETUP_RESP (msg_p).mnc[i],
|
||||
F1AP_SETUP_RESP (msg_p).nr_cellid[i], F1AP_SETUP_RESP (msg_p).num_SI[i]);
|
||||
for (int si =0;si < gNB_CUSystemInformation->sibtypetobeupdatedlist.list.count;si++) {
|
||||
F1AP_SibtypetobeupdatedListItem_t *sib_item = gNB_CUSystemInformation->sibtypetobeupdatedlist.list.array[si];
|
||||
size_t size = sib_item->sIBmessage.size;
|
||||
F1AP_SETUP_RESP (msg_p).SI_container_length[i][sib_item->sIBtype] = size;
|
||||
LOG_I(F1AP, "F1AP: F1Setup-Resp SI_container_length[%d][%d] %ld bytes\n", i, (int)sib_item->sIBtype, size);
|
||||
F1AP_SETUP_RESP (msg_p).SI_container[i][sib_item->sIBtype] = malloc(size);
|
||||
memcpy((void*)F1AP_SETUP_RESP (msg_p).SI_container[i][sib_item->sIBtype],
|
||||
(void*)sib_item->sIBmessage.buf,
|
||||
size);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case F1AP_ProtocolIE_ID_id_AvailablePLMNList:
|
||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
|
||||
break;
|
||||
case F1AP_ProtocolIE_ID_id_ExtendedAvailablePLMN_List:
|
||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
|
||||
break;
|
||||
case F1AP_ProtocolIE_ID_id_IAB_Info_IAB_donor_CU:
|
||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
|
||||
break;
|
||||
case F1AP_ProtocolIE_ID_id_AvailableSNPN_ID_List:
|
||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id %d unknown\n",(int)cells_to_be_activated_list_itemExtIEs->id);
|
||||
break;
|
||||
}
|
||||
} // for (cnt=...
|
||||
} // for (cells_to_activate...
|
||||
} // switch ie
|
||||
} // for IE
|
||||
AssertFatal(TransactionId!=-1,"TransactionId was not sent\n");
|
||||
AssertFatal(num_cells_to_activate>0,"No cells activated\n");
|
||||
F1AP_SETUP_RESP (msg_p).num_cells_to_activate = num_cells_to_activate;
|
||||
@@ -542,7 +566,7 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
|
||||
|
||||
LOG_D(F1AP, "Sending F1AP_SETUP_RESP ITTI message to ENB_APP with assoc_id (%d->%d)\n",
|
||||
assoc_id,ENB_MODULE_ID_TO_INSTANCE(assoc_id));
|
||||
itti_send_msg_to_task(TASK_ENB_APP, ENB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p);
|
||||
itti_send_msg_to_task(TASK_ENB_APP, instance, msg_p);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -635,7 +659,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
||||
served_cell_information.nRPCI = f1ap_setup_req->nr_pci[i]; // int 0..1007
|
||||
|
||||
/* - fiveGS_TAC */
|
||||
OCTET_STRING_fromBuf(&served_cell_information.fiveGS_TAC,
|
||||
OCTET_STRING_fromBuf(served_cell_information.fiveGS_TAC,
|
||||
(const char *) &f1ap_setup_req->tac[i],
|
||||
3);
|
||||
|
||||
@@ -647,17 +671,11 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
||||
2);
|
||||
}
|
||||
|
||||
/* - broadcast PLMNs */
|
||||
int maxnoofBPLMNS = 1;
|
||||
for (i=0;
|
||||
i<maxnoofBPLMNS;
|
||||
i++) {
|
||||
/* > PLMN BroadcastPLMNs Item */
|
||||
F1AP_BroadcastPLMNs_Item_t *broadcastPLMNs_Item = (F1AP_BroadcastPLMNs_Item_t *)calloc(1, sizeof(F1AP_BroadcastPLMNs_Item_t));
|
||||
//memset((void *)&broadcastPLMNs_Item, 0, sizeof(F1AP_BroadcastPLMNs_Item_t));
|
||||
MCC_MNC_TO_PLMNID(f1ap_setup_req->mcc[i], f1ap_setup_req->mnc[i], f1ap_setup_req->mnc_digit_length[i], &broadcastPLMNs_Item->pLMN_Identity);
|
||||
ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, broadcastPLMNs_Item);
|
||||
}
|
||||
F1AP_ServedPLMNs_Item_t *servedPLMN_item = calloc(1,sizeof(*servedPLMN_item));
|
||||
memset(servedPLMN_item,0,sizeof(*servedPLMN_item));
|
||||
MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &servedPLMN_item->pLMN_Identity);
|
||||
ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, servedPLMN_item);
|
||||
|
||||
|
||||
// // /* - CHOICE NR-MODE-Info */
|
||||
F1AP_NR_Mode_Info_t nR_Mode_Info;
|
||||
@@ -803,7 +821,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
||||
served_cell_information.nRPCI = f1ap_setup_req->nr_pci[i]; // int 0..1007
|
||||
|
||||
/* - fiveGS_TAC */
|
||||
OCTET_STRING_fromBuf(&served_cell_information.fiveGS_TAC,
|
||||
OCTET_STRING_fromBuf(served_cell_information.fiveGS_TAC,
|
||||
(const char *) &f1ap_setup_req->tac[i],
|
||||
3);
|
||||
|
||||
@@ -815,17 +833,12 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
||||
2);
|
||||
}
|
||||
|
||||
/* - broadcast PLMNs */
|
||||
int maxnoofBPLMNS = 1;
|
||||
for (i=0;
|
||||
i<maxnoofBPLMNS;
|
||||
i++) {
|
||||
/* > PLMN BroadcastPLMNs Item */
|
||||
F1AP_BroadcastPLMNs_Item_t *broadcastPLMNs_Item = (F1AP_BroadcastPLMNs_Item_t *)calloc(1, sizeof(F1AP_BroadcastPLMNs_Item_t));
|
||||
//memset((void *)&broadcastPLMNs_Item, 0, sizeof(F1AP_BroadcastPLMNs_Item_t));
|
||||
MCC_MNC_TO_PLMNID(f1ap_setup_req->mcc[i], f1ap_setup_req->mnc[i], f1ap_setup_req->mnc_digit_length[i], &broadcastPLMNs_Item->pLMN_Identity);
|
||||
ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, broadcastPLMNs_Item);
|
||||
}
|
||||
F1AP_ServedPLMNs_Item_t *servedPLMN_item = calloc(1,sizeof(*servedPLMN_item));
|
||||
memset(servedPLMN_item,0,sizeof(*servedPLMN_item));
|
||||
MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &servedPLMN_item->pLMN_Identity);
|
||||
ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, servedPLMN_item);
|
||||
|
||||
|
||||
|
||||
// // /* - CHOICE NR-MODE-Info */
|
||||
F1AP_NR_Mode_Info_t nR_Mode_Info;
|
||||
@@ -963,42 +976,6 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
|
||||
/* mandatory */
|
||||
/* c5. Active_Cells_List */
|
||||
ie = (F1AP_GNBDUConfigurationUpdateIEs_t *)calloc(1, sizeof(F1AP_GNBDUConfigurationUpdateIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_Active_Cells_List;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_GNBDUConfigurationUpdateIEs__value_PR_Active_Cells_List;
|
||||
|
||||
for (i=0;
|
||||
i<1;
|
||||
i++) {
|
||||
//
|
||||
F1AP_Active_Cells_ItemIEs_t *active_cells_item_ies;
|
||||
active_cells_item_ies = (F1AP_Active_Cells_ItemIEs_t *)calloc(1, sizeof(F1AP_Active_Cells_ItemIEs_t));
|
||||
active_cells_item_ies->id = F1AP_ProtocolIE_ID_id_Active_Cells_Item;
|
||||
active_cells_item_ies->criticality = F1AP_Criticality_reject;
|
||||
active_cells_item_ies->value.present = F1AP_Active_Cells_ItemIEs__value_PR_Active_Cells_Item;
|
||||
|
||||
F1AP_Active_Cells_Item_t active_cells_item;
|
||||
memset((void *)&active_cells_item, 0, sizeof(F1AP_Active_Cells_Item_t));
|
||||
|
||||
/* 3.1 oldNRCGI */
|
||||
F1AP_NRCGI_t nRCGI;
|
||||
memset(&nRCGI, 0, sizeof(F1AP_NRCGI_t));
|
||||
MCC_MNC_TO_PLMNID(f1ap_setup_req->mcc[i], f1ap_setup_req->mnc[i], f1ap_setup_req->mnc_digit_length[i],
|
||||
&nRCGI.pLMN_Identity);
|
||||
NR_CELL_ID_TO_BIT_STRING(f1ap_setup_req->nr_cellid[i], &nRCGI.nRCellIdentity);
|
||||
active_cells_item.nRCGI = nRCGI;
|
||||
|
||||
/* ADD */
|
||||
active_cells_item_ies->value.choice.Active_Cells_Item = active_cells_item;
|
||||
|
||||
ASN_SEQUENCE_ADD(&ie->value.choice.Active_Cells_List.list,
|
||||
active_cells_item_ies);
|
||||
}
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
|
||||
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||
LOG_E(F1AP, "Failed to encode F1 setup request\n");
|
||||
|
||||
@@ -161,10 +161,10 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
||||
F1AP_ProtocolIE_ID_id_RAT_FrequencyPriorityInformation, true);
|
||||
|
||||
switch(ie->value.choice.RAT_FrequencyPriorityInformation.present) {
|
||||
case F1AP_RAT_FrequencyPriorityInformation_PR_subscriberProfileIDforRFP:
|
||||
case F1AP_RAT_FrequencyPriorityInformation_PR_eNDC:
|
||||
//subscriberProfileIDforRFP = ie->value.choice.RAT_FrequencyPriorityInformation.choice.subscriberProfileIDforRFP;
|
||||
break;
|
||||
case F1AP_RAT_FrequencyPriorityInformation_PR_rAT_FrequencySelectionPriority:
|
||||
case F1AP_RAT_FrequencyPriorityInformation_PR_nGRAN:
|
||||
//rAT_FrequencySelectionPriority = ie->value.choice.RAT_FrequencyPriorityInformation.choice.rAT_FrequencySelectionPriority;
|
||||
break;
|
||||
default:
|
||||
@@ -836,7 +836,7 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP,
|
||||
ie->id = F1AP_ProtocolIE_ID_id_C_RNTI;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_InitialULRRCMessageTransferIEs__value_PR_C_RNTI;
|
||||
C_RNTI_TO_BIT_STRING(rntiP, &ie->value.choice.C_RNTI);
|
||||
ie->value.choice.C_RNTI=rntiP;
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
/* mandatory */
|
||||
|
||||
@@ -86,9 +86,9 @@ void du_task_handle_sctp_association_resp(instance_t instance, sctp_new_associat
|
||||
DevAssert(sctp_new_association_resp != NULL);
|
||||
|
||||
if (sctp_new_association_resp->sctp_state != SCTP_STATE_ESTABLISHED) {
|
||||
LOG_W(F1AP, "Received unsuccessful result for SCTP association (%u), instance %ld, cnx_id %u\n",
|
||||
LOG_E(F1AP, "Received unsuccessful result for SCTP association (%u), instance %d, cnx_id %u\n",
|
||||
sctp_new_association_resp->sctp_state,
|
||||
instance,
|
||||
(int)instance,
|
||||
sctp_new_association_resp->ulp_cnx_id);
|
||||
|
||||
//f1ap_handle_setup_message(instance, sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN);
|
||||
|
||||
@@ -91,7 +91,7 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||
BIT_STRING_TO_NR_CELL_IDENTITY(&ie->value.choice.NRCGI.nRCellIdentity, f1ap_ue_context_setup_req->nr_cellid);
|
||||
/* ServCellIndex */
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupRequestIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_ServCellndex, true);
|
||||
F1AP_ProtocolIE_ID_id_ServCellIndex, true);
|
||||
f1ap_ue_context_setup_req->servCellIndex = ie->value.choice.ServCellIndex;
|
||||
/* optional */
|
||||
/* CellULConfigured */
|
||||
@@ -227,7 +227,8 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance) {
|
||||
ie->id = F1AP_ProtocolIE_ID_id_C_RNTI;
|
||||
ie->criticality = F1AP_Criticality_ignore;
|
||||
ie->value.present = F1AP_UEContextSetupResponseIEs__value_PR_C_RNTI;
|
||||
C_RNTI_TO_BIT_STRING(rntiP, &ie->value.choice.C_RNTI);
|
||||
//C_RNTI_TO_BIT_STRING(rntiP, &ie->value.choice.C_RNTI);
|
||||
ie->value.choice.C_RNTI=rntiP;
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
}
|
||||
|
||||
@@ -1016,7 +1017,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
|
||||
srbs_failedToBeSetupMod_item.sRBID = 50L;
|
||||
srbs_failedToBeSetupMod_item.cause = (F1AP_Cause_t *)calloc(1, sizeof(F1AP_Cause_t));
|
||||
srbs_failedToBeSetupMod_item.cause->present = F1AP_Cause_PR_radioNetwork;
|
||||
srbs_failedToBeSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnd_du_ue_f1ap_id;
|
||||
srbs_failedToBeSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
|
||||
/* ADD */
|
||||
srbs_failedToBeSetupMod_item_ies->value.choice.SRBs_FailedToBeSetupMod_Item = srbs_failedToBeSetupMod_item;
|
||||
ASN_SEQUENCE_ADD(&ie->value.choice.SRBs_FailedToBeSetupMod_List.list,
|
||||
@@ -1047,7 +1048,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
|
||||
drbs_failedToBeSetupMod_item.dRBID = 30L;
|
||||
drbs_failedToBeSetupMod_item.cause = (F1AP_Cause_t *)calloc(1, sizeof(F1AP_Cause_t));
|
||||
drbs_failedToBeSetupMod_item.cause->present = F1AP_Cause_PR_radioNetwork;
|
||||
drbs_failedToBeSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnd_du_ue_f1ap_id;
|
||||
drbs_failedToBeSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
|
||||
/* ADD */
|
||||
drbs_failedToBeSetupMod_item_ies->value.choice.DRBs_FailedToBeSetupMod_Item = drbs_failedToBeSetupMod_item;
|
||||
ASN_SEQUENCE_ADD(&ie->value.choice.DRBs_FailedToBeSetupMod_List.list,
|
||||
@@ -1083,7 +1084,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
|
||||
scell_failedtoSetupMod_item.sCell_ID = nRCGI;
|
||||
scell_failedtoSetupMod_item.cause = (F1AP_Cause_t *)calloc(1, sizeof(F1AP_Cause_t));
|
||||
scell_failedtoSetupMod_item.cause->present = F1AP_Cause_PR_radioNetwork;
|
||||
scell_failedtoSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnd_du_ue_f1ap_id;
|
||||
scell_failedtoSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
|
||||
/* ADD */
|
||||
scell_failedtoSetupMod_item_ies->value.choice.SCell_FailedtoSetupMod_Item = scell_failedtoSetupMod_item;
|
||||
ASN_SEQUENCE_ADD(&ie->value.choice.SCell_FailedtoSetupMod_List.list,
|
||||
@@ -1114,7 +1115,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
|
||||
drbs_failedToBeModified_item.dRBID = 30L;
|
||||
drbs_failedToBeModified_item.cause = (F1AP_Cause_t *)calloc(1, sizeof(F1AP_Cause_t));
|
||||
drbs_failedToBeModified_item.cause->present = F1AP_Cause_PR_radioNetwork;
|
||||
drbs_failedToBeModified_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnd_du_ue_f1ap_id;
|
||||
drbs_failedToBeModified_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
|
||||
/* ADD */
|
||||
drbs_failedToBeModified_item_ies->value.choice.DRBs_FailedToBeModified_Item = drbs_failedToBeModified_item;
|
||||
ASN_SEQUENCE_ADD(&ie->value.choice.DRBs_FailedToBeModified_List.list,
|
||||
|
||||
@@ -84,12 +84,8 @@ int f1ap_encode_pdu(F1AP_F1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *length)
|
||||
LOG_E(F1AP, "----------------- ASN1 ENCODER PRINT END----------------- \n");
|
||||
}
|
||||
|
||||
encoded = aper_encode_to_new_buffer(&asn_DEF_F1AP_F1AP_PDU, 0, pdu, (void **)buffer);
|
||||
|
||||
if (encoded < 0) {
|
||||
LOG_E(F1AP, "Failed to encode F1AP message\n");
|
||||
return -1;
|
||||
}
|
||||
AssertFatal((encoded = aper_encode_to_new_buffer(&asn_DEF_F1AP_F1AP_PDU, 0, pdu, (void **)buffer))>0,
|
||||
"Failed to encode F1AP message\n");
|
||||
|
||||
*length = encoded;
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "assertions.h"
|
||||
#include "gnb_config.h"
|
||||
#include "gnb_paramdef.h"
|
||||
#include "enb_paramdef.h"
|
||||
#include "UTIL/OTG/otg.h"
|
||||
#include "UTIL/OTG/otg_externs.h"
|
||||
#include "intertask_interface.h"
|
||||
|
||||
@@ -595,6 +595,7 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
||||
CC_id = UE_PCCID(module_idP, UE_id);
|
||||
UE_scheduling_control = &(UE_info->UE_sched_ctrl[UE_id]);
|
||||
|
||||
/* to be merged with MAC_stats.log generation. probably redundant
|
||||
if (((frameP & 127) == 0) && (subframeP == 0)) {
|
||||
double total_bler;
|
||||
if(UE_scheduling_control->pusch_rx_num[CC_id] == 0 && UE_scheduling_control->pusch_rx_error_num[CC_id] == 0) {
|
||||
@@ -632,7 +633,7 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
||||
UE_scheduling_control->aperiodic_ri_received[CC_id]
|
||||
);
|
||||
}
|
||||
|
||||
*/
|
||||
RC.eNB[module_idP][CC_id]->pusch_stats_bsr[UE_id][(frameP * 10) + subframeP] = -63;
|
||||
|
||||
if (UE_id == UE_info->list.head) {
|
||||
|
||||
@@ -476,8 +476,8 @@ void generate_Msg2(module_id_t module_idP,
|
||||
first_rb = 0;
|
||||
vrb_map[first_rb] = 1;
|
||||
vrb_map[first_rb + 1] = 1;
|
||||
vrb_map[first_rb + 2] = 1;
|
||||
vrb_map[first_rb + 3] = 1;
|
||||
//vrb_map[first_rb + 2] = 1;
|
||||
//vrb_map[first_rb + 3] = 1;
|
||||
memset((void *) dl_config_pdu, 0, sizeof(nfapi_dl_config_request_pdu_t));
|
||||
dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
|
||||
dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
|
||||
@@ -488,12 +488,12 @@ void generate_Msg2(module_id_t module_idP,
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 2; // RA-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = 0;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1; // no TPC
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 0; // no TPC
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1 = 1;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = 0;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = 1;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1 = 0;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.virtual_resource_block_assignment_flag = 0;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 2);
|
||||
|
||||
// This checks if the above DCI allocation is feasible in current subframe
|
||||
if (!CCE_allocation_infeasible(module_idP, CC_idP, 0, subframeP,
|
||||
@@ -512,7 +512,7 @@ void generate_Msg2(module_id_t module_idP,
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = ra->RA_rnti;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 2);
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block
|
||||
@@ -901,7 +901,7 @@ generate_Msg4(module_id_t module_idP,
|
||||
} // rach_resource_type > 0
|
||||
else {
|
||||
// This is normal LTE case
|
||||
LOG_I(MAC, "generate_Msg4 ra->Msg4_frame SFN/SF: %d.%d, frameP SFN/SF: %d.%d FOR eNB_Mod: %d \n", ra->Msg4_frame, ra->Msg4_subframe, frameP, subframeP, module_idP);
|
||||
LOG_D(MAC, "generate_Msg4 ra->Msg4_frame SFN/SF: %d.%d, frameP SFN/SF: %d.%d FOR eNB_Mod: %d \n", ra->Msg4_frame, ra->Msg4_subframe, frameP, subframeP, module_idP);
|
||||
|
||||
if ((ra->Msg4_frame == frameP) && (ra->Msg4_subframe == subframeP)) {
|
||||
// Get RRCConnectionSetup for Piggyback
|
||||
@@ -918,7 +918,7 @@ generate_Msg4(module_id_t module_idP,
|
||||
module_idP, CC_idP, frameP, subframeP, UE_id, rrc_sdu_length);
|
||||
// AssertFatal(rrc_sdu_length > 0,
|
||||
// "[MAC][eNB Scheduler] CCCH not allocated, rrc_sdu_length: %d\n", rrc_sdu_length);
|
||||
LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 with RRC Piggyback (RNTI %x)\n",
|
||||
LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 with RRC Piggyback (RNTI %x)\n",
|
||||
module_idP, CC_idP, frameP, subframeP, ra->rnti);
|
||||
/// Choose first 4 RBs for Msg4, should really check that these are free!
|
||||
first_rb = 0;
|
||||
@@ -1086,7 +1086,7 @@ generate_Msg4(module_id_t module_idP,
|
||||
}
|
||||
} // CCE Allocation feasible
|
||||
} else {
|
||||
LOG_I(MAC,
|
||||
LOG_D(MAC,
|
||||
"eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Delaying Msg4 for RRC Piggyback (RNTI %x)\n",
|
||||
module_idP, CC_idP, frameP, subframeP, ra->rnti);
|
||||
ra->Msg4_subframe ++;
|
||||
@@ -1289,8 +1289,8 @@ initiate_ra_proc(module_id_t module_idP,
|
||||
}
|
||||
|
||||
LOG_D(MAC,
|
||||
"[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d Initiating RA procedure for preamble index %d\n",
|
||||
module_idP, CC_id, frameP, subframeP, preamble_index);
|
||||
"[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d Initiating RA procedure for preamble index %d, timing offset %d\n",
|
||||
module_idP, CC_id, frameP, subframeP, preamble_index, timing_offset);
|
||||
LOG_D(MAC,
|
||||
"[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d PRACH resource type %d\n",
|
||||
module_idP, CC_id, frameP, subframeP, rach_resource_type);
|
||||
@@ -1332,6 +1332,9 @@ initiate_ra_proc(module_id_t module_idP,
|
||||
abort();
|
||||
|
||||
case 1 :
|
||||
case 3 :
|
||||
case 4 :
|
||||
case 5 :
|
||||
offset = 6;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -651,7 +651,7 @@ schedule_ue_spec(module_id_t module_idP,
|
||||
eNB_UE_stats->rrc_status = mac_eNB_get_rrc_status(module_idP, rnti);
|
||||
eNB_UE_stats->harq_pid = harq_pid;
|
||||
eNB_UE_stats->harq_round = round_DL;
|
||||
|
||||
eNB_UE_stats->dlsch_rounds[round_DL&7]++;
|
||||
if (eNB_UE_stats->rrc_status < RRC_RECONFIGURED) {
|
||||
ue_sched_ctrl->uplane_inactivity_timer = 0;
|
||||
}
|
||||
@@ -792,7 +792,6 @@ schedule_ue_spec(module_id_t module_idP,
|
||||
// No TX request for retransmission (check if null request for FAPI)
|
||||
}
|
||||
|
||||
//eNB_UE_stats->dlsch_trials[round]++;
|
||||
eNB_UE_stats->num_retransmission += 1;
|
||||
eNB_UE_stats->rbs_used_retx = nb_rb;
|
||||
eNB_UE_stats->total_rbs_used_retx += nb_rb;
|
||||
@@ -1065,20 +1064,23 @@ schedule_ue_spec(module_id_t module_idP,
|
||||
ue_template->pucch_tpc_tx_frame = frameP;
|
||||
ue_template->pucch_tpc_tx_subframe = subframeP;
|
||||
|
||||
if (snr > target_snr + 4) {
|
||||
if (snr > target_snr + PUCCH_PCHYST) {
|
||||
tpc = 0; //-1
|
||||
} else if (snr < target_snr - 4) {
|
||||
ue_sched_ctrl->pucch_tpc_accumulated[CC_id]--;
|
||||
} else if (snr < target_snr - PUCCH_PCHYST) {
|
||||
tpc = 2; //+1
|
||||
ue_sched_ctrl->pucch_tpc_accumulated[CC_id]--;
|
||||
} else {
|
||||
tpc = 1; //0
|
||||
}
|
||||
|
||||
LOG_D(MAC, "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, snr/target snr %d/%d (normal case)\n",
|
||||
LOG_D(MAC, "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d (accumulated %d), snr/target snr %d/%d (normal case)\n",
|
||||
module_idP,
|
||||
frameP,
|
||||
subframeP,
|
||||
harq_pid,
|
||||
tpc,
|
||||
ue_sched_ctrl->pucch_tpc_accumulated[CC_id],
|
||||
snr,
|
||||
target_snr);
|
||||
} // Po_PUCCH has been updated
|
||||
@@ -1700,9 +1702,9 @@ schedule_ue_spec_br(module_id_t module_idP,
|
||||
UE_info->UE_template[CC_id][UE_id].pucch_tpc_tx_frame = frameP;
|
||||
UE_info->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe = subframeP;
|
||||
|
||||
if (snr > target_snr + 4) {
|
||||
if (snr > target_snr + PUCCH_PCHYST) {
|
||||
tpc = 0; //-1
|
||||
} else if (snr < target_snr - 4) {
|
||||
} else if (snr < target_snr - PUCCH_PCHYST) {
|
||||
tpc = 2; //+1
|
||||
} else {
|
||||
tpc = 1; //0
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
#include "OCG_extern.h"
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
#include "rlc.h"
|
||||
|
||||
#include "common/utils/lte/prach_utils.h"
|
||||
#include "T.h"
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@ void dlsch_scheduler_pre_ue_select_fairRR(
|
||||
|
||||
// Initialization
|
||||
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
||||
dlsch_ue_max_num[CC_id] = (uint16_t)RC.rrc[module_idP]->configuration.radioresourceconfig[CC_id].ue_multiple_max;
|
||||
dlsch_ue_max_num[CC_id] = eNB->ue_multiple_max;
|
||||
// save origin DL PDU number
|
||||
DL_req = &eNB->DL_req[CC_id].dl_config_request_body;
|
||||
saved_dlsch_dci[CC_id] = DL_req->number_pdu;
|
||||
@@ -1044,48 +1044,6 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t Mod_id,
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef TM5
|
||||
|
||||
// This has to be revisited!!!!
|
||||
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
||||
i1 = 0;
|
||||
i2 = 0;
|
||||
i3 = 0;
|
||||
|
||||
for (j = 0; j < N_RBG[CC_id]; j++) {
|
||||
if (MIMO_mode_indicator[CC_id][j] == 2) {
|
||||
i1 = i1 + 1;
|
||||
} else if (MIMO_mode_indicator[CC_id][j] == 1) {
|
||||
i2 = i2 + 1;
|
||||
} else if (MIMO_mode_indicator[CC_id][j] == 0) {
|
||||
i3 = i3 + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ((i1 < N_RBG[CC_id]) && (i2 > 0) && (i3 == 0)) {
|
||||
PHY_vars_eNB_g[Mod_id][CC_id]->check_for_SUMIMO_transmissions =
|
||||
PHY_vars_eNB_g[Mod_id][CC_id]->
|
||||
check_for_SUMIMO_transmissions + 1;
|
||||
}
|
||||
|
||||
if (i3 == N_RBG[CC_id] && i1 == 0 && i2 == 0) {
|
||||
PHY_vars_eNB_g[Mod_id][CC_id]->FULL_MUMIMO_transmissions =
|
||||
PHY_vars_eNB_g[Mod_id][CC_id]->FULL_MUMIMO_transmissions +
|
||||
1;
|
||||
}
|
||||
|
||||
if((i1 < N_RBG[CC_id]) && (i3 > 0)) {
|
||||
PHY_vars_eNB_g[Mod_id][CC_id]->
|
||||
check_for_MUMIMO_transmissions + 1;
|
||||
}
|
||||
|
||||
PHY_vars_eNB_g[Mod_id][CC_id]->check_for_total_transmissions =
|
||||
PHY_vars_eNB_g[Mod_id][CC_id]->check_for_total_transmissions +
|
||||
1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
||||
for (i = 0; i < dlsch_ue_select[CC_id].ue_num; i++) {
|
||||
if(dlsch_ue_select[CC_id].list[i].ue_priority == SCH_DL_MSG2) {
|
||||
@@ -1154,7 +1112,6 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
|
||||
// int continue_flag = 0;
|
||||
int32_t snr, target_snr;
|
||||
int32_t tpc = 1;
|
||||
static int32_t tpc_accumulated = 0;
|
||||
UE_sched_ctrl_t *ue_sched_ctl;
|
||||
int mcs;
|
||||
int i;
|
||||
@@ -1540,7 +1497,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
|
||||
subframeP,
|
||||
S_DL_SCHEDULED,
|
||||
rnti);
|
||||
//eNB_UE_stats->dlsch_trials[round]++;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[round]++;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].num_retransmission += 1;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].rbs_used_retx = nb_rb;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].total_rbs_used_retx += nb_rb;
|
||||
@@ -1982,6 +1939,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
|
||||
// store stats
|
||||
eNB->eNB_stats[CC_id].dlsch_bytes_tx+=sdu_length_total;
|
||||
eNB->eNB_stats[CC_id].dlsch_pdus_tx+=1;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[0]++;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].rbs_used = nb_rb;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].total_rbs_used += nb_rb;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1=eNB_UE_stats->dlsch_mcs1;
|
||||
@@ -2015,19 +1973,19 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
|
||||
UE_info->UE_template[CC_id][UE_id].pucch_tpc_tx_frame=frameP;
|
||||
UE_info->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe=subframeP;
|
||||
|
||||
if (snr > target_snr + 4) {
|
||||
if (snr > target_snr + PUCCH_PCHYST) {
|
||||
tpc = 0; //-1
|
||||
tpc_accumulated--;
|
||||
} else if (snr < target_snr - 4) {
|
||||
ue_sched_ctl->pucch_tpc_accumulated[CC_id]--;
|
||||
} else if (snr < target_snr - PUCCH_PCHYST) {
|
||||
tpc = 2; //+1
|
||||
tpc_accumulated++;
|
||||
ue_sched_ctl->pucch_tpc_accumulated[CC_id]++;
|
||||
} else {
|
||||
tpc = 1; //0
|
||||
}
|
||||
|
||||
LOG_D(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
|
||||
module_idP,frameP, subframeP,harq_pid,tpc,
|
||||
tpc_accumulated,snr,target_snr);
|
||||
ue_sched_ctl->pucch_tpc_accumulated[CC_id],snr,target_snr);
|
||||
} // Po_PUCCH has been updated
|
||||
else {
|
||||
tpc = 1; //0
|
||||
@@ -2245,7 +2203,6 @@ void ulsch_scheduler_pre_ue_select_fairRR(
|
||||
uint8_t first_ue_id[MAX_NUM_CCs][20];
|
||||
uint8_t ul_inactivity_num[MAX_NUM_CCs];
|
||||
uint8_t ul_inactivity_id[MAX_NUM_CCs][20]={{0}};
|
||||
// LTE_DL_FRAME_PARMS *frame_parms;
|
||||
uint8_t ulsch_ue_max_num[MAX_NUM_CCs];
|
||||
uint16_t saved_ulsch_dci[MAX_NUM_CCs];
|
||||
rnti_t rnti;
|
||||
@@ -2263,7 +2220,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
|
||||
//save ulsch dci number
|
||||
saved_ulsch_dci[CC_id] = eNB->HI_DCI0_req[CC_id][subframeP].hi_dci0_request_body.number_of_dci;
|
||||
// maximum multiplicity number
|
||||
ulsch_ue_max_num[CC_id] =RC.rrc[module_idP]->configuration.radioresourceconfig[CC_id].ue_multiple_max;
|
||||
ulsch_ue_max_num[CC_id] =eNB->ue_multiple_max;
|
||||
cc_id_flag[CC_id] = 0;
|
||||
ue_first_num[CC_id] = 0;
|
||||
ul_inactivity_num[CC_id] = 0;
|
||||
@@ -2290,6 +2247,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
|
||||
// UL DCI
|
||||
HI_DCI0_req = &eNB->HI_DCI0_req[CC_id][subframeP].hi_dci0_request_body;
|
||||
|
||||
|
||||
if ( (ulsch_ue_select[CC_id].ue_num >= ulsch_ue_max_num[CC_id]) || (cc_id_flag[CC_id] == 1) ) {
|
||||
cc_id_flag[CC_id] = 1;
|
||||
HI_DCI0_req->number_of_dci = saved_ulsch_dci[CC_id];
|
||||
@@ -2322,6 +2280,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
|
||||
//round
|
||||
round = UE_info->UE_sched_ctrl[UE_id].round_UL[CC_id][harq_pid];
|
||||
|
||||
|
||||
if ( round > 0 ) {
|
||||
hi_dci0_pdu = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi];
|
||||
format_flag = 2;
|
||||
@@ -2352,6 +2311,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
|
||||
UE_info->UE_template[CC_id][UE_id].scheduled_ul_bytes = 0;
|
||||
}
|
||||
|
||||
|
||||
if ( UE_id > last_ulsch_ue_id[CC_id] && ((ulsch_ue_select[CC_id].ue_num+ue_first_num[CC_id]) < ulsch_ue_max_num[CC_id]) ) {
|
||||
if ( bytes_to_schedule > 0 ) {
|
||||
first_ue_id[CC_id][ue_first_num[CC_id]]= UE_id;
|
||||
@@ -2369,9 +2329,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
|
||||
|
||||
UE_sched_ctl = &UE_info->UE_sched_ctrl[UE_id];
|
||||
rrc_status = mac_eNB_get_rrc_status(module_idP, rnti);
|
||||
|
||||
if ( ((UE_sched_ctl->ul_inactivity_timer>64)&&(UE_sched_ctl->ul_scheduled==0)) ||
|
||||
((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(rrc_status < RRC_CONNECTED)) ||
|
||||
if ( ((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(rrc_status < RRC_CONNECTED)) ||
|
||||
((UE_sched_ctl->cqi_req_timer>64)&&((rrc_status >= RRC_CONNECTED))) ) {
|
||||
first_ue_id[CC_id][ue_first_num[CC_id]]= UE_id;
|
||||
first_ue_total[CC_id] [ue_first_num[CC_id]] = 0;
|
||||
@@ -2482,6 +2440,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
|
||||
}
|
||||
rrc_status = mac_eNB_get_rrc_status(module_idP, rnti);
|
||||
|
||||
|
||||
if ( (bytes_to_schedule > 0) || (UE_info->UE_template[CC_id][UE_id].ul_SR > 0) ||
|
||||
((UE_sched_ctl->ul_inactivity_timer>64)&&(UE_sched_ctl->ul_scheduled==0)) ||
|
||||
((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(rrc_status < RRC_CONNECTED)) ||
|
||||
@@ -2595,7 +2554,6 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
|
||||
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
||||
UE_info_t *UE_info= &eNB->UE_info;
|
||||
UE_TEMPLATE *UE_template = NULL;
|
||||
LTE_DL_FRAME_PARMS *frame_parms = NULL;
|
||||
uint8_t ue_num_temp;
|
||||
uint8_t total_rbs=0;
|
||||
uint8_t average_rbs;
|
||||
@@ -2617,18 +2575,17 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
|
||||
// MCS and RB assgin
|
||||
for ( CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++ ) {
|
||||
cc = &RC.mac[module_idP]->common_channels[CC_id];
|
||||
frame_parms = &(RC.eNB[module_idP][CC_id]->frame_parms);
|
||||
|
||||
int N_RB_UL = to_prb(cc->ul_Bandwidth);
|
||||
if (cc->tdd_Config) { //TDD
|
||||
if (frame_parms->N_RB_UL == 25) {
|
||||
if (N_RB_UL == 25) {
|
||||
num_pucch_rb = 1;
|
||||
} else if (frame_parms->N_RB_UL == 50) {
|
||||
} else if (N_RB_UL == 50) {
|
||||
num_pucch_rb = 2;
|
||||
} else {
|
||||
num_pucch_rb = 3;
|
||||
}
|
||||
} else {//FDD
|
||||
if (frame_parms->N_RB_UL == 25) {
|
||||
if (N_RB_UL == 25) {
|
||||
num_pucch_rb = 1;
|
||||
} else {
|
||||
num_pucch_rb = 2;
|
||||
@@ -2653,13 +2610,13 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (first_rb[CC_id] >= frame_parms->N_RB_UL-num_pucch_rb ) {
|
||||
if (first_rb[CC_id] >= N_RB_UL-num_pucch_rb ) {
|
||||
LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: dropping, not enough RBs\n",
|
||||
module_idP,frameP,subframeP,UE_id,UE_RNTI(CC_id,UE_id),CC_id);
|
||||
break;
|
||||
}
|
||||
|
||||
total_rbs = frame_parms->N_RB_UL-num_pucch_rb-first_rb[CC_id];
|
||||
total_rbs = N_RB_UL-num_pucch_rb-first_rb[CC_id];
|
||||
average_rbs = (int)round((double)total_rbs/(double)ue_num_temp);
|
||||
|
||||
if ( average_rbs < 3 ) {
|
||||
@@ -2727,19 +2684,20 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
|
||||
UE_info->UE_sched_ctrl[UE_id].pusch_rx_num_old[CC_id] = UE_info->UE_sched_ctrl[UE_id].pusch_rx_num[CC_id];
|
||||
UE_info->UE_sched_ctrl[UE_id].pusch_rx_error_num_old[CC_id] = UE_info->UE_sched_ctrl[UE_id].pusch_rx_error_num[CC_id];
|
||||
|
||||
if(bler < 0.5) {
|
||||
if(UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id] !=0) {
|
||||
UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]--;
|
||||
if (eNB->use_mcs_offset == 1) {
|
||||
if(bler < eNB->bler_lower) {
|
||||
if(UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id] !=0) {
|
||||
UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]--;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(bler >= 2) {
|
||||
UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]++;
|
||||
if(UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id] >= 20) {
|
||||
UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]=20;
|
||||
if(bler >= eNB->bler_upper) {
|
||||
UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]++;
|
||||
if(UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id] >= 20) {
|
||||
UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]=20;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
snr = UE_info->UE_sched_ctrl[UE_id].pusch_snr_avg[CC_id];
|
||||
|
||||
mcs = 20 - UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id];
|
||||
@@ -2758,15 +2716,20 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
|
||||
if ( ulsch_ue_select[CC_id].list[ulsch_ue_num].ul_total_buffer > 0 ) {
|
||||
rb_table_index = 2;
|
||||
tbs = get_TBS_UL(mcs,rb_table[rb_table_index]);
|
||||
tx_power = (int8_t)(hundred_times_log10_NPRB[rb_table[rb_table_index] - 1] / 100);
|
||||
tx_power= estimate_ue_tx_power(0,tbs*8,rb_table[rb_table_index],0,cc->Ncp,0);
|
||||
|
||||
while ( (tbs < bytes_to_schedule) && (rb_table[rb_table_index]<(frame_parms->N_RB_UL-num_pucch_rb-first_rb[CC_id])) &&
|
||||
((UE_template->phr_info - tx_power) > 0) && (rb_table_index < 32 )) {
|
||||
rb_table_index++;
|
||||
while ( (((UE_template->phr_info - tx_power) < 0 ) || (tbs > bytes_to_schedule)) && (mcs > 3) ) {
|
||||
mcs--;
|
||||
tbs = get_TBS_UL(mcs,rb_table[rb_table_index]);
|
||||
tx_power = (int8_t)(hundred_times_log10_NPRB[rb_table[rb_table_index] - 1] / 100);
|
||||
tx_power= estimate_ue_tx_power(0,tbs*8,rb_table[rb_table_index],0,cc->Ncp,0);
|
||||
}
|
||||
|
||||
while ( (tbs < bytes_to_schedule) && (rb_table[rb_table_index]<(N_RB_UL-num_pucch_rb-first_rb[CC_id])) &&
|
||||
((UE_template->phr_info - tx_power) > 0) && (rb_table_index < eNB->max_ul_rb_index )) {
|
||||
rb_table_index++;
|
||||
tbs = get_TBS_UL(mcs,rb_table[rb_table_index]);
|
||||
tx_power= estimate_ue_tx_power(0,tbs*8,rb_table[rb_table_index],0,cc->Ncp,0);
|
||||
}
|
||||
if ( rb_table[rb_table_index]<3 ) {
|
||||
rb_table_index=2;
|
||||
}
|
||||
@@ -2807,11 +2770,12 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
|
||||
UE_info->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10;
|
||||
} else {
|
||||
// assigne RBS( 3 RBs)
|
||||
/*
|
||||
first_rb[CC_id] = first_rb[CC_id] + 3;
|
||||
UE_info->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul = 3;
|
||||
UE_info->UE_template[CC_id][UE_id].pre_allocated_rb_table_index_ul = 2;
|
||||
UE_info->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10;
|
||||
}
|
||||
UE_info->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10;
|
||||
*/ }
|
||||
}
|
||||
} else if ( ulsch_ue_select[CC_id].list[ulsch_ue_num].ue_priority == SCH_UL_INACTIVE ) {
|
||||
// assigne RBS( 3 RBs)
|
||||
@@ -2913,12 +2877,10 @@ schedule_ulsch_fairRR(module_id_t module_idP, frame_t frameP,
|
||||
|
||||
ULSCH_UE_SELECT ulsch_ue_select[MAX_NUM_CCs];
|
||||
memset(ulsch_ue_select, 0, sizeof(ulsch_ue_select));
|
||||
LTE_DL_FRAME_PARMS *frame_parms ;
|
||||
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
cc = &mac->common_channels[CC_id];
|
||||
frame_parms= &RC.eNB[module_idP][CC_id]->frame_parms;
|
||||
|
||||
int N_RB_UL=to_prb(cc->ul_Bandwidth);
|
||||
// output of scheduling, the UE numbers in RBs, where it is in the code???
|
||||
// check if RA (Msg3) is active in this subframeP, if so skip the PRBs used for Msg3
|
||||
// Msg3 is using 1 PRB so we need to increase first_rb accordingly
|
||||
@@ -2928,13 +2890,13 @@ schedule_ulsch_fairRR(module_id_t module_idP, frame_t frameP,
|
||||
ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].ue_priority = SCH_UL_MSG3;
|
||||
|
||||
if (cc->tdd_Config == NULL) {
|
||||
if(frame_parms->N_RB_UL == 25) {
|
||||
if(N_RB_UL == 25) {
|
||||
ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb = 1;
|
||||
} else {
|
||||
ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb = 2;
|
||||
}
|
||||
} else {
|
||||
switch(frame_parms->N_RB_UL) {
|
||||
switch(N_RB_UL) {
|
||||
case 25:
|
||||
default:
|
||||
ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb = 1;
|
||||
@@ -2958,14 +2920,18 @@ schedule_ulsch_fairRR(module_id_t module_idP, frame_t frameP,
|
||||
}
|
||||
|
||||
//PRACH
|
||||
if (is_prach_subframe(frame_parms,sched_frame,sched_subframe)==1) {
|
||||
if (is_prach_subframe0(cc->tdd_Config!=NULL ? cc->tdd_Config->subframeAssignment : 0,cc->tdd_Config!=NULL ? 1 : 0,
|
||||
cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex,
|
||||
sched_frame,sched_subframe)==1) {
|
||||
ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].ue_priority = SCH_UL_PRACH;
|
||||
ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb = get_prach_prb_offset(
|
||||
frame_parms,
|
||||
frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
|
||||
frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset,
|
||||
0,//tdd_mapindex
|
||||
frameP); //Nf --> shouldn't it be sched_frame ???
|
||||
ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb =
|
||||
get_prach_prb_offset(cc->tdd_Config!=NULL ? 1 : 0,
|
||||
cc->tdd_Config!=NULL ? cc->tdd_Config->subframeAssignment : 0,
|
||||
to_prb(cc->ul_Bandwidth),
|
||||
cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex,
|
||||
cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset,
|
||||
0,
|
||||
sched_frame);
|
||||
ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].nb_rb = 6;
|
||||
ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].UE_id = -1;
|
||||
ulsch_ue_select[CC_id].ue_num++;
|
||||
@@ -2993,7 +2959,6 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
||||
uint32_t cqi_req,cshift,ndi,tpc;
|
||||
int32_t snr;
|
||||
int32_t target_snr=0;
|
||||
static int32_t tpc_accumulated=0;
|
||||
int CC_id,ulsch_ue_num;
|
||||
int N_RB_UL;
|
||||
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
||||
@@ -3012,7 +2977,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
||||
nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu;
|
||||
nfapi_ul_config_request_body_t *ul_req_tmp;
|
||||
nfapi_ul_config_ulsch_harq_information *ulsch_harq_information;
|
||||
LOG_D(MAC,"entering ulsch preprocesor\n");
|
||||
LOG_D(MAC,"entering ulsch preprocesor for %d.%d\n",sched_frame,sched_subframeP);
|
||||
ulsch_scheduler_pre_processor_fairRR(module_idP,
|
||||
frameP,
|
||||
subframeP,
|
||||
@@ -3185,12 +3150,12 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
||||
UE_template->pusch_tpc_tx_frame=frameP;
|
||||
UE_template->pusch_tpc_tx_subframe=subframeP;
|
||||
|
||||
if (snr > target_snr + 4) {
|
||||
if (snr > target_snr + PUSCH_PCHYST) {
|
||||
tpc = 0; //-1
|
||||
tpc_accumulated--;
|
||||
} else if (snr < target_snr - 4) {
|
||||
UE_sched_ctrl->pusch_tpc_accumulated[CC_id]--;
|
||||
} else if (snr < target_snr - PUSCH_PCHYST) {
|
||||
tpc = 2; //+1
|
||||
tpc_accumulated++;
|
||||
UE_sched_ctrl->pusch_tpc_accumulated[CC_id]++;
|
||||
} else {
|
||||
tpc = 1; //0
|
||||
}
|
||||
@@ -3201,7 +3166,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
||||
if (tpc!=1) {
|
||||
LOG_D(MAC,"[eNB %d] ULSCH schedulerRR: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
|
||||
module_idP,frameP,subframeP,harq_pid,tpc,
|
||||
tpc_accumulated,snr,target_snr);
|
||||
UE_sched_ctrl->pusch_tpc_accumulated[CC_id],snr,target_snr);
|
||||
}
|
||||
|
||||
// new transmission
|
||||
@@ -3214,6 +3179,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
||||
UE_sched_ctrl->cqi_req_timer);
|
||||
ndi = 1-UE_template->oldNDI_UL[harq_pid];
|
||||
UE_template->oldNDI_UL[harq_pid]=ndi;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[0]++;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].snr = snr;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul;
|
||||
@@ -3402,6 +3368,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
||||
T_INT(round));
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].snr = snr;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
|
||||
|
||||
uint8_t mcs_rv = 0;
|
||||
|
||||
if(rvidx_tab[round&3]==1) {
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
#include "flexran_agent_mac.h"
|
||||
#include <dlfcn.h>
|
||||
#include <openair2/LAYER2/MAC/mac.h>
|
||||
|
||||
#include "common/utils/lte/prach_utils.h"
|
||||
|
||||
#include "T.h"
|
||||
|
||||
@@ -144,16 +144,18 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
if (UE_id != -1) {
|
||||
UE_scheduling_control = &UE_info->UE_sched_ctrl[UE_id];
|
||||
UE_template_ptr = &UE_info->UE_template[CC_idP][UE_id];
|
||||
LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n",
|
||||
LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH (%s) sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d, timing_advance %d\n",
|
||||
enb_mod_idP,
|
||||
harq_pid,
|
||||
CC_idP,
|
||||
frameP,
|
||||
subframeP,
|
||||
sduP==NULL ? "in error" : "OK",
|
||||
UE_scheduling_control->round_UL[CC_idP][harq_pid],
|
||||
current_rnti,
|
||||
UE_id,
|
||||
ul_cqi);
|
||||
ul_cqi,
|
||||
timing_advance);
|
||||
AssertFatal(UE_scheduling_control->round_UL[CC_idP][harq_pid] < 8, "round >= 8\n");
|
||||
|
||||
if (sduP != NULL) {
|
||||
@@ -219,7 +221,7 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
if (UE_scheduling_control->round_UL[CC_idP][harq_pid] == 3) {
|
||||
UE_scheduling_control->ul_scheduled &= (~(1 << harq_pid));
|
||||
UE_scheduling_control->round_UL[CC_idP][harq_pid] = 0;
|
||||
|
||||
UE_info->eNB_UE_stats[CC_idP][UE_id].ulsch_errors++;
|
||||
if (UE_scheduling_control->ul_consecutive_errors++ == 10) {
|
||||
UE_scheduling_control->ul_failure_timer = 1;
|
||||
}
|
||||
@@ -236,6 +238,7 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
}
|
||||
} else {
|
||||
UE_scheduling_control->round_UL[CC_idP][harq_pid]++;
|
||||
UE_info->eNB_UE_stats[CC_idP][UE_id].ulsch_rounds[UE_scheduling_control->round_UL[CC_idP][harq_pid]]++;
|
||||
}
|
||||
|
||||
/* CDRX UL HARQ timers */
|
||||
@@ -287,14 +290,17 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
AssertFatal(mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx > 1,
|
||||
"maxHARQ %d should be greater than 1\n",
|
||||
(int) mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx);
|
||||
LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d [RAPROC Msg3] Received ULSCH sdu round %d from PHY (rnti %x, RA_id %d) ul_cqi %d\n",
|
||||
LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d [RAPROC Msg3] Received ULSCH sdu (%s) round %d from PHY (rnti %x, RA_id %d) ul_cqi %d, timing advance %d\n",
|
||||
enb_mod_idP,
|
||||
harq_pid,
|
||||
CC_idP,
|
||||
sduP!=NULL ? "OK" : "in error",
|
||||
ra->msg3_round,
|
||||
current_rnti,
|
||||
RA_id,
|
||||
ul_cqi);
|
||||
ul_cqi,
|
||||
timing_advance);
|
||||
|
||||
first_rb = ra->msg3_first_rb;
|
||||
|
||||
if (sduP == NULL) { // we've got an error on Msg3
|
||||
@@ -403,7 +409,8 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
switch (rx_ces[i]) { // implement and process PHR + CRNTI + BSR
|
||||
case POWER_HEADROOM:
|
||||
if (UE_id != -1) {
|
||||
UE_template_ptr->phr_info = (payload_ptr[0] & 0x3f) - PHR_MAPPING_OFFSET + (int8_t)(hundred_times_log10_NPRB[UE_template_ptr->nb_rb_ul[harq_pid] - 1] / 100);
|
||||
/*UE_template_ptr->phr_info = (payload_ptr[0] & 0x3f) - PHR_MAPPING_OFFSET + (int8_t)(hundred_times_log10_NPRB[UE_template_ptr->nb_rb_ul[harq_pid] - 1] / 100);i*/
|
||||
UE_template_ptr->phr_info = (payload_ptr[0] & 0x3f) - PHR_MAPPING_OFFSET + estimate_ue_tx_power(0,sdu_lenP*8,UE_template_ptr->nb_rb_ul[harq_pid],0,mac->common_channels[CC_idP].Ncp,0);
|
||||
|
||||
if (UE_template_ptr->phr_info > 40) {
|
||||
UE_template_ptr->phr_info = 40;
|
||||
@@ -424,7 +431,7 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
case CRNTI:
|
||||
old_rnti = (((uint16_t) payload_ptr[0]) << 8) + payload_ptr[1];
|
||||
old_UE_id = find_UE_id(enb_mod_idP, old_rnti);
|
||||
LOG_D(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n",
|
||||
LOG_I(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n",
|
||||
enb_mod_idP,
|
||||
frameP,
|
||||
subframeP,
|
||||
@@ -438,7 +445,7 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
/* Receiving CRNTI means that the current rnti has to go away */
|
||||
if (old_UE_id != -1) {
|
||||
if (mac_eNB_get_rrc_status(enb_mod_idP,old_rnti) == RRC_HO_EXECUTION) {
|
||||
LOG_I(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) Handover case\n",
|
||||
LOG_D(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) Handover case\n",
|
||||
enb_mod_idP,
|
||||
frameP,
|
||||
subframeP,
|
||||
@@ -1293,16 +1300,19 @@ schedule_ulsch(module_id_t module_idP,
|
||||
|
||||
/* Note: RC.nb_mac_CC[module_idP] should be lower than or equal to NFAPI_CC_MAX */
|
||||
for (int CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++, cc++) {
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &RC.eNB[module_idP][CC_id]->frame_parms;
|
||||
if (is_prach_subframe(frame_parms, sched_frame, sched_subframe)) {
|
||||
int start_rb = get_prach_prb_offset(
|
||||
frame_parms,
|
||||
frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
|
||||
frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset,
|
||||
0, // tdd_mapindex
|
||||
sched_frame); // Nf
|
||||
|
||||
if (is_prach_subframe0(cc->tdd_Config!=NULL ? cc->tdd_Config->subframeAssignment : 0,cc->tdd_Config!=NULL ? 1 : 0,
|
||||
cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex,
|
||||
sched_frame, sched_subframe)) {
|
||||
int start_rb = get_prach_prb_offset(cc->tdd_Config!=NULL ? 1 : 0,
|
||||
cc->tdd_Config!=NULL ? cc->tdd_Config->subframeAssignment : 0,
|
||||
to_prb(cc->ul_Bandwidth),
|
||||
cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex,
|
||||
cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset,
|
||||
0, // tdd_mapindex
|
||||
sched_frame); // Nf
|
||||
for (int i = 0; i < 6; i++)
|
||||
cc[CC_id].vrb_map_UL[start_rb + i] = 1;
|
||||
cc->vrb_map_UL[start_rb + i] = 1;
|
||||
}
|
||||
|
||||
/* HACK: let's remove the PUCCH from available RBs
|
||||
@@ -1314,24 +1324,24 @@ schedule_ulsch(module_id_t module_idP,
|
||||
*/
|
||||
switch (to_prb(cc[CC_id].ul_Bandwidth)) {
|
||||
case 25:
|
||||
cc[CC_id].vrb_map_UL[0] = 1;
|
||||
cc[CC_id].vrb_map_UL[24] = 1;
|
||||
cc->vrb_map_UL[0] = 1;
|
||||
cc->vrb_map_UL[24] = 1;
|
||||
break;
|
||||
|
||||
case 50:
|
||||
cc[CC_id].vrb_map_UL[0] = 1;
|
||||
cc[CC_id].vrb_map_UL[1] = 1;
|
||||
cc[CC_id].vrb_map_UL[48] = 1;
|
||||
cc[CC_id].vrb_map_UL[49] = 1;
|
||||
cc->vrb_map_UL[0] = 1;
|
||||
cc->vrb_map_UL[1] = 1;
|
||||
cc->vrb_map_UL[48] = 1;
|
||||
cc->vrb_map_UL[49] = 1;
|
||||
break;
|
||||
|
||||
case 100:
|
||||
cc[CC_id].vrb_map_UL[0] = 1;
|
||||
cc[CC_id].vrb_map_UL[1] = 1;
|
||||
cc[CC_id].vrb_map_UL[2] = 1;
|
||||
cc[CC_id].vrb_map_UL[97] = 1;
|
||||
cc[CC_id].vrb_map_UL[98] = 1;
|
||||
cc[CC_id].vrb_map_UL[99] = 1;
|
||||
cc->vrb_map_UL[0] = 1;
|
||||
cc->vrb_map_UL[1] = 1;
|
||||
cc->vrb_map_UL[2] = 1;
|
||||
cc->vrb_map_UL[97] = 1;
|
||||
cc->vrb_map_UL[98] = 1;
|
||||
cc->vrb_map_UL[99] = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -1349,6 +1359,8 @@ schedule_ulsch(module_id_t module_idP,
|
||||
/*
|
||||
* Schedule the DCI0 for ULSCH
|
||||
*/
|
||||
|
||||
|
||||
void
|
||||
schedule_ulsch_rnti(module_id_t module_idP,
|
||||
int CC_id,
|
||||
@@ -1356,7 +1368,6 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
sub_frame_t subframeP,
|
||||
unsigned char sched_subframeP) {
|
||||
/* TODO: does this need to be static? */
|
||||
static int32_t tpc_accumulated = 0;
|
||||
/* values from 0 to 7 can be used for mapping the cyclic shift
|
||||
* (36.211 , Table 5.5.2.1.1-1) */
|
||||
const uint32_t cshift = 0;
|
||||
@@ -1481,8 +1492,7 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
/* Power control */
|
||||
/*
|
||||
* Compute the expected ULSCH RX snr (for the stats)
|
||||
* This is the normalized RX snr and this should be constant (regardless
|
||||
* of mcs) Is not in dBm, unit from nfapi, converting to dBm
|
||||
*
|
||||
*/
|
||||
const int32_t snr = UE_sched_ctrl_ptr->pusch_snr[CC_id];
|
||||
const int32_t target_snr = mac->puSch10xSnr / 10;
|
||||
@@ -1501,12 +1511,12 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
UE_template_ptr->pusch_tpc_tx_frame = frameP;
|
||||
UE_template_ptr->pusch_tpc_tx_subframe = subframeP;
|
||||
|
||||
if (snr > target_snr + 4) {
|
||||
if (snr > target_snr + PUSCH_PCHYST) {
|
||||
tpc = 0; // -1
|
||||
tpc_accumulated--;
|
||||
} else if (snr < target_snr - 4) {
|
||||
UE_sched_ctrl_ptr->pusch_tpc_accumulated[CC_id]--;
|
||||
} else if (snr < target_snr - PUSCH_PCHYST) {
|
||||
tpc = 2; // +1
|
||||
tpc_accumulated++;
|
||||
UE_sched_ctrl_ptr->pusch_tpc_accumulated[CC_id]++;
|
||||
}
|
||||
}
|
||||
if (tpc != 1) {
|
||||
@@ -1518,7 +1528,7 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
subframeP,
|
||||
harq_pid,
|
||||
tpc,
|
||||
tpc_accumulated,
|
||||
UE_sched_ctrl_ptr->pusch_tpc_accumulated[CC_id],
|
||||
snr,
|
||||
target_snr);
|
||||
}
|
||||
@@ -1572,6 +1582,7 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
const uint8_t ndi = 1 - UE_template_ptr->oldNDI_UL[harq_pid]; // NDI: new data indicator
|
||||
const uint8_t mcs = UE_template_ptr->pre_assigned_mcs_ul;
|
||||
UE_template_ptr->oldNDI_UL[harq_pid] = ndi;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[0]++;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].snr = snr;
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
|
||||
UE_template_ptr->mcs_UL[harq_pid] = mcs;
|
||||
@@ -1593,8 +1604,6 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2 = mcs;
|
||||
|
||||
while (rb_table[rb_table_index] > 45 && rb_table_index > 0)
|
||||
rb_table_index--;
|
||||
|
||||
UE_template_ptr->TBS_UL[harq_pid] = get_TBS_UL(mcs, rb_table[rb_table_index]);
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx += rb_table[rb_table_index];
|
||||
@@ -2080,10 +2089,10 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
|
||||
|
||||
if (snr > target_snr + 4) {
|
||||
tpc = 0; //-1
|
||||
UE_sched_ctrl->tpc_accumulated[CC_id]--;
|
||||
UE_sched_ctrl->pusch_tpc_accumulated[CC_id]--;
|
||||
} else if (snr < target_snr - 4) {
|
||||
tpc = 2; //+1
|
||||
UE_sched_ctrl->tpc_accumulated[CC_id]++;
|
||||
UE_sched_ctrl->pusch_tpc_accumulated[CC_id]++;
|
||||
} else {
|
||||
tpc = 1; //0
|
||||
}
|
||||
@@ -2098,7 +2107,7 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
|
||||
subframeP,
|
||||
harq_pid,
|
||||
tpc,
|
||||
UE_sched_ctrl->tpc_accumulated[CC_id],
|
||||
UE_sched_ctrl->pusch_tpc_accumulated[CC_id],
|
||||
snr,
|
||||
target_snr);
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
#define MAX_MAC_INST 16
|
||||
#define BCCH_PAYLOAD_SIZE_MAX 128
|
||||
#define CCCH_PAYLOAD_SIZE_MAX 128
|
||||
#define CCCH_PAYLOAD_SIZE_MAX 512
|
||||
#define PCCH_PAYLOAD_SIZE_MAX 128
|
||||
#define RAR_PAYLOAD_SIZE_MAX 128
|
||||
|
||||
@@ -143,7 +143,10 @@
|
||||
#define MAX_SUPPORTED_BW 4
|
||||
/*!\brief CQI values range from 1 to 15 (4 bits) */
|
||||
#define CQI_VALUE_RANGE 16
|
||||
|
||||
/*!\brief Hysteresis of PUSCH power control loop */
|
||||
#define PUSCH_PCHYST 1
|
||||
/*!\brief Hysteresis of PUCCH power control loop */
|
||||
#define PUCCH_PCHYST 1
|
||||
/*!\brief value for indicating BSR Timer is not running */
|
||||
#define MAC_UE_BSR_TIMER_NOT_RUNNING (0xFFFF)
|
||||
|
||||
@@ -615,6 +618,8 @@ typedef struct {
|
||||
|
||||
// here for RX
|
||||
//
|
||||
|
||||
uint32_t ulsch_rounds[4];
|
||||
uint32_t ulsch_bitrate;
|
||||
//
|
||||
uint32_t ulsch_bytes_rx;
|
||||
@@ -684,6 +689,17 @@ typedef struct {
|
||||
// Length of SDU Got from LC DL
|
||||
uint32_t sdu_length_tx[NB_RB_MAX];
|
||||
|
||||
int lc_bytes_tx[64];
|
||||
int dlsch_rounds[8];
|
||||
int dlsch_errors;
|
||||
int dlsch_total_bytes;
|
||||
|
||||
int lc_bytes_rx[64];
|
||||
int ulsch_rounds[8];
|
||||
int ulsch_errors;
|
||||
int ulsch_total_bytes_scheduled;
|
||||
int ulsch_total_bytes_rx;
|
||||
|
||||
|
||||
/// overall
|
||||
//
|
||||
@@ -776,7 +792,6 @@ typedef struct {
|
||||
uint32_t num_mac_sdu_rx;
|
||||
// Length of SDU Got from LC UL - Size array can be refined
|
||||
uint32_t sdu_length_rx[NB_RB_MAX];
|
||||
|
||||
} eNB_UE_STATS;
|
||||
/*! \brief eNB template for UE context information */
|
||||
|
||||
@@ -982,7 +997,8 @@ typedef struct {
|
||||
uint16_t feedback_cnt[NFAPI_CC_MAX];
|
||||
uint16_t timing_advance;
|
||||
uint16_t timing_advance_r9;
|
||||
uint8_t tpc_accumulated[NFAPI_CC_MAX];
|
||||
int8_t pusch_tpc_accumulated[NFAPI_CC_MAX];
|
||||
int8_t pucch_tpc_accumulated[NFAPI_CC_MAX];
|
||||
uint8_t periodic_wideband_cqi[NFAPI_CC_MAX];
|
||||
uint8_t periodic_wideband_spatial_diffcqi[NFAPI_CC_MAX];
|
||||
uint8_t periodic_wideband_pmi[NFAPI_CC_MAX];
|
||||
@@ -1342,6 +1358,7 @@ typedef struct {
|
||||
uint8_t FeMBMS_flag;
|
||||
} COMMON_channels_t;
|
||||
/*! \brief top level eNB MAC structure */
|
||||
|
||||
typedef struct eNB_MAC_INST_s {
|
||||
/// Ethernet parameters for northbound midhaul interface
|
||||
eth_params_t eth_params_n;
|
||||
@@ -1435,6 +1452,17 @@ typedef struct eNB_MAC_INST_s {
|
||||
|
||||
int32_t puSch10xSnr;
|
||||
int32_t puCch10xSnr;
|
||||
|
||||
int max_ul_rb_index;
|
||||
|
||||
int ue_multiple_max;
|
||||
|
||||
int use_mcs_offset;
|
||||
|
||||
double bler_lower;
|
||||
|
||||
double bler_upper;
|
||||
pthread_t mac_stats_thread;
|
||||
} eNB_MAC_INST;
|
||||
|
||||
/*
|
||||
|
||||
@@ -78,5 +78,8 @@ extern eNB_UE_STATS pre_scd_eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
||||
|
||||
extern mac_rlc_am_muilist_t rlc_am_mui;
|
||||
extern SCHEDULER_MODES global_scheduler_mode;
|
||||
|
||||
#include "common/ran_context.h"
|
||||
extern RAN_CONTEXT_t RC;
|
||||
extern rb_id_t mbms_rab_id;
|
||||
#endif //DEF_H
|
||||
|
||||
@@ -40,8 +40,84 @@
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
#include "common/ran_context.h"
|
||||
#include "intertask_interface.h"
|
||||
#include <pthread.h>
|
||||
|
||||
extern RAN_CONTEXT_t RC;
|
||||
extern int oai_exit;
|
||||
|
||||
void *mac_stats_thread(void *param) {
|
||||
eNB_MAC_INST *mac = (eNB_MAC_INST *)param;
|
||||
FILE *fd;
|
||||
UE_info_t *UE_info = &(mac->UE_info);
|
||||
|
||||
while (!oai_exit) {
|
||||
sleep(1);
|
||||
fd=fopen("MAC_stats.log","w+");
|
||||
AssertFatal(fd!=NULL,"Cannot open MAC_stats.log\n");
|
||||
|
||||
for (int UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; UE_id++) {
|
||||
if (UE_info->active[UE_id]) {
|
||||
int rnti = UE_RNTI(mac->Mod_id, UE_id);
|
||||
int CC_id = UE_PCCID(mac->Mod_id, UE_id);
|
||||
UE_sched_ctrl_t *UE_scheduling_control = &(UE_info->UE_sched_ctrl[UE_id]);
|
||||
|
||||
double total_bler;
|
||||
if(UE_scheduling_control->pusch_rx_num[CC_id] == 0 && UE_scheduling_control->pusch_rx_error_num[CC_id] == 0) {
|
||||
total_bler = 0;
|
||||
}
|
||||
else {
|
||||
total_bler = (double)UE_scheduling_control->pusch_rx_error_num[CC_id] / (double)(UE_scheduling_control->pusch_rx_error_num[CC_id] + UE_scheduling_control->pusch_rx_num[CC_id]) * 100;
|
||||
}
|
||||
fprintf(fd,"MAC UE rnti %x : %s, PHR %d DLCQI %d PUSCH %d PUCCH %d RLC disc %d UL-stat rcv %lu err %lu bler %lf (%lf/%lf) total_bler %lf mcsoff %d pre_allocated nb_rb %d, mcs %d, bsr %u sched %u tbs %lu cnt %u , DL-stat tbs %lu cnt %u rb %u buf %u 1st %u ret %u ri %d\n",
|
||||
rnti,
|
||||
UE_scheduling_control->ul_out_of_sync == 0 ? "in synch" : "out of sync",
|
||||
UE_info->UE_template[CC_id][UE_id].phr_info,
|
||||
UE_scheduling_control->dl_cqi[CC_id],
|
||||
UE_scheduling_control->pusch_snr/*_avg*/[CC_id],
|
||||
UE_scheduling_control->pucch1_snr[CC_id],
|
||||
UE_scheduling_control->rlc_out_of_resources_cnt,
|
||||
UE_scheduling_control->pusch_rx_num[CC_id],
|
||||
UE_scheduling_control->pusch_rx_error_num[CC_id],
|
||||
UE_scheduling_control->pusch_bler[CC_id],
|
||||
mac->bler_lower,mac->bler_upper,total_bler,
|
||||
UE_scheduling_control->mcs_offset[CC_id],
|
||||
UE_info->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul,
|
||||
UE_info->UE_template[CC_id][UE_id].pre_assigned_mcs_ul,
|
||||
UE_info->UE_template[CC_id][UE_id].estimated_ul_buffer,
|
||||
UE_info->UE_template[CC_id][UE_id].scheduled_ul_bytes,
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes_rx,
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].total_num_pdus_rx,
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes,
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].total_num_pdus,
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].total_rbs_used,
|
||||
#if defined(PRE_SCD_THREAD)
|
||||
UE_info->UE_template[CC_id][UE_id].dl_buffer_total,
|
||||
#else
|
||||
0,
|
||||
#endif
|
||||
UE_scheduling_control->first_cnt[CC_id],
|
||||
UE_scheduling_control->ret_cnt[CC_id],
|
||||
UE_scheduling_control->aperiodic_ri_received[CC_id]
|
||||
);
|
||||
fprintf(fd," ULSCH rounds %d/%d/%d/%d, DLSCH rounds %d/%d/%d/%d, ULSCH errors %d, DLSCH errors %d\n",
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[0],
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[1],
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[2],
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[3],
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[0],
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[1],
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[2],
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[3],
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_errors,
|
||||
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_errors);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
fclose(fd);
|
||||
}
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
void init_UE_info(UE_info_t *UE_info)
|
||||
{
|
||||
@@ -128,6 +204,9 @@ void mac_top_init_eNB(void)
|
||||
pdcp_layer_init();
|
||||
|
||||
rrc_init_global_param();
|
||||
|
||||
for (i=0;i<RC.nb_macrlc_inst; i++) pthread_create(&mac[i]->mac_stats_thread,NULL,mac_stats_thread,(void*)mac[i]);
|
||||
|
||||
}
|
||||
|
||||
void mac_init_cell_params(int Mod_idP, int CC_idP)
|
||||
|
||||
@@ -730,13 +730,13 @@ void calculate_max_mcs_min_rb(module_id_t mod_id,
|
||||
int tbs = get_TBS_UL(*mcs, rb_table[*rb_index]);
|
||||
|
||||
// fixme: set use_srs flag
|
||||
*tx_power = estimate_ue_tx_power(tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
|
||||
*tx_power = estimate_ue_tx_power(0,tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
|
||||
|
||||
/* find maximum MCS */
|
||||
while ((phr - *tx_power < 0 || tbs > bytes) && *mcs > 3) {
|
||||
(*mcs)--;
|
||||
tbs = get_TBS_UL(*mcs, rb_table[*rb_index]);
|
||||
*tx_power = estimate_ue_tx_power(tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
|
||||
*tx_power = estimate_ue_tx_power(0,tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
|
||||
}
|
||||
|
||||
/* find minimum necessary RBs */
|
||||
@@ -746,7 +746,7 @@ void calculate_max_mcs_min_rb(module_id_t mod_id,
|
||||
&& phr - *tx_power > 0) {
|
||||
(*rb_index)++;
|
||||
tbs = get_TBS_UL(*mcs, rb_table[*rb_index]);
|
||||
*tx_power = estimate_ue_tx_power(tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
|
||||
*tx_power = estimate_ue_tx_power(0,tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
|
||||
}
|
||||
|
||||
/* Decrease if we went to far in last iteration */
|
||||
@@ -801,7 +801,7 @@ int rr_ul_run(module_id_t Mod_id,
|
||||
AssertFatal(num_contig_rb <= 2, "cannot handle more than two contiguous RB regions\n");
|
||||
UE_info_t *UE_info = &RC.mac[Mod_id]->UE_info;
|
||||
const int max_rb = num_contig_rb > 1 ? MAX(rbs[0].length, rbs[1].length) : rbs[0].length;
|
||||
|
||||
eNB_MAC_INST *mac = RC.mac[Mod_id];
|
||||
/* for every UE: check whether we have to handle a retransmission (and
|
||||
* allocate, if so). If not, compute how much RBs this UE would need */
|
||||
int rb_idx_required[MAX_MOBILES_PER_ENB];
|
||||
@@ -809,7 +809,7 @@ int rr_ul_run(module_id_t Mod_id,
|
||||
int num_ue_req = 0;
|
||||
for (int UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
||||
UE_TEMPLATE *UE_template = &UE_info->UE_template[CC_id][UE_id];
|
||||
uint8_t harq_pid = subframe2harqpid(&RC.mac[Mod_id]->common_channels[CC_id],
|
||||
uint8_t harq_pid = subframe2harqpid(&mac->common_channels[CC_id],
|
||||
sched_frame, sched_subframe);
|
||||
if (UE_info->UE_sched_ctrl[UE_id].round_UL[CC_id][harq_pid] > 0) {
|
||||
/* this UE has a retransmission, allocate it right away */
|
||||
@@ -845,11 +845,11 @@ int rr_ul_run(module_id_t Mod_id,
|
||||
}
|
||||
} else {
|
||||
LOG_W(MAC,
|
||||
"cannot allocate UL retransmission for UE %d (nb_rb %d)\n",
|
||||
UE_id,
|
||||
nb_rb);
|
||||
"%d.%d cannot allocate UL retransmission for UE %d (nb_rb %d, rbs0.length %d, rbs1.length %d,rbs0.start %d,rbs1.start %d)\n",
|
||||
sched_frame,sched_subframe,UE_id,
|
||||
nb_rb, rbs[0].length,rbs[1].length,rbs[0].start,rbs[1].start);
|
||||
UE_template->pre_dci_ul_pdu_idx = -1; // do not need CCE
|
||||
RC.mac[Mod_id]->HI_DCI0_req[CC_id][subframe].hi_dci0_request_body.number_of_dci--;
|
||||
mac->HI_DCI0_req[CC_id][subframe].hi_dci0_request_body.number_of_dci--;
|
||||
continue;
|
||||
}
|
||||
LOG_D(MAC, "%4d.%d UE %d retx %d RBs at start %d\n",
|
||||
@@ -895,10 +895,9 @@ int rr_ul_run(module_id_t Mod_id,
|
||||
&tx_power);
|
||||
|
||||
UE_template->pre_assigned_mcs_ul = mcs;
|
||||
/* rb_idx_given >= 22: apparently the PHY cannot support more than 48
|
||||
* RBs in the uplink. Hence, we limit every UE to 48 RBs, which is at
|
||||
* index 22 */
|
||||
rb_idx_required[UE_id] = min(22, rb_table_index);
|
||||
/* rb_idx_given >= MAX index: limit RBs to value in configuration file
|
||||
* RBs in the uplink. */
|
||||
rb_idx_required[UE_id] = min(mac->max_ul_rb_index, rb_table_index);
|
||||
//UE_template->pre_allocated_nb_rb_ul = rb_table[rb_table_index];
|
||||
/* only print log when PHR changed */
|
||||
static int phr = 0;
|
||||
|
||||
@@ -67,8 +67,10 @@ fill_rar(const module_id_t module_idP,
|
||||
rar[5] = (uint8_t) (ra->rnti & 0xff);
|
||||
//ra->timing_offset = 0;
|
||||
ra->timing_offset /= 16; //T_A = N_TA/16, where N_TA should be on a 30.72Msps
|
||||
rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4)); // 7 MSBs of timing advance + divide by 4
|
||||
rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0; // 4 LSBs of timing advance + divide by 4
|
||||
//rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4)); // 7 MSBs of timing advance + divide by 4
|
||||
//rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0; // 4 LSBs of timing advance + divide by 4
|
||||
rar[0] = (uint8_t) (ra->timing_offset >> (4)); // 7 MSBs of timing advance + divide by 4
|
||||
rar[1] = (uint8_t) (ra->timing_offset << (4)) & 0xf0; // 4 LSBs of timing advance + divide by 4
|
||||
COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id];
|
||||
|
||||
if(N_RB_UL == 25) {
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
// Definitions for MAC control and data
|
||||
#define NR_BCCH_DL_SCH 3 // SI
|
||||
#define NR_BCCH_BCH 5 // MIB
|
||||
#define CCCH_PAYLOAD_SIZE_MAX 128
|
||||
#define CCCH_PAYLOAD_SIZE_MAX 512
|
||||
#define RAR_PAYLOAD_SIZE_MAX 128
|
||||
#define MAX_BWP_SIZE 275
|
||||
|
||||
|
||||
@@ -1729,6 +1729,47 @@ uint8_t compute_nr_root_seq(NR_RACH_ConfigCommon_t *rach_config,
|
||||
}
|
||||
}
|
||||
|
||||
// TS 38.211 Table 7.4.1.1.2-3: PDSCH DMRS positions l' within a slot for single-symbol DMRS and intra-slot frequency hopping disabled.
|
||||
// The first 4 colomns are PDSCH mapping type A and the last 4 colomns are PDSCH mapping type B.
|
||||
// When l' = l0, it is represented by 1
|
||||
// E.g. when symbol duration is 12 in colomn 7, value 1057 ('10000100001') which means l' = l0, 5, 10.
|
||||
|
||||
int32_t table_7_4_1_1_2_3_pdsch_dmrs_positions_l [13][8] = { // Duration in symbols
|
||||
{-1, -1, -1, -1, 1, 1, 1, 1}, //2 // (DMRS l' position)
|
||||
{0, 0, 0, 0, 1, 1, 1, 1}, //3 // (DMRS l' position)
|
||||
{0, 0, 0, 0, 1, 1, 1, 1}, //4 // (DMRS l' position)
|
||||
{0, 0, 0, 0, 1, 17, 17, 17}, //5 // (DMRS l' position)
|
||||
{0, 0, 0, 0, 1, 17, 17, 17}, //6 // (DMRS l' position)
|
||||
{0, 0, 0, 0, 1, 17, 17, 17}, //7 // (DMRS l' position)
|
||||
{0, 128, 128, 128, 1, 65, 73, 73}, //8 // (DMRS l' position)
|
||||
{0, 128, 128, 128, 1, 129, 145, 145}, //9 // (DMRS l' position)
|
||||
{0, 512, 576, 576, 1, 129, 145, 145}, //10 // (DMRS l' position)
|
||||
{0, 512, 576, 576, 1, 257, 273, 585}, //11 // (DMRS l' position)
|
||||
{0, 512, 576, 2336, 1, 513, 545, 585}, //12 // (DMRS l' position)
|
||||
{0, 2048, 2176, 2336, 1, 513, 545, 585}, //13 // (DMRS l' position)
|
||||
{0, 2048, 2176, 2336, -1, -1, -1, -1}, //14 // (DMRS l' position)
|
||||
};
|
||||
|
||||
|
||||
// TS 38.211 Table 7.4.1.1.2-4: PDSCH DMRS positions l' within a slot for double-symbol DMRS and intra-slot frequency hopping disabled.
|
||||
// The first 4 colomns are PDSCH mapping type A and the last 4 colomns are PDSCH mapping type B.
|
||||
// When l' = l0, it is represented by 1
|
||||
|
||||
int32_t table_7_4_1_1_2_4_pdsch_dmrs_positions_l [12][8] = { // Duration in symbols
|
||||
{-1, -1, -1, -1, -1, -1, -1, -1}, //<4 // (DMRS l' position)
|
||||
{0, 0, -1, -1, -1, -1, -1, -1}, //4 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 3, -1, -1}, //5 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 3, -1, -1}, //6 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 3, -1, -1}, //7 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 99, -1, -1}, //8 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 99, -1, -1}, //9 // (DMRS l' position)
|
||||
{0, 768, -1, -1, 3, 387, -1, -1}, //10 // (DMRS l' position)
|
||||
{0, 768, -1, -1, 3, 387, -1, -1}, //11 // (DMRS l' position)
|
||||
{0, 768, -1, -1, 3, 771, -1, -1}, //12 // (DMRS l' position)
|
||||
{0, 3072, -1, -1, 3, 771, -1, -1}, //13 // (DMRS l' position)
|
||||
{0, 3072, -1, -1, -1, -1, -1, -1}, //14 // (DMRS l' position)
|
||||
};
|
||||
|
||||
// TS 38.211 Table 6.4.1.1.3-3: PUSCH DMRS positions l' within a slot for single-symbol DMRS and intra-slot frequency hopping disabled.
|
||||
// The first 4 colomns are PUSCH mapping type A and the last 4 colomns are PUSCH mapping type B.
|
||||
// When l' = l0, it is represented by 1
|
||||
@@ -1736,17 +1777,17 @@ uint8_t compute_nr_root_seq(NR_RACH_ConfigCommon_t *rach_config,
|
||||
|
||||
int32_t table_6_4_1_1_3_3_pusch_dmrs_positions_l [12][8] = { // Duration in symbols
|
||||
{-1, -1, -1, -1, 1, 1, 1, 1}, //<4 // (DMRS l' position)
|
||||
{1, 1, 1, 1, 1, 1, 1, 1}, //4 // (DMRS l' position)
|
||||
{1, 1, 1, 1, 1, 5, 5, 5}, //5 // (DMRS l' position)
|
||||
{1, 1, 1, 1, 1, 5, 5, 5}, //6 // (DMRS l' position)
|
||||
{1, 1, 1, 1, 1, 5, 5, 5}, //7 // (DMRS l' position)
|
||||
{1, 129, 129, 129, 1, 65, 73, 73}, //8 // (DMRS l' position)
|
||||
{1, 129, 129, 129, 1, 65, 73, 73}, //9 // (DMRS l' position)
|
||||
{1, 513, 577, 577, 1, 257, 273, 585}, //10 // (DMRS l' position)
|
||||
{1, 513, 577, 577, 1, 257, 273, 585}, //11 // (DMRS l' position)
|
||||
{1, 513, 577, 2337, 1, 1025, 1057, 585}, //12 // (DMRS l' position)
|
||||
{1, 2049, 2177, 2337, 1, 1025, 1057, 585}, //13 // (DMRS l' position)
|
||||
{1, 2049, 2177, 2337, 1, 1025, 1057, 585}, //14 // (DMRS l' position)
|
||||
{0, 0, 0, 0, 1, 1, 1, 1}, //4 // (DMRS l' position)
|
||||
{0, 0, 0, 0, 1, 17, 17, 17}, //5 // (DMRS l' position)
|
||||
{0, 0, 0, 0, 1, 17, 17, 17}, //6 // (DMRS l' position)
|
||||
{0, 0, 0, 0, 1, 17, 17, 17}, //7 // (DMRS l' position)
|
||||
{0, 128, 128, 128, 1, 65, 73, 73}, //8 // (DMRS l' position)
|
||||
{0, 128, 128, 128, 1, 65, 73, 73}, //9 // (DMRS l' position)
|
||||
{0, 512, 576, 576, 1, 257, 273, 585}, //10 // (DMRS l' position)
|
||||
{0, 512, 576, 576, 1, 257, 273, 585}, //11 // (DMRS l' position)
|
||||
{0, 512, 576, 2336, 1, 1025, 1057, 585}, //12 // (DMRS l' position)
|
||||
{0, 2048, 2176, 2336, 1, 1025, 1057, 585}, //13 // (DMRS l' position)
|
||||
{0, 2048, 2176, 2336, 1, 1025, 1057, 585}, //14 // (DMRS l' position)
|
||||
};
|
||||
|
||||
|
||||
@@ -1756,17 +1797,17 @@ int32_t table_6_4_1_1_3_3_pusch_dmrs_positions_l [12][8] = {
|
||||
|
||||
int32_t table_6_4_1_1_3_4_pusch_dmrs_positions_l [12][8] = { // Duration in symbols
|
||||
{-1, -1, -1, -1, -1, -1, -1, -1}, //<4 // (DMRS l' position)
|
||||
{1, 1, -1, -1, -1, -1, -1, -1}, //4 // (DMRS l' position)
|
||||
{1, 1, -1, -1, 1, 1, -1, -1}, //5 // (DMRS l' position)
|
||||
{1, 1, -1, -1, 1, 1, -1, -1}, //6 // (DMRS l' position)
|
||||
{1, 1, -1, -1, 1, 1, -1, -1}, //7 // (DMRS l' position)
|
||||
{1, 1, -1, -1, 1, 33, -1, -1}, //8 // (DMRS l' position)
|
||||
{1, 1, -1, -1, 1, 33, -1, -1}, //9 // (DMRS l' position)
|
||||
{1, 257, -1, -1, 1, 129, -1, -1}, //10 // (DMRS l' position)
|
||||
{1, 257, -1, -1, 1, 129, -1, -1}, //11 // (DMRS l' position)
|
||||
{1, 257, -1, -1, 1, 513, -1, -1}, //12 // (DMRS l' position)
|
||||
{1, 1025, -1, -1, 1, 513, -1, -1}, //13 // (DMRS l' position)
|
||||
{1, 1025, -1, -1, 1, 513, -1, -1}, //14 // (DMRS l' position)
|
||||
{0, 0, -1, -1, -1, -1, -1, -1}, //4 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 3, -1, -1}, //5 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 3, -1, -1}, //6 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 3, -1, -1}, //7 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 99, -1, -1}, //8 // (DMRS l' position)
|
||||
{0, 0, -1, -1, 3, 99, -1, -1}, //9 // (DMRS l' position)
|
||||
{0, 768, -1, -1, 3, 387, -1, -1}, //10 // (DMRS l' position)
|
||||
{0, 768, -1, -1, 3, 387, -1, -1}, //11 // (DMRS l' position)
|
||||
{0, 768, -1, -1, 3, 1539, -1, -1}, //12 // (DMRS l' position)
|
||||
{0, 3072, -1, -1, 3, 1539, -1, -1}, //13 // (DMRS l' position)
|
||||
{0, 3072, -1, -1, 3, 1539, -1, -1}, //14 // (DMRS l' position)
|
||||
};
|
||||
|
||||
// Returns the corresponding row index of the NR table
|
||||
@@ -2312,8 +2353,8 @@ int get_num_dmrs(uint16_t dmrs_mask ) {
|
||||
return(num_dmrs);
|
||||
}
|
||||
/* returns the total DMRS symbols in a slot*/
|
||||
uint8_t get_num_dmrs_symbols(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol){
|
||||
return get_num_dmrs(fill_dmrs_mask(pdsch_Config,dmrs_TypeA_Position,NrOfSymbols,startSymbol));
|
||||
uint8_t get_num_dmrs_symbols(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols, int startSymbol, int mappingtype){
|
||||
return get_num_dmrs(fill_dmrs_mask(pdsch_Config,dmrs_TypeA_Position,NrOfSymbols, startSymbol, mappingtype));
|
||||
}
|
||||
|
||||
// Table 5.1.2.2.1-1 38.214
|
||||
@@ -2377,29 +2418,46 @@ uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position) {
|
||||
|
||||
}
|
||||
|
||||
int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength) {
|
||||
int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength, uint8_t start_symbol, uint8_t dmrs_typeA_position) {
|
||||
|
||||
uint8_t row, colomn;
|
||||
int32_t l_prime;
|
||||
|
||||
LOG_D(MAC, "PUSCH: NrofSymbols:%d, startSymbol:%d, mappingtype:%d, dmrs_TypeA_Position:%d\n", duration_in_symbols, start_symbol, mapping_type, dmrs_typeA_position);
|
||||
|
||||
// Section 6.4.1.1.3 in Spec 38.211
|
||||
// For PDSCH Mapping TypeA, ld is duration between first OFDM of the slot and last OFDM symbol of the scheduled PUSCH resources
|
||||
// For TypeB, ld is the duration of the scheduled PUSCH resources
|
||||
uint8_t ld = (mapping_type == typeA) ? (duration_in_symbols + start_symbol) : duration_in_symbols;
|
||||
uint8_t l0 = (dmrs_typeA_position == NR_MIB__dmrs_TypeA_Position_pos2) ? 2 : 3 ;
|
||||
|
||||
colomn = additional_pos;
|
||||
|
||||
if (mapping_type == typeB)
|
||||
colomn += 4;
|
||||
|
||||
if (duration_in_symbols < 4)
|
||||
if (ld < 4)
|
||||
row = 0;
|
||||
else
|
||||
row = duration_in_symbols - 3;
|
||||
row = ld - 3;
|
||||
|
||||
if (pusch_maxLength == pusch_len1)
|
||||
if (pusch_maxLength == pusch_len1) {
|
||||
l_prime = table_6_4_1_1_3_3_pusch_dmrs_positions_l[row][colomn];
|
||||
else
|
||||
l0 = 1 << l0;
|
||||
}
|
||||
else {
|
||||
l_prime = table_6_4_1_1_3_4_pusch_dmrs_positions_l[row][colomn];
|
||||
l0 = 1<<l0 | 1<<(l0+1);
|
||||
}
|
||||
|
||||
AssertFatal(l_prime>0,"invalid l_prime < 0\n");
|
||||
LOG_D(MAC, "PUSCH - l0:%d, ld:%d,row:%d, column:%d, addpos:%d, maxlen:%d\n", l0, ld, row, colomn, additional_pos, pusch_maxLength);
|
||||
AssertFatal(l_prime>=0,"invalid l_prime < 0\n");
|
||||
|
||||
l_prime = (mapping_type == typeA) ? (l_prime | l0) : (l_prime << start_symbol);
|
||||
LOG_D(MAC, " PUSCH DMRS MASK in HEX:%x\n", l_prime);
|
||||
|
||||
return l_prime;
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
@@ -2952,92 +3010,90 @@ int is_nr_UL_slot(NR_ServingCellConfigCommon_t *scc, slot_t slot, lte_frame_type
|
||||
else return(slot_in_period >= slots1+scc->tdd_UL_DL_ConfigurationCommon->pattern2->nrofDownlinkSlots ? 1 : 0);
|
||||
}
|
||||
|
||||
int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol) {
|
||||
int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols, int startSymbol, int mappingtype_fromDCI) {
|
||||
|
||||
int l0;int dmrs_AdditionalPosition = 0;int maxLength = 0;
|
||||
NR_DMRS_DownlinkConfig_t *dmrs_config = NULL;
|
||||
|
||||
LOG_D(MAC, "NrofSymbols:%d, startSymbol:%d, mappingtype:%d, dmrs_TypeA_Position:%d\n", NrOfSymbols, startSymbol, mappingtype_fromDCI, dmrs_TypeA_Position);
|
||||
|
||||
int l0;
|
||||
int ld = NrOfSymbols+startSymbol;
|
||||
if (dmrs_TypeA_Position == NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos2) l0=2;
|
||||
else if (dmrs_TypeA_Position == NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos3) l0=3;
|
||||
else AssertFatal(1==0,"Illegal dmrs_TypeA_Position %d\n",(int)dmrs_TypeA_Position);
|
||||
if (pdsch_Config == NULL) { // Initial BWP
|
||||
if (ld <= 7) return(1<<l0);
|
||||
else if (ld <= 9) return(1<<l0 | 1<<7);
|
||||
else if (ld <= 12) return(1<<l0 | 1<<6 | 1<<9);
|
||||
else if (ld <= 14) return(1<<l0 | 1<<7 | 1<<11);
|
||||
|
||||
// in case of DCI FORMAT 1_0 or dedicated pdsch config not received additionposition = pos2, len1 should be used
|
||||
// referred to section 5.1.6.2 in 38.214
|
||||
dmrs_AdditionalPosition = 2;
|
||||
maxLength = 1;
|
||||
|
||||
if (pdsch_Config != NULL) {
|
||||
if (mappingtype_fromDCI == typeA) { // Type A
|
||||
if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA && pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->present == NR_SetupRelease_DMRS_DownlinkConfig_PR_setup)
|
||||
dmrs_config = (NR_DMRS_DownlinkConfig_t *)pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
||||
} else if (mappingtype_fromDCI == typeB) {
|
||||
if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB && pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->present == NR_SetupRelease_DMRS_DownlinkConfig_PR_setup)
|
||||
dmrs_config = (NR_DMRS_DownlinkConfig_t *)pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
|
||||
} else {
|
||||
AssertFatal(1==0,"Incorrect Mappingtype\n");
|
||||
}
|
||||
|
||||
AssertFatal(dmrs_config != NULL," DMRS configs not present in PDSCH DMRS Downlink config\n");
|
||||
|
||||
// default values of maxlength = len2, additionalposition is pos2
|
||||
if (dmrs_config->maxLength != NULL) maxLength = 2;
|
||||
if (dmrs_config->dmrs_AdditionalPosition != NULL) dmrs_AdditionalPosition = *dmrs_config->dmrs_AdditionalPosition;
|
||||
}
|
||||
|
||||
uint8_t ld, row, column;
|
||||
int32_t l_prime = -1;
|
||||
|
||||
// columns 0-3 for TypeA, 4-7 for TypeB
|
||||
column = (mappingtype_fromDCI == typeA) ? dmrs_AdditionalPosition : (dmrs_AdditionalPosition + 4);
|
||||
|
||||
// Section 7.4.1.1.2 in Spec 38.211
|
||||
// For PDSCH Mapping TypeA, ld is duration between first OFDM of the slot and last OFDM symbol of the scheduled PDSCH resources
|
||||
// For TypeB, ld is the duration of the scheduled PDSCH resources
|
||||
ld = (mappingtype_fromDCI == typeA) ? (NrOfSymbols + startSymbol) : NrOfSymbols;
|
||||
|
||||
// Section 7.4.1.1.2 in Spec 38.211
|
||||
//For PDSCH Mapping typeB, if PDSCH duration ld <=4, only single symbol DMRS is supported
|
||||
if (mappingtype_fromDCI == typeB && ld <= 4)
|
||||
maxLength = 1;
|
||||
|
||||
AssertFatal(ld > 2 && ld < 15,"Illegal NrOfSymbols according to Table 5.1.2.1-1 Spec 38.214 %d\n",ld);
|
||||
AssertFatal((NrOfSymbols + startSymbol) < 15,"Illegal S+L according to Table 5.1.2.1-1 Spec 38.214 S:%d L:%d\n",startSymbol, NrOfSymbols);
|
||||
|
||||
if (mappingtype_fromDCI == typeA) {
|
||||
|
||||
// Section 7.4.1.1.2 in Spec 38.211
|
||||
AssertFatal((l0 == 2) || (l0 == 3 && dmrs_AdditionalPosition != 3),"Wrong config, If dmrs_TypeA_Position POS3, ADD POS cannot be POS3 \n");
|
||||
|
||||
// Table 5.1.2.1-1 in Spec 38.214
|
||||
AssertFatal(startSymbol <= l0, "Wrong config, Start symbol %d cannot be later than dmrs_TypeA_Position %d \n", startSymbol, l0);
|
||||
|
||||
// Section 7.4.1.1.2 in Spec 38.211
|
||||
AssertFatal(l0 == 2 || (l0 == 3 && (ld != 3 || ld != 4)), "ld 3 or 4 symbols only possible with dmrs_TypeA_Position POS2 \n");
|
||||
|
||||
}
|
||||
|
||||
if (maxLength == 1) {
|
||||
row = ld - 2;
|
||||
l_prime = table_7_4_1_1_2_3_pdsch_dmrs_positions_l[row][column];
|
||||
l0 = 1 << l0;
|
||||
}
|
||||
else {
|
||||
if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA &&
|
||||
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->present == NR_SetupRelease_DMRS_DownlinkConfig_PR_setup) {
|
||||
// Relative to start of slot
|
||||
NR_DMRS_DownlinkConfig_t *dmrs_config = (NR_DMRS_DownlinkConfig_t *)pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
||||
AssertFatal(ld>1 && ld < 15,"Illegal l_d %d\n",ld);
|
||||
int pos2=0;
|
||||
if (dmrs_config->maxLength == NULL) {
|
||||
// this is Table 7.4.1.1.2-3: PDSCH DM-RS positions l for single-symbol DM-RS
|
||||
if (dmrs_config->dmrs_AdditionalPosition == NULL) pos2=1;
|
||||
else if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition == NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0 )
|
||||
return(1<<l0);
|
||||
|
||||
|
||||
switch (ld) {
|
||||
case 2 :
|
||||
case 3 :
|
||||
case 4 :
|
||||
case 5 :
|
||||
case 6 :
|
||||
case 7 :
|
||||
return(1<<l0);
|
||||
break;
|
||||
case 8 :
|
||||
case 9:
|
||||
return(1<<l0 | 1<<7);
|
||||
break;
|
||||
case 10:
|
||||
case 11:
|
||||
if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1)
|
||||
return(1<<l0 | 1<<9);
|
||||
else
|
||||
return(1<<l0 | 1<<6 | 1<<9);
|
||||
break;
|
||||
case 12:
|
||||
if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1)
|
||||
return(1<<l0 | 1<<9);
|
||||
else if (pos2==1)
|
||||
return(1<<l0 | 1<<6 | 1<<9);
|
||||
else if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos3)
|
||||
return(1<<l0 | 1<<5 | 1<<8 | 1<<11);
|
||||
break;
|
||||
case 13:
|
||||
case 14:
|
||||
if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1)
|
||||
return(1<<l0 | 1<<11);
|
||||
else if (pos2==1)
|
||||
return(1<<l0 | 1<<7 | 1<<11);
|
||||
else if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos3)
|
||||
return(1<<l0 | 1<<5 | 1<<8 | 1<<11);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Table 7.4.1.1.2-4: PDSCH DM-RS positions l for double-symbol DM-RS.
|
||||
AssertFatal(ld>3,"Illegal l_d %d for len2 DMRS\n",ld);
|
||||
if (ld < 10) return(1<<l0);
|
||||
if (ld < 13 && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0) return(1<<l0);
|
||||
if (ld < 13 && *dmrs_config->dmrs_AdditionalPosition!=NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0) return(1<<l0 | 1<<8);
|
||||
if (*dmrs_config->dmrs_AdditionalPosition!=NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0) return(1<<l0);
|
||||
if (*dmrs_config->dmrs_AdditionalPosition!=NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1) return(1<<l0 | 1<<10);
|
||||
if (*dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0) return(1<<l0);
|
||||
if (*dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1) return(1<<l0 | 1<<10);
|
||||
}
|
||||
}
|
||||
else if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB &&
|
||||
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->present == NR_SetupRelease_DMRS_DownlinkConfig_PR_setup) {
|
||||
// Relative to start of PDSCH resource
|
||||
AssertFatal(1==0,"TypeB DMRS not supported yet\n");
|
||||
}
|
||||
row = (ld < 4) ? 0 : (ld - 3);
|
||||
l_prime = table_7_4_1_1_2_4_pdsch_dmrs_positions_l[row][column];
|
||||
l0 = 1<<l0 | 1<<(l0+1);
|
||||
}
|
||||
AssertFatal(1==0,"Shouldn't get here\n");
|
||||
return(-1);
|
||||
|
||||
LOG_D(MAC, "l0:%d, ld:%d,row:%d, column:%d, addpos:%d, maxlen:%d\n", l0, ld, row, column, dmrs_AdditionalPosition, maxLength);
|
||||
AssertFatal(l_prime>=0,"ERROR in configuration.Check Time Domain allocation of this Grant. l_prime < 1. row:%d, column:%d\n", row, column);
|
||||
|
||||
l_prime = (mappingtype_fromDCI == typeA) ? (l_prime | l0) : (l_prime << startSymbol);
|
||||
LOG_D(MAC, " PDSCH DMRS MASK in HEX:%x\n", l_prime);
|
||||
|
||||
return l_prime;
|
||||
}
|
||||
|
||||
uint8_t get_pusch_mcs_table(long *mcs_Table,
|
||||
|
||||
@@ -47,7 +47,7 @@ uint64_t from_nrarfcn(int nr_bandP, uint8_t scs_index, uint32_t dl_nrarfcn);
|
||||
|
||||
uint32_t to_nrarfcn(int nr_bandP, uint64_t dl_CarrierFreq, uint8_t scs_index, uint32_t bw);
|
||||
|
||||
int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol);
|
||||
int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol,int mappingtype_fromDCI);
|
||||
|
||||
int is_nr_DL_slot(NR_ServingCellConfigCommon_t *scc,slot_t slotP);
|
||||
|
||||
@@ -121,7 +121,7 @@ uint16_t get_NCS(uint8_t index, uint16_t format, uint8_t restricted_set_config);
|
||||
|
||||
int get_num_dmrs(uint16_t dmrs_mask );
|
||||
uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position);
|
||||
int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength);
|
||||
int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength, uint8_t start_symbolt, uint8_t dmrs_typeA_position);
|
||||
|
||||
uint8_t get_L_ptrs(uint8_t mcs1, uint8_t mcs2, uint8_t mcs3, uint8_t I_mcs, uint8_t mcs_table);
|
||||
uint8_t get_K_ptrs(uint16_t nrb0, uint16_t nrb1, uint16_t N_RB);
|
||||
@@ -153,7 +153,7 @@ bool set_ul_ptrs_values(NR_PTRS_UplinkConfig_t *ul_ptrs_config,
|
||||
uint8_t *reOffset, uint8_t *maxNumPorts, uint8_t *ulPower,
|
||||
uint8_t NrOfSymbols);
|
||||
|
||||
uint8_t get_num_dmrs_symbols(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol);
|
||||
uint8_t get_num_dmrs_symbols(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol,int mappingtype);
|
||||
|
||||
/* \brief Set the transform precoding according to 6.1.3 of 3GPP TS 38.214 version 16.3.0 Release 16
|
||||
@param *pusch_config, pointer to pusch config
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
#include "NR_MAC_COMMON/nr_mac.h"
|
||||
#include "LAYER2/NR_MAC_UE/mac_proto.h"
|
||||
|
||||
#include <executables/softmodem-common.h>
|
||||
|
||||
void nr_get_RA_window(NR_UE_MAC_INST_t *mac);
|
||||
|
||||
// Random Access procedure initialization as per 5.1.1 and initialization of variables specific
|
||||
|
||||
@@ -643,12 +643,26 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
LOG_W(MAC, "[%d.%d] Invalid time_domain_assignment. Possibly due to false DCI. Ignoring DCI!\n", frame, slot);
|
||||
return -1;
|
||||
}
|
||||
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = NULL;
|
||||
if (mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList)
|
||||
pdsch_TimeDomainAllocationList = mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList->choice.setup;
|
||||
else if (mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList)
|
||||
pdsch_TimeDomainAllocationList = mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
|
||||
int mappingtype = pdsch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType;
|
||||
|
||||
/* dmrs symbol positions*/
|
||||
dlsch_config_pdu_1_0->dlDmrsSymbPos = fill_dmrs_mask(pdsch_config,
|
||||
dlsch_config_pdu_1_0->dlDmrsSymbPos = fill_dmrs_mask(NULL,
|
||||
mac->scc->dmrs_TypeA_Position,
|
||||
dlsch_config_pdu_1_0->number_symbols,
|
||||
dlsch_config_pdu_1_0->start_symbol);
|
||||
dlsch_config_pdu_1_0->dmrsConfigType = (pdsch_config) ? (pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type == NULL ? NFAPI_NR_DMRS_TYPE1 : NFAPI_NR_DMRS_TYPE2) : NFAPI_NR_DMRS_TYPE1;
|
||||
dlsch_config_pdu_1_0->start_symbol,
|
||||
mappingtype);
|
||||
|
||||
// For DCI 1_0, dmrs type is type1. referred to section 5.1.6.2 of 3GPP TS 38.214
|
||||
dlsch_config_pdu_1_0->dmrsConfigType = 0;
|
||||
LOG_D(MAC, "DCI 1_0 start_sym:%d NR Symb:%d, DMRS_symb_pos:%x\n", dlsch_config_pdu_1_0->start_symbol, dlsch_config_pdu_1_0->number_symbols, dlsch_config_pdu_1_0->dlDmrsSymbPos);
|
||||
|
||||
/* number of DM-RS CDM groups without data according to subclause 5.1.6.2 of 3GPP TS 38.214 version 15.9.0 Release 15 */
|
||||
if (dlsch_config_pdu_1_0->number_symbols == 2)
|
||||
dlsch_config_pdu_1_0->n_dmrs_cdm_groups = 1;
|
||||
@@ -786,10 +800,6 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
dl_config->dl_config_list[dl_config->number_pdus].pdu_type = FAPI_NR_DL_CONFIG_TYPE_DLSCH;
|
||||
dl_config->dl_config_list[dl_config->number_pdus].dlsch_config_pdu.rnti = rnti;
|
||||
|
||||
// FIXME: fix number of additional dmrs
|
||||
if(pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition == NULL)
|
||||
pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition=calloc(1,sizeof(*pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition));
|
||||
|
||||
fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu_1_1 = &dl_config->dl_config_list[dl_config->number_pdus].dlsch_config_pdu.dlsch_config_rel15;
|
||||
|
||||
dlsch_config_pdu_1_1->BWPSize = NRRIV2BW(mac->DLbwp[0]->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||
@@ -810,11 +820,21 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
LOG_W(MAC, "[%d.%d] Invalid time_domain_assignment. Possibly due to false DCI. Ignoring DCI!\n", frame, slot);
|
||||
return -1;
|
||||
}
|
||||
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = NULL;
|
||||
if (mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList)
|
||||
pdsch_TimeDomainAllocationList = mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList->choice.setup;
|
||||
else if (mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList)
|
||||
pdsch_TimeDomainAllocationList = mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
|
||||
int mappingtype = pdsch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType;
|
||||
|
||||
/* dmrs symbol positions*/
|
||||
dlsch_config_pdu_1_1->dlDmrsSymbPos = fill_dmrs_mask(pdsch_config,
|
||||
mac->scc->dmrs_TypeA_Position,
|
||||
dlsch_config_pdu_1_1->number_symbols,
|
||||
dlsch_config_pdu_1_1->start_symbol);
|
||||
dlsch_config_pdu_1_1->start_symbol,
|
||||
mappingtype);
|
||||
dlsch_config_pdu_1_1->dmrsConfigType = mac->DLbwp[dl_bwp_id-1]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type == NULL ? NFAPI_NR_DMRS_TYPE1 : NFAPI_NR_DMRS_TYPE2;
|
||||
/* TODO: fix number of DM-RS CDM groups without data according to subclause 5.1.6.2 of 3GPP TS 38.214,
|
||||
using tables 7.3.1.2.2-1, 7.3.1.2.2-2, 7.3.1.2.2-3, 7.3.1.2.2-4 of 3GPP TS 38.212 */
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
#include "asn1_conversions.h"
|
||||
#include "SIMULATION/TOOLS/sim.h" // for taus
|
||||
|
||||
#include <executables/softmodem-common.h>
|
||||
|
||||
static prach_association_pattern_t prach_assoc_pattern;
|
||||
static ssb_list_info_t ssb_list;
|
||||
|
||||
@@ -490,7 +492,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
int NrOfSymbols;
|
||||
uint8_t nb_dmrs_re_per_rb;
|
||||
|
||||
uint16_t l_prime_mask = 1;
|
||||
uint16_t l_prime_mask = 0;
|
||||
uint16_t number_dmrs_symbols = 0;
|
||||
int N_PRB_oh = 0;
|
||||
|
||||
@@ -503,6 +505,9 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
pusch_config_pdu->nrOfLayers = 1;
|
||||
pusch_config_pdu->rnti = rnti;
|
||||
|
||||
pusch_dmrs_AdditionalPosition_t add_pos = pusch_dmrs_pos2;
|
||||
pusch_maxLength_t dmrslength = pusch_len1;
|
||||
|
||||
if (rar_grant) {
|
||||
|
||||
// Note: for Msg3 or MsgA PUSCH transmission the N_PRB_oh is always set to 0
|
||||
@@ -511,6 +516,8 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
NR_BWP_UplinkDedicated_t *ibwp = mac->scg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP;
|
||||
NR_PUSCH_Config_t *pusch_Config = ibwp->pusch_Config->choice.setup;
|
||||
int startSymbolAndLength = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[rar_grant->Msg3_t_alloc]->startSymbolAndLength;
|
||||
int mappingtype = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[rar_grant->Msg3_t_alloc]->mappingType;
|
||||
|
||||
|
||||
// active BWP start
|
||||
int abwp_start = NRRIV2PRBOFFSET(ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||
@@ -548,6 +555,9 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
pusch_config_pdu->start_symbol_index = StartSymbolIndex;
|
||||
pusch_config_pdu->nr_of_symbols = NrOfSymbols;
|
||||
|
||||
l_prime_mask = get_l_prime(NrOfSymbols, mappingtype, add_pos, dmrslength, StartSymbolIndex, scc->dmrs_TypeA_Position);
|
||||
LOG_D(MAC, "MSG3 start_sym:%d NR Symb:%d mappingtype:%d , DMRS_MASK:%x\n", pusch_config_pdu->start_symbol_index, pusch_config_pdu->nr_of_symbols, mappingtype, l_prime_mask);
|
||||
|
||||
#ifdef DEBUG_MSG3
|
||||
LOG_D(MAC, "In %s BWP assignment (BWP (start %d, size %d) \n", __FUNCTION__, pusch_config_pdu->bwp_start, pusch_config_pdu->bwp_size);
|
||||
#endif
|
||||
@@ -627,18 +637,26 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
|
||||
}
|
||||
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = NULL;
|
||||
if (pusch_Config->pusch_TimeDomainAllocationList) {
|
||||
pusch_TimeDomainAllocationList = pusch_Config->pusch_TimeDomainAllocationList->choice.setup;
|
||||
}
|
||||
else if (mac->ULbwp[0]->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList) {
|
||||
pusch_TimeDomainAllocationList = mac->ULbwp[0]->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
}
|
||||
|
||||
int mappingtype = pusch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType;
|
||||
|
||||
NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = NULL;
|
||||
NR_DMRS_ulconfig = (mappingtype == NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA)
|
||||
? pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup : pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
||||
|
||||
/* TRANSFORM PRECODING ------------------------------------------------------------------------------------------*/
|
||||
|
||||
if (pusch_config_pdu->transform_precoding == transform_precoder_enabled) {
|
||||
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
|
||||
|
||||
NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = NULL;
|
||||
if(pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL)
|
||||
NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup;
|
||||
else
|
||||
NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
||||
|
||||
uint32_t n_RS_Id = 0;
|
||||
if (NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity != NULL)
|
||||
n_RS_Id = *NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity;
|
||||
@@ -707,8 +725,13 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
pusch_config_pdu->absolute_delta_PUSCH = 4;
|
||||
}
|
||||
|
||||
if (NR_DMRS_ulconfig != NULL) {
|
||||
add_pos = (NR_DMRS_ulconfig->dmrs_AdditionalPosition == NULL) ? 2 : *NR_DMRS_ulconfig->dmrs_AdditionalPosition;
|
||||
dmrslength = NR_DMRS_ulconfig->maxLength == NULL ? pusch_len1 : pusch_len2;
|
||||
}
|
||||
|
||||
/* DMRS */
|
||||
l_prime_mask = get_l_prime(pusch_config_pdu->nr_of_symbols, typeB, pusch_dmrs_pos0, pusch_len1);
|
||||
l_prime_mask = get_l_prime(pusch_config_pdu->nr_of_symbols, mappingtype, add_pos, dmrslength, pusch_config_pdu->start_symbol_index, scc->dmrs_TypeA_Position);
|
||||
if (pusch_config_pdu->transform_precoding == transform_precoder_disabled)
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 1;
|
||||
|
||||
@@ -746,7 +769,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
pusch_config_pdu->nr_of_symbols,
|
||||
rnti_types[rnti_type]);
|
||||
|
||||
pusch_config_pdu->ul_dmrs_symb_pos = l_prime_mask << pusch_config_pdu->start_symbol_index;;
|
||||
pusch_config_pdu->ul_dmrs_symb_pos = l_prime_mask;
|
||||
pusch_config_pdu->target_code_rate = nr_get_code_rate_ul(pusch_config_pdu->mcs_index, pusch_config_pdu->mcs_table);
|
||||
pusch_config_pdu->qam_mod_order = nr_get_Qm_ul(pusch_config_pdu->mcs_index, pusch_config_pdu->mcs_table);
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "SIMULATION/TOOLS/sim.h" // for taus
|
||||
|
||||
#include <executables/softmodem-common.h>
|
||||
extern RAN_CONTEXT_t RC;
|
||||
extern const uint8_t nr_slots_per_frame[5];
|
||||
extern uint16_t sl_ahead;
|
||||
@@ -805,6 +806,7 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
|
||||
int startSymbolAndLength = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
|
||||
int start_symbol_index,nr_of_symbols;
|
||||
SLIV2SL(startSymbolAndLength, &start_symbol_index, &nr_of_symbols);
|
||||
int mappingtype = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->mappingType;
|
||||
|
||||
pusch_pdu->pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA;
|
||||
pusch_pdu->rnti = ra->rnti;
|
||||
@@ -830,7 +832,10 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
|
||||
pusch_pdu->transform_precoding = 0;
|
||||
pusch_pdu->data_scrambling_id = *scc->physCellId;
|
||||
pusch_pdu->nrOfLayers = 1;
|
||||
pusch_pdu->ul_dmrs_symb_pos = 1<<start_symbol_index; // ok for now but use fill dmrs mask later
|
||||
|
||||
pusch_pdu->ul_dmrs_symb_pos = get_l_prime(nr_of_symbols,mappingtype,pusch_dmrs_pos2,pusch_len1,start_symbol_index, scc->dmrs_TypeA_Position);
|
||||
LOG_D(MAC, "MSG3 start_sym:%d NR Symb:%d mappingtype:%d , ul_dmrs_symb_pos:%x\n", start_symbol_index, nr_of_symbols, mappingtype, pusch_pdu->ul_dmrs_symb_pos);
|
||||
|
||||
pusch_pdu->dmrs_config_type = 0;
|
||||
pusch_pdu->ul_dmrs_scrambling_id = *scc->physCellId; //If provided and the PUSCH is not a msg3 PUSCH, otherwise, L2 should set this to physical cell id.
|
||||
pusch_pdu->scid = 0; //DMRS sequence initialization [TS38.211, sec 6.4.1.1.1]. Should match what is sent in DCI 0_1, otherwise set to 0.
|
||||
@@ -945,6 +950,10 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
||||
SLIV2SL(startSymbolAndLength, &startSymbolIndex, &nrOfSymbols);
|
||||
AssertFatal(startSymbolIndex >= 0, "StartSymbolIndex is negative\n");
|
||||
|
||||
int mappingtype = ra->secondaryCellGroup->spCellConfig->spCellConfigDedicated->
|
||||
downlinkBWP_ToAddModList->list.array[ra->bwp_id-1]->bwp_Common->pdsch_ConfigCommon->choice.setup->
|
||||
pdsch_TimeDomainAllocationList->list.array[time_domain_assignment]->mappingType;
|
||||
|
||||
uint8_t numDmrsCdmGrpsNoData = 2;
|
||||
if (nrOfSymbols == 2) {
|
||||
numDmrsCdmGrpsNoData = 1;
|
||||
@@ -1030,7 +1039,8 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
||||
pdsch_pdu_rel15->dlDmrsSymbPos = fill_dmrs_mask(NULL,
|
||||
nr_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position,
|
||||
nrOfSymbols,
|
||||
startSymbolIndex);
|
||||
startSymbolIndex,
|
||||
mappingtype);
|
||||
|
||||
int x_Overhead = 0;
|
||||
uint8_t tb_scaling = 0;
|
||||
@@ -1187,10 +1197,15 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
||||
SLIV2SL(startSymbolAndLength, &startSymbolIndex, &nrOfSymbols);
|
||||
AssertFatal(startSymbolIndex >= 0, "StartSymbolIndex is negative\n");
|
||||
|
||||
int mappingtype = ra->secondaryCellGroup->spCellConfig->spCellConfigDedicated->
|
||||
downlinkBWP_ToAddModList->list.array[ra->bwp_id-1]->bwp_Common->pdsch_ConfigCommon->choice.setup->
|
||||
pdsch_TimeDomainAllocationList->list.array[time_domain_assignment]->mappingType;
|
||||
|
||||
uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL,
|
||||
nr_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position,
|
||||
nrOfSymbols,
|
||||
startSymbolIndex);
|
||||
startSymbolIndex,
|
||||
mappingtype);
|
||||
|
||||
uint16_t N_DMRS_SLOT = get_num_dmrs(dlDmrsSymbPos);
|
||||
|
||||
|
||||
@@ -357,6 +357,7 @@ void schedule_control_sib1(module_id_t module_id,
|
||||
|
||||
int startSymbolIndex = 0;
|
||||
int nrOfSymbols = 0;
|
||||
|
||||
if(gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position == 0) {
|
||||
startSymbolIndex = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[gNB_mac->sched_ctrlCommon->pdsch_semi_static.time_domain_allocation][1];
|
||||
nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[gNB_mac->sched_ctrlCommon->pdsch_semi_static.time_domain_allocation][2];
|
||||
@@ -365,6 +366,9 @@ void schedule_control_sib1(module_id_t module_id,
|
||||
nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[gNB_mac->sched_ctrlCommon->pdsch_semi_static.time_domain_allocation][2];
|
||||
}
|
||||
|
||||
// TODO: There are exceptions to this in table 5.1.2.1.1-4,5 (Default time domain allocation tables B, C)
|
||||
int mappingtype = (startSymbolIndex <= 3)? typeA: typeB;
|
||||
|
||||
if (nrOfSymbols == 2) {
|
||||
gNB_mac->sched_ctrlCommon->pdsch_semi_static.numDmrsCdmGrpsNoData = 1;
|
||||
} else {
|
||||
@@ -373,7 +377,7 @@ void schedule_control_sib1(module_id_t module_id,
|
||||
|
||||
// Calculate number of PRB_DMRS
|
||||
uint8_t N_PRB_DMRS = gNB_mac->sched_ctrlCommon->pdsch_semi_static.numDmrsCdmGrpsNoData * 6;
|
||||
uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, nrOfSymbols, startSymbolIndex);
|
||||
uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, nrOfSymbols, startSymbolIndex, mappingtype);
|
||||
uint16_t dmrs_length = get_num_dmrs(dlDmrsSymbPos);
|
||||
|
||||
int rbSize = 0;
|
||||
@@ -394,6 +398,7 @@ void schedule_control_sib1(module_id_t module_id,
|
||||
LOG_D(MAC,"nrOfSymbols = %i\n", nrOfSymbols);
|
||||
LOG_D(MAC, "rbSize = %i\n", gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize);
|
||||
LOG_D(MAC,"TBS = %i\n", TBS);
|
||||
LOG_D(MAC,"mappingtype = %d\n", mappingtype);
|
||||
|
||||
// Mark the corresponding RBs as used
|
||||
for (int rb = 0; rb < gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize; rb++) {
|
||||
@@ -406,7 +411,8 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
|
||||
NR_Type0_PDCCH_CSS_config_t *type0_PDCCH_CSS_config,
|
||||
uint32_t TBS,
|
||||
int StartSymbolIndex,
|
||||
int NrOfSymbols) {
|
||||
int NrOfSymbols,
|
||||
uint16_t dlDmrsSymbPos) {
|
||||
|
||||
gNB_MAC_INST *gNB_mac = RC.nrmac[Mod_idP];
|
||||
NR_COMMON_channels_t *cc = gNB_mac->common_channels;
|
||||
@@ -478,9 +484,7 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
|
||||
pdsch_pdu_rel15->mcsTable[0] = gNB_mac->sched_ctrlCommon->pdsch_semi_static.mcsTableIdx;
|
||||
pdsch_pdu_rel15->StartSymbolIndex = StartSymbolIndex;
|
||||
pdsch_pdu_rel15->NrOfSymbols = NrOfSymbols;
|
||||
|
||||
pdsch_pdu_rel15->dlDmrsSymbPos = fill_dmrs_mask(NULL, scc->dmrs_TypeA_Position, pdsch_pdu_rel15->NrOfSymbols, pdsch_pdu_rel15->StartSymbolIndex);
|
||||
|
||||
pdsch_pdu_rel15->dlDmrsSymbPos = dlDmrsSymbPos;
|
||||
LOG_D(MAC,"dlDmrsSymbPos = 0x%x\n", pdsch_pdu_rel15->dlDmrsSymbPos);
|
||||
|
||||
/* Fill PDCCH DL DCI PDU */
|
||||
@@ -605,9 +609,12 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
|
||||
nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[gNB_mac->sched_ctrlCommon->pdsch_semi_static.time_domain_allocation][2];
|
||||
}
|
||||
|
||||
// TODO: There are exceptions to this in table 5.1.2.1.1-4,5 (Default time domain allocation tables B, C)
|
||||
int mappingtype = (startSymbolIndex <= 3) ? typeA : typeB;
|
||||
|
||||
// Calculate number of PRB_DMRS
|
||||
uint8_t N_PRB_DMRS = gNB_mac->sched_ctrlCommon->pdsch_semi_static.numDmrsCdmGrpsNoData * 6;
|
||||
uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, nrOfSymbols, startSymbolIndex);
|
||||
uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, nrOfSymbols, startSymbolIndex, mappingtype);
|
||||
uint16_t dmrs_length = get_num_dmrs(dlDmrsSymbPos);
|
||||
|
||||
const uint32_t TBS = nr_compute_tbs(nr_get_Qm_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs, gNB_mac->sched_ctrlCommon->pdsch_semi_static.mcsTableIdx),
|
||||
@@ -615,7 +622,7 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
|
||||
gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize, nrOfSymbols, N_PRB_DMRS * dmrs_length,0 ,0 ,1 ) >> 3;
|
||||
|
||||
nfapi_nr_dl_tti_request_body_t *dl_req = &gNB_mac->DL_req[CC_id].dl_tti_request_body;
|
||||
nr_fill_nfapi_dl_sib1_pdu(module_idP, dl_req, type0_PDCCH_CSS_config, TBS, startSymbolIndex, nrOfSymbols);
|
||||
nr_fill_nfapi_dl_sib1_pdu(module_idP, dl_req, type0_PDCCH_CSS_config, TBS, startSymbolIndex, nrOfSymbols, dlDmrsSymbPos);
|
||||
|
||||
const int ntx_req = gNB_mac->TX_req[CC_id].Number_of_PDUs;
|
||||
nfapi_nr_pdu_t *tx_req = &gNB_mac->TX_req[CC_id].pdu_list[ntx_req];
|
||||
|
||||
@@ -146,15 +146,18 @@ void nr_schedule_css_dlsch_phytest(module_id_t module_idP,
|
||||
int startSymbolAndLength=0;
|
||||
int StartSymbolIndex=-1,NrOfSymbols=14;
|
||||
int StartSymbolIndex_tmp,NrOfSymbols_tmp;
|
||||
int mappingtype_tmp, mappingtype;
|
||||
|
||||
for (int i=0;
|
||||
i<scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.count;
|
||||
i++) {
|
||||
startSymbolAndLength = scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->startSymbolAndLength;
|
||||
SLIV2SL(startSymbolAndLength,&StartSymbolIndex_tmp,&NrOfSymbols_tmp);
|
||||
mappingtype_tmp = scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->mappingType;
|
||||
if (NrOfSymbols_tmp < NrOfSymbols) {
|
||||
NrOfSymbols = NrOfSymbols_tmp;
|
||||
StartSymbolIndex = StartSymbolIndex_tmp;
|
||||
mappingtype = mappingtype_tmp;
|
||||
// k0 = *scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->k0;
|
||||
// time_domain_assignment = i;
|
||||
}
|
||||
@@ -165,7 +168,8 @@ void nr_schedule_css_dlsch_phytest(module_id_t module_idP,
|
||||
pdsch_pdu_rel15->dlDmrsSymbPos = fill_dmrs_mask(NULL,
|
||||
scc->dmrs_TypeA_Position,
|
||||
NrOfSymbols,
|
||||
StartSymbolIndex);
|
||||
StartSymbolIndex,
|
||||
mappingtype);
|
||||
|
||||
/*
|
||||
AssertFatal(k0==0,"k0 is not zero for Initial DL BWP TimeDomain Alloc\n");
|
||||
|
||||
@@ -268,6 +268,7 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc,
|
||||
const struct NR_PDSCH_TimeDomainResourceAllocationList *tdaList =
|
||||
bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
AssertFatal(tda < tdaList->list.count, "time_domain_allocation %d>=%d\n", tda, tdaList->list.count);
|
||||
const int mapping_type = tdaList->list.array[tda]->mappingType;
|
||||
const int startSymbolAndLength = tdaList->list.array[tda]->startSymbolAndLength;
|
||||
SLIV2SL(startSymbolAndLength, &ps->startSymbolIndex, &ps->nrOfSymbols);
|
||||
|
||||
@@ -291,9 +292,9 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc,
|
||||
// if no data in dmrs cdm group is 2 both odd and even REs have no data
|
||||
ps->N_PRB_DMRS = num_dmrs_cdm_grps_no_data * (ps->dmrsConfigType == NFAPI_NR_DMRS_TYPE1 ? 6 : 4);
|
||||
ps->N_DMRS_SLOT =
|
||||
get_num_dmrs_symbols(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols, ps->startSymbolIndex);
|
||||
get_num_dmrs_symbols(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols, ps->startSymbolIndex, mapping_type);
|
||||
ps->dl_dmrs_symb_pos =
|
||||
fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols, ps->startSymbolIndex);
|
||||
fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols, ps->startSymbolIndex, mapping_type);
|
||||
}
|
||||
|
||||
void nr_set_pusch_semi_static(const NR_ServingCellConfigCommon_t *scc,
|
||||
@@ -354,11 +355,12 @@ void nr_set_pusch_semi_static(const NR_ServingCellConfigCommon_t *scc,
|
||||
: *ps->NR_DMRS_UplinkConfig->dmrs_AdditionalPosition);
|
||||
const pusch_maxLength_t pusch_maxLength =
|
||||
ps->NR_DMRS_UplinkConfig->maxLength == NULL ? 1 : 2;
|
||||
const uint16_t l_prime_mask = get_l_prime(ps->nrOfSymbols,
|
||||
ps->ul_dmrs_symb_pos = get_l_prime(ps->nrOfSymbols,
|
||||
ps->mapping_type,
|
||||
additional_pos,
|
||||
pusch_maxLength);
|
||||
ps->ul_dmrs_symb_pos = l_prime_mask << ps->startSymbolIndex;
|
||||
pusch_maxLength,
|
||||
ps->startSymbolIndex,
|
||||
scc->dmrs_TypeA_Position);
|
||||
uint8_t num_dmrs_symb = 0;
|
||||
for(int i = ps->startSymbolIndex; i < ps->startSymbolIndex + ps->nrOfSymbols; i++)
|
||||
num_dmrs_symb += (ps->ul_dmrs_symb_pos >> i) & 1;
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
#include "openair2/RRC/NAS/nas_config.h"
|
||||
#include "intertask_interface.h"
|
||||
#include "openair3/S1AP/s1ap_eNB.h"
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
# include "gtpv1u_eNB_task.h"
|
||||
# include "gtpv1u.h"
|
||||
@@ -136,6 +136,43 @@ notifiedFIFO_t pdcp_sdu_list;
|
||||
pdcp_enb_t pdcp_enb[MAX_NUM_CCs];
|
||||
|
||||
|
||||
extern volatile int oai_exit;
|
||||
|
||||
pthread_t pdcp_stats_thread_desc;
|
||||
|
||||
void *pdcp_stats_thread(void *param) {
|
||||
|
||||
FILE *fd;
|
||||
int old_byte_cnt[MAX_MOBILES_PER_ENB][NB_RB_MAX],old_byte_cnt_rx[MAX_MOBILES_PER_ENB][NB_RB_MAX];
|
||||
for (int i=0;i<MAX_MOBILES_PER_ENB;i++)
|
||||
for (int j=0;j<NB_RB_MAX;j++) {
|
||||
old_byte_cnt[i][j]=0;
|
||||
old_byte_cnt_rx[i][j]=0;
|
||||
}
|
||||
while (!oai_exit) {
|
||||
sleep(1);
|
||||
|
||||
fd=fopen("PDCP_stats.log","w+");
|
||||
AssertFatal(fd!=NULL,"Cannot open MAC_stats.log\n");
|
||||
int drb_id=3;
|
||||
for (int UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; UE_id++) {
|
||||
if (pdcp_enb[0].rnti[UE_id]>0) {
|
||||
fprintf(fd,"PDCP: CRNTI %x, DRB %d: tx_bytes %d, DL Throughput %e\n",
|
||||
pdcp_enb[0].rnti[UE_id],drb_id,
|
||||
Pdcp_stats_tx_bytes[0][UE_id][drb_id],
|
||||
(double)((Pdcp_stats_tx_bytes[0][UE_id][drb_id]-old_byte_cnt[UE_id][drb_id])<<3));
|
||||
fprintf(fd," rx_bytes %d, UL Throughput %e\n",
|
||||
Pdcp_stats_rx_bytes[0][UE_id][drb_id],
|
||||
(double)((Pdcp_stats_rx_bytes[0][UE_id][drb_id]-old_byte_cnt_rx[UE_id][drb_id])<<3));
|
||||
old_byte_cnt[UE_id][drb_id]=Pdcp_stats_tx_bytes[0][UE_id][drb_id];
|
||||
old_byte_cnt_rx[UE_id][drb_id]=Pdcp_stats_rx_bytes[0][UE_id][drb_id];
|
||||
}
|
||||
}
|
||||
fclose(fd);
|
||||
}
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
uint64_t get_pdcp_optmask(void) {
|
||||
return pdcp_params.optmask;
|
||||
}
|
||||
@@ -516,7 +553,7 @@ boolean_t pdcp_data_req(
|
||||
break;
|
||||
}
|
||||
|
||||
//LOG_I(PDCP,"ueid %d lcid %d tx seq num %d\n", pdcp_uid, rb_idP+rb_offset, current_sn);
|
||||
LOG_D(PDCP,"ueid %d lcid %d tx seq num %d\n", pdcp_uid, (int)(rb_idP+rb_offset), current_sn);
|
||||
Pdcp_stats_tx[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]++;
|
||||
Pdcp_stats_tx_tmp_w[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]++;
|
||||
Pdcp_stats_tx_bytes[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+=sdu_buffer_sizeP;
|
||||
@@ -2345,6 +2382,8 @@ uint64_t pdcp_module_init( uint64_t pdcp_optmask ) {
|
||||
LOG_E(PDCP, "ENB pdcp will not use tun interface\n");
|
||||
}
|
||||
|
||||
pthread_create(&pdcp_stats_thread_desc,NULL,pdcp_stats_thread,NULL);
|
||||
|
||||
return pdcp_params.optmask ;
|
||||
}
|
||||
|
||||
|
||||
@@ -502,6 +502,13 @@ error:
|
||||
return -1;
|
||||
}
|
||||
|
||||
boolean_t pdcp_data_ind(
|
||||
const protocol_ctxt_t *const ctxt_pP,
|
||||
const srb_flag_t srb_flagP,
|
||||
const MBMS_flag_t MBMS_flagP,
|
||||
const rb_id_t rb_id,
|
||||
const sdu_size_t sdu_buffer_size,
|
||||
mem_block_t *const sdu_buffer);
|
||||
|
||||
int proto_agent_pdcp_data_ind_process(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) {
|
||||
boolean_t result = 0;
|
||||
|
||||
@@ -19,6 +19,8 @@ extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind);
|
||||
extern uint16_t sf_ahead;
|
||||
extern UL_RCC_IND_t UL_RCC_INFO;
|
||||
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
uint16_t frame_cnt=0;
|
||||
void handle_rach(UL_IND_t *UL_info) {
|
||||
int i;
|
||||
@@ -685,7 +687,7 @@ static void dump_dl(Sched_Rsp_t *d) {
|
||||
/* debug utility functions end */
|
||||
/****************************************************************************/
|
||||
|
||||
void UL_indication(UL_IND_t *UL_info, L1_rxtx_proc_t *proc) {
|
||||
void UL_indication(UL_IND_t *UL_info, void *proc) {
|
||||
AssertFatal(UL_info!=NULL,"UL_INFO is null\n");
|
||||
#ifdef DUMP_FAPI
|
||||
dump_ul(UL_info);
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#include <sched.h>
|
||||
//#include "openair1/PHY/LTE_TRANSPORT/transport_eNB.h"
|
||||
#include "nfapi_interface.h"
|
||||
#include "platform_constants.h"
|
||||
#include "platform_types.h"
|
||||
#include <common/utils/threadPool/thread-pool.h>
|
||||
|
||||
@@ -135,64 +134,13 @@ typedef struct {
|
||||
uint8_t Mod_id;
|
||||
int CC_id;
|
||||
nfapi_config_request_t *cfg;
|
||||
}PHY_Config_t;
|
||||
} PHY_Config_t;
|
||||
#include <targets/ARCH/COMMON/common_lib.h>
|
||||
/// Context data structure for RX/TX portion of subframe processing
|
||||
typedef struct {
|
||||
/// Component Carrier index
|
||||
uint8_t CC_id;
|
||||
/// timestamp transmitted to HW
|
||||
openair0_timestamp timestamp_tx;
|
||||
openair0_timestamp timestamp_rx;
|
||||
/// subframe to act upon for transmission
|
||||
int subframe_tx;
|
||||
/// subframe to act upon for reception
|
||||
int subframe_rx;
|
||||
/// frame to act upon for transmission
|
||||
int frame_tx;
|
||||
/// frame to act upon for reception
|
||||
int frame_rx;
|
||||
int frame_prach;
|
||||
int subframe_prach;
|
||||
int frame_prach_br;
|
||||
int subframe_prach_br;
|
||||
/// \brief Instance count for RXn-TXnp4 processing thread.
|
||||
/// \internal This variable is protected by \ref mutex_rxtx.
|
||||
int instance_cnt;
|
||||
/// pthread structure for RXn-TXnp4 processing thread
|
||||
pthread_t pthread;
|
||||
/// pthread attributes for RXn-TXnp4 processing thread
|
||||
pthread_attr_t attr;
|
||||
/// condition variable for tx processing thread
|
||||
pthread_cond_t cond;
|
||||
/// mutex for RXn-TXnp4 processing thread
|
||||
pthread_mutex_t mutex;
|
||||
/// scheduling parameters for RXn-TXnp4 thread
|
||||
struct sched_param sched_param_rxtx;
|
||||
|
||||
/// \internal This variable is protected by \ref mutex_RUs.
|
||||
int instance_cnt_RUs;
|
||||
/// condition variable for tx processing thread
|
||||
pthread_cond_t cond_RUs;
|
||||
/// mutex for RXn-TXnp4 processing thread
|
||||
pthread_mutex_t mutex_RUs;
|
||||
tpool_t *threadPool;
|
||||
int nbEncode;
|
||||
int nbDecode;
|
||||
notifiedFIFO_t *respEncode;
|
||||
notifiedFIFO_t *respDecode;
|
||||
pthread_mutex_t mutex_emulateRF;
|
||||
int instance_cnt_emulateRF;
|
||||
pthread_t pthread_emulateRF;
|
||||
pthread_attr_t attr_emulateRF;
|
||||
pthread_cond_t cond_emulateRF;
|
||||
int first_rx;
|
||||
} L1_rxtx_proc_t;
|
||||
|
||||
typedef struct IF_Module_s{
|
||||
//define the function pointer
|
||||
void (*UL_indication)(UL_IND_t *UL_INFO, L1_rxtx_proc_t *proc);
|
||||
void (*schedule_response)(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc);
|
||||
void (*UL_indication)(UL_IND_t *UL_INFO, void *proc);
|
||||
void (*schedule_response)(Sched_Rsp_t *Sched_INFO, void *proc);
|
||||
void (*PHY_config_req)(PHY_Config_t* config_INFO);
|
||||
|
||||
void (*PHY_config_update_sib2_req)(PHY_Config_t* config_INFO);
|
||||
@@ -209,7 +157,7 @@ void IF_Module_kill(int Mod_id);
|
||||
|
||||
/*Interface for uplink, transmitting the Preamble(list), ULSCH SDU, NAK, Tick (trigger scheduler)
|
||||
*/
|
||||
void UL_indication(UL_IND_t *UL_INFO, L1_rxtx_proc_t *proc);
|
||||
void UL_indication(UL_IND_t *UL_INFO, void *proc);
|
||||
|
||||
/*Interface for Downlink, transmitting the DLSCH SDU, DCI SDU*/
|
||||
void Schedule_Response(Sched_Rsp_t *Sched_INFO);
|
||||
|
||||
@@ -2728,7 +2728,7 @@ do_RRCConnectionSetup(
|
||||
// assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax,
|
||||
//SchedulingRequestConfig__setup__dsr_TransMax_n4);
|
||||
// assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4;
|
||||
physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = LTE_SchedulingRequestConfig__setup__dsr_TransMax_n4;
|
||||
physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = LTE_SchedulingRequestConfig__setup__dsr_TransMax_n64;
|
||||
rrcConnectionSetup->rrc_TransactionIdentifier = Transaction_id;
|
||||
rrcConnectionSetup->criticalExtensions.present = LTE_RRCConnectionSetup__criticalExtensions_PR_c1;
|
||||
rrcConnectionSetup->criticalExtensions.choice.c1.present = LTE_RRCConnectionSetup__criticalExtensions__c1_PR_rrcConnectionSetup_r8 ;
|
||||
@@ -3220,56 +3220,58 @@ uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
||||
dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list.count=0;
|
||||
ASN_SEQUENCE_ADD(&dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list,
|
||||
&rat);
|
||||
|
||||
/* request NR configuration */
|
||||
LTE_UECapabilityEnquiry_r8_IEs_t *r8 = &dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8;
|
||||
LTE_UECapabilityEnquiry_v8a0_IEs_t r8_a0;
|
||||
LTE_UECapabilityEnquiry_v1180_IEs_t r11_80;
|
||||
LTE_UECapabilityEnquiry_v1310_IEs_t r13_10;
|
||||
LTE_UECapabilityEnquiry_v1430_IEs_t r14_30;
|
||||
LTE_UECapabilityEnquiry_v1510_IEs_t r15_10;
|
||||
|
||||
memset(&r8_a0, 0, sizeof(r8_a0));
|
||||
memset(&r11_80, 0, sizeof(r11_80));
|
||||
memset(&r13_10, 0, sizeof(r13_10));
|
||||
memset(&r14_30, 0, sizeof(r14_30));
|
||||
memset(&r15_10, 0, sizeof(r15_10));
|
||||
|
||||
r8->nonCriticalExtension = &r8_a0;
|
||||
r8_a0.nonCriticalExtension = &r11_80;
|
||||
r11_80.nonCriticalExtension = &r13_10;
|
||||
r13_10.nonCriticalExtension = &r14_30;
|
||||
r14_30.nonCriticalExtension = &r15_10;
|
||||
|
||||
/* TODO: no hardcoded values here */
|
||||
|
||||
nsa_band_list = (NR_FreqBandList_t *)calloc(1, sizeof(NR_FreqBandList_t));
|
||||
|
||||
nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
|
||||
nsa_band->present = NR_FreqBandInformation_PR_bandInformationEUTRA;
|
||||
nsa_band->choice.bandInformationEUTRA = (NR_FreqBandInformationEUTRA_t *) calloc(1, sizeof(NR_FreqBandInformationEUTRA_t));
|
||||
nsa_band->choice.bandInformationEUTRA->bandEUTRA = eutra_band;
|
||||
ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
|
||||
|
||||
nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
|
||||
nsa_band->present = NR_FreqBandInformation_PR_bandInformationNR;
|
||||
nsa_band->choice.bandInformationNR = (NR_FreqBandInformationNR_t *) calloc(1, sizeof(NR_FreqBandInformationNR_t));
|
||||
if(nr_band > 0)
|
||||
nsa_band->choice.bandInformationNR->bandNR = nr_band;
|
||||
else
|
||||
nsa_band->choice.bandInformationNR->bandNR = 78;
|
||||
ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
|
||||
|
||||
OCTET_STRING_t req_freq;
|
||||
//unsigned char req_freq_buf[5] = { 0x00, 0x20, 0x1a, 0x02, 0x68 }; // bands 7 & nr78
|
||||
unsigned char req_freq_buf[1024];
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_FreqBandList,
|
||||
NULL,
|
||||
(void *)nsa_band_list,
|
||||
req_freq_buf,
|
||||
1024);
|
||||
|
||||
xer_fprint(stdout, &asn_DEF_NR_FreqBandList, (void *)nsa_band_list);
|
||||
if (nr_band>0) {
|
||||
|
||||
/* request NR configuration */
|
||||
|
||||
memset(&r8_a0, 0, sizeof(r8_a0));
|
||||
memset(&r11_80, 0, sizeof(r11_80));
|
||||
memset(&r13_10, 0, sizeof(r13_10));
|
||||
memset(&r14_30, 0, sizeof(r14_30));
|
||||
memset(&r15_10, 0, sizeof(r15_10));
|
||||
|
||||
r8->nonCriticalExtension = &r8_a0;
|
||||
r8_a0.nonCriticalExtension = &r11_80;
|
||||
r11_80.nonCriticalExtension = &r13_10;
|
||||
r13_10.nonCriticalExtension = &r14_30;
|
||||
r14_30.nonCriticalExtension = &r15_10;
|
||||
|
||||
/* TODO: no hardcoded values here */
|
||||
|
||||
nsa_band_list = (NR_FreqBandList_t *)calloc(1, sizeof(NR_FreqBandList_t));
|
||||
|
||||
nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
|
||||
nsa_band->present = NR_FreqBandInformation_PR_bandInformationEUTRA;
|
||||
nsa_band->choice.bandInformationEUTRA = (NR_FreqBandInformationEUTRA_t *) calloc(1, sizeof(NR_FreqBandInformationEUTRA_t));
|
||||
nsa_band->choice.bandInformationEUTRA->bandEUTRA = eutra_band;
|
||||
ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
|
||||
|
||||
nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
|
||||
nsa_band->present = NR_FreqBandInformation_PR_bandInformationNR;
|
||||
nsa_band->choice.bandInformationNR = (NR_FreqBandInformationNR_t *) calloc(1, sizeof(NR_FreqBandInformationNR_t));
|
||||
//if(nr_band > 0)
|
||||
nsa_band->choice.bandInformationNR->bandNR = nr_band;
|
||||
//else
|
||||
// nsa_band->choice.bandInformationNR->bandNR = 78;
|
||||
ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
|
||||
|
||||
//unsigned char req_freq_buf[5] = { 0x00, 0x20, 0x1a, 0x02, 0x68 }; // bands 7 & nr78
|
||||
unsigned char req_freq_buf[1024];
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_FreqBandList,
|
||||
NULL,
|
||||
(void *)nsa_band_list,
|
||||
req_freq_buf,
|
||||
1024);
|
||||
|
||||
xer_fprint(stdout, &asn_DEF_NR_FreqBandList, (void *)nsa_band_list);
|
||||
|
||||
|
||||
|
||||
@@ -3280,14 +3282,16 @@ uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
||||
//0x01, 0x60, 0x18, 0x05, 0x80, 0xc0, 0x04, 0x04, 0xc1, 0x2c, 0x10, 0x08, 0x20, 0x30, 0x40, 0xe0, 0x82, 0x40, 0x28, 0x80, 0x9a
|
||||
// };
|
||||
|
||||
req_freq.buf = req_freq_buf;
|
||||
req_freq.size = (enc_rval.encoded+7)/8;
|
||||
req_freq.buf = req_freq_buf;
|
||||
req_freq.size = (enc_rval.encoded+7)/8;
|
||||
// req_freq.size = 21;
|
||||
|
||||
r15_10.requestedFreqBandsNR_MRDC_r15 = &req_freq;
|
||||
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||
xer_fprint(stdout, &asn_DEF_LTE_DL_DCCH_Message, (void *)&dl_dcch_msg);
|
||||
r15_10.requestedFreqBandsNR_MRDC_r15 = &req_freq;
|
||||
// Add request for eutra-nr
|
||||
}
|
||||
// if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||
xer_fprint(stdout, &asn_DEF_LTE_DL_DCCH_Message, (void *)&dl_dcch_msg);
|
||||
// }
|
||||
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_DL_DCCH_Message,
|
||||
NULL,
|
||||
|
||||
@@ -211,13 +211,13 @@ typedef struct RB_INFO_TABLE_ENTRY_NB_IoT_s {
|
||||
RB_INFO_NB_IoT Rb_info;
|
||||
uint8_t Active;
|
||||
uint32_t Next_check_frame;
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
} RB_INFO_TABLE_ENTRY_NB_IoT;
|
||||
|
||||
typedef struct SRB_INFO_TABLE_ENTRY_NB_IoT_s {
|
||||
SRB_INFO_NB_IoT Srb_info;
|
||||
uint8_t Active;
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
uint32_t Next_check_frame;
|
||||
} SRB_INFO_TABLE_ENTRY_NB_IoT;
|
||||
|
||||
@@ -269,7 +269,7 @@ typedef struct eNB_RRC_UE_NB_IoT_s {
|
||||
e_LTE_CipheringAlgorithm_r12 ciphering_algorithm; //Specs. TS 36.331 V14.1.0 pag 432 Change position of chipering enumerative w.r.t previous version
|
||||
e_LTE_SecurityAlgorithmConfig__integrityProtAlgorithm integrity_algorithm;
|
||||
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
rnti_t rnti;
|
||||
uint64_t random_ue_identity;
|
||||
|
||||
|
||||
+349
-77
@@ -1056,7 +1056,7 @@ void release_UE_in_freeList(module_id_t mod_id) {
|
||||
if (id>=0) clean_eNb_dlsch(eNB_PHY->dlsch[id][0]);
|
||||
|
||||
// clean UCI entries for rnti
|
||||
for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
|
||||
for (i=0; i<NUMBER_OF_UCI_MAX; i++) {
|
||||
if(eNB_PHY->uci_vars[i].rnti == rnti) {
|
||||
LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti);
|
||||
memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI));
|
||||
@@ -1090,7 +1090,7 @@ void release_UE_in_freeList(module_id_t mod_id) {
|
||||
clean_eNb_ulsch(ulsch);
|
||||
}
|
||||
|
||||
for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
|
||||
for (i=0; i<NUMBER_OF_UCI_MAX; i++) {
|
||||
if(eNB_PHY->uci_vars[i].rnti == rnti) {
|
||||
LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti);
|
||||
memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI));
|
||||
@@ -3442,6 +3442,7 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
|
||||
ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A5);
|
||||
|
||||
if (ue_context_pP->ue_context.does_nr) {
|
||||
LOG_I(RRC,"Configuring measurement for NR cell\n");
|
||||
ReportConfig_NR->reportConfigId = 7;
|
||||
ReportConfig_NR->reportConfig.present = LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigInterRAT;
|
||||
ReportConfig_NR->reportConfig.choice.reportConfigInterRAT.triggerType.present = LTE_ReportConfigInterRAT__triggerType_PR_event;
|
||||
@@ -4568,7 +4569,6 @@ rrc_eNB_process_MeasurementReport(
|
||||
|
||||
case 7:
|
||||
LOG_D(RRC, "NR event frame %d subframe %d\n", ctxt_pP->frame, ctxt_pP->subframe);
|
||||
printf("NR event frame %d subframe %d\n", ctxt_pP->frame, ctxt_pP->subframe);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -4593,6 +4593,9 @@ rrc_eNB_process_MeasurementReport(
|
||||
ue_context_pP->ue_context.gnb_x2_assoc_id = -1; // set when receiving X2AP_ENDC_SGNB_ADDITION_REQ_ACK
|
||||
|
||||
if(is_en_dc_supported(ue_context_pP->ue_context.UE_Capability)) {
|
||||
|
||||
AssertFatal(measResults2->measResultNeighCells!=NULL,"no measResultNeighCells, shouldn't happen!\n");
|
||||
AssertFatal(measResults2->measResultNeighCells->present==LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15,"field is not LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15");
|
||||
/** to add gNB as Secondary node CG-ConfigInfo to be added as per 36.423 r15 **/
|
||||
if(encode_CG_ConfigInfo(enc_buf,sizeof(enc_buf),ue_context_pP,&enc_size) == RRC_OK)
|
||||
LOG_I(RRC,"CG-ConfigInfo encoded successfully\n");
|
||||
@@ -4611,6 +4614,7 @@ rrc_eNB_process_MeasurementReport(
|
||||
X2AP_ENDC_SGNB_ADDITION_REQ(msg).rrc_buffer_size = enc_size;
|
||||
|
||||
X2AP_ENDC_SGNB_ADDITION_REQ(msg).target_physCellId
|
||||
//= measResults2->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->pci_r15;
|
||||
= measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId;
|
||||
|
||||
//For the moment we have a single E-RAB which will be the one to be added to the gNB
|
||||
@@ -4633,6 +4637,32 @@ rrc_eNB_process_MeasurementReport(
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ue_context_pP->ue_context.measResults->measResultNeighCells) {
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells = calloc(1,sizeof(*ue_context_pP->ue_context.measResults->measResultNeighCells));
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells->present = LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15;
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array = calloc(1, sizeof(*ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array));
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0] = calloc(1, sizeof(*ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]));
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.count = 1;
|
||||
}
|
||||
struct LTE_MeasResultCellNR_r15 *ueCtxtMeasResultCellNR_r15 = ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0];
|
||||
const struct LTE_MeasResultCellNR_r15 *measNeighCellNR0 = measResults2->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0];
|
||||
ueCtxtMeasResultCellNR_r15->pci_r15 = measNeighCellNR0->pci_r15;
|
||||
if (!ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15)
|
||||
ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15 = calloc(1, sizeof(*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15));
|
||||
if (!ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15)
|
||||
ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15 = calloc(1, sizeof(*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15));
|
||||
*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15 = *measNeighCellNR0->measResultCell_r15.rsrpResult_r15;
|
||||
*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15 = *measNeighCellNR0->measResultCell_r15.rsrqResult_r15;
|
||||
if (measNeighCellNR0->measResultRS_IndexList_r15) {
|
||||
if (!ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15) {
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15 = calloc(1,sizeof(*ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15));
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array = calloc(1, sizeof(ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array));
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array[0] = calloc(1, sizeof(*ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array));
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.count = 1;
|
||||
}
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array[0]->ssb_Index_r15 = measNeighCellNR0->measResultRS_IndexList_r15->list.array[0]->ssb_Index_r15;
|
||||
}
|
||||
}
|
||||
|
||||
if (measResults2->measResultNeighCells == NULL)
|
||||
@@ -5710,7 +5740,7 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
|
||||
//SchedulingRequestConfig__setup__dsr_TransMax_n4);
|
||||
// assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4;
|
||||
physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax =
|
||||
LTE_SchedulingRequestConfig__setup__dsr_TransMax_n4;
|
||||
LTE_SchedulingRequestConfig__setup__dsr_TransMax_n64;
|
||||
LOG_D(RRC,
|
||||
"handover_config [FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %x) --->][MAC_eNB][MOD %02d][]\n",
|
||||
ctxt_pP->frame, ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ctxt_pP->module_id);
|
||||
@@ -7581,7 +7611,205 @@ rrc_eNB_decode_ccch(
|
||||
return rval;
|
||||
}
|
||||
|
||||
#define NCE nonCriticalExtension
|
||||
|
||||
static void
|
||||
get_ue_Category(
|
||||
LTE_UE_EUTRA_Capability_t *c,
|
||||
long *catDL,
|
||||
long *catUL
|
||||
)
|
||||
{
|
||||
if (c != NULL) { // v8.6
|
||||
*catDL=c->ue_Category; *catUL=c->ue_Category;
|
||||
struct LTE_UE_EUTRA_Capability_v920_IEs *c92=c->NCE;
|
||||
if (c92 != NULL) { // v9.2
|
||||
struct LTE_UE_EUTRA_Capability_v940_IEs *c94=c92->NCE;
|
||||
if (c94 != NULL) { // v9.4
|
||||
struct LTE_UE_EUTRA_Capability_v1020_IEs *c102=c94->NCE;
|
||||
if (c102 != NULL) { // v10.2
|
||||
if (c102->ue_Category_v1020) {*catDL=*c102->ue_Category_v1020;*catUL=*c102->ue_Category_v1020;}
|
||||
struct LTE_UE_EUTRA_Capability_v1060_IEs *c106=c102->NCE;
|
||||
if (c106 != NULL) { // v10.6
|
||||
struct LTE_UE_EUTRA_Capability_v1090_IEs *c109=c106->NCE;
|
||||
if (c109 != NULL) { // v10.9
|
||||
struct LTE_UE_EUTRA_Capability_v1130_IEs *c113=c109->NCE;
|
||||
if (c113 != NULL) { // v11.3
|
||||
struct LTE_UE_EUTRA_Capability_v1170_IEs *c117=c113->NCE;
|
||||
if (c117 != NULL) { // v11.7
|
||||
if (c117->ue_Category_v1170) {*catDL=*c117->ue_Category_v1170;
|
||||
struct LTE_UE_EUTRA_Capability_v1180_IEs *c118=c117->NCE;
|
||||
if (c118 != NULL) { // v11.8
|
||||
struct LTE_UE_EUTRA_Capability_v11a0_IEs *c11a=c118->NCE;
|
||||
if (c11a != NULL) { // v11.a
|
||||
if (c11a->ue_Category_v11a0) {*catDL=*c11a->ue_Category_v11a0;*catUL=*c11a->ue_Category_v11a0;}
|
||||
struct LTE_UE_EUTRA_Capability_v1250_IEs *c125=c11a->NCE;
|
||||
if (c125 != NULL) { // v12.5
|
||||
if (c125->ue_CategoryDL_r12) *catDL=*c125->ue_CategoryDL_r12;
|
||||
if (c125->ue_CategoryUL_r12) *catUL=*c125->ue_CategoryUL_r12;
|
||||
struct LTE_UE_EUTRA_Capability_v1260_IEs *c126=c125->NCE;
|
||||
if (c126 != NULL) { // v12.6
|
||||
if (c126->ue_CategoryDL_v1260) *catDL=*c126->ue_CategoryDL_v1260;
|
||||
struct LTE_UE_EUTRA_Capability_v1270_IEs *c127=c126->NCE;
|
||||
if (c127 != NULL) { // v12.7
|
||||
struct LTE_UE_EUTRA_Capability_v1280_IEs *c128=c127->NCE;
|
||||
if (c128 != NULL) { // v12.8
|
||||
struct LTE_UE_EUTRA_Capability_v1310_IEs *c131=c128->NCE;
|
||||
if (c131 != NULL) { // v13.1
|
||||
if (c131->ue_CategoryDL_v1310 && *c131->ue_CategoryDL_v1310 == 0) *catDL=17;
|
||||
if (c131->ue_CategoryDL_v1310 && *c131->ue_CategoryDL_v1310 == 1) *catDL=-1;
|
||||
if (c131->ue_CategoryUL_v1310 && *c131->ue_CategoryUL_v1310 == 0) *catUL=14;
|
||||
if (c131->ue_CategoryUL_v1310 && *c131->ue_CategoryUL_v1310 == 1) *catUL=-1;
|
||||
struct LTE_UE_EUTRA_Capability_v1320_IEs *c132=c131->NCE;
|
||||
if (c132 != NULL) { //v13.2
|
||||
struct LTE_UE_EUTRA_Capability_v1330_IEs *c133=c132->NCE;
|
||||
if (c133 != NULL) { // v13.3
|
||||
if (c133->ue_CategoryDL_v1330) *catDL=*c133->ue_CategoryDL_v1330;
|
||||
struct LTE_UE_EUTRA_Capability_v1340_IEs *c134=c133->NCE;
|
||||
if (c134 != NULL) { // v13.4
|
||||
if (c134->ue_CategoryUL_v1340) *catUL=*c134->ue_CategoryUL_v1340;
|
||||
struct LTE_UE_EUTRA_Capability_v1350_IEs *c135=c134->NCE;
|
||||
if (c135 != NULL) { // v13.5
|
||||
if (c135->ue_CategoryDL_v1350) *catDL=99; // Cat 1Bis
|
||||
if (c135->ue_CategoryUL_v1350) *catUL=99; // Cat 1Bis
|
||||
struct LTE_UE_EUTRA_Capability_v1360_IEs *c136=c135->NCE;
|
||||
if (c136 != NULL) { // v13.6
|
||||
struct LTE_UE_EUTRA_Capability_v1430_IEs *c143=c136->NCE;
|
||||
if (c143 != NULL) { // v14.3
|
||||
if (c143->ue_CategoryDL_v1430 && *c143->ue_CategoryDL_v1430 == LTE_UE_EUTRA_Capability_v1430_IEs__ue_CategoryDL_v1430_m2) *catDL=-2;
|
||||
if (c143->ue_CategoryUL_v1430 && *c143->ue_CategoryUL_v1430 == LTE_UE_EUTRA_Capability_v1430_IEs__ue_CategoryDL_v1430_m2) *catUL=-2;
|
||||
if (c143->ue_CategoryUL_v1430) *catUL=16+*c143->ue_CategoryUL_v1430;
|
||||
if (c143->ue_CategoryUL_v1430b)*catUL=21;
|
||||
struct LTE_UE_EUTRA_Capability_v1440_IEs *c144=c143->NCE;
|
||||
if (c144 != NULL) { // v14.4
|
||||
struct LTE_UE_EUTRA_Capability_v1450_IEs *c145=c144->NCE;
|
||||
if (c145 != NULL) { // v14.5
|
||||
if (c145->ue_CategoryDL_v1450) *catDL=*c145->ue_CategoryDL_v1450;
|
||||
struct LTE_UE_EUTRA_Capability_v1460_IEs *c146=c145->NCE;
|
||||
if (c146 != NULL) { // v14.6
|
||||
if (c146->ue_CategoryDL_v1460) *catDL=*c146->ue_CategoryDL_v1460;
|
||||
struct LTE_UE_EUTRA_Capability_v1510_IEs *c151=c146->NCE;
|
||||
if (c151 != NULL) { // v15.1
|
||||
struct LTE_UE_EUTRA_Capability_v1520_IEs *c152=c151->NCE;
|
||||
if (c152 != NULL) { // v15.20
|
||||
struct LTE_UE_EUTRA_Capability_v1530_IEs *c153=c152->NCE;
|
||||
if (c153 != NULL) { // v15.30
|
||||
if (c153->ue_CategoryDL_v1530) *catDL=*c153->ue_CategoryDL_v1530;
|
||||
if (c153->ue_CategoryUL_v1530) *catUL=*c153->ue_CategoryUL_v1530;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
is_ul_64QAM_supported(
|
||||
LTE_UE_EUTRA_Capability_t *c
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
return c != NULL // R8
|
||||
&& c->NCE != NULL // R92
|
||||
&& c->NCE->NCE != NULL // R94
|
||||
&& c->NCE->NCE->NCE != NULL // R102
|
||||
&& c->NCE->NCE->NCE->NCE != NULL // R106
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL // R109
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->ul_64QAM_r12 != NULL
|
||||
&& *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->ul_64QAM_r12==LTE_SupportedBandEUTRA_v1250__ul_64QAM_r12_supported;
|
||||
}
|
||||
|
||||
static int
|
||||
is_dl_256QAM_supported(
|
||||
LTE_UE_EUTRA_Capability_t *c
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
return c != NULL // R8
|
||||
&& c->NCE != NULL // R92
|
||||
&& c->NCE->NCE != NULL // R94
|
||||
&& c->NCE->NCE->NCE != NULL // R102
|
||||
&& c->NCE->NCE->NCE->NCE != NULL // R106
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL // R109
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->dl_256QAM_r12 != NULL
|
||||
&& *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->dl_256QAM_r12==LTE_SupportedBandEUTRA_v1250__dl_256QAM_r12_supported;
|
||||
|
||||
}
|
||||
static int
|
||||
is_ul_256QAM_supported(
|
||||
LTE_UE_EUTRA_Capability_t *c
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
return c != NULL // R8
|
||||
&& c->NCE != NULL // R92
|
||||
&& c->NCE->NCE != NULL // R94
|
||||
&& c->NCE->NCE->NCE != NULL // R102
|
||||
&& c->NCE->NCE->NCE->NCE != NULL // R106
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL // R109
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R126
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 127
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 128
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //131
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //132
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //133
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //134
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //135
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //136
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //143
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430->list.array != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430->list.array[0]->ul_256QAM_r14!=NULL
|
||||
&& *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430->list.array[0]->ul_256QAM_r14==LTE_BandParameters_v1430__ul_256QAM_r14_supported;
|
||||
}
|
||||
|
||||
static int
|
||||
is_en_dc_supported(
|
||||
LTE_UE_EUTRA_Capability_t *c
|
||||
@@ -7591,32 +7819,31 @@ is_en_dc_supported(
|
||||
/* to be refined - check that the bands supported by the UE include
|
||||
* the band of the gNB
|
||||
*/
|
||||
#define NCE nonCriticalExtension
|
||||
return c != NULL
|
||||
&& c->NCE != NULL
|
||||
&& c->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
return c != NULL // R8
|
||||
&& c->NCE != NULL // R92
|
||||
&& c->NCE->NCE != NULL // R94
|
||||
&& c->NCE->NCE->NCE != NULL // R102
|
||||
&& c->NCE->NCE->NCE->NCE != NULL // R106
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL // R109
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R126
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 127
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 128
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //131
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //132
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //133
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //134
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //135
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //136
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //143
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //144
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //145
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //146
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //151
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->irat_ParametersNR_r15 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->irat_ParametersNR_r15->en_DC_r15 != NULL
|
||||
&& *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->irat_ParametersNR_r15->en_DC_r15 ==
|
||||
@@ -7624,6 +7851,45 @@ is_en_dc_supported(
|
||||
#undef NCE
|
||||
}
|
||||
|
||||
int to_nr_rsrpq(long rsrpq_result,int nr_band) {
|
||||
|
||||
switch(nr_band) {
|
||||
case 1: // A
|
||||
case 70:
|
||||
case 74:
|
||||
case 34:
|
||||
case 38:
|
||||
case 39:
|
||||
case 40:
|
||||
case 50:
|
||||
case 51:
|
||||
return((rsrpq_result*10)-1180);
|
||||
case 66: // B
|
||||
return((rsrpq_result*10)-1175);
|
||||
case 77: // C
|
||||
case 78:
|
||||
case 79:
|
||||
return((rsrpq_result*10)-1170);
|
||||
case 28: // D
|
||||
return((rsrpq_result*10)-1165);
|
||||
case 2:
|
||||
case 5:
|
||||
case 7:
|
||||
case 41: // E
|
||||
return((rsrpq_result*10)-1160);
|
||||
case 3: // G
|
||||
case 8:
|
||||
case 12:
|
||||
case 20:
|
||||
case 71:
|
||||
return((rsrpq_result*10)-1150);
|
||||
case 25: // H
|
||||
return((rsrpq_result*10)-1145);
|
||||
default:
|
||||
AssertFatal(1==0,"Illegal NR band %d\n",nr_band);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
int
|
||||
rrc_eNB_decode_dcch(
|
||||
@@ -8193,7 +8459,7 @@ rrc_eNB_decode_dcch(
|
||||
ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability,ue_context_p->ue_context.UE_Capability_nr);
|
||||
ue_context_p->ue_context.UE_Capability_nr = 0;
|
||||
}
|
||||
|
||||
LOG_I(RRC,"Received NR_UE_Capabilities\n");
|
||||
dec_rval = uper_decode(NULL,
|
||||
&asn_DEF_NR_UE_NR_Capability,
|
||||
(void **)&ue_context_p->ue_context.UE_Capability_nr,
|
||||
@@ -8218,6 +8484,8 @@ rrc_eNB_decode_dcch(
|
||||
|
||||
if (ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list.array[i]->rat_Type ==
|
||||
LTE_RAT_Type_eutra_nr) {
|
||||
LOG_I(RRC,"Received UE_Capabilities_MRDC\n");
|
||||
|
||||
if(ue_context_p->ue_context.UE_Capability_MRDC) {
|
||||
ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability,ue_context_p->ue_context.UE_Capability_MRDC);
|
||||
ue_context_p->ue_context.UE_Capability_MRDC = 0;
|
||||
@@ -8574,14 +8842,13 @@ void handle_f1_setup_req(f1ap_setup_req_t *f1_setup_req) {
|
||||
F1AP_SETUP_RESP (msg_p).nr_cellid[cu_cell_ind] = rrc->nr_cellid;
|
||||
F1AP_SETUP_RESP (msg_p).nrpci[cu_cell_ind] = f1_setup_req->nr_pci[i];
|
||||
int num_SI= 0;
|
||||
|
||||
if (rrc->carrier[0].SIB23) {
|
||||
F1AP_SETUP_RESP (msg_p).SI_container[cu_cell_ind][num_SI] = rrc->carrier[0].SIB23;
|
||||
F1AP_SETUP_RESP (msg_p).SI_container_length[cu_cell_ind][num_SI] = rrc->carrier[0].sizeof_SIB23;
|
||||
//printf("SI %d size %d: ", 0, F1AP_SETUP_RESP(msg_p).SI_container_length[j][num_SI]);
|
||||
//for (int n = 0; n < F1AP_SETUP_RESP(msg_p).SI_container_length[j][num_SI]; n++)
|
||||
// printf("%02x ", F1AP_SETUP_RESP(msg_p).SI_container[0][num_SI][n]);
|
||||
//printf("\n");
|
||||
F1AP_SETUP_RESP (msg_p).SI_container[cu_cell_ind][2+num_SI] = rrc->carrier[0].SIB23;
|
||||
F1AP_SETUP_RESP (msg_p).SI_container_length[cu_cell_ind][2+num_SI] = rrc->carrier[0].sizeof_SIB23;
|
||||
printf("SI %d size %d: ", 0, F1AP_SETUP_RESP(msg_p).SI_container_length[j][2+num_SI]);
|
||||
for (int n = 0; n < F1AP_SETUP_RESP(msg_p).SI_container_length[j][2+num_SI]; n++)
|
||||
printf("%02x ", F1AP_SETUP_RESP(msg_p).SI_container[0][2+num_SI][n]);
|
||||
printf("\n");
|
||||
num_SI++;
|
||||
}
|
||||
|
||||
@@ -8780,10 +9047,6 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
||||
struct rrc_eNB_ue_context_s *ue_to_be_removed[NUMBER_OF_UE_MAX];
|
||||
int removed_ue_count = 0;
|
||||
int cur_ue;
|
||||
#ifdef LOCALIZATION
|
||||
double estimated_distance = 0;
|
||||
protocol_ctxt_t ctxt;
|
||||
#endif
|
||||
MessageDef *msg;
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX, VCD_FUNCTION_IN);
|
||||
|
||||
@@ -8795,22 +9058,53 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
||||
}
|
||||
|
||||
// check for UL failure or for UE to be released
|
||||
FILE *fd=NULL;
|
||||
if ((ctxt_pP->frame&127) == 0 && ctxt_pP->subframe ==0)
|
||||
fd=fopen("RRC_stats.log","w+");
|
||||
|
||||
RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) {
|
||||
ctxt_pP->rnti = ue_context_p->ue_id_rnti;
|
||||
|
||||
if ((ctxt_pP->frame == 0) && (ctxt_pP->subframe == 0)) {
|
||||
if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) {
|
||||
LOG_I(RRC, "UE rnti %x: S-TMSI %x failure timer %d/8\n",
|
||||
ue_context_p->ue_context.rnti,
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi,
|
||||
ue_context_p->ue_context.ul_failure_timer);
|
||||
} else {
|
||||
LOG_I(RRC, "UE rnti %x failure timer %d/8\n",
|
||||
ue_context_p->ue_context.rnti,
|
||||
ue_context_p->ue_context.ul_failure_timer);
|
||||
if ((ctxt_pP->frame&127) == 0 && ctxt_pP->subframe ==0) {
|
||||
if (fd) {
|
||||
if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) {
|
||||
fprintf(fd,"RRC UE rnti %x: S-TMSI %x failure timer %d/8\n",
|
||||
ue_context_p->ue_context.rnti,
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi,
|
||||
ue_context_p->ue_context.ul_failure_timer);
|
||||
} else {
|
||||
fprintf(fd,"RRC UE rnti %x failure timer %d/8\n",
|
||||
ue_context_p->ue_context.rnti,
|
||||
ue_context_p->ue_context.ul_failure_timer);
|
||||
}
|
||||
|
||||
if (ue_context_p->ue_context.UE_Capability) {
|
||||
long catDL,catUL;
|
||||
get_ue_Category(ue_context_p->ue_context.UE_Capability,&catDL,&catUL);
|
||||
fprintf(fd,"RRC UE cap: CatDL %ld, CatUL %ld, 64QAM UL %s, 256 QAM DL %s, 256 QAM UL %s, ENDC %s,\n",
|
||||
catDL,catUL,
|
||||
is_ul_64QAM_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no",
|
||||
is_dl_256QAM_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no",
|
||||
is_ul_256QAM_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no",
|
||||
is_en_dc_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no");
|
||||
}
|
||||
if (ue_context_p->ue_context.measResults) {
|
||||
fprintf(fd, "RRC PCell RSRP %ld, RSRQ %ld\n", ue_context_p->ue_context.measResults->measResultPCell.rsrpResult-140,
|
||||
ue_context_p->ue_context.measResults->measResultPCell.rsrqResult/2 - 20);
|
||||
if (ue_context_p->ue_context.measResults->measResultNeighCells &&
|
||||
ue_context_p->ue_context.measResults->measResultNeighCells->present == LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15) {
|
||||
|
||||
fprintf(fd,"NR_pci %ld\n",ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->pci_r15);
|
||||
if(ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrpResult_r15)
|
||||
fprintf(fd,"NR_rsrp %f dB\n",to_nr_rsrpq(*ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrpResult_r15,RC.rrc[ctxt_pP->module_id]->nr_gnb_freq_band[0][0])/10.0);
|
||||
if (ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrqResult_r15)
|
||||
fprintf(fd,"NR_rsrq %f dB\n",to_nr_rsrpq(*ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrqResult_r15,RC.rrc[ctxt_pP->module_id]->nr_gnb_freq_band[0][0])/10.0);
|
||||
if (ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultRS_IndexList_r15)
|
||||
fprintf(fd,"NR_ssb_index %ld\n",ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultRS_IndexList_r15->list.array[0]->ssb_Index_r15);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ue_context_p->ue_context.ul_failure_timer > 0) {
|
||||
ue_context_p->ue_context.ul_failure_timer++;
|
||||
|
||||
@@ -9002,31 +9296,9 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef RRC_LOCALIZATION
|
||||
/* for the localization, only primary CC_id might be relevant*/
|
||||
gettimeofday(&ts, NULL);
|
||||
current_timestamp_ms = ts.tv_sec * 1000 + ts.tv_usec / 1000;
|
||||
ref_timestamp_ms = RC.rrc[ctxt_pP->module_id]->reference_timestamp_ms;
|
||||
RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) {
|
||||
ctxt = *ctxt_pP;
|
||||
ctxt.rnti = ue_context_p->ue_context.rnti;
|
||||
estimated_distance = rrc_get_estimated_ue_distance(&ctxt, CC_id, RC.rrc[ctxt_pP->module_id]->loc_type);
|
||||
if (fd!=NULL) fclose(fd);
|
||||
|
||||
|
||||
if ((current_timestamp_ms - ref_timestamp_ms > RC.rrc[ctxt_pP->module_id]->aggregation_period_ms) &&
|
||||
estimated_distance != -1) {
|
||||
LOG_D(LOCALIZE, "RRC [UE/id %d -> eNB/id %d] timestamp %d frame %d estimated r = %f\n",
|
||||
ctxt.rnti,
|
||||
ctxt_pP->module_id,
|
||||
current_timestamp_ms,
|
||||
ctxt_pP->frame,
|
||||
estimated_distance);
|
||||
LOG_D(LOCALIZE, "RRC status %d\n",
|
||||
ue_context_p->ue_context.Status);
|
||||
push_front(&RC.rrc[ctxt_pP->module_id]->loc_list, estimated_distance);
|
||||
RC.rrc[ctxt_pP->module_id]->reference_timestamp_ms = current_timestamp_ms;
|
||||
} // end if
|
||||
} // end RB_FOREACH
|
||||
#endif
|
||||
(void)ts; /* remove gcc warning "unused variable" */
|
||||
(void)ref_timestamp_ms; /* remove gcc warning "unused variable" */
|
||||
(void)current_timestamp_ms; /* remove gcc warning "unused variable" */
|
||||
|
||||
@@ -238,13 +238,13 @@ typedef struct RB_INFO_TABLE_ENTRY_NR_s {
|
||||
NR_RB_INFO Rb_info;
|
||||
uint8_t Active;
|
||||
uint32_t Next_check_frame;
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
} NR_RB_INFO_TABLE_ENTRY;
|
||||
|
||||
typedef struct SRB_INFO_TABLE_ENTRY_NR_s {
|
||||
NR_SRB_INFO Srb_info;
|
||||
uint8_t Active;
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
uint32_t Next_check_frame;
|
||||
} NR_SRB_INFO_TABLE_ENTRY;
|
||||
|
||||
@@ -315,7 +315,7 @@ typedef struct gNB_RRC_UE_s {
|
||||
NR_CipheringAlgorithm_t ciphering_algorithm;
|
||||
e_NR_IntegrityProtAlgorithm integrity_algorithm;
|
||||
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
rnti_t rnti;
|
||||
uint64_t random_ue_identity;
|
||||
|
||||
|
||||
@@ -562,7 +562,7 @@ rrc_gNB_process_RRCSetupComplete(
|
||||
LOG_I(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, " "processing NR_RRCSetupComplete from UE (SRB1 Active)\n",
|
||||
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
|
||||
ue_context_pP->ue_context.Srb1.Active = 1;
|
||||
ue_context_pP->ue_context.Status = NR_RRC_CONNECTED;
|
||||
ue_context_pP->ue_context.status = NR_RRC_CONNECTED;
|
||||
|
||||
if (AMF_MODE_ENABLED) {
|
||||
rrc_gNB_send_NGAP_NAS_FIRST_REQ(ctxt_pP, ue_context_pP, rrcSetupComplete);
|
||||
@@ -1111,7 +1111,7 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete(
|
||||
|
||||
uint8_t next_xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
|
||||
int ret = 0;
|
||||
ue_context_pP->ue_context.Status = NR_RRC_CONNECTED;
|
||||
ue_context_pP->ue_context.status = NR_RRC_CONNECTED;
|
||||
ue_context_pP->ue_context.ue_rrc_inactivity_timer = 1; // set rrc inactivity when UE goes into RRC_CONNECTED
|
||||
ue_context_pP->ue_context.reestablishment_xid = next_xid;
|
||||
SRB_configList2 = &ue_context_pP->ue_context.SRB_configList2[xid];
|
||||
@@ -1602,7 +1602,7 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
|
||||
}
|
||||
#endif
|
||||
//c-plane not end
|
||||
if((ue_context_p->ue_context.Status != NR_RRC_RECONFIGURED) && (ue_context_p->ue_context.reestablishment_cause == NR_ReestablishmentCause_spare1)) {
|
||||
if((ue_context_p->ue_context.status != NR_RRC_RECONFIGURED) && (ue_context_p->ue_context.reestablishment_cause == NR_ReestablishmentCause_spare1)) {
|
||||
LOG_E(NR_RRC,
|
||||
PROTOCOL_NR_RRC_CTXT_UE_FMT" NR_RRCReestablishmentRequest (UE %x c-plane is not end), RRC establishment failed \n",
|
||||
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),c_rnti);
|
||||
@@ -1614,9 +1614,9 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
|
||||
LOG_E(NR_RRC,
|
||||
PROTOCOL_NR_RRC_CTXT_UE_FMT" RRRCReconfigurationComplete(Previous) don't receive, delete the Previous UE,\nprevious Status %d, new Status NR_RRC_RECONFIGURED\n",
|
||||
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
|
||||
ue_context_p->ue_context.Status
|
||||
ue_context_p->ue_context.status
|
||||
);
|
||||
ue_context_p->ue_context.Status = NR_RRC_RECONFIGURED;
|
||||
ue_context_p->ue_context.status = NR_RRC_RECONFIGURED;
|
||||
protocol_ctxt_t ctxt_old_p;
|
||||
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt_old_p,
|
||||
ctxt_pP->instance,
|
||||
|
||||
@@ -569,7 +569,7 @@ rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(
|
||||
}
|
||||
|
||||
// in case, send the S1SP initial context response if it is not sent with the attach complete message
|
||||
if (ue_context_p->ue_context.Status == NR_RRC_RECONFIGURED) {
|
||||
if (ue_context_p->ue_context.status == NR_RRC_RECONFIGURED) {
|
||||
LOG_I(NR_RRC, "Sending rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP, cause %ld\n", ue_context_p->ue_context.reestablishment_cause);
|
||||
rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(&ctxt,ue_context_p);
|
||||
}
|
||||
|
||||
@@ -1759,7 +1759,7 @@ nr_rrc_ue_establish_srb1(
|
||||
{
|
||||
// add descriptor from RRC PDU
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Active = 1;
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].status = RADIO_CONFIG_OK;//RADIO CFG
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Srb_info.Srb_id = 1;
|
||||
LOG_I(NR_RRC, "[UE %d], CONFIG_SRB1 %d corresponding to gNB_index %d\n", ue_mod_idP, DCCH, gNB_index);
|
||||
return(0);
|
||||
@@ -1777,7 +1777,7 @@ nr_rrc_ue_establish_srb2(
|
||||
{
|
||||
// add descriptor from RRC PDU
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Active = 1;
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].status = RADIO_CONFIG_OK;//RADIO CFG
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Srb_info.Srb_id = 2;
|
||||
LOG_I(NR_RRC, "[UE %d], CONFIG_SRB2 %d corresponding to gNB_index %d\n", ue_mod_idP, DCCH1, gNB_index);
|
||||
return(0);
|
||||
|
||||
@@ -34,13 +34,8 @@
|
||||
# define __OTG_DEFS_H__
|
||||
|
||||
/* \brief To define the NUMBER_OF_eNB_MAX and MAX_MOBILES_PER_ENB */
|
||||
#if STANDALONE==1
|
||||
#include "openairinterface5g_limits.h"
|
||||
#else
|
||||
// impl_defs_top.h includes openairinterface5g_limits.h
|
||||
#include "PHY/impl_defs_top.h"
|
||||
#endif
|
||||
|
||||
#include "openairinterface5g_limits.h"
|
||||
#include <openair2/COMMON/platform_constants.h>
|
||||
#include "otg_config.h"
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user