/* 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: "${enb.log_options}",
  log_filename: "${enb.log_filename}",

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

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

% if enb.enable_dl_awgn:
  channel_dl: {
    type: "awgn",
    snr: ${enb.dl_awgn_snr}
  },
% endif

  mme_list: [
    {
      s1ap_bind_addr: "${enb.addr}",
      /* 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: ${cell.rf_port},
    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: [
      "${'{0:03}'.format(int(enb.mcc))}${'{0:02}'.format(int(enb.mnc))}",
    ],

% if int(enb.get('transmission_mode')) == 1:
    n_antenna_dl: 1, /* number of DL antennas */
    n_antenna_ul: 1, /* number of UL antennas */
% else:
    n_antenna_dl: 2, /* number of DL antennas */
    n_antenna_ul: 2, /* number of UL antennas */
% endif

    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. */
    % if int(enb.get('transmission_mode')) > 1:
      m_ri: 8,
    % endif

    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: 160, /* 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
  },
}
