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

gNBs =
(
 {
   ////////// Identification parameters:
   gNB_ID    =  0xe00;

   cell_type =  "CELL_MACRO_GNB";

   gNB_name  =  "gNB-Eurecom-5GNRBox";

   // Tracking area code, 0x0000 and 0xfffe are reserved values
   tracking_area_code  =  1;

   plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});

   tr_s_preference     = "local_mac"

   ////////// Physical parameters:

   servingCellConfigCommon = (
   {
     #spCellConfigCommon

     physCellId                                                    = 0;

     # downlinkConfigCommon
     # frequencyInfoDL
     # this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
     absoluteFrequencySSB                                          = 641032;
     dl_frequencyBand                                              = 78;
     # this is 3600 MHz
     dl_absoluteFrequencyPointA                                    = 640000;
     #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=0,L=50 (275*(L-1))+RBstart
     initialDLBWPlocationAndBandwidth                              = 6366;
     # 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                              = 6366;
     # subcarrierSpacing
     # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
     initialULBWPsubcarrierSpacing                                 = 1;
     #rach-ConfigCommon
     #rach-ConfigGeneric
     prach_ConfigurationIndex                                      = 98;
     #prach_msg1_FDM
     #0 = one, 1=two, 2=four, 3=eight
     prach_msg1_FDM                                                = 0;
     prach_msg1_FrequencyStart                                     = 0;
     zeroCorrelationZoneConfig                                     = 13;
     preambleReceivedTargetPower                                   = -118;
     #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;
     #ra_ReponseWindow
     #1,2,4,8,10,20,40,80
     ra_ResponseWindow                                             = 4;
     #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;
     #oneHalf (0..15) 4,8,12,16,...60,64
     ssb_perRACH_OccasionAndCB_PreamblesPerSSB                     = 15;
     #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 precendence 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_PR                                       = 2;
     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
      dl_UL_TransmissionPeriodicity                                 = 6;
      nrofDownlinkSlots                                             = 7;
      nrofDownlinkSymbols                                           = 6;
      nrofUplinkSlots                                               = 2;
      nrofUplinkSymbols                                             = 4;

      ssPBCH_BlockPower                                             = -25;
  }

  );

 # Dedicated Serving Cell Configuration
  servingCellConfigDedicated = (
  {
    # DL PTRS related parameters.
    # 3GPP TS 38.331 PTRS-DownlinkConfig

    # frequencyDensity value range: 1-276
    dl_ptrsFreqDensity0_0                                           = 25;
    dl_ptrsFreqDensity1_0                                           = 75;

    # timeDensity value range: 0-29
    dl_ptrsTimeDensity0_0                                           =  2;
    dl_ptrsTimeDensity1_0                                           =  4;
    dl_ptrsTimeDensity2_0                                           = 10;

    # epre_Ratio
    # 0 = "00", 1 = "01" in TS 38.214, table 4.1-2
    dl_ptrsEpreRatio_0                                              =  0;

    # resourceElementOffset
    # 0 = offset01 1 = offset02, 2 = offset02
    # 3GPP TS 38.331 PTRS-DownlinkConfig; TS 38.211 sec. 7.4.1.2.2
    dl_ptrsReOffset_0                                               =  0;

    # UL PTRS related parameters.
    # 3GPP TS 38.331 PTRS-UplinkConfig

    # frequencyDensity value range: 1-276
    ul_ptrsFreqDensity0_0                                           = 25;
    ul_ptrsFreqDensity1_0                                           = 75;

    # timeDensity value range: 0-29
    ul_ptrsTimeDensity0_0                                           =  2;
    ul_ptrsTimeDensity1_0                                           =  4;
    ul_ptrsTimeDensity2_0                                           = 10;

    # resourceElementOffset
    # 0 = offset01 1 = offset02, 2 = offset02
    # TS 38.331 PTRS-UplinkConfig; TS 38.211 sec. 6.4.1.2.2.1
    ul_ptrsReOffset_0                                               =  0;

    # maxNrofPorts
    # 0 = n1, 1 = n2
    ul_ptrsMaxPorts_0                                               =  0;

    # ptrs-Power
    # 0 = p00, 1 = p01, 2 = p10, 3 = p11
    #ul_ptrsPower_0                                                 =  0;
    }
  );

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


  ////////// MME parameters:
  mme_ip_address      = ( { ipv4       = "192.168.12.26";
                            ipv6       = "192:168:30::17";
                            active     = "yes";
                            preference = "ipv4";
                          }
                        );

  NETWORK_INTERFACES :
  {

      GNB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
      GNB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.111/24";
      GNB_INTERFACE_NAME_FOR_S1U               = "eth0";
      GNB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.111/24";
      GNB_PORT_FOR_S1U                         = 2152; # Spec 2152
  };
 }
);

MACRLCs = (
 {
  num_cc = 1;
  tr_s_preference = "local_L1";
  tr_n_preference = "local_RRC";
  }
);

L1s = (
{
  num_cc = 1;
  tr_n_preference = "local_mac";
  ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);

RUs = (
 {
   local_rf       = "yes"
   nb_tx          = 1
   nb_rx          = 1
   att_tx         = 0
   att_rx         = 0;
   bands          = [7];
   max_pdschReferenceSignalPower = -27;
   max_rxgain                    = 114;
   eNB_instances  = [0];
   ## beamforming 1x2 matrix: 1 layer x 2 antennas
   bf_weights = [0x00007fff, 0x0000];
   ## beamforming 1x4 matrix: 1 layer x 4 antennas
   #bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
   ## beamforming 2x2 matrix:
   #bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
   ## beamforming 4x4 matrix:
   #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
   sdr_addrs = "type=x300";
   clock_src = "external";
  }
);

THREAD_STRUCT = (
 {
   #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
   parallel_config    = "PARALLEL_RU_L1_TRX_SPLIT";
   #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
   worker_config      = "WORKER_ENABLE";
 }
);

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

  # preferred integrity algorithms
  # the first one of the list that an UE supports in 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";
};
