# SPDX-License-Identifier: LicenseRef-CSSL-1.0

Active_gNBs              = ( "gNB-OAI" );
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity           = "none";

gNBs =
(
{
    ////////// Identification parameters:
    gNB_ID                = 0xe00;
    gNB_name              = "gNB-OAI";

    // Tracking area code, 0x0000 and 0xfffe are reserved values
    tracking_area_code    = 1;
    plmn_list             = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; sd = 1; }) });

    nr_cellid             = 12345678L;

    ////////// Physical parameters:
    do_CSIRS              = 1;
    do_SRS                = 1;

    servingCellConfigCommon = (
    {
        # spCellConfigCommon
        physCellId                                 = 0;

        # downlinkConfigCommon
        # frequencyInfoDL
        # this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
        absoluteFrequencySSB                      = 641280;
        dl_frequencyBand                          = 78;
        # this is 3600 MHz
        dl_absoluteFrequencyPointA                = 640008;
        # scs-SpecificCarrierList
        dl_offstToCarrier                         = 0;
        # subcarrierSpacing
        # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
        dl_subcarrierSpacing                      = 1;
        dl_carrierBandwidth                       = 106;
        # initialDownlinkBWP
        # genericParameters
        # this is RBstart=27,L=48 (275*(L-1))+RBstart
        initialDLBWPlocationAndBandwidth          = 28875;
        # subcarrierSpacing
        # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
        initialDLBWPsubcarrierSpacing             = 1;
        # pdcch-ConfigCommon
        initialDLBWPcontrolResourceSetZero        = 12;
        initialDLBWPsearchSpaceZero               = 0;

        # uplinkConfigCommon
        # frequencyInfoUL
        ul_frequencyBand                          = 78;
        # scs-SpecificCarrierList
        ul_offstToCarrier                         = 0;
        # subcarrierSpacing
        # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
        ul_subcarrierSpacing                      = 1;
        ul_carrierBandwidth                       = 106;
        pMax                                      = 20;
        # initialUplinkBWP
        # genericParameters
        initialULBWPlocationAndBandwidth          = 28875;
        # subcarrierSpacing
        # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
        initialULBWPsubcarrierSpacing             = 1;
        # rach-ConfigCommon
        # rach-ConfigGeneric
        prach_ConfigurationIndex                  = 154;
        # prach_msg1_FDM
        # 0 = one, 1=two, 2=four, 3=eight
        prach_msg1_FDM                            = 0;
        prach_msg1_FrequencyStart                 = 0;
        zeroCorrelationZoneConfig                 = 13;
        preambleReceivedTargetPower               = -96;
        # preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
        preambleTransMax                          = 6;
        # powerRampingStep
        # 0=dB0,1=dB2,2=dB4,3=dB6
        powerRampingStep                          = 1;
        # ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
        # 1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
        ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
        # one (0..15) 4,8,12,16,...60,64
        ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
        # ra_ContentionResolutionTimer
        # (0..7) 8,16,24,32,40,48,56,64
        ra_ContentionResolutionTimer              = 7;
        rsrp_ThresholdSSB                         = 19;
        # prach-RootSequenceIndex_PR
        # 1 = 839, 2 = 139
        prach_RootSequenceIndex_PR                = 2;
        prach_RootSequenceIndex                   = 1;
        # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precedence over the one derived from prach-ConfigIndex
        msg1_SubcarrierSpacing                    = 1;
        # restrictedSetConfig
        # 0=unrestricted, 1=restricted type A, 2=restricted type B
        restrictedSetConfig                       = 0;
        msg3_DeltaPreamble                        = 1;
        p0_NominalWithGrant                       = -90;

        # pucch-ConfigCommon setup :
        # pucchGroupHopping
        # 0 = neither, 1= group hopping, 2=sequence hopping
        pucchGroupHopping                         = 0;
        hoppingId                                 = 40;
        p0_nominal                                = -90;

        # ssb_PositionsInBurs_BitmapPR
        # 1=short, 2=medium, 3=long
        ssb_PositionsInBurst_Bitmap               = 1;

        # ssb_periodicityServingCell
        # 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
        ssb_periodicityServingCell                = 2;

        # dmrs_TypeA_position
        # 0 = pos2, 1 = pos3
        dmrs_TypeA_Position                       = 0;

        # subcarrierSpacing
        # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
        subcarrierSpacing                         = 1;

        # tdd-UL-DL-ConfigurationCommon
        # subcarrierSpacing
        # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
        referenceSubcarrierSpacing                = 1;

        # pattern1
        # dl_UL_TransmissionPeriodicity
        # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
        # ext: 8=ms3, 9=ms4
        dl_UL_TransmissionPeriodicity             = 8;
        nrofDownlinkSlots                         = 3;
        nrofDownlinkSymbols                       = 6;
        nrofUplinkSlots                           = 2;
        nrofUplinkSymbols                         = 4;

        # pattern2
        pattern2: {
        dl_UL_TransmissionPeriodicity2            = 4;
        nrofDownlinkSlots2                        = 4;
        nrofDownlinkSymbols2                      = 0;
        nrofUplinkSlots2                          = 0;
        nrofUplinkSymbols2                        = 0;
        };

        ssPBCH_BlockPower                         = -25;
    });

    # ------- SCTP definitions
    SCTP :
    {
        # Number of streams to use in input/output
        SCTP_INSTREAMS                           = 2;
        SCTP_OUTSTREAMS                          = 2;
    };

    ////////// AMF parameters:
    amf_ip_address = ({ ipv4 = "192.168.70.132"; });

    NETWORK_INTERFACES: {
        GNB_IPV4_ADDRESS_FOR_NG_AMF              = "192.168.70.129";
        GNB_IPV4_ADDRESS_FOR_NGU                 = "192.168.70.129";
        GNB_PORT_FOR_S1U                         = 2152; # Spec 2152
    };
}
);

MACRLCs = (
{
  tr_s_preference        = "local_L1";
  tr_n_preference        = "local_RRC";
  pusch_TargetSNRx10     = 150;
  pucch_TargetSNRx10     = 200;
}
);

L1s = (
{
  tr_n_preference        = "local_mac";
  prach_dtx_threshold    = 120;
  pucch0_dtx_threshold   = 100;
  ofdm_offset_divisor    = 8;  # set this to UINT_MAX for offset 0
}
);

RUs = (
{
  local_rf                       = "yes";
  nb_tx                          = 1;
  nb_rx                          = 1;
  att_tx                         = 12;
  att_rx                         = 12;
  bands                          = [78];
  max_pdschReferenceSignalPower  = -27;
  max_rxgain                     = 114;
  eNB_instances                  = [0];
  clock_src                      = "internal";
}
);

rfsimulator :
{
  serveraddr     = "server";
  serverport     = 4043;
  options        = ();  # ("saviq"); or/and "chanmod"
  modelname      = "AWGN";
  IQfile         = "/tmp/rfsimulator.iqs";
};

security = {
  # preferred ciphering algorithms
  # the first one of the list that a UE supports is chosen
  # valid values: nea0, nea1, nea2, nea3
  ciphering_algorithms = ( "nea0" );

  # preferred integrity algorithms
  # the first one of the list that a UE supports is chosen
  # valid values: nia0, nia1, nia2, nia3
  integrity_algorithms = ( "nia2", "nia0" );

  # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
  # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
  drb_ciphering  = "yes";
  drb_integrity  = "no";
};

log_config :
{
  global_log_level = "info";
  hw_log_level     = "info";
  phy_log_level    = "info";
  mac_log_level    = "info";
  rlc_log_level    = "info";
  pdcp_log_level   = "info";
  rrc_log_level    = "info";
  ngap_log_level   = "info";
  f1ap_log_level   = "info";
};
