/* lteenb configuration file version 2018-10-18
 * Copyright (C) 2015-2018 Amarisoft
 */
{

%if enb.license_server_addr != '0.0.0.0':
  license_server: {
    server_addr: "${enb.license_server_addr}",
    name: "amarisoft",
  },
%endif

% if enb.rf_dev_type == 'zmq':
  /* Force sampling rate (if uncommented) */
  sample_rate: ${enb.sample_rate},
%endif

  /* Log filter: syntax: layer.field=value[,...]

     Possible layers are phy, mac, rlc, pdcp, rrc, nas, s1ap, x2ap, gtpu and
     all. The 'all' layer is used to address all the layers at the
     same time.

     field values:

     - 'level': the log level of each layer can be set to 'none',
     'error', 'info' or 'debug'. Use 'debug' to log all the messages.

     - 'max_size': set the maximum size of the hex dump. 0 means no
       hex dump. -1 means no limit.
  */
  //log_options: "all.level=debug,all.max_size=32",
  log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,s1ap.level=debug,s1ap.max_size=1,x2ap.level=debug,x2ap.max_size=1,rrc.level=debug,rrc.max_size=1",
  log_filename: "${enb.log_filename}",

  /* Enable remote API and Web interface */
  com_addr: "${enb.addr}:9001",

  /* RF driver configuration */
  include "amarisoft_rf_driver.cfg",

  mme_list: [
    {
      /* address of MME for S1AP connection. Must be modified if the MME
         runs on a different host. */
      mme_addr: "${enb.mme_addr}",
    },
  ],
  /* GTP bind address (=address of the ethernet interface connected to
     the MME). Must be modified if the MME runs on a different host. */
  gtp_addr: "${enb.gtp_bind_addr}",

  /* high 20 bits of SIB1.cellIdentifier */
  enb_id: ${enb.id},

  /* list of cells */
  cell_list: [

%for cell in enb.cell_list:
  {
    dl_earfcn: ${cell.dl_earfcn},
    rf_port: ${loop.index},
    cell_id: ${cell.cell_id},
    n_id_cell: ${cell.pci},
    tac: 0x0001,
    root_sequence_index: ${loop.index + 204}, /* PRACH root sequence index */

    ncell_list: [
%for ncell in enb.cell_list:
%if ncell.cell_id in cell.ncell_list:
      { n_id_cell: ${ncell.pci}, dl_earfcn: ${ncell.dl_earfcn}, cell_id: ${ncell.cell_id}, tac: 1 },
%endif
%endfor
    ],

    scell_list: [
%for scell_id in cell.scell_list:
      { cell_id: ${scell_id}, cross_carrier_scheduling: false, scheduling_cell_id: ${cell.cell_id}, ul_allowed: true},
%endfor
    ],
  },
%endfor
  ], /* cell_list */

  /* default cell parameters */
  cell_default: {
    /* Broadcasted PLMN identities */
    plmn_list: [
      "${enb.mcc}${enb.mnc}",
    ],

    n_antenna_dl: 1, /* number of DL antennas */
    n_antenna_ul: 1, /* number of UL antennas */
    n_rb_dl: ${enb.num_prb}, /* Bandwidth: 25: 5 MHz, 50: 10 MHz, 75: 15 MHz, 100: 20 MHz */
    cyclic_prefix: "normal",

    phich_duration: "normal",
    phich_resource: "1", /* ratio of NG */

    /* System Information Block type 1 */
    sib1: "amarisoft_sib1.asn",

    /* other SIBs, in same order as the scheduling list in SIB 1 */
    sib_sched_list: [ "amarisoft_sib23.asn" ],

    si_coderate: 0.30,   /* maximum code rate for SI/RA/P-RNTI messages */
    si_pdcch_format: 2, /* 2 or 3. Log2 of the number of CCEs for PDCCH
                           for SI/RA/P-RNTI */

    n_symb_cch: 0, /* number of symbols for CCH (0 = auto) */

    /* PDSCH dedicated config (currently same for all UEs) */
    pdsch_dedicated: {
      p_a: 0,
    },

    /* If defined, force for number of CCEs for UE specific PDCCH to
       2^pdcch_format. Otherwise it is computed from the reported
       CQI. Range: 0 to 3. */
    pdcch_format: 1,

    /* if defined, force the PDSCH MCS for all UEs. Otherwise it is
       computed from the reported CQI */
    /* pdsch_mcs: 12, */

    /* PUSCH dedicated config (currently same for all UEs) */
    pusch_dedicated: {
      beta_offset_ack_index: 9,
      beta_offset_ri_index: 6,
      beta_offset_cqi_index: 6,
    },

    /* MCS for Msg3 (=CCCH RRC Connection Request) */
    pusch_msg3_mcs: 0,

    /* this CQI value is assumed when none is received from the UE */
    initial_cqi: 5,

    /* if defined, force the PUSCH MCS for all UEs. Otherwise it is
       computed from the last received SRS/PUSCH. */
    //  pusch_mcs: 18,

    transmission_mode: ${enb.transmission_mode},

    /* Scheduling request period (ms). Must be >= 40 for HD-FDD */
    sr_period: 20,

    /* CQI report config */
    cqi_period: 40, /* period (ms). Must be >= 32 for HD-FDD */

    /* RI reporting is done with a period of m_ri * cqi_period.
       m_ri = 0 (default) disables RI reporting. */
//    m_ri: 8,

    pucch_dedicated: {
        /* ack/nack feedback mode when carrier aggregation is
           enabled. It can be "cs" (for at most two scells) or "pucch3"
           (used in all cases if more than two cells).  */
        ack_nack_feedback_mode_ca: "cs",

        /* TDD ack/nack feedback mode when a rel 10 UE is detected. It
           can be "bundling", "multiplexing", "cs" or "pucch3". By
           default is it the same as tdd_ack_nack_feedback_mode. */
        // tdd_ack_nack_feedback_mode_r10: "cs",

        /* number of PUCCH 1b CS resources. It determines
           the maximum number of UEs that can be scheduled in one TTI
           using carrier aggregation with PUCCH 1b CS ack/nack feedback. */
        n1_pucch_an_cs_count: 1,

        /* number of resource blocks for PUCCH 3. It determines
           the maximum number of UEs that can be scheduled in one TTI
           using carrier aggregation with PUCCH 3 ack/nack feedback. */
        n3_pucch_an_n_rb: 0,
    },

    /* SRS dedicated config. All UEs share these
       parameters. srs_config_index and freq_domain_position are
       allocated for each UE) */
    srs_dedicated: {
      srs_period: 80, /* period (ms). Must be >= 40 for HD-FDD */
      srs_bandwidth: 1,
      srs_hopping_bandwidth: 0,
    },

    /* MAC configuration (same for all UEs) */
    mac_config: {
       ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */
       dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */
    },

    /* CPU load limitation */
    pusch_max_its: 6, /* max number of turbo decoder iterations */

    /* dynamic power control */
    dpc: true,
    dpc_pusch_snr_target: 15,
    dpc_pucch_snr_target: 10,

    /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */
    cipher_algo_pref: [],
    /* RRC integrity algorithm preference. EIA0 is always the last. */
    integ_algo_pref: [2, 1],

    /* (in ms) send RRC connection release after this time of network
       inactivity */
    inactivity_timer: 10000,

    /* SRB configuration */
    srb_config: [
      {
        id: 1,
        maxRetxThreshold: 32,
        t_Reordering: 45,
        t_PollRetransmit: 60,
      },
      {
        id: 2 ,
        maxRetxThreshold: 32,
        t_Reordering: 45,
        t_PollRetransmit: 60,
      }
    ],

    /* DRB configuration */
    drb_config: "amarisoft_drb.cfg",

% if enb.enable_measurements:
    /* measurement configuration */
    meas_config_desc: {
        a1_report_type: "${enb.a1_report_type}",
        a1_${enb.a1_report_type}: ${enb.a1_report_value},
        a1_hysteresis: ${enb.a1_hysteresis},
        a1_time_to_trigger: ${enb.a1_time_to_trigger},
        a2_report_type: "${enb.a2_report_type}",
        a2_${enb.a2_report_type}: ${enb.a2_report_value},
        a2_hysteresis: ${enb.a2_hysteresis},
        a2_time_to_trigger: ${enb.a2_time_to_trigger},
        a3_report_type: "${enb.a3_report_type}",
        a3_offset: ${enb.a3_report_value},
        a3_hysteresis: ${enb.a3_hysteresis},
        a3_time_to_trigger: ${enb.a3_time_to_trigger},
    },

    /* measurement gap configuration */
    meas_gap_config: "gp0",

    /* if true, initiate a handover when a suitable measurement report
       is received */
    ho_from_meas: true,
% endif
  },
}
