# SPDX-FileCopyrightText: Copyright (C) 2021-2026 Software Radio Systems Limited
# SPDX-License-Identifier: BSD-3-Clause-Open-MPI

ran_node_name: gnb01             # Optional TEXT (gnb01). Sets the RAN node name.
gnb_id: 411                         # Optional UINT (411). gNodeB identifier.
gnb_id_bit_length: 22               # Optional UINT (22). gNodeB identifier length in bits. Supported: [22 - 32].
gnb_cu_up_id: 0                     # Optional UINT (0). Sets the gNB CU-UP ID. Supported: [0 - 68719476735].
gnb_du_id: 0                        # Optional UINT (0). Sets the gNB DU ID. Supported: [0 - 68719476735].
dryrun: false                       # Optional BOOLEAN (false). Enable application dry run mode. Supported: [false, true].

cells:                              # Optional TEXT. Sets the cell configuration on a per cell basis, overwriting the default configuration defined by cell_cfg.
  - pci: 1                          # Optional UINT. Override the PCI defined by the default cell in cell_cfg.
    dl_arfcn: 536020                # Optional UINT. Set the ARFCN for the above PCI. Note, this must match the value used in the cell_cfg section.
  - pci: 2                          # Optional UINT. Set the PCI of the second cell.
    dl_arfcn: 532020                # Optional UINT. Set the ARFCN of the second cell.

qos:                  # Optional TEXT. Configures RLC and PDCP radio bearers on a per 5QI basis. Each list entry should begin with "-".
- five_qi: 9 # Optional UINT (9). 5QI. Supported: [0 - 255].
  rlc:
    mode: am # Optional TEXT (am). RLC mode.
    um-bidir:
      tx:
        sn: 0          # Optional UINT (0). RLC UM TX SN.
        queue-size: 0  # Optional UINT (0). RLC UM TX SDU queue size.
        queue-bytes: 0 # Optional UINT (0). RLC UM TX SDU queue limit in bytes.
      rx:
        sn: 0           # Optional UINT (0). RLC UM RX SN.
        t-reassembly: 0 # Optional INT (0). RLC UM t-Reassembly.
    am:
      tx:
        sn: 0                 # Optional UINT (0). RLC AM TX SN size.
        t-poll-retransmit: 0  # Optional INT (0). RLC AM TX t-PollRetransmit (ms).
        max-retx-threshold: 0 # Optional UINT (0). RLC AM max retx threshold.
        poll-pdu: 0           # Optional INT (0). RLC AM TX PollPdu.
        poll-byte: 0          # Optional INT (0). RLC AM TX PollByte.
        max_window: 0         # Optional UINT (0). Non-standard parameter that limits the tx window size. Can be used for limiting memory usage with large windows. 0 means no limits other than the SN size (i.e. 2^[sn_size-1]).
        queue-size: 4096      # Optional UINT (4096). RLC AM TX SDU queue size.
        queue-bytes: 6172672  # Optional UINT (6172672). RLC AM TX SDU queue size in bytes.
      rx:
        sn: 0                # Optional UINT (0). RLC AM RX SN.
        t-reassembly: 0      # Optional INT (0). RLC AM RX t-Reassembly.
        t-status-prohibit: 0 # Optional INT (0). RLC AM RX t-StatusProhibit.
        max_sn_per_status: 0 # Optional UINT (0). RLC AM RX status SN limit.
  pdcp:
    rohc:
      rohc_type: none      # Optional TEXT (none). ROHC type (none/rohc/ul_only_rohc). Values: {none, rohc, ul_only_rohc}. Default: none. Supported: [none, rohc, uplink_only_rohc].
      max_cid: 15          # Optional UINT (15). Maximum CID.
      profile0x0001: false # Optional BOOLEAN (false). Configure profile0x0001 (ROHCv1 RTP/UDP/IP). Supported: [false, true].
      profile0x0002: false # Optional BOOLEAN (false). Configure profile0x0002 (ROHCv1 UDP/IP). Supported: [false, true].
      profile0x0003: false # Optional BOOLEAN (false). Configure profile0x0003 (ROHCv1 ESP/IP). Supported: [false, true].
      profile0x0004: false # Optional BOOLEAN (false). Configure profile0x0004 (ROHCv1 IP). Supported: [false, true].
      profile0x0006: false # Optional BOOLEAN (false). Configure profile0x0006 (ROHCv1 TCP/IP). Supported: [false, true].
      profile0x0101: false # Optional BOOLEAN (false). Configure profile0x0101 (ROHCv2 RTP/UDP/IP). Supported: [false, true].
      profile0x0102: false # Optional BOOLEAN (false). Configure profile0x0102 (ROHCv2 UDP/IP). Supported: [false, true].
      profile0x0103: false # Optional BOOLEAN (false). Configure profile0x0103 (ROHCv2 ESP/IP). Supported: [false, true].
      profile0x0104: false # Optional BOOLEAN (false). Configure profile0x0104 (ROHCv2 IP). Supported: [false, true].
    tx:
      sn: 0                         # Optional UINT (0). PDCP TX SN size.
      discard_timer: 0              # Optional INT (0). PDCP TX discard timer (ms).
      status_report_required: false # Optional BOOLEAN (false). PDCP TX status report required. Supported: [false, true].
    rx:
      sn: 0                        # Optional UINT (0). PDCP RX SN size.
      t_reordering: 0              # Optional INT (0). PDCP RX t-Reordering (ms).
      out_of_order_delivery: false # Optional BOOLEAN (false). PDCP RX enable out-of-order delivery. Supported: [false, true].
  f1u_cu_up:
    backoff_timer: 5 # Optional INT (5). F1-U backoff timer (ms).
    queue_size: 8192 # Optional UINT (8192). F1-U backoff timer (ms).
    batch_size: 256  # Optional UINT (256). F1-U backoff timer (ms).
  f1u_du:
    backoff_timer: 0  # Optional INT (0). F1-U backoff timer (ms).
    ul_buffer_size: 0 # Optional UINT (0). F1-U handover buffer size.

srbs:                               # Optional TEXT. Configures signaling radio bearers. Each list entry should begin with "-".
  - srb_id: 0 # Optional UINT (0). SRB Id. Format: legal values: {1, 2}.
    rlc:
      tx:
        sn: 0                 # Optional UINT (0). RLC AM TX SN size.
        t-poll-retransmit: 0  # Optional INT (0). RLC AM TX t-PollRetransmit (ms).
        max-retx-threshold: 0 # Optional UINT (0). RLC AM max retx threshold.
        poll-pdu: 0           # Optional INT (0). RLC AM TX PollPdu.
        poll-byte: 0          # Optional INT (0). RLC AM TX PollByte.
        max_window: 0         # Optional UINT (0). Non-standard parameter that limits the tx window size. Can be used for limiting memory usage with large windows. 0 means no limits other than the SN size (i.e. 2^[sn_size-1]).
        queue-size: 4096      # Optional UINT (4096). RLC AM TX SDU queue size in PDUs.
        queue-bytes: 6172672  # Optional UINT (6172672). RLC AM TX SDU queue size in bytes.
      rx:
        sn: 0                # Optional UINT (0). RLC AM RX SN.
        t-reassembly: 0      # Optional INT (0). RLC AM RX t-Reassembly.
        t-status-prohibit: 0 # Optional INT (0). RLC AM RX t-StatusProhibit.
        max_sn_per_status: 0 # Optional UINT (0). RLC AM RX status SN limit.

cu_cp:
  max_nof_dus: 6                         # Optional UINT (6). Sets the maximum number of DU connections that the CU-CP may accept.
  max_nof_cu_ups: 6                      # Optional UINT (6). Sets the maximum number of CU-UP connections that the CU-CP may accept.
  max_nof_ues: 8192                      # Optional UINT (8192). Sets the maximum number of UEs that the CU-CP may accept.
  max_nof_drbs_per_ue: 8                 # Optional UINT (8). Sets the maximum number of DRBs per UE. Supported: [1 - 29].
  inactivity_timer: 120                  # Optional INT (120). Sets the UE/PDU Session/DRB inactivity timer in seconds. Supported: [1 - 7200].
  request_pdu_session_timeout: 3         # Optional INT (3). Timeout for the setup of a PDU session after an InitialUeMessage was sent to the core, in seconds. The timeout must be larger
                                         # than T310. If the value is reached, the UE will be released.
  enable_rrc_inactive: false             # Optional BOOLEAN (false). Enables the RRC INACTIVE state for UEs. Supported: [false, true].
  ran_paging_cycle: 32                   # Optional UINT (32). Sets the default RAN paging cycle for INACTIVE UEs. Supported: [32, 64, 128, 256].
  nof_i_rnti_ue_bits: 13                 # Optional UINT (13). Sets the number of bits used for the I-RNTI UE identifier. Supported: [1 - 18].
  t380: 10                               # Optional INT (10). Sets the RRC inactivity timer T380 in minutes. Supported: [5, 10, 20, 30, 60, 120, 360, 720].
  extra_amfs:                            # Optional TEXT. Sets the list of extra AMFs for the CU-CP to connect to.

  amf:
    no_core: false                        # Optional BOOLEAN (false). Setting to true allows the gNB to run without a core. Supported: [false, true].
    amf_reconnection_retry_time: 1000     # Optional UINT (1000). Sets the time in ms to wait before retrying to connect to the AMF after a failed connection attempt.
    addrs: 127.0.1.100                    # Required TEXT. Sets the AMF IP addresses for N2 interface. Multiple addresses supported for SCTP multi-homing. Format: IPV4 or IPV6 IP address.
    port: 38412                           # Optional UINT (38412). Sets the AMF port. Supported: [20000 - 40000].
    bind_addrs: 127.0.0.1                 # Optional TEXT (127.0.0.1). Sets the local bind addresses for N2 interface. Multiple addresses supported for SCTP multi-homing.
    bind_interface: auto                  # Optional TEXT (auto). Sets network device to bind for N2 interface.
    sctp_rto_initial: 120                 # Optional INT (120). Sets the initial retransmission timeout when creating the SCTP connection.
    sctp_rto_min: 120                     # Optional INT (120). Sets the minimum retransmission timeout for the SCTP connection.
    sctp_rto_max: 500                     # Optional INT (500). Sets the maximum retransmission timeout for the SCTP connection.
    sctp_init_max_attempts: 3             # Optional INT (3). Sets the maximum retransmission attempts for the initial SCTP connection.
    sctp_max_init_timeo: 500              # Optional INT (500). Sets the maximum retransmission timeout for the initial SCTP connection.
    sctp_hb_interval: 30000               # Optional INT (30000). SCTP heartbeat interval in milliseconds. Supported: [-1 - inf] (-1 to use system default).
    sctp_assoc_max_retx: 10               # Optional INT (10). SCTP association max retransmissions. Supported: [-1 - inf] (-1 to use system default).
    sctp_nodelay: false                   # Optional BOOLEAN (false). Setting to true allows the gNB to send SCTP messages as soon as possible without any Nagle-like algorithm. Supported: [false, true].
    procedure_timeout: 5000               # Optional UINT (5000). Sets the AMF NGAP procedure timeout in milliseconds.
    supported_tracking_areas:             # Optional TEXT. Sets the list of tracking areas supported by this AMF.
      -                                     # Supported TAC #1
        tac: 7                                # Required UINT. Sets the Tracking Area Code.
        plmn_list:                            # Required TEXT. Sets the list of PLMN items supported for this Tracking Area.
          -                                     # Supported PLMN #1
            plmn: "00101"                         # Required TEXT. Sets the Public Land Mobile Network code. Format: 7-digit PLMN code containing MCC & MNC.
            tai_slice_support_list:               # Required TEXT. Sets the list of TAI slices for this PLMN item.
              -                                     # Supported TAI Slice(s) for PLMN
                sst: 1                                # Optional UINT (0). Sets the Slice Service Type. Supported: [0 - 255].
                sd: 16777215                          # Optional UINT (16777215). Sets the Service Differentiator. Supported: [0 - 16777215].

  xnap:
    procedure_timeout: 5000              # Optional UINT (5000). Sets the Xn-AP procedure timeout in milliseconds.
    reconnect_timer: 10000               # Optional UINT (10000). Sets the Xn-AP reconnect timer in milliseconds.
    no_connection_init: false            # Optional BOOLEAN (false). Disables Xn-AP connection initiation. Supported: [false, true].
    gateways:                            # Optional TEXT. Sets the list of Xn-AP gateway addresses. Each list entry should begin with "-".
      -
        bind_addrs: x.x.x.x             # Required TEXT. Sets the gateway IP addresses.
        sctp:
          sctp_rto_initial: 120
          sctp_rto_min: 120
          sctp_rto_max: 500
          sctp_init_max_attempts: 3
          sctp_max_init_timeo: 500
          sctp_hb_interval: 30000
          sctp_assoc_max_retx: 10
          sctp_nodelay: false
        connections:              # Optional TEXT. Sets the list of Xn-C peer connections reachable via this gateway.
          -
            peer_addrs:             # Required TEXT. Sets the peer gNB IP addresses for this XnAP connection.

  mobility:
    trigger_handover_from_measurements: false   # Optional BOOLEAN (false). Sets whether or not to start HO if neighbor cells become stronger. Supported: [false, true].
    trigger_cho_on_ue_setup: false              # Optional BOOLEAN (false). Sets whether to trigger Conditional Handover on UE setup. Supported: [false, true].
    cho_timeout_ms: 10000                       # Optional UINT (10000). Sets the Conditional Handover timeout in milliseconds. Supported: [1 - 600000].
    cells:                                      # Optional TEXT. Sets the list of cells known to the CU-CP, their configs (if not provided over F1) and their respective neighbor cells.
      -                                         # Define Cell 1
        nr_cell_id:                               # Required UINT. The ID of a cell that belongs to this gNB.
        periodic_report_cfg_id:                   # Optional UINT. The periodical report configuration to use for this cell.
        ncells:                                   # Required TEXT. List of neighbor cells.
          -                                         # Define neighbour cell(s) of Cell 1.
            nr_cell_id:                             # Required UINT. The ID of this neighbor cell.
            report_configs:                         # Required TEXT. List of report configurations to use for measurements of this neighbor cell.
      -                                         # Define Cell 2
        nr_cell_id:                               # Required UINT. The ID of a cell that does not belong to this gNB.
        ncells:                                   # Required TEXT. List of neighbor cells.
          -                                         # Define neighbour cell(s) of Cell 2.
            nr_cell_id:                             # Required UINT. The ID of this neighbor cell.
            report_configs:                         # Required TEXT. List of report configurations to use for measurements of this neighbor cell.
        gnb_id_bit_length:                        # Optional UINT. The ID of this cell's gNB. Must be present if the cell does not belong to this gNB. Supported: [22 - 32].
        pci:                                      # Optional UINT. The PCI of this cell. Must be present if the cell does not belong to this gNB. Supported: [0 - 1007].
        band:                                     # Optional TEXT (enum). The NR band of this cell. Must be present if the cell does not belong to this gNB.
        ssb_arfcn:                                # Optional UINT. Sets the SSB ARFCN of this cell.
        plmn:                                     # Optional TEXT. Sets the PLMN of this cell.
        tac:                                      # Optional UINT. Sets the Tracking Area Code of this cell. Supported: [0 - 16777215].
        ssb_scs:                                  # Optional UINT. The SSB subcarrier spacing of this cell in KHz. Must be present if cell does not belong to this gNB. Supported: [15, 30, 60, 120, 240].
        ssb_period:                               # Optional UINT. The SSB period of this cell in ms. Must be present if cell does not belong to this gNB. Supported: [5, 10, 20, 40, 80, 160].
        ssb_offset:                               # Optional UINT. The SSB offset of this cell. Must be present if cell does not belong to this gNB.
        ssb_duration:                             # Optional UINT. The SSB duration of this cell in subframes. Must be present if cell does not belong to this gNB. Supported: [1, 2, 3, 4, 5].
    report_configs:                             # Optional TEXT. Sets the list of report configurations to dynamically build a measurement configuration sent to UEs.
      -                                         # Define report configs to be used by the UEs
        report_cfg_id:                            # Required UINT. The ID of this report configuration.
        report_type:                              # Required TEXT. The type of the report. Supported: [event_triggered, periodical, cond_trigger].
        event_triggered_report_type:              # Optional TEXT. Sets the type of event triggered report. Supported: [a1, a2, a3, a4, a5, a6, d1, t1, d2].
        report_interval_ms:                        # Optional UINT. The report interval in ms. Supported: [120, 240, 480, 640, 1024, 2048, 5120, 10240, 20480, 40960, 60000, 360000, 720000, 1800000].
        meas_trigger_quantity:                    # Optional TEXT. Sets the quantity to be measured. Supported: [rsrp, rsrq, sinr].
        meas_trigger_quantity_threshold_db:       # Optional INT. Sets the measurement trigger quantity threshold in dB for A1/A2/A4/A5 events. Valid ranges: RSRP [-156..-31] dBm, RSRQ [-43..20] dB, SINR [-23..40] dB. Supported: [-156 - 40].
        meas_trigger_quantity_threshold_2_db:     # Optional INT. Sets the measurement trigger quantity threshold 2 in dB for A5 events. Valid ranges: RSRP [-156..-31] dBm, RSRQ [-43..20] dB, SINR [-23..40] dB. Supported: [-156 - 40].
        meas_trigger_quantity_offset_db:          # Optional INT. Sets the measurement trigger quantity offset in dB for A3/A6 events. Supported: [-15 - 15].
        hysteresis_db:                            # Optional UINT. Sets the hysteresis in dB for measurement report trigger. Supported: [0 - 15].
        time_to_trigger_ms:                       # Optional UINT. Sets the time in ms during which a condition must be met before measurement report trigger. Supported: [0, 40, 64, 80, 100, 128, 160, 256, 320, 480, 512, 640, 1024, 1280, 2560, 5120].
        periodic_ho_rsrp_offset_db: -1            # Optional INT (-1). Sets the RSRP offset for periodic HO triggering in dB. -1 disables. Note the actual value is field value * 0.5 dB. Supported: [-1 - 30].
        t312:                                     # Optional UINT. Sets the T312 timer in ms. Supported: [0, 50, 100, 200, 300, 400, 500, 1000].
        distance_thresh_from_ref1_km:             # Optional FLOAT. Sets the D1/D2 distance threshold 1 in km. Supported: [0.0 - 3276.75].
        distance_thresh_from_ref2_km:             # Optional FLOAT. Sets the D1/D2 distance threshold 2 in km. Supported: [0.0 - 3276.75].
        hysteresis_location_km:                   # Optional FLOAT. Sets the D1/D2 location hysteresis in km. Supported: [0.0 - 327.68].
        ref_location1:
          latitude:                               # Optional FLOAT. Sets D1 reference location 1 latitude in degrees. Supported: [-90.0 - 90.0].
          longitude:                              # Optional FLOAT. Sets D1 reference location 1 longitude in degrees. Supported: [-180.0 - 180.0].
        ref_location2:
          latitude:                               # Optional FLOAT. Sets D1 reference location 2 latitude in degrees. Supported: [-90.0 - 90.0].
          longitude:                              # Optional FLOAT. Sets D1 reference location 2 longitude in degrees. Supported: [-180.0 - 180.0].
        t1_thres:                                 # Optional TEXT. Sets the T1 time threshold. Format: Unix ms integer or YYYY-MM-DDTHH:MM:SS[.mmm].
        duration_s:                               # Optional FLOAT. Sets the T1 duration in seconds. Supported: [0.1 - 600.0].

  rrc:
    force_reestablishment_fallback: false    # Optional BOOLEAN (false). Forces RRC re-establishment fallback to RRC setup. Supported: [false, true].
    force_resume_fallback: false             # Optional BOOLEAN (false). Forces RRC Resume to fall back to RRC Setup. Supported: [false, true].
    rrc_procedure_guard_time_ms: 1000        # Optional UINT (1000). Sets the guard time in ms used for RRC message exchange with UE. This is added to the RRC procedure timeout.

  security:
    integrity: not_needed                    # Optional TEXT (not_needed). Sets the default integrity protection indication for DRBs. Supported: [not_needed, preferred, required].
    confidentiality: required                # Optional TEXT (required). Sets the default confidentiality protection indication for DRBs. Supported: [not_needed, preferred, required].
    nea_pref_list: nea0,nea2,nea1,nea3       # Optional TEXT (nea0,nea2,nea1,nea3). Sets the ordered preference list for the selection of encryption algorithm (NEA).
    nia_pref_list: nia2,nia1,nia3            # Optional TEXT (nia2,nia1,nia3). Sets the ordered preference list for the selection of integrity algorithm (NIA).

  f1ap:
    procedure_timeout: 1000                  # Optional UINT (1000). Sets the time the F1AP waits for a DU response in milliseconds.

  e1ap:
    procedure_timeout: 1000                  # Optional UINT (1000). Sets the time the E1AP waits for a CU-UP response in milliseconds.

cu_up:
  max_nof_ues: 16384                     # Optional UINT (16384). Sets the maximum number of UE bearer contexts supported by the CU-UP. Supported: [1 - 65536].
  warn_on_drop: false                    # Optional BOOLEAN (false). Enables logging a warning for dropped packets in GTP-U and PDCP due to full queues. Supported: [false, true].
  plmn_list:                             # Optional TEXT. Sets the list of supported PLMN IDs. Each entry is a 5 or 6 digit string (MCC+MNC). Supported: up to 12 PLMNs.

  ngu:
    no_core: false                        # Optional BOOLEAN (false). Setting to true allows the gNB to run without a core. Supported: [false, true].
    gtpu:
      queue_size: 2046                       # Optional UINT (2046). Sets the GTP-U queue size, in PDUs.
      batch_size: 256                        # Optional UINT (256). Sets the maximum number of GTP-U PDUs processed in a batch.
      reordering_timer: 0                    # Optional UINT (0). Sets the GTP-U RX reordering timer in milliseconds. 0 disables reordering.
      rate_limiter_period: 100               # Optional UINT (100). Sets the GTP-U RX rate limiter period in milliseconds.
      ignore_ue_ambr: true                   # Optional BOOLEAN (true). Ignores GTP-U DL UE-AMBR rate limiter. Supported: [false, true].
      teid_release_linger_time: 100          # Optional UINT (100). Sets the TEID linger time after release in milliseconds.
    socket:                               # Optional TEXT. Defines socket(s) for NG-U interface. Each list entry should begin with "-".
      -                                     # Socket 1
        bind_addr: 127.0.0.1                  # Optional TEXT (127.0.0.1). Sets local IP address to bind for N3 interface. Format: IPV4 or IPV6 IP address.
        bind_interface: auto                  # Optional TEXT (auto). Sets network device to bind for N3 interface.
        ext_addr: auto                        # Optional TEXT (auto). Sets the external IP address for N3 traffic. "auto" uses bind_addr.
        udp:
          max_rx_msgs: 256                      # Optional UINT (256). Sets the maximum number of messages RX from a socket in a single syscall.
          pool_threshold: 0.9                   # Optional FLOAT (0.9). Sets the pool occupancy threshold above which packets are dropped. Supported: [0.0 - 1.0].
          tx_qsize: 4096                        # Optional UINT (4096). Sets the size of TX queue used for batching SDUs.
          max_tx_msgs: 256                      # Optional UINT (256). Sets the maximum amount of messages TX in a single syscall.
          max_tx_segments: 256                  # Optional UINT (256). Sets the maximum amount of segments TX in a single SDU.
          reuse_addr: false                     # Optional BOOLEAN (false). Allow multiple sockets to bind to the same port. Supported: [false, true].
          dscp:                                 # Optional UINT. Sets the Differentiated Services Code Point value. Supported: [0 - 63].

  test_mode:
    enable: false                         # Optional BOOLEAN (false). Enables or disables CU-UP test mode. Supported: [false, true].
    integrity_enable: true                # Optional BOOLEAN (true). Enables or disables PDCP integrity testing. Supported: [false, true].
    ciphering_enable: true                # Optional BOOLEAN (true). Enables or disables PDCP ciphering testing. Supported: [false, true].
    nea_algo: 2                           # Optional UINT (2). Sets the NEA algorithm index for test mode. Supported: [0 - 3].
    nia_algo: 2                           # Optional UINT (2). Sets the NIA algorithm index for test mode. Supported: [1 - 3].
    ue_ambr: 40000000000                  # Optional UINT (40000000000). Sets the DL UE-AMBR used for testing in bps.
    attach_detach_period: 0               # Optional UINT (0). Sets the attach/detach period for test mode in milliseconds. 0 means always attached.
    reestablish_period: 0                 # Optional UINT (0). Sets the reestablish period for test mode in milliseconds. 0 means no re-establishment.
    f1u_peer_address: 127.0.10.2          # Optional TEXT (127.0.10.2). Sets the F1-U peer address for test mode.
    nof_ues: 1                            # Optional UINT (1). Sets the number of test UEs.

du:
  warn_on_drop: false                   # Optional BOOLEAN (false). Enables logging a warning for dropped packets in F1-U, RLC and MAC due to full queues. Supported: [false, true].

cell_cfg:
  pci: 1                                # Optional UINT (1). Sets the Physical Cell ID. Supported: [0 - 1007].
  sector_id:                             # Optional UINT. Sets the Sector ID (4-14 bits). Concatenated with gNB Id to form NR Cell Identity. Auto-derived if not specified. Supported: [0 - 16383].
  dl_arfcn: 536020                      # Required UINT (536020). Sets the Downlink ARFCN.
  band: auto                            # Optional TEXT (auto). Sets the NR band being used for the cell. If not specified, will be set automatically based on ARFCN.
  common_scs: 15                        # Required UINT (15). Sets the subcarrier spacing in kHz. Supported: [15, 30, 60, 120].
  channel_bandwidth_MHz: 20             # Required UINT (20). Sets the channel bandwidth in MHz. Supported: [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100].
  nof_antennas_dl: 1                    # Optional UINT (1). Sets the number of antennas for downlink transmission. Supported: [1, 2, 4].
  nof_antennas_ul: 1                    # Optional UINT (1). Sets the number of antennas for uplink transmission. Supported: [1, 2, 4].
  plmn: "00101"                         # Required TEXT (00101). Sets the Public Land Mobile Network code. Format: 7-digit PLMN code containing MCC & MNC.
  tac: 7                                # Required UINT (7). Sets the Tracking Area Code.
  enabled: true                         # Optional BOOLEAN (true). Sets whether the cell is enabled on start-up or not. Supported: [false, true].
  cell_barred: false                    # Optional BOOLEAN (false). Sets whether the cell is broadcast as barred for new access. Supported: [false, true].
  intra_freq_reselection: true          # Optional BOOLEAN (true). Enables intra-frequency cell reselection. Supported: [false, true].
  q_rx_lev_min: -70                     # Optional INT (-70). Sets the required minimum received RSRP level for cell selection/re-selection, in dBm. Supported: [-70 - -22].
  q_qual_min: -20                       # Optional INT (-20). Sets the required minimum received RSRQ level for cell selection/re-selection, in dB. Supported: [-43 - -12].
  pcg_p_nr_fr1:                         # Optional INT. Sets the maximum total TX power for the UE in this NR cell group in FR1. Supported: [-30 - +23].
  additional_plmns:                     # Optional TEXT. Sets additional PLMN list for the cell.
  slicing:                              # Optional TEXT. Configures network slicing options. This can only be set via the configuration file.
    -                                     # Configure Slice 1, for further slices, replicate below format.
      sst: 1                                  # Optional UINT (1). Sets the Slice Service Type. Supported: [0 - 255].
      sd: 0                                   # Optional UINT (0). Sets the Service Differentiator. Supported: [0 - 16777215].
      sched_cfg:                              # Scheduler configuration for the slice.
        min_prb_policy_ratio: 0                 # Optional UINT (0). Sets the minimum percentage of PRBs to be allocated to the slice. Supported: [0 - 100].
        max_prb_policy_ratio: 100               # Optional UINT (100). Sets the maximum percentage of PRBs to be allocated to the slice. Supported: [1 - 100].
        ded_prb_policy_ratio: 1                 # Optional UINT. Sets the dedicated percentage of PRBs to be allocated to the slice. Supported: [1 - 100].
        priority: 0                             # Optional UINT (0). Sets the slice scheduler priority. Supported: [0 - 254].
        policy:
          qos_sched:
            combine_function: gbr_prioritized     # Optional TEXT (gbr_prioritized). Sets the QoS-aware scheduler weight combining function. Supported: [gbr_prioritized, geometric_mean].
            pf_fairness_coeff: 2                  # Optional FLOAT (2). Sets the fairness coefficient for the Proportional Fair policy scheduler.
            prio_enabled: true                    # Optional BOOLEAN (true). Enables the QoS Flow priority in QoS-aware scheduling. Supported: [false, true].
            pdb_enabled: true                     # Optional BOOLEAN (true). Enables the Packet Delay Budget (PDB) in QoS-aware scheduling. Supported: [false, true].
            gbr_enabled: true                     # Optional BOOLEAN (true). Enables the Guaranteed Bit Rate (GBR) in QoS-aware scheduling. Supported: [false, true].
          rr_sched:                               # Optional. Round-robin scheduler policy configuration.

  mac_cell_group:
    bsr_cfg:
      periodic_bsr_timer: 10                    # Optional UINT (10). Sets the periodic Buffer Status Report Timer value in nof. subframes. Supported: [1, 5, 10, 16, 20, 32, 40, 64, 80, 128, 160, 320, 640, 1280, 2560, 0].
      retx_bsr_timer: 80                        # Optional UINT (80). Sets the retransmission Buffer Status Report Timer value in nof. subframes. Supported: [10, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240].
      lc_sr_delay_timer:                        # Optional UINT. Sets the Logical Channel SR delay timer in nof. subframes. Supported: [20, 40, 64, 128, 512, 1024, 2560].
    phr_cfg:
      phr_prohibit_timer: 10                    # Optional UINT (10). Sets the PHR prohibit timer in nof. subframes. Supported: [0, 10, 20, 50, 100, 200, 500, 1000].
    sr_cfg:
      sr_trans_max: 64                          # Optional UINT (64). Sets the maximum number of SR transmissions. Supported: [4, 8, 16, 32, 64].
      sr_prohibit_timer:                        # Optional TEXT. Sets the timer for SR transmission on PUCCH in ms. Supported: [1, 2, 4, 8, 16, 32, 64, 128].

  ssb:
    ssb_period: 10                          # Optional UINT (10). Sets the period of SSB scheduling in milliseconds. Supported: [5, 10, 20].
    ssb_block_power_dbm: -16                # Optional INT (-16). Sets the SS PBCH block power in dBm. Supported: [-60 - +50].
    pss_to_sss_epre_db: 0                   # Optional UINT (0). Sets the PSS to SSS EPRE ratio in dB. Supported: [0, 3].


  sib:
    si_window_length: 160                   # Optional UINT (160). Sets the length of the SI scheduling window in slots. Supported: [5, 10, 20, 40, 80, 160, 320, 640, 1280].
    si_sched_info:                          # Optional TEXT. Configures the scheduling for each of the SI-messages broadcast by the gNB.
    t300: 1000                              # Optional UINT (1000). Sets the RRC Connection Establishment timer in ms. Supported: [100, 200, 300, 400, 600, 1000, 1500, 2000].
    t301: 1000                              # Optional UINT (1000). Sets the RRC Connection Re-establishment timer in ms. Supported: [100, 200, 300, 400, 600, 1000, 1500, 2000].
    t310: 1000                              # Optional UINT (1000). Sets the Out-of-sync timer in ms. Supported: [0, 50, 100, 200, 500, 1000, 2000].
    n310: 1                                 # Optional UINT (1). Sets the Out-of-sync counter. Supported: [1, 2, 3, 4, 6, 8, 10, 20].
    t311: 3000                              # Optional UINT (3000). Sets the RRC Connection Re-establishment procedure timer in ms. Supported: [1000, 3000, 5000, 10000, 15000, 20000, 30000].
    n311: 1                                 # Optional UINT (1). Sets the In-sync counter. Supported: [1, 2, 3, 4, 5, 6, 8, 10].
    t319: 1000                              # Optional UINT (1000). Sets the RRC Connection Resume timer in ms. Supported: [100, 200, 300, 400, 600, 1000, 1500, 2000].
    sib2:
      q_hyst: 3                             # Optional UINT (3). Sets the hysteresis value for ranking criteria. Supported: [0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24].
      thresh_serving_low_p: 0               # Optional UINT (0). Sets the Rx level threshold for serving cell when reselecting to lower priority RAT/frequency. Supported: [0 - 31].
      cell_reselection_priority: 6          # Optional UINT (6). Sets the cell reselection priority for this cell's frequency. Supported: [0 - 7].
      q_rx_lev_min: -140                    # Optional INT (-140). Sets the minimum required Rx level in the cell in dBm. Supported: even values in [-140, -44].
      s_intra_search_p: 62                  # Optional UINT (62). Sets the Rx level threshold for intra-frequency measurements in dB. Supported: even values in [0, 62].
      t_reselection_nr: 1                   # Optional UINT (1). Sets the cell reselection timer value in seconds. Supported: [0 - 7].
    sib3:
      intra_freq_neigh_cell_list:           # Optional TEXT. Sets the intra-frequency neighbor cell list.
        - pci: 0                              # Optional UINT (0). Sets the PCI of the neighbour cell. Supported: [0 - 1007].
          q_offset_cell: 0                    # Optional INT (0). Sets the cell-specific offset for this neighbour. Format: legal values: {-24, -22, -20, -18, -16, -14, -12, -10, -8, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24}.
      intra_freq_excluded_cell_list:        # Optional TEXT. Sets the intra-frequency excluded cell list.
        - start: 0                            # Required UINT (0). Sets the range start. Supported: [0 - 1007].
          size: 1                             # Required UINT (1). Sets the range size. Format: legal values: {1, 4, 8, 12, 16, 24, 32, 48, 64, 84, 96, 128, 168, 252, 504, 1008}.
    sib4:
      inter_freq_carrier_freq_list:         # Optional TEXT. Sets the inter-frequency carrier frequency list.
        - arfcn: 0                            # Optional UINT (0). Sets the carrier ARFCN.
          ssb_scs: 15kHz                      # Optional TEXT (15kHz). Sets the SSB subcarrier spacing. Format: accepts SCS strings (e.g. "15kHz", "30kHz").
          derive_ssb_index_from_cell: false   # Optional BOOLEAN (false). Derives SSB index from cell. Supported: [false, true].
          q_rx_lev_min: -140                  # Optional INT (-140). Sets the minimum required Rx level in dBm. Format: must be an even value within [-140, -44].
          thresh_x_high_p: 0                  # Optional UINT (0). Sets the Rx level threshold in dB for reselection to a higher priority RAT/frequency. Format: must be an even value within [0, 62].
          thresh_x_low_p: 0                   # Optional UINT (0). Sets the Rx level threshold in dB for reselection to a lower priority RAT/frequency. Format: must be an even value within [0, 62].
          q_offset_freq: 0                    # Optional INT (0). Sets the frequency-specific offset in dB for equal priority NR frequencies. Format: legal values: {-24, -22, -20, -18, -16, -14, -12, -10, -8, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24}.
    sib5:
      t_reselection_eutra:                  # Optional UINT. Sets the EUTRA cell reselection timer value in seconds. Supported: [0 - 7].
      carrier_freq_list_eutra:              # Optional TEXT. Sets the EUTRA carrier frequency list.
        - earfcn: 0                           # Optional UINT (0). Sets the EUTRA EARFCN.
          allowed_meas_bandwidth: 0           # Optional UINT (0). Sets the allowed measurement bandwidth. Format: legal values: {6, 15, 25, 50, 75, 100}.
          presence_antenna_port1: false       # Optional BOOLEAN (false). Sets whether all neighbour cells use Antenna Port 1. Supported: [false, true].
          cell_reselection_priority:          # Required UINT. Sets the cell reselection priority for this frequency. Supported: [0 - 7].
          thresh_x_high: 0                    # Optional UINT (0). Sets the Rx level threshold in dB for reselection to a higher priority RAT/frequency. Format: must be an even value within [0, 62].
          thresh_x_low: 0                     # Optional UINT (0). Sets the Rx level threshold in dB for reselection to a lower priority RAT/frequency. Format: must be an even value within [0, 62].
          q_rx_lev_min: -140                  # Optional INT (-140). Sets the minimum required Rx level in dBm. Format: must be an even value within [-140, -44].
          q_qual_min: -34                     # Optional INT (-34). Sets the minimum required quality level in dB. Supported: [-34 - -3].
          p_max_eutra: 33                     # Optional INT (33). Sets the maximum allowed transmission power in dBm. Supported: [-30 - 33].
    sib16:
      freq_prio_list_slicing:               # Optional TEXT. Sets the frequency priority slicing list entries.
        - dl_implicit_carrier_freq: 0         # Optional UINT (0). Sets the DL implicit carrier frequency index. Supported: [0 - 8].
          slice_info_list:                    # Optional TEXT. Sets the slice info list entries.
            - nsag_id: 0                        # Optional UINT (0). Sets the NSAG ID. Supported: [0 - 255].
              allowed: true                     # Optional BOOLEAN (true). Sets whether the cell list is allowed (true) or excluded (false). Supported: [false, true].
              reselection_priority: 0           # Optional FLOAT (0). Sets the priority for this cell reselection slice. Format: must be a multiple of 0.2 within [0.0, 7.8].
              cells_allowed:                    # Optional TEXT. Sets the slice cell list entries.
                - start: 0                        # Required UINT (0). Sets the range start. Supported: [0 - 1007].
                  size: 1                         # Required UINT (1). Sets the range size. Format: legal values: {1, 4, 8, 12, 16, 24, 32, 48, 64, 84, 96, 128, 168, 252, 504, 1008}.
    etws:
      message_id: 4356                      # Optional UINT (4356). Sets the ETWS message ID. Supported: [0 - 65535].
      serial_num: 12288                     # Optional UINT (12288). Sets the ETWS message serial number. Supported: [0 - 65535].
      warning_type: 2432                    # Optional UINT (2432). Sets the ETWS warning type. Supported: [0 - 65535].
      data_coding_scheme: 0                 # Optional UINT (0). Sets the ETWS CBS data coding scheme. Supported: [0 - 255].
      warning_message:                      # Optional TEXT. Sets the ETWS warning message string.
    cmas:
      message_id: 4370                      # Optional UINT (4370). Sets the CMAS message ID. Supported: [0 - 65535].
      serial_num: 12291                     # Optional UINT (12291). Sets the CMAS message serial number. Supported: [0 - 65535].
      data_coding_scheme: 0                 # Optional UINT (0). Sets the CMAS CBS data coding scheme. Supported: [0 - 255].
      warning_message:                      # Optional TEXT. Sets the CMAS warning message string.

  ul_common:
    p_max:                                  # Optional INT. Sets maximum transmit power allowed in this serving cell. Supported: [-30 - +23].
    max_pucchs_per_slot: 31                 # Optional UINT (31). Sets the maximum number of PUCCH grants that can be allocated per slot. Supported: [1 - 128].
    max_ul_grants_per_slot: 32              # Optional UINT (32). Sets the maximum number of UL grants that can be allocated per slot. Supported: [1 - 144].
    min_pucch_pusch_prb_distance: 1         # Optional UINT (1). Sets the minimum PRB distance between PUCCH and UE-dedicated PUSCH grants. Supported: [0 - 137].

  pdcch:
    common:
      coreset0_index:                           # Optional INT. Sets the CORESET 0 index. Supported: [0 - 15].
      ss1_n_candidates: {0,0,2,0,0}             # Optional UINT ({0,0,2,0,0}). Sets the number of PDCCH candidates per aggregation level for SearchSpace#1. Supported: any 5-value array of [0 - 8].
      ss0_index: 0                              # Optional UINT (0). Sets the SearchSpace#0 index. Supported: [0 - 15].
      max_coreset0_duration:                    # Optional INT. Sets the maximum CORESET#0 duration in OFDM symbols. Supported: [1 - 2].
    dedicated:
      coreset1_rb_start:                        # Optional UINT. Sets the starting common resource block for CORESET 1, relative to CRB0. Default: derived automatically. Supported: [0 - 275].
      coreset1_l_crb:                           # Optional INT. Sets the length of CORESET 1 in number of CRBs. Supported: [0 - 275].
      coreset1_duration:                        # Optional INT. Sets the duration of CORESET 1 in number of OFDM symbols. Supported: [1 - 2].
      ss2_n_candidates: [0, 0, 0, 0, 0]         # Optional UINT ([0, 0, 0, 0, 0]). Sets the number of PDCCH candidates per aggregation level for SearchSpace#2. Supported: any 5-value array of [0 - 8].
      dci_format_0_1_and_1_1: true              # Optional BOOLEAN (true). Sets whether to use non-fallback or fallback DCI format in UE SearchSpace#2. Supported: [false, true].
      ss2_type: ue_dedicated                    # Optional TEXT (ue_dedicated). Sets the SearchSpace type for UE dedicated SearchSpace#2. Supported: [common, ue_dedicated].
      al_cqi_offset: 0                          # Optional FLOAT (0). Sets the offset applied to the CQI value in PDCCH aggregation level calculation. Supported: [-15 - 15].

  pdsch:
    min_ue_mcs: 0                           # Optional UINT (0). Sets a minimum PDSCH MCS value for all UEs. Supported: [0 - 28].
    max_ue_mcs: 28                          # Optional UINT (28). Sets a maximum PDSCH MCS value for all UEs. Supported: [0 - 28].
    fixed_rar_mcs: 0                        # Optional UINT (0). Sets a fixed RAR MCS value for all UEs. Supported: [0 - 28].
    fixed_sib1_mcs: 5                       # Optional UINT (5). Sets a fixed SIB1 MCS for all UEs. Supported: [0 - 28].
    nof_harqs: 16                           # Optional UINT (16). Sets the number of DL HARQ processes. Supported: [2, 4, 6, 8, 10, 12, 16, 32].
    max_nof_harq_retxs: 4                   # Optional UINT (4). Sets the maximum number of times a DL HARQ can be retransmitted before it is discarded. Supported: [0 - 64].
    harq_retx_timeout: 100                  # Optional UINT (100). Sets the maximum time in ms between a HARQ NACK and the scheduler allocating the HARQ for retransmission. Supported: [10 - 500].
    max_consecutive_kos: 100                # Optional UINT (100). Sets the maximum number of consecutive HARQ-ACK KOs before an RLF is reported. Supported: [0 - inf].
    rv_sequence: [0,2,3,1]                  # Optional UINT ([0, 2, 3, 1]). Sets the redundancy version sequence to use for PDSCH. Supported: any combination of [0, 1, 2, 3].
    mcs_table: qam256                       # Optional ENUM (qam256). Sets the MCS table to use for PDSCH. Supported: [qam64, qam256, qam64lowse].
    harq_feedback_disabled: false           # Optional TEXT (false). Sets whether to disable DL HARQ Feedback (NTN only). Supported: [true, false] or 32-bit bitmask.
    interleaving_bundle_size: 0             # Optional UINT (0). Sets the PDSCH interleaving bundle size. Supported: [0, 2, 4].
    max_rank:                               # Optional UINT. Sets the maximum number of PDSCH transmission layers. Supported: non-negative integer (0 or greater).
    enable_csi_rs_pdsch_multiplexing: true  # Optional BOOLEAN (true). Enables multiplexing of CSI-RS and PDSCH. Supported: [false, true].
    min_rb_size: 1                          # Optional UINT (1). Sets the minimum RB size for UE PDSCH resource allocation. Supported: [1 - 275].
    max_rb_size: 275                        # Optional UINT (275). Sets the maximum RB size for UE PDSCH resource allocation. Supported: [1 - 275].
    start_rb: 0                             # Optional UINT (0). Sets the start RB for resource allocation of UE PDSCHs. Supported: [0 - 275].
    end_rb: 275                             # Optional UINT (275). Sets the end RB for resource allocation of UE PDSCHs. Supported: [0 - 275].
    max_pdschs_per_slot: 35                 # Optional UINT (35). Sets the maximum number of PDSCH grants per slot, including SIB, RAR, Paging and UE data grants. Supported: [1 - 35].
    max_alloc_attempts: 35                  # Optional UINT (35). Sets the maximum number of DL or UL PDCCH grant allocation attempts per slot before the scheduler skips the slot. Supported: [1 - 35].
    olla_cqi_inc_step: 0.001                # Optional FLOAT (0.001). Sets the outer-loop link adaptation (OLLA) increment value. 0 disables OLLA. Supported: [0 - 1].
    olla_target_bler: 0.01                  # Optional FLOAT (0.01). Sets the target DL BLER in the OLLA algorithm. Supported: [0 - 0.5].
    olla_max_cqi_offset: 4                  # Optional FLOAT (4). Sets the maximum CQI offset that OLLA can apply. Supported: positive float.
    dc_offset:                              # Optional TEXT. Sets the Direct Current offset in number of subcarriers. Supported: [-1650 - 1649] OR [outside, undetermined, center].
    harq_la_cqi_drop_threshold: 3           # Optional UINT (3). Sets the LA threshold for CQI drop above which HARQ retransmissions are cancelled. 0 disables. Supported: [0 - 15].
    harq_la_ri_drop_threshold: 1            # Optional UINT (1). Sets the LA threshold for nof. layers drop above which HARQ retransmission is cancelled. 0 disables. Supported: [0 - 4].
    dmrs_additional_position: 2             # Optional UINT (2). Sets the PDSCH DMRS additional position. Supported: [0 - 3].

  pusch:
    min_ue_mcs: 0                           # Optional UINT (0). Sets a minimum PUSCH MCS value for all UEs. Supported: [0 - 28].
    max_ue_mcs: 28                          # Optional UINT (28). Sets a maximum PUSCH MCS value for all UEs. Supported: [0 - 28].
    max_nof_harq_retxs: 4                   # Optional UINT (4). Sets the maximum number of times a UL HARQ can be retransmitted. Supported: [0 - 64].
    harq_retx_timeout: 100                  # Optional UINT (100). Sets the maximum time in ms between a CRC=KO and the scheduler allocating the HARQ for retransmission. Supported: [10 - 500].
    max_consecutive_kos: 100                # Optional UINT (100). Sets the maximum number of consecutive CRC KOs before an RLF is reported. Supported: [0 - inf].
    rv_sequence: [0]                        # Optional UINT ([0]). Sets the redundancy version sequence to use for PUSCH. Supported: any combination of [0, 1, 2, 3].
    mcs_table: qam256                       # Optional ENUM (qam256). Sets the MCS table to use for PUSCH. Supported: [qam64, qam256, qam64lowse].
    harq_mode_b: false                      # Optional TEXT (false). Sets HARQ Mode B (NTN only). Supported: [true, false] or 32-bit bitmask.
    nof_harqs: 16                           # Optional UINT (16). Sets the number of UL HARQ processes. Supported: [16, 32].
    ema_alpha_cl_pw_control_sinr: 0.5       # Optional FLOAT (0.5). Sets the EMA smoothing factor alpha for PUSCH closed-loop power control SINR. Supported: (0, 1) exclusive.
    max_rank: 4                             # Optional UINT (4). Sets the maximum number of PUSCH transmission layers. Supported: [1 - 4].
    msg3_delta_preamble: 6                  # Optional INT (6). Sets the MSG3 DeltaPreamble power offset between MSG3 and RACH preamble transmission. Supported: [-1 - 6].
    p0_nominal_with_grant: -76              # Optional INT (-76). Sets the P0 value for PUSCH grant (except MSG3), in dBm. Supported: multiples of 2 within the range [-202, 24].
    p0_nominal_without_grant: -76           # Optional INT (-76). Sets the P0 value for PUSCH without grant, in dBm. Supported: multiples of 2 within the range [-202, 24].
    msg3_delta_power: 8                     # Optional INT (8). Sets the target power level at the network receiver side, in dBm. Supported: multiples of 2 within the range [-6, 8].
    max_puschs_per_slot: 16                 # Optional UINT (16). Sets the maximum number of PUSCH grants per slot. Supported: [1 - 16].
    beta_offset_ack_idx_1: 11               # Optional UINT (11). Sets the betaOffsetACK-Index1 part of UCI-OnPUSCH. Supported: [0 - 31].
    beta_offset_ack_idx_2: 6                # Optional UINT (6). Sets the betaOffsetACK-Index2 part of UCI-OnPUSCH. Supported: [0 - 31].
    beta_offset_ack_idx_3: 4                # Optional UINT (4). Sets the betaOffsetACK-Index3 part of UCI-OnPUSCH. Supported: [0 - 31].
    beta_offset_csi_p1_idx_1: 13            # Optional UINT (13). Sets the betaOffsetCSI-Part1-Index1 part of UCI-OnPUSCH. Supported: [0 - 31].
    beta_offset_csi_p1_idx_2: 10            # Optional UINT (10). Sets the betaOffsetCSI-Part1-Index2 part of UCI-OnPUSCH. Supported: [0 - 31].
    beta_offset_csi_p2_idx_1: 13            # Optional UINT (13). Sets the betaOffsetCSI-Part2-Index1 part of UCI-OnPUSCH. Supported: [0 - 31].
    beta_offset_csi_p2_idx_2: 10            # Optional UINT (10). Sets the betaOffsetCSI-Part2-Index2 part of UCI-OnPUSCH. Supported: [0 - 31].
    min_k2: 4                               # Optional UINT (4). Sets the minimum value of K2 (difference in slots between PDCCH and PUSCH). Supported: [1 - 4].
    dc_offset:                              # Optional TEXT. Sets the Direct Current offset in number of subcarriers. Supported: [-1650 - 1649] OR [outside, undetermined, center].
    olla_snr_inc_step: 0.001                # Optional FLOAT (0.001). Sets the outer-loop link adaptation (OLLA) increment value. 0 disables OLLA. Supported: [0 - 1].
    olla_target_bler: 0.01                  # Optional FLOAT (0.01). Sets the target UL BLER in the OLLA algorithm. Supported: [0 - 0.5].
    olla_max_snr_offset: 5                  # Optional FLOAT (5). Sets the maximum SNR offset that OLLA can apply. Supported: positive float.
    dmrs_additional_position: 2             # Optional UINT (2). Sets the PUSCH DMRS additional position. Supported: [0 - 3].
    min_rb_size: 1                          # Optional UINT (1). Sets the minimum RB size for UE PUSCH resource allocation. Supported: [1 - 275].
    max_rb_size: 275                        # Optional UINT (275). Sets the maximum RB size for UE PUSCH resource allocation. Supported: [1 - 275].
    start_rb: 0                             # Optional UINT (0). Sets the start RB for resource allocation of UE PUSCHs. Supported: [0 - 275].
    end_rb: 275                             # Optional UINT (275). Sets the end RB for resource allocation of UE PUSCHs. Supported: [0 - 275].
    enable_cl_loop_pw_control: false        # Optional BOOLEAN (false). Enables the closed-loop power control for PUSCH. Supported: [false, true].
    enable_phr_bw_adaptation: false         # Optional BOOLEAN (false). Enables bandwidth adaptation to prevent negative PHR. Supported: [false, true].
    target_sinr: 10                         # Optional FLOAT (10). Sets the target SINR in dB. Supported: [-5 - 30].
    ref_path_loss: 70                       # Optional FLOAT (70). Sets the reference path-loss for target PUSCH SINR in dB. Supported: [50 - 120].
    pl_compensation_factor: 1               # Optional FLOAT (1). Sets the fractional path-loss compensation factor in PUSCH power control. Supported: [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1].
    enable_transform_precoding: false       # Optional BOOLEAN (false). Enables transform precoding for PUSCH. Supported: [false, true].

  pucch:
    p0_nominal: -90                         # Optional INT (-90). Sets the power control parameter P0 for PUCCH transmissions in dBm. Supported: multiples of 2 within [-202, 24].
    pucch_resource_common:                  # Optional UINT. Sets the index of PUCCH resource set for common configuration. Supported: [0 - 15].
    sr_period_ms: 20                        # Optional FLOAT (20). Sets the SR period in milliseconds. Supported: [1, 2, 2.5, 4, 5, 8, 10, 16, 20, 40, 80, 160, 320].
    formats: f1_and_f2                      # Optional TEXT (f1_and_f2). Sets the PUCCH format combinations to use. Supported: [f0_and_f2, f1_and_f2, f1_and_f3, f1_and_f4].
    resource_set_size: 8                    # Optional UINT (8). Sets the number of PUCCH resources per UE for HARQ for each PUCCH resource set. Supported: [1 - 8].
    nof_cell_res_set_configs: 2             # Optional UINT (2). Sets the number of PUCCH resource set configurations per cell. Supported: [1 - 10].
    nof_cell_sr_res: 8                      # Optional UINT (8). Sets the number of PUCCH F0 or F1 resources per cell for SR. Supported: [1 - 100].
    nof_cell_csi_res: 8                     # Optional UINT (8). Sets the number of PUCCH F2, F3 or F4 resources per cell for CSI. Supported: [0 - 100].
    f0_intraslot_freq_hop: false            # Optional BOOLEAN (false). Enables intra-slot frequency hopping for PUCCH F0. Supported: [false, true].
    f1_enable_occ: false                    # Optional BOOLEAN (false). Enables OCC for PUCCH F1. Supported: [false, true].
    f1_nof_cyclic_shifts: 2                 # Optional UINT (2). Sets the number of possible cyclic shifts for PUCCH F1 resources. Supported: [1, 2, 3, 4, 6, 12].
    f1_intraslot_freq_hop: false            # Optional BOOLEAN (false). Enables intra-slot frequency hopping for PUCCH F1. Supported: [false, true].
    f2_max_nof_rbs: 1                       # Optional UINT (1). Sets the max number of RBs for PUCCH F2 resources. Supported: [1 - 16].
    f2_max_payload:                         # Optional UINT. Sets the min required payload capacity in bits for PUCCH F2 resources. Supported: [4 - 40].
    f2_max_code_rate: dot35                 # Optional TEXT (dot35). Sets the PUCCH F2 max code rate. Supported: [dot08, dot15, dot25, dot35, dot45, dot60, dot80].
    f2_intraslot_freq_hop: false            # Optional BOOLEAN (false). Enables intra-slot frequency hopping for PUCCH F2. Supported: [false, true].
    f3_max_nof_rbs: 1                       # Optional UINT (1). Sets the max number of RBs for PUCCH F3 resources. Supported: [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16].
    f3_max_payload:                         # Optional UINT. Sets the min required payload capacity in bits for PUCCH F3 resources. Supported: [4 - 40].
    f3_max_code_rate: dot35                 # Optional TEXT (dot35). Sets the PUCCH F3 max code rate. Supported: [dot08, dot15, dot25, dot35, dot45, dot60, dot80].
    f3_intraslot_freq_hop: false            # Optional BOOLEAN (false). Enables intra-slot frequency hopping for PUCCH F3. Supported: [false, true].
    f3_additional_dmrs: false               # Optional BOOLEAN (false). Enables additional DMRS for PUCCH F3. Supported: [false, true].
    f3_pi2_bpsk: false                      # Optional BOOLEAN (false). Enables pi/2 BPSK for PUCCH F3. Supported: [false, true].
    f4_max_code_rate: dot35                 # Optional TEXT (dot35). Sets the PUCCH F4 max code rate. Supported: [dot08, dot15, dot25, dot35, dot45, dot60, dot80].
    f4_intraslot_freq_hop: false            # Optional BOOLEAN (false). Enables intra-slot frequency hopping for PUCCH F4. Supported: [false, true].
    f4_additional_dmrs: false               # Optional BOOLEAN (false). Enables additional DMRS for PUCCH F4. Supported: [false, true].
    f4_pi2_bpsk: false                      # Optional BOOLEAN (false). Enables pi/2 BPSK for PUCCH F4. Supported: [false, true].
    f4_occ_length: 2                        # Optional UINT (2). Sets the OCC length for PUCCH F4. Supported: [2, 4].
    ema_alpha_cl_pw_control_sinr: 0.5       # Optional FLOAT (0.5). Sets the EMA smoothing factor alpha for PUCCH closed-loop power control SINR. Supported: (0, 1) exclusive.
    repetition_sinr_thresholds:             # Optional FLOAT. Sets the SINR thresholds (dB) mapping UE SINR to PUCCH repetition factor. Up to 3 entries.
    repetition_factors:                     # Optional UINT. Sets the repetition factor for each PUCCH resource in a HARQ-ACK resource set. Supported: [1, 2, 4, 8].
    f4_enable_occ: false                    # Optional BOOLEAN (false). Enables OCC multiplexing for PUCCH F4. Supported: [false, true].
    min_k1: 4                               # Optional UINT (4). Sets the minimum value of K1 (difference in slots between PDSCH and HARQ-ACK). Supported: [1 - 4].
    max_consecutive_kos: 100                # Optional UINT (100). Sets the maximum number of consecutive undecoded PUCCH F2 for CSI before an RLF is reported.
    enable_cl_loop_pw_control: false        # Optional BOOLEAN (false). Enables the closed-loop power control for PUCCH. Supported: [false, true].
    target_sinr_f0: 10                      # Optional FLOAT (10). Sets the target SINR for PUCCH F0 in dB. Supported: [-10 - 20].
    target_sinr_f2: 6                       # Optional FLOAT (6). Sets the target SINR for PUCCH F2 in dB. Supported: [-10 - 20].
    target_sinr_f3: 1                       # Optional FLOAT (1). Sets the target SINR for PUCCH F3 in dB. Supported: [-15 - 10].

  srs:
    type_enabled: disabled                  # Optional TEXT (disabled). Enables/disables SRS and sets resource type. Supported: [disabled, periodic, aperiodic].
    period_ms: 20                           # Optional FLOAT (20). Sets the periodic SRS period in ms. Supported: [1, 2, 2.5, 4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 160, 320, 640, 1280, 2560].
    max_nof_sym_per_slot: 2                 # Optional UINT (2). Sets the number of symbols for UL slot reserved for SRS cell resources. Supported: [1 - 6].
    nof_sym_per_resource: 1                 # Optional UINT (1). Sets the number of symbols per SRS resource. Supported: [1, 2, 4].
    c_srs:                                  # Optional UINT. Sets the C_SRS parameter for SRS. If not set, computed automatically. Supported: [0 - 63].
    freq_domain_shift: 0                    # Optional UINT (0). Sets the SRS frequency domain shift. Supported: [0 - 268].
    tx_comb: 4                              # Optional UINT (4). Sets the SRS TX comb size. Supported: [2, 4].
    cyclic_shift_reuse: 1                   # Optional UINT (1). Sets the SRS cyclic shift reuse factor. Supported: [1, 2, 3, 4, 6].
    sequence_id_reuse: 1                    # Optional UINT (1). Sets the reuse factor for the SRS sequence ID. Supported: [1, 2, 3, 5, 6, 10, 15, 30].
    p0: -84                                 # Optional INT (-84). Sets the P0 value for SRS in dBm. Supported: multiples of 2 within [-202, 24].

  prach:
    prach_config_index:                     # Optional UINT. Sets the PRACH configuration index. If not set, derived automatically. Supported: [0 - 255].
    prach_root_sequence_index: 1            # Optional UINT (1). Sets the PRACH Root Sequence Index (RSI). Supported: [0 - 837].
    zero_correlation_zone: 0                # Optional UINT (0). Sets the Zero Correlation Zone. Supported: [0 - 15].
    fixed_msg3_mcs: 0                       # Optional UINT (0). Sets a fixed Msg3 MCS. Supported: [0 - 28].
    max_msg3_harq_retx: 4                   # Optional UINT (4). Sets the maximum number of Msg3 HARQ retransmissions. Supported: [0 - 4].
    total_nof_ra_preambles: 64              # Optional UINT (64). Sets the number of different contention-based PRACH preambles per occasion. Supported: [1 - 64].
    cfra_enabled: false                     # Optional BOOLEAN (false). Enables Contention Free Random Access (CFRA). Supported: [false, true].
    prach_frequency_start:                  # Optional INT. Sets the offset of lowest PRACH transmission occasion in frequency domain in PRBs. Supported: [0 - (MAX_NOF_PRB - 1)].
    preamble_rx_target_pw: -100             # Optional INT (-100). Sets the target power level at the network receiver side, in dBm. Supported: multiples of 2 within [-202, -60].
    preamble_trans_max: 7                   # Optional UINT (7). Sets the max number of RA preamble transmissions before declaring a failure. Supported: [3, 4, 5, 6, 7, 8, 10, 20, 50, 100, 200].
    power_ramping_step_db: 4                # Optional UINT (4). Sets the power ramping step for PRACH. Supported: [0, 2, 4, 6].
    ports: 0                                # Optional UINT (0). Sets the list of antenna ports.
    nof_ssb_per_ro: 1                       # Optional UINT (1). Sets the number of SSBs per RACH occasion. Supported: [1].
    nof_cb_preambles_per_ssb: 64            # Optional UINT (64). Sets the number of contention based preambles per SSB. Supported: [1 - 64].
    nof_prach_guardbands_rbs: 3             # Optional UINT (3). Sets the number of RBs used as guardband on each side of the PRACH RBs interval. Supported: [1 - 10].
    slice_based_ra_prioritization:          # Optional TEXT. Sets the list of configurations for slice-based RA prioritization.
    ra_resp_window:                         # Optional UINT. Sets the RA-response window length in number of slots. Supported: [1, 2, 4, 8, 10, 20, 40, 80].
    two_step:
      cb_preambles_per_ssb_per_shared_ro: 4   # Optional UINT (4). Sets the number of CB preambles per SSB per shared RACH occasion for 2-step RA. Supported: [1 - 60].
      msgA_rsrp_thres_dbm: -100               # Optional INT (-100). Sets the RSRP threshold in dBm for UE to select 2-step RA over 4-step RA. Supported: [-156 - -29].
      msgB_response_window_slots: 40          # Optional UINT (40). Sets the MsgB response window length in slots. Supported: [1, 2, 4, 8, 10, 20, 40, 80, 160, 320].
      td_offset: 1                            # Optional UINT (1). Sets the time-domain offset in slots from PRACH slot to MsgA PUSCH slot. Supported: [1 - 32].
      pusch_td_res_index: 0                   # Optional UINT (0). Sets the index into the PUSCH-TimeDomainAllocationResource table for MsgA PUSCH scheduling.
      mcs: 0                                  # Optional UINT (0). Sets the MCS index for MsgA PUSCH transmission. Supported: [0 - 28].
      nof_prbs_per_msgA_po: 3                 # Optional UINT (3). Sets the number of PRBs per MsgA PUSCH occasion. Supported: [1 - 32].
      prb_start: 0                            # Optional UINT (0). Sets the frequency offset in PRBs of the lowest MsgA PUSCH occasion from PRB 0.
      po_fdm: 1                               # Optional UINT (1). Sets the number of MsgA PUSCH occasions FDMed in one time instance. Supported: [1, 2, 4, 8].

  tdd_ul_dl_cfg:
    dl_ul_tx_period: 10                     # Optional INT (10). Sets the TDD pattern periodicity in slots. Supported: [2 - 80].
    nof_dl_slots: 6                         # Optional INT (6). Sets the number of consecutive full Downlink slots. Supported: [0 - 80].
    nof_dl_symbols: 8                       # Optional INT (8). Sets the number of Downlink symbols at the beginning of the slot following full Downlink slots. Supported: [0 - 13].
    nof_ul_slots: 3                         # Optional INT (3). Sets the number of consecutive full Uplink slots. Supported: [0 - 80].
    nof_ul_symbols: 0                       # Optional INT (0). Sets the number of Uplink symbols at the end of the slot preceding the first full Uplink slot. Supported: [0 - 13].
    pattern2:
      dl_ul_tx_period: 10                       # Optional INT (10). Sets the second TDD pattern periodicity in slots. Supported: [2 - 80].
      nof_dl_slots: 6                           # Optional INT (6). Sets the number of consecutive full Downlink slots in the second pattern. Supported: [0 - 80].
      nof_dl_symbols: 8                         # Optional INT (8). Sets the number of Downlink symbols in the special slot of the second pattern. Supported: [0 - 13].
      nof_ul_slots: 3                           # Optional INT (3). Sets the number of consecutive full Uplink slots in the second pattern. Supported: [0 - 80].
      nof_ul_symbols: 0                         # Optional INT (0). Sets the number of Uplink symbols in the special slot of the second pattern. Supported: [0 - 13].

  paging:
    pg_search_space_id: 1                   # Optional UINT (1). Sets the SearchSpace to use for Paging.
    default_pg_cycle_in_rf: 128             # Optional UINT (128). Sets the default Paging cycle in number of Radio Frames. Supported: [32, 64, 128, 256].
    nof_pf_per_paging_cycle: oneT           # Optional TEXT (oneT). Sets the number of paging frames per DRX cycle. Supported: [oneT, halfT, quarterT, oneEighthT, oneSixteethT].
    pf_offset: 0                            # Optional UINT (0). Sets the paging frame offset.
    nof_po_per_pf: 1                        # Optional UINT (1). Sets the number of paging occasions per paging frame. Supported: [1, 2, 4].
    edrx_enabled: false                     # Optional BOOLEAN (false). Enables eDRX. Supported: [false, true].

  csi:
    csi_rs_enabled: true                    # Optional BOOLEAN (true). Enables CSI-RS resources and CSI reporting. Supported: [false, true].
    csi_rs_period: 20                       # Optional UINT (20). Sets the CSI-RS period in milliseconds. Supported: [10, 20, 40, 80].
    report_type: periodic                   # Optional TEXT (periodic). Sets the type of CSI reporting configuration. Supported: [periodic, aperiodic].
    meas_csi_rs_slot_offset:                # Optional UINT. Sets the slot offset of first CSI-RS resource used for measurement.
    tracking_csi_rs_slot_offset:            # Optional UINT. Sets the slot offset of the first CSI-RS resource used for tracking.
    zp_csi_rs_slot_offset:                  # Optional UINT. Sets the slot offset of the ZP CSI-RS resources.
    pwr_ctrl_offset: 0                      # Optional INT (0). Sets the power offset of PDSCH RE to NZP CSI-RS RE in dB. Supported: [-8 - 15].

  scheduler:
    nof_preselected_newtx_ues: 1024         # Optional UINT (1024). Sets the number of UEs pre-selected for potential newTx allocations per slot. Supported: [1 - 8192].
    policy:
      qos_sched:
        combine_function: gbr_prioritized   # Optional TEXT (gbr_prioritized). Sets the QoS-aware scheduler weight combining function. Supported: [gbr_prioritized, geometric_mean].
        pf_fairness_coeff: 2                # Optional FLOAT (2). Sets the fairness coefficient for the Proportional Fair policy scheduler.
        prio_enabled: true                  # Optional BOOLEAN (true). Enables the QoS Flow priority in QoS-aware scheduling. Supported: [false, true].
        pdb_enabled: true                   # Optional BOOLEAN (true). Enables the Packet Delay Budget (PDB) in QoS-aware scheduling. Supported: [false, true].
        gbr_enabled: true                   # Optional BOOLEAN (true). Enables the Guaranteed Bit Rate (GBR) in QoS-aware scheduling. Supported: [false, true].
      rr_sched:                             # Optional. Round-robin scheduler policy configuration.

  ta:
    ta_measurement_slot_period: 80               # Optional UINT (80). Sets the measurements periodicity in nof. slots over which the new Timing Advance Command is computed.
    ta_measurement_slot_prohibit_period: 0       # Optional UINT (0). Sets the delay in number of slots between issuing the TA_CMD and starting TA measurements. Supported: [0 - 10000].
    ta_cmd_offset_threshold: 1                   # Optional INT (1). Sets the TA offset threshold above which a Timing Advance Command is triggered. -1 disables. Supported: [-1 - 31].
    ta_target: 1.0                               # Optional FLOAT (1.0). Sets the Timing Advance target in units of TA. Supported: [-30.0 - 30.0].
    ta_update_measurement_ul_sinr_threshold: 0   # Optional FLOAT (0). Sets the UL SINR threshold in dB above which reported N_TA update measurements are considered valid.
    ta_outlier_detection_zscore_threshold: 1.75  # Optional FLOAT (1.75). Sets the Z-score threshold for outlier detection in N_TA measurements. Supported: [0.0 - 5.0].

  rlm:
    rlm_resource_type: default_type         # Optional TEXT. Sets the Radio Link Monitoring resource detection type. Supported: [default_type, ssb, csi_rs, ssb_and_csi_rs].

  drx:
    on_duration_timer: 10                   # Optional UINT (10). Sets the minimum duration in ms that the UE stays in active mode when DRX is configured. Supported: [1, 2, 3, 4, 5, 6, 8, 10, 20, 30, 40, 50, 60, 80, 100, 200, 300, 400, 500, 600, 800, 1000, 1200, 1600].
    inactivity_timer: 0                     # Optional UINT (0). Sets the duration in ms that the UE stays active after PDCCH reception when DRX is configured. Supported: [0, 1, 2, 3, 4, 5, 6, 8, 10, 20, 30, 40, 50, 60, 80, 100, 200, 300, 500, 750, 1280, 1920, 2560].
    retx_timer_dl: 0                        # Optional UINT (0). Sets the maximum duration in slots until a DL ReTX is received by the UE when DRX is configured. Supported: [0, 1, 2, 4, 6, 8, 16, 24, 33, 40, 64, 80, 96, 112, 128, 160, 320].
    retx_timer_ul: 0                        # Optional UINT (0). Sets the maximum duration in slots until a grant for UL ReTX is received by the UE when DRX is configured. Supported: [0, 1, 2, 4, 6, 8, 16, 24, 33, 40, 64, 80, 96, 112, 128, 160, 320].
    long_cycle: 0                           # Optional UINT (0). Sets the duration in ms between UE DRX long cycles. 0 disables DRX. Supported: [10, 20, 32, 40, 60, 64, 70, 80, 128, 160, 256, 320, 512, 640, 1024, 1280, 2048, 2560, 5120, 10240] OR [0].

  ntn:
    cell_specific_koffset: 1                # Optional UINT (1). Sets the cell-specific K-offset for NTN timing advance in ms. Supported: [1 - 1023].
    ntn_ul_sync_validity_dur: 60            # Optional UINT (60). Sets the UL sync validity duration in seconds. Supported: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 120, 180, 240, 900].
    propagator_type: rk4                    # Optional TEXT (rk4). Sets the orbit propagator type. Supported: [rk4, keplerian].
    ta_report: false                        # Optional BOOLEAN (false). Enables TA reporting in SIB19. Supported: [false, true].
    use_state_vector: true                  # Optional BOOLEAN (true). Broadcasts ephemeris as ECEF state vectors (true) or orbital parameters (false). Supported: [false, true].
    epoch_timestamp:                        # Optional TEXT. Sets the epoch timestamp for NTN assistance info. Format: Unix time in ms or YYYY-MM-DDTHH:MM:SS[.mmm].
    epoch_sfn_offset: 0                     # Optional UINT (0). Sets the optional SFN offset between SIB19 tx slot and epoch time.
    distance_threshold: 0                   # Optional UINT (0). Sets the distance from serving cell reference location for location-based measurement in meters. Supported: [0 - 3276250].
    t_service:                              # Optional TEXT. Sets the end of service time for the current cell. Format: Unix time in ms or YYYY-MM-DDTHH:MM:SS[.mmm].
    epoch_time:
      sfn: 0                                # Optional UINT (0). Sets the SFN part of the epoch time. Supported: [0 - 1023].
      subframe_number: 0                    # Optional UINT (0). Sets the sub-frame number of the epoch time. Supported: [0 - 9].
    ta_info:
      ta_common: 0                          # Optional FLOAT (0). Sets the common Timing Advance value in microseconds. Supported: [0 - 270730].
      ta_common_drift: 0                    # Optional FLOAT (0). Sets the drift rate of common TA. Supported: [-51.4606 - 51.4606].
      ta_common_drift_variant: 0            # Optional FLOAT (0). Sets the drift rate variation of common TA. Supported: [0 - 0.57898].
      ta_common_offset: 0                   # Optional FLOAT (0). Sets the constant offset added to TA common. Supported: [0 - 10000].
    feeder_link:
      enable_doppler_compensation: false    # Optional BOOLEAN (false). Enables feeder link Doppler compensation. Supported: [false, true].
      dl_freq: 0                            # Optional FLOAT (0). Sets the downlink feeder link frequency (gNB to satellite) in Hz. Supported: [0 - 100e9].
      ul_freq: 0                            # Optional FLOAT (0). Sets the uplink feeder link frequency (satellite to gNB) in Hz. Supported: [0 - 100e9].
    ephemeris_info_ecef:
      pos_x: 0                              # Optional FLOAT (0). Sets the X position of the satellite in meters. Supported: [-43620761.6 - 43620759.3].
      pos_y: 0                              # Optional FLOAT (0). Sets the Y position of the satellite in meters. Supported: [-43620761.6 - 43620759.3].
      pos_z: 0                              # Optional FLOAT (0). Sets the Z position of the satellite in meters. Supported: [-43620761.6 - 43620759.3].
      vel_x: 0                              # Optional FLOAT (0). Sets the X velocity of the satellite in m/s. Supported: [-7864.32 - 7864.26].
      vel_y: 0                              # Optional FLOAT (0). Sets the Y velocity of the satellite in m/s. Supported: [-7864.32 - 7864.26].
      vel_z: 0                              # Optional FLOAT (0). Sets the Z velocity of the satellite in m/s. Supported: [-7864.32 - 7864.26].
    ephemeris_orbital:
      semi_major_axis: 0                    # Optional FLOAT (0). Sets the semi-major axis of the satellite in meters. Supported: [6500000 - 42998632.07].
      eccentricity: 0                       # Optional FLOAT (0). Sets the eccentricity of the satellite. Supported: [0 - 0.01500510825].
      periapsis: 0                          # Optional FLOAT (0). Sets the argument of periapsis in radians. Supported: [0 - 6.28407400155].
      longitude: 0                          # Optional FLOAT (0). Sets the longitude of ascending node in radians. Supported: [0 - 6.28407400155].
      inclination: 0                        # Optional FLOAT (0). Sets the orbital inclination in radians. Supported: [-1.57101850624 - 1.57101848283].
      mean_anomaly: 0                       # Optional FLOAT (0). Sets the mean anomaly in radians. Supported: [0 - 6.28407400155].
    gateway_location:
      latitude: 0                           # Optional FLOAT (0). Sets the gateway latitude in degrees. Supported: [-90 - 90].
      longitude: 0                          # Optional FLOAT (0). Sets the gateway longitude in degrees. Supported: [-180 - 180].
      altitude: 0                           # Optional FLOAT (0). Sets the gateway altitude in meters. Supported: [-1000 - 20000].
    reference_location:
      latitude: 0                           # Optional FLOAT (0). Sets the cell reference latitude in degrees. Supported: [-90 - 90].
      longitude: 0                          # Optional FLOAT (0). Sets the cell reference longitude in degrees. Supported: [-180 - 180].
    moving_ref_location:
      latitude: 0                           # Optional FLOAT (0). Sets the moving reference latitude in degrees. Supported: [-90 - 90].
      longitude: 0                          # Optional FLOAT (0). Sets the moving reference longitude in degrees. Supported: [-180 - 180].
    polarization:
      dl: linear                            # Optional TEXT (linear). Sets the DL service link polarization. Supported: [lhcp, rhcp, linear].
      ul: linear                            # Optional TEXT (linear). Sets the UL service link polarization. Supported: [lhcp, rhcp, linear].
    sat_switch_with_resync:
      epoch_timestamp:                      # Optional TEXT. Sets the epoch timestamp for satellite switch. Format: Unix time in ms or YYYY-MM-DDTHH:MM:SS[.mmm].
      t_service_start:                      # Optional TEXT. Sets the time when the target satellite starts serving. Format: Unix time in ms or YYYY-MM-DDTHH:MM:SS[.mmm].
      ssb_time_offset_sf: 0                 # Optional UINT (0). Sets the SSB time offset in subframes. Supported: [0 - 159].
      ntn_gateway_location:
        latitude: 0                         # Optional FLOAT (0). Sets the gateway latitude. Supported: [-90 - 90].
        longitude: 0                        # Optional FLOAT (0). Sets the gateway longitude. Supported: [-180 - 180].
        altitude: 0                         # Optional FLOAT (0). Sets the gateway altitude in meters. Supported: [-1000 - 20000].

e2:
  enable_cu_cp_e2: false                # Optional BOOLEAN (false). Enables the E2 agent for CU-CP. Supported: [false, true].
  enable_cu_up_e2: false                # Optional BOOLEAN (false). Enables the E2 agent for CU-UP. Supported: [false, true].
  enable_du_e2: false                   # Optional BOOLEAN (false). Enables the E2 agent for DU. Supported: [false, true].
  addrs: 127.0.0.1                      # Optional TEXT (127.0.0.1). Sets the RIC IP addresses. Multiple addresses can be specified for SCTP multi-homing. Format: IPV4 or IPV6 IP address.
  port: 36421                           # Optional UINT (36421). Sets the RIC port. Supported: [20000 - 40000].
  bind_addrs: 127.0.0.1                 # Optional TEXT (127.0.0.1). Sets the local bind addresses for the E2 interface. Multiple addresses can be specified for SCTP multi-homing. Format: IPV4 or IPV6 IP address.
  sctp_rto_initial: 120                 # Optional INT (120). Sets the initial retransmission timeout when creating the SCTP connection.
  sctp_rto_min: 120                     # Optional INT (120). Sets the minimum retransmission timeout for the SCTP connection.
  sctp_rto_max: 500                     # Optional INT (500). Sets the maximum retransmission timeout for the SCTP connection.
  sctp_init_max_attempts: 3             # Optional INT (3). Sets the maximum retransmission attempts for the initial SCTP connection.
  sctp_max_init_timeo: 500              # Optional INT (500). Sets the maximum retransmission timeout for the initial SCTP connection.
  sctp_hb_interval: 30000               # Optional INT (30000). Sets the SCTP heartbeat interval in milliseconds. -1 uses system default.
  sctp_assoc_max_retx: 10               # Optional INT (10). Sets the SCTP association max retransmissions. -1 uses system default.
  sctp_nodelay: false                   # Optional BOOLEAN (false). Enables sending SCTP messages without Nagle-like delay. Supported: [false, true].
  e2sm_kpm_enabled: false               # Optional BOOLEAN (false). Enables the E2SM KPM service module. Supported: [false, true].
  e2sm_rc_enabled: false                # Optional BOOLEAN (false). Enables the E2SM RC service module. Supported: [false, true].
  e2sm_ccc_enabled: false               # Optional BOOLEAN (false). Enables the E2SM CCC service module. Supported: [false, true].

ntn:
  cell_specific_koffset:                 # Optional UINT. Sets the cell-specific k-offset for NTN timing advance in ms. Supported: [1 - 1023].
  ntn_ul_sync_validity_dur:              # Optional UINT. Sets the NTN UL sync validity duration in seconds. Supported: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 120, 180, 240, 900].
  epoch_time:
    sfn: 0                                # Optional UINT (0). Sets the SFN part. Supported: [0 - 1023].
    subframe_number: 0                    # Optional UINT (0). Sets the sub-frame number part. Supported: [0 - 9].
  ta_info:
    ta_common: 0                          # Optional FLOAT (0). Sets the common Timing Advance value in microseconds. Supported: [0 - 270730].
    ta_common_drift: 0                    # Optional FLOAT (0). Sets the drift rate of common TA. Supported: [-51.4606 - 51.4606].
    ta_common_drift_variant: 0            # Optional FLOAT (0). Sets the drift rate variation of common TA. Supported: [0 - 0.57898].
    ta_common_offset: 0                   # Optional FLOAT (0). Sets the constant offset added to TA common. Supported: [0 - 10000].
  ephemeris_info_ecef:
    pos_x: 0                              # Optional FLOAT (0). Sets the X position of the satellite in meters. Supported: [-43620761.6 - 43620759.3].
    pos_y: 0                              # Optional FLOAT (0). Sets the Y position of the satellite in meters. Supported: [-43620761.6 - 43620759.3].
    pos_z: 0                              # Optional FLOAT (0). Sets the Z position of the satellite in meters. Supported: [-43620761.6 - 43620759.3].
    vel_x: 0                              # Optional FLOAT (0). Sets the X velocity of the satellite in m/s. Supported: [-7864.32 - 7864.26].
    vel_y: 0                              # Optional FLOAT (0). Sets the Y velocity of the satellite in m/s. Supported: [-7864.32 - 7864.26].
    vel_z: 0                              # Optional FLOAT (0). Sets the Z velocity of the satellite in m/s. Supported: [-7864.32 - 7864.26].
  ephemeris_orbital:
    semi_major_axis: 0                    # Optional FLOAT (0). Sets the semi-major axis of the satellite in meters. Supported: [6500000 - 42998632.07].
    eccentricity: 0                       # Optional FLOAT (0). Sets the eccentricity of the satellite. Supported: [0 - 0.01500510825].
    periapsis: 0                          # Optional FLOAT (0). Sets the argument of periapsis in radians. Supported: [0 - 6.28407400155].
    longitude: 0                          # Optional FLOAT (0). Sets the longitude of the satellite's ascending node in radians. Supported: [0 - 6.28407400155].
    inclination: 0                        # Optional FLOAT (0). Sets the orbital inclination in radians. Supported: [-1.57101850624 - 1.57101848283].
    mean_anomaly: 0                       # Optional FLOAT (0). Sets the mean anomaly in radians. Supported: [0 - 6.28407400155].
  polarization:
    dl:                                   # Optional TEXT. Sets the DL service link polarization. Supported: [lhcp, rhcp, linear].
    ul:                                   # Optional TEXT. Sets the UL service link polarization. Supported: [lhcp, rhcp, linear].
  ta_report:                              # Optional BOOLEAN. Enables TA reporting in SIB19. Supported: [false, true].

custom_freq_bands:                    # Optional TEXT. Defines non-standard NR frequency bands for use with dl_arfcn. Each list entry should begin with "-".
  -
    band_nr: 999                        # Required UINT. Sets the NR band number.
    dl_freq_min: 3400                   # Required FLOAT. Sets the DL frequency range start in MHz.
    dl_freq_max: 3600                   # Required FLOAT. Sets the DL frequency range end in MHz.
    ul_freq_min: 3400                   # Optional FLOAT. Sets the UL frequency range start in MHz. Omit for TDD.
    ul_freq_max: 3600                   # Optional FLOAT. Sets the UL frequency range end in MHz. Omit for TDD.
    f_raster: 15                        # Required UINT. Sets the ARFCN raster in kHz. Supported: [15, 30, 60, 100, 120].
    ssb_scs: 30                         # Required UINT. Sets the SSB subcarrier spacing in kHz. Supported: [15, 30, 120, 240].
    ssb_case_c: false                   # Optional BOOLEAN (false). Sets SSB pattern case C. Use true for n77/n78/n79-like TDD bands. Supported: [false, true].
    min_40mhz_bw: false                 # Optional BOOLEAN (false). Sets the minimum 40 MHz bandwidth constraint. Supported: [false, true].
    delta_gscn: 1                       # Optional UINT (1). Sets the GSCN step for SSB candidate search. Supported: [1, 3, 7, 16].
    ntn: false                          # Optional BOOLEAN (false). Sets whether this is a Non-Terrestrial Network band. Supported: [false, true].

ru_ofh:
# Many of the following values are optional as they have default values. In practice, all of the following parameters should be defined by the user, as they will need
# to be configured specifically for the RU being used. Failing to configure these parameters correctly may result in the RU failing to connect to the DU.
  gps_alpha: 0                                             # Optional UINT (0). Sets the GPS alpha. Supported: [0 - 1.2288e+07].
  gps_beta: 0                                              # Optional INT (0). Sets the GPS beta. Supported: [-32768 - +32767].
  ru_bandwidth_MHz: <cell bandwidth>                         # Optional TEXT (<cell bandwidth>). Sets the channel bandwidth in MHz. Supported: [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100].
  t1a_max_cp_dl: 500                                       # Optional UINT (500). Sets the T1a maximum value for downlink control-plane in microseconds. Supported: [0 - 1960].
  t1a_min_cp_dl: 258                                       # Optional UINT (258). Sets the T1a minimum value for downlink control-plane in microseconds. Supported: [0 - 1960].
  t1a_max_cp_ul: 500                                       # Optional UINT (500). Sets the T1a maximum value for uplink control-plane in microseconds. Supported: [0 - 1960].
  t1a_min_cp_ul: 285                                       # Optional UINT (285). Sets the T1a minimum value for uplink control-plane in microseconds. Supported: [0 - 1960].
  t1a_max_up: 300                                          # Optional UINT (300). Sets the T1a maximum value for user-plane in microseconds. Supported: [0 - 1960].
  t1a_min_up: 85                                           # Optional UINT (85). Sets the T1a minimum value for user-plane in microseconds. Supported: [0 - 1960].
  ta4_max: 500                                             # Optional UINT (500). Sets the Ta4 maximum value for User-Plane in microseconds. Supported: [0 - 1960].
  ta4_min: 85                                              # Optional UINT (85). Sets the Ta4 minimum value for User-Plane in microseconds. Supported: [0 - 1960].
  is_prach_cp_enabled: true                                # Optional BOOLEAN (true). Sets the PRACH control-plane enabled flag. Supported: [false, true].
  ignore_ecpri_seq_id: false                               # Optional BOOLEAN (false). Sets whether to ignore the eCPRI sequence ID field value. Supported: [false, true].
  ignore_ecpri_payload_size: false                         # Optional BOOLEAN (false). Sets whether to ignore the eCPRI payload size field value. Supported: [false, true].
  ignore_prach_start_symbol: false                         # Optional BOOLEAN (false). Sets whether to ignore the PRACH start symbol in PRACH U-Plane packets. Supported: [false, true].
  log_lates_as_warnings: true                              # Optional BOOLEAN (true). Sets late Open Fronthaul events to be logged as warnings. Supported: [false, true].
  warn_unreceived_ru_frames: after_traffic_detection       # Optional TEXT (after_traffic_detection). Sets the policy for warning about unreceived Radio Unit frames. Supported: [never, always, after_traffic_detection].
  compr_method_ul: bfp                                     # Optional TEXT (bfp). Sets the uplink compression method. Supported: [none, bfp, bfp selective, block scaling, mu law, modulation, modulation selective].
  compr_bitwidth_ul: 9                                     # Optional UINT (9). Sets the uplink compression bit width. Supported: [1 - 16].
  compr_method_dl: bfp                                     # Optional TEXT (bfp). Sets the downlink compression method. Supported: [none, bfp, bfp selective, block scaling, mu law, modulation, modulation selective].
  compr_bitwidth_dl: 9                                     # Optional UINT (9). Sets the downlink compression bit width. Supported: [1 - 16].
  compr_method_prach: bfp                                  # Optional TEXT (bfp). Sets the PRACH compression method. Supported: [none, bfp, bfp selective, block scaling, mu law, modulation, modulation selective].
  compr_bitwidth_prach: 9                                  # Optional UINT (9). Sets the PRACH compression bit width. Supported: [1 - 16].
  enable_ul_static_compr_hdr: true                         # Optional BOOLEAN (true). Enables the uplink static compression header. Supported: [false, true].
  enable_dl_static_compr_hdr: true                         # Optional BOOLEAN (true). Enables the downlink static compression header. Supported: [false, true].
  ru_reference_level_dBFS: -12                             # Optional FLOAT (-12). Sets the RU IQ reference level mapped to the maximum RF power in dBFS. Supported: (-inf - 0].
  subcarrier_rms_backoff_dB: auto                          # Optional TEXT (auto). Sets the per-subcarrier power back-off relative to the RU reference level in dB. Accepts a numeric value >= 0 or 'auto'. Supported: [0 - inf, auto].
  iq_scaling: 0.1                                          # Optional FLOAT (0.1). Sets the IQ scaling factor. This is an alternative to ru_reference_level_dBFS. Supported: [0 - 100].
  cplane_prach_fft_len: 4096                               # Optional UINT (4096). Sets the PRACH FFT length used in C-Plane Type-3 messages. Supported: [128, 256, 512, 1024, 1536, 2048, 3072, 4096].
  cells:                                                   # Optional TEXT. Sets the hardware-specific cell configuration on a per cell basis.
    -                                                      # Cell 1 - set custom configuration for each cell
      network_interface: enp1s0f0                          # Optional TEXT (enp1s0f0). Sets the ethernet network interface name for the RU or PCIe identifier when using DPDK.
      enable_promiscuous: false                            # Optional BOOLEAN (false). Enables promiscuous mode on the network interface. Supported: [false, true].
      check_link_status: false                             # Optional BOOLEAN (false). Enables Ethernet link status checking at startup. Supported: [false, true].
      mtu: 9000                                            # Optional UINT (9000). Sets the NIC interface MTU size in bytes. Supported: [1500 - 9600].
      ru_mac_addr: 70:b3:d5:e1:5b:06                       # Optional TEXT (70:b3:d5:e1:5b:06). Sets the Radio Unit MAC address. Format: a string, e.g. [AA:BB:CC:DD:11:22].
      du_mac_addr: 00:11:22:33:00:77                       # Optional TEXT (00:11:22:33:00:77). Sets the Distributed Unit MAC address. Format: a string, e.g. [AA:BB:CC:DD:11:22].
      vlan_tag_cp: 1                                       # Optional UINT. Sets the VLAN tag value for C-Plane. Supported: [1 - 4094].
      vlan_tag_up: 1                                       # Optional UINT. Sets the VLAN tag value for U-Plane. Supported: [1 - 4094].
      vlan_pcp_cp:                                         # Optional UINT. Sets the C-Plane VLAN PCP. Requires vlan_tag_cp. Supported: [0 - 7].
      vlan_pcp_up:                                         # Optional UINT. Sets the U-Plane VLAN PCP. Requires vlan_tag_up. Supported: [0 - 7].
      prach_port_id: [4]                                   # Optional UINT ([4]). Sets the RU PRACH eAxC port ID(s).
      dl_port_id: [0]                                      # Optional UINT ([0]). Sets the RU downlink eAxC port ID(s). Format: vector containing all DL eAxC ports, e.g. [0, ..., N].
      ul_port_id: [0]                                      # Optional UINT ([0]). Sets the RU uplink eAxC port ID(s).
      ru_bandwidth_MHz: <cell bandwidth>                     # Optional TEXT. Sets the channel bandwidth in MHz. Supported: [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100].
      t1a_max_cp_dl: 500                                   # Optional UINT (500). Sets T1a maximum value for downlink control-plane. Supported: [0 - 1960].
      t1a_min_cp_dl: 258                                   # Optional UINT (258). Sets T1a minimum value for downlink control-plane. Supported: [0 - 1960].
      t1a_max_cp_ul: 500                                   # Optional UINT (500). Sets T1a maximum value for uplink control-plane. Supported: [0 - 1960].
      t1a_min_cp_ul: 285                                   # Optional UINT (285). Sets T1a minimum value for uplink control-plane. Supported: [0 - 1960].
      t1a_max_up: 300                                      # Optional UINT (300). Sets T1a maximum value for user-plane. Supported: [0 - 1960].
      t1a_min_up: 85                                       # Optional UINT (85). Sets T1a minimum value for user-plane. Supported: [0 - 1960].
      ta4_max: 500                                         # Optional UINT (500). Sets the Ta4 maximum value for User-Plane. Supported: [0 - 1960].
      ta4_min: 85                                          # Optional UINT (85). Sets the Ta4 minimum value for User-Plane. Supported: [0 - 1960].
      is_prach_cp_enabled: true                            # Optional BOOLEAN (true). Sets the PRACH control-plane enabled flag. Supported: [false, true].
      ignore_ecpri_seq_id: false                           # Optional BOOLEAN (false). Sets whether to ignore the eCPRI sequence ID field value. Supported: [false, true].
      ignore_ecpri_payload_size: false                     # Optional BOOLEAN (false). Sets whether to ignore the eCPRI payload size field value. Supported: [false, true].
      ignore_prach_start_symbol: false                     # Optional BOOLEAN (false). Sets whether to ignore the PRACH start symbol in PRACH U-Plane Packets. Supported: [false, true].
      log_lates_as_warnings: true                          # Optional BOOLEAN (true). Sets late events to be logged as warnings. Supported: [false, true].
      warn_unreceived_ru_frames: after_traffic_detection   # Optional TEXT (after_traffic_detection). Sets the policy for warning about unreceived RU frames. Supported: [never, always, after_traffic_detection].
      compr_method_ul: bfp                                 # Optional TEXT (bfp). Sets the uplink compression method. Supported: [none, bfp, bfp selective, block scaling, mu law, modulation, modulation selective].
      compr_bitwidth_ul: 9                                 # Optional UINT (9). Sets the uplink compression bit width. Supported: [1 - 16].
      compr_method_dl: bfp                                 # Optional TEXT (bfp). Sets the downlink compression method. Supported: [none, bfp, bfp selective, block scaling, mu law, modulation, modulation selective].
      compr_bitwidth_dl: 9                                 # Optional UINT (9). Sets the downlink compression bit width. Supported: [1 - 16].
      compr_method_prach: bfp                              # Optional TEXT (bfp). Sets the PRACH compression method. Supported: [none, bfp, bfp selective, block scaling, mu law, modulation, modulation selective].
      compr_bitwidth_prach: 9                              # Optional UINT (9). Sets the PRACH compression bit width. Supported: [1 - 16].
      enable_ul_static_compr_hdr: true                     # Optional BOOLEAN (true). Enables the uplink static compression header. Supported: [false, true].
      enable_dl_static_compr_hdr: true                     # Optional BOOLEAN (true). Enables the downlink static compression header. Supported: [false, true].
      ru_reference_level_dBFS: -12                         # Optional FLOAT (-12). Sets the RU IQ reference level mapped to the maximum RF power. Supported: (-inf - 0].
      subcarrier_rms_backoff_dB: auto                      # Optional TEXT (auto). Sets the per-subcarrier power back-off relative to the RU reference level. Accepts a numeric value >= 0 or 'auto'. Supported: [0 - inf, auto].
      iq_scaling: 0.1                                      # Optional FLOAT (0.1). Sets the IQ scaling factor. Supported: [0 - 100].
      cplane_prach_fft_len: 4096                           # Optional UINT (4096). Sets the PRACH FFT length used in C-Plane Type-3 messages. Supported: [128, 256, 512, 1024, 1536, 2048, 3072, 4096].

ru_sdr:
  srate: 61.44                          # Optional FLOAT (61.44). Sets the sampling rate of the RF-frontend in MHz.
  device_driver: uhd                    # Optional TEXT (uhd). Sets the RF device driver name.
  device_args:                          # Optional TEXT. Sets an argument that gets passed to the selected RF driver.
  tx_gain: 50.0                         # Optional FLOAT (50.0). Sets the transmit gain in dB.
  rx_gain: 60.0                         # Optional FLOAT (60.0). Sets the receive gain in dB.
  freq_offset: 0                        # Optional FLOAT (0). Sets the center frequency offset in Hertz applied to all channels.
  clock_ppm: 0                          # Optional FLOAT (0). Sets the clock calibration in Parts Per Million (PPM).
  lo_offset: 0                          # Optional FLOAT (0). Shifts the local oscillator frequency in MHz away from the center frequency to move LO leakage out of the channel.
  clock: default                        # Optional TEXT (default). Sets the RF device clock source.
  sync: default                         # Optional TEXT (default). Sets the RF device time synchronization source.
  otw_format: default                   # Optional TEXT (default). Sets the over-the-wire sample format.
  time_alignment_calibration: auto      # Optional TEXT (auto). Compensates for any reception and transmission time misalignment inherent to the RF device. Positive values reduce
                                        # the RF transmission delay with respect to RF reception. Negative values have the opposite effect.
  start_time: auto                      # Optional TEXT (auto). Sets the radio streaming start time. Format: YYYY-MM-DD HH:MM:SS. Use 'auto' or leave empty to let the radio start immediately.
  dl_freq_Hz:                           # Optional FLOAT. Sets the downlink frequency override in Hz. Overrides dl_arfcn-derived frequency.
  ul_freq_Hz:                           # Optional FLOAT. Sets the uplink frequency override in Hz. Overrides ul_arfcn-derived frequency.

  amplitude_control:
    tx_gain_backoff: 12.0                     # Optional FLOAT (12.0). Sets the baseband gain back-off in dB to account for signal PAPR. Format: positive float.
    enable_clipping: false                    # Optional BOOLEAN (false). Enables clipping of baseband samples that exceed the power ceiling. Supported: [false, true].
    ceiling: -0.1                             # Optional FLOAT (-0.1). Sets the power ceiling in dBFS relative to full scale amplitude. Format: negative float or 0.

  expert_cfg:
    low_phy_dl_throttling: 0                # Optional FLOAT (0). Throttles the lower PHY DL baseband generation. 0 disables throttling.
    tx_mode: continuous                     # Optional TEXT (continuous). Selects a radio transmission mode. Supported: [continuous, discontinuous, same-port].
    power_ramping_time_us: 0                # Optional FLOAT (0). Sets the power ramping time in microseconds, which proactively initiates transmission and mitigates transient effects.

ru_dummy:
  dl_processing_delay: 1  # Optional UINT (1). Sets the DL processing delay in slots.
  time_scaling: 1.0  # Optional FLOAT (1.0). Sets the time scaling factor applied to the slot duration. Must be greater than zero. A value greater than one slows down the RU, while a value between zero and one speeds it up. Supported: [0 - inf].

hal:
  eal_args:                             # Optional TEXT. Sets the EAL configuration parameters used to initialize DPDK.
  bbdev_hwacc:
    hwacc_type:                         # Optional TEXT. Sets the type of BBDEV hardware accelerator. Supported: [acc100, acc200, vrb1].
    id:                                 # Optional UINT. Sets the ID of the BBDEV-based hardware-accelerator. Supported: [0 - 65535].
    pdsch_enc:
      nof_hwacc:                         # Optional UINT. Sets the number of hardware-accelerated PDSCH encoding functions. Supported: [0 - 64].
      cb_mode: false                     # Optional BOOLEAN (false). Sets the operation mode of the PDSCH encoder (CB mode = true, TB mode = false). Supported: [false, true].
      max_buffer_size:                   # Optional UINT. Sets the maximum supported buffer size in bytes (CB mode will be forced for larger TBs).
      dedicated_queue: true              # Optional BOOLEAN (true). Sets whether to use a dedicated hardware queue for the PDSCH encoder. Supported: [false, true].
    pusch_dec:
      nof_hwacc:                         # Optional UINT. Sets the number of hardware-accelerated PUSCH decoding functions. Supported: [0 - 64].
      harq_context_size:                 # Optional UINT. Sets the size of the HARQ context repository.
      force_local_harq: false            # Optional BOOLEAN (false). Forces using host memory to implement the HARQ buffer. Supported: [false, true].
      dedicated_queue: true              # Optional BOOLEAN (true). Sets whether to use a dedicated hardware queue for the PUSCH decoder. Supported: [false, true].
    msg_mbuf_size:                       # Optional UINT. Sets the size of the mbufs storing unencoded and unrate-matched messages (in bytes). Supported: [0 - 64000].
    rm_mbuf_size:                        # Optional UINT. Sets the size of the mbufs storing encoded and rate-matched messages (in bytes). Supported: [0 - 64000].
    nof_mbuf:                            # Optional UINT. Sets the number of mbufs in the memory pool.

buffer_pool:
  nof_segments: 1048576                 # Optional UINT (1048576). Sets the number of segments allocated by the buffer pool.
  segment_size: 2048                    # Optional UINT (2048). Sets the size of each buffer pool segment in bytes.

expert_phy:
  max_proc_delay: 5                              # Optional UINT (5). Sets the maximum allowed DL processing delay in slots. Supported: [1 - 30].
  pusch_dec_max_iterations: 6                    # Optional UINT (6). Sets the maximum number of PUSCH LDPC decoder iterations.
  pusch_dec_enable_early_stop: true              # Optional BOOLEAN (true). Enables the PUSCH LDPC decoder early stop. Supported: [false, true].
  pusch_decoder_force_decoding: false            # Optional BOOLEAN (false). Forces the PUSCH LDPC decoder to decode always. Supported: [false, true].
  pusch_sinr_calc_method: post_equalization      # Optional TEXT (post_equalization). Sets the PUSCH SINR calculation method. Supported: [channel_estimator, post_equalization, evm].
  pusch_channel_estimator_fd_strategy: filter    # Optional TEXT (filter). Sets the PUSCH channel estimator frequency-domain strategy. Supported: [filter, mean, none].
  pusch_channel_estimator_td_strategy: average   # Optional TEXT (average). Sets the PUSCH channel estimator time-domain strategy. Supported: [average, interpolate].
  pusch_channel_estimator_cfo_compensation: true # Optional BOOLEAN (true). Enables the PUSCH channel estimator CFO compensation. Supported: [false, true].
  pusch_channel_equalizer_algorithm: zf          # Optional TEXT (zf). Sets the PUSCH channel equalizer algorithm. Supported: [zf, mmse].
  max_request_headroom_slots: 0                  # Optional UINT (0). Sets the maximum request headroom size in slots. Supported: [0 - 30].
  allow_request_on_empty_uplink_slot: false      # Optional BOOLEAN (false). Generates an uplink request in an uplink slot with no PUCCH/PUSCH/SRS PDUs. Supported: [false, true].
  enable_phy_tap: false                          # Optional BOOLEAN (false). Enables the PHY tap plugin if present. Supported: [false, true].
  phy_tap_arguments:                             # Optional TEXT. Sets the PHY tap plugin argument string passed during construction.

expert_execution:
  affinities:
    main_pool_cpus:                           # Optional TEXT. Sets CPU cores assigned to the main thread pool. No default — the affinity mask is empty by default.
    main_pool_pinning: mask                   # Optional ENUM (mask). Sets the policy used for assigning CPU cores to the main thread pool. Supported: [round-robin, mask].
    ofh:
      timing_cpu:                               # Optional TEXT. Sets the CPU used for timing in the Radio Unit. Format: comma-separated CPU ids or ranges, e.g. "0-3,5".
  threads:
    main_pool:
      nof_threads:                              # Optional UINT. Sets the number of threads for processing upper PHY and upper layers. No default — field is std::optional<unsigned> (nullopt when not set).
      task_queue_size: 2048                     # Optional UINT (2048). Sets the main thread pool task queue size.
      backoff_period: 50                        # Optional UINT (50). Sets the main thread pool back-off period in microseconds.
    upper_phy:
      pdsch_processor_type: auto                # Optional TEXT (auto). Sets the PDSCH processor type. Supported: [auto, generic, flexible].
      pdsch_cb_batch_length: 4                  # Optional UINT (4). Sets the PDSCH flexible processor codeblock-batch size. Format: a non-negative integer or the sentinel strings "auto", "default", "synchronous".
      max_pucch_concurrency: 0                  # Optional UINT (0). Sets the maximum PUCCH processing concurrency for all cells. 0 means no limit.
      max_pusch_and_srs_concurrency: 4          # Optional UINT (4). Sets the maximum PUSCH and SRS processing concurrency for all cells. 0 means no limit. If hardware acceleration is enabled, this is set to the number of accelerator queues.
      max_pdsch_concurrency: 0                  # Optional UINT (0). Sets the maximum PDSCH processing concurrency for all cells. 0 means no limit. If hardware acceleration is enabled, this is set to the number of accelerator queues.
    ofh:
      enable_busy_waiting: false                # Optional BOOLEAN (false). Enables busy-waiting of the RU timing worker. Supported: [false, true].
    lower_phy:
      execution_profile: triple                 # Optional TEXT (triple). Sets the lower physical layer executor profile. Supported: [blocking, single, dual, triple].
  queues:
    cu_up_dl_ue_executor_queue_size: 8192     # Optional UINT (8192). Sets the CU-UP DL UE executor queue size.
    cu_up_ul_ue_executor_queue_size: 8192     # Optional UINT (8192). Sets the CU-UP UL UE executor queue size.
    cu_up_ctrl_ue_executor_queue_size: 8192   # Optional UINT (8192). Sets the CU-UP control UE executor queue size.
    cu_up_strand_batch_size: 256              # Optional UINT (256). Sets the CU-UP strand batch size.
    du_ue_data_executor_queue_size: 8192      # Optional UINT (8192). Sets the DU UE executor task queue size for PDU processing.
  cell_affinities:                            # Optional TEXT. Sets the cell CPU affinity configuration on a per cell basis. Each list entry should begin with "-".
    - ru_cpus:                                  # Optional TEXT. Sets the CPU cores used for Radio Unit tasks. Format: comma-separated CPU ids or ranges, e.g. "0-3,5".
      ru_pinning: mask                          # Optional TEXT (mask). Sets the policy used for assigning CPU cores to Radio Unit tasks. Format: one of: mask, round-robin.

remote_control:
  enabled: false                        # Optional BOOLEAN (false). Enables the remote control feature. Supported: [false, true].
  bind_addr: 127.0.0.1                  # Optional TEXT (127.0.0.1). Sets the local IP address to bind for remote control. Format: IPV4 or IPV6 IP address.
  port: 8001                            # Optional UINT (8001). Sets the port where the remote control server listens. Supported: [0 - 65535].

test_mode:
  test_ue:
    rnti: 0                               # Optional UINT (0). Sets the C-RNTI of the test UE. Supported: [0 - 65519].
    nof_ues: 1                            # Optional UINT (1). Sets the number of test UEs created. Supported: [0 - 1024].
    ue_creation_stagger_slots: 10         # Optional UINT (10). Sets the number of slots between consecutive test mode UE creations. Supported: [0 - 10240].
    auto_ack_indication_delay:            # Optional TEXT. Sets the delay before UL and DL HARQs are automatically ACKed. Only use if the UL PHY is not operational.
    pdsch_active: true                    # Optional BOOLEAN (true). Enables the PDSCH of the test UE. Supported: [false, true].
    pusch_active: true                    # Optional BOOLEAN (true). Enables the PUSCH of the test UE. Supported: [false, true].
    cqi: 15                               # Optional UINT (15). Sets the Channel Quality Indicator for the test UE. Supported: [1 - 15].
    pmi: 0                                # Optional UINT (0). Sets the Precoder Matrix Indicator for the test UE. Supported: [0 - 3].
    ri: 1                                 # Optional UINT (1). Sets the Rank Indicator for the test UE. Supported: [1 - 4].
    i_1_1: 0                              # Optional INT (0). Sets the Precoder Matrix codebook index i_1_1 for the test UE. Supported: [0 - 7].
    i_1_3: 0                              # Optional INT (0). Sets the Precoder Matrix codebook index i_1_3 for the test UE. Supported: [0 - 1].
    i_2: 0                                # Optional INT (0). Sets the Precoder Matrix codebook index i_2 for the test UE. Supported: [0 - 3].
    attach_detach:
      period_ms: 0                        # Optional UINT (0). Sets the cyclic attach/detach period in ms. 0 disables.
      sleep_ms: 0                         # Optional UINT (0). Sets the sleep time in ms between attach/detach cycles.
    attach_detach_duration_ms:            # Optional UINT. Sets the duration in ms of active traffic before UEs are released and recreated. Supported: [100 - 10000].
    attach_detach_guard_duration_ms: 1000 # Optional UINT (1000). Sets the guard period in ms between a release and next creation cycle. Supported: [100 - 60000].

log:
# All gNB layers and components can be configured independently to output at various levels of detail. Supported levels (from lowest to highest detail):
# none, error, warning, info, debug
  filename: /tmp/gnb.log                   # Optional TEXT (/tmp/gnb.log). Sets the file path for logs. The gnb_appconfig constructor overrides the base logger default (stdout) to /tmp/gnb.log.
  all_level: warning                       # Optional TEXT (warning). Sets a common log level across PHY, MAC, RLC, PDCP, RRC, SDAP, NGAP and GTPU layers. Supported: [none, warning, info, debug, error].
  lib_level: warning                       # Optional TEXT (warning). Sets the log level for external library components. Supported: [none, warning, info, debug, error].
  config_level: none                       # Optional TEXT (none). Sets the configuration parser log level. Supported: [none, info, debug] (error and warning are not accepted).
  ngap_level: warning                      # Optional TEXT (warning). Sets the NGAP log level.
  nrppa_level: warning                     # Optional TEXT (warning). Sets the NRPPa log level.
  e1ap_level: warning                      # Optional TEXT (warning). Sets the E1AP log level.
  e1ap_json_enabled: false                 # Optional BOOLEAN (false). Enables JSON-formatted logging of E1AP PDUs. Supported: [false, true].
  xnap_level: warning                      # Optional TEXT (warning). Sets the Xn-AP log level.
  f1ap_level: warning                      # Optional TEXT (warning). Sets the F1AP log level.
  f1ap_json_enabled: false                 # Optional BOOLEAN (false). Enables JSON-formatted logging of F1AP PDUs. Supported: [false, true].
  e2ap_level: warning                      # Optional TEXT (warning). Sets the E2AP log level. Supported: [none, warning, info, debug, error].
  rrc_level: warning                       # Optional TEXT (warning). Sets the RRC log level.
  sec_level: warning                       # Optional TEXT (warning). Sets the security functions log level.
  cu_level: warning                        # Optional TEXT (warning). Sets the CU management log level.
  pdcp_level: warning                      # Optional TEXT (warning). Sets the PDCP log level.
  sdap_level: warning                      # Optional TEXT (warning). Sets the SDAP log level.
  rohc_level: warning                      # Optional TEXT (warning). Sets the ROHC log level. Supported: [none, error, warning, info, debug].
  du_level: warning                        # Optional TEXT (warning). Sets the DU management log level.
  mac_level: warning                       # Optional TEXT (warning). Sets the MAC log level.
  rlc_level: warning                       # Optional TEXT (warning). Sets the RLC log level.
  f1u_level: warning                       # Optional TEXT (warning). Sets the F1-U log level.
  gtpu_level: warning                      # Optional TEXT (warning). Sets the GTP-U log level.
  fapi_level: warning                      # Optional TEXT (warning). Sets the FAPI log level (split_7_2 and split_6 only).
  phy_level: warning                       # Optional TEXT (warning). Sets the physical layer log level.
  ofh_level: warning                       # Optional TEXT (warning). Sets the Open Fronthaul log level.
  radio_level: info                        # Optional TEXT (info). Sets the radio driver log level.
  hal_level: warning                       # Optional TEXT (warning). Sets the HAL log level.
  ntn_level: warning                       # Optional TEXT (warning). Sets the NTN log level.
  hex_max_size: 0                          # Optional INT (0). Sets the maximum number of bytes to print in hex. 0 disables hex dumps; -1 for unlimited. Supported: [-1 - 1024].
  broadcast_enabled: false                 # Optional BOOLEAN (false). Enables logging of broadcast messages and all PRACH opportunities in the PHY and MAC layers. Supported: [false, true].
  high_latency_diagnostics_enabled: false  # Optional BOOLEAN (false). Enables logging of performance diagnostics when high computational latencies are detected. Supported: [false, true].
  phy_rx_symbols_filename:                 # Optional TEXT. Sets the file path to dump received IQ symbols. Leave empty to disable.
  phy_rx_symbols_port: 0                   # Optional TEXT (0). Sets the Rx port number to dump IQ symbols from, or "all" for all UL receive ports. Only active if phy_rx_symbols_filename is set.
  phy_rx_symbols_prach: false              # Optional BOOLEAN (false). Enables dumping of IQ symbols from all PRACH ports. Only active if phy_rx_symbols_filename is set. Supported: [false, true].

pcap:
  ngap_filename: /tmp/cu_ngap.pcap            # Optional TEXT (/tmp/cu_ngap.pcap). Sets the path for NGAP PCAP files.
  ngap_enable: false                          # Optional BOOLEAN (false). Enables NGAP packet capture. Supported: [false, true].
  n3_filename:                                # Optional TEXT. Sets the N3 GTP-U PCAP file output path.
  n3_enable: false                            # Optional BOOLEAN (false). Enables N3 packet capture. Supported: [false, true].
  e1ap_filename: /tmp/cu_e1ap.pcap            # Optional TEXT (/tmp/cu_e1ap.pcap). Sets the E1AP PCAP file output path.
  e1ap_enable: false                          # Optional BOOLEAN (false). Enables E1AP packet capture. Supported: [false, true].
  e2ap_cu_cp_filename: /tmp/cu_cp_e2ap.pcap   # Optional TEXT (/tmp/cu_cp_e2ap.pcap). Sets the path for E2AP CU-CP PCAP files.
  e2ap_cu_up_filename: /tmp/cu_up_e2ap.pcap   # Optional TEXT (/tmp/cu_up_e2ap.pcap). Sets the path for E2AP CU-UP PCAP files.
  e2ap_du_filename: /tmp/du_e2ap.pcap         # Optional TEXT (/tmp/du_e2ap.pcap). Sets the path for E2AP DU PCAP files.
  e2ap_enable: false                          # Optional BOOLEAN (false). Enables E2AP packet capture. Supported: [false, true].
  f1ap_filename: /tmp/cu_f1ap.pcap            # Optional TEXT (/tmp/cu_f1ap.pcap). Sets the path for F1AP PCAP files.
  f1ap_enable: false                          # Optional BOOLEAN (false). Enables F1AP packet capture. Supported: [false, true].
  f1u_filename: /tmp/du_f1u.pcap              # Optional TEXT (/tmp/du_f1u.pcap). Sets the F1-U GTP-U PCAP file output path.
  f1u_enable: false                           # Optional BOOLEAN (false). Enables F1-U packet capture. Supported: [false, true].
  rlc_filename: /tmp/du_rlc.pcap              # Optional TEXT (/tmp/du_rlc.pcap). Sets the path for RLC PCAP files.
  rlc_rb_type: all                            # Optional TEXT (all). Sets the RLC PCAP RB type filter. Supported: [all, srb, drb].
  rlc_enable: false                           # Optional BOOLEAN (false). Enables RLC packet capture. Supported: [false, true].
  mac_filename: /tmp/du_mac.pcap              # Optional TEXT (/tmp/du_mac.pcap). Sets the path for MAC PCAP files.
  mac_type: udp                               # Optional TEXT (udp). Sets the MAC PCAP format. Supported: [dlt, udp].
  mac_enable: false                           # Optional BOOLEAN (false). Enables MAC packet capture. Supported: [false, true].
  xnap_filename: /tmp/cu_xnap.pcap            # Optional TEXT (/tmp/cu_xnap.pcap). Sets the path for Xn-AP PCAP files.
  xnap_enable: false                          # Optional BOOLEAN (false). Enables Xn-AP packet capture. Supported: [false, true].

metrics:
  autostart_stdout_metrics: false       # Optional BOOLEAN (false). Autostart stdout metrics reporting. Supported: [false, true].
  enable_json: false                    # Optional BOOLEAN (false). Enables JSON metrics reporting. Supported: [false, true].
  enable_log: false                     # Optional BOOLEAN (false). Enables log metrics reporting. Supported: [false, true].
  enable_verbose: false                 # Optional BOOLEAN (false). Enables extended detail metrics reporting. Supported: [false, true].
  layers:
    enable_app_usage: false             # Optional BOOLEAN (false). Enable application usage metrics. Supported: [false, true].
    enable_ngap: false                  # Optional BOOLEAN (false). Enables NGAP metrics. Supported: [false, true].
    enable_e1ap: false                  # Optional BOOLEAN (false). Enables E1AP metrics. Supported: [false, true].
    enable_pdcp: false                  # Optional BOOLEAN (false). Enables PDCP metrics (reported by the CU-UP). Supported: [false, true].
    enable_nrup_cu: false               # Optional BOOLEAN (false). Enables NRUP metrics (CU side). Supported: [false, true].
    enable_rrc: false                   # Optional BOOLEAN (false). Enable CU-CP RRC metrics. Supported: [false, true].
    skip_cu_up_executor: true           # Optional BOOLEAN (true). Whether to skip logging CU-UP executor metrics when executor logging is enabled application wide. Supported: [false, true].
    enable_sched: true                  # Optional BOOLEAN (true). Enables DU scheduler metrics. Supported: [false, true].
    enable_rlc: false                   # Optional BOOLEAN (false). Enables RLC metrics. Supported: [false, true].
    enable_mac: false                   # Optional BOOLEAN (false). Enables MAC metrics. Supported: [false, true].
    enable_du_proc: false               # Optional BOOLEAN (false). Enables DU management and control procedure metrics. Supported: [false, true].
    enable_executor: false              # Optional BOOLEAN (false). Whether to log application executors metrics. Supported: [false, true].
    enable_du_low: false                # Optional BOOLEAN (false). Enables DU low (upper physical layer) metrics. Supported: [false, true].
    enable_ru: false                    # Optional BOOLEAN (false). Enables Radio Unit metrics. Supported: [false, true].
  periodicity:
    app_usage_report_period: 1000       # Optional UINT (1000). Sets the application resource usage metrics report period in milliseconds.
    cu_cp_report_period: 1000           # Optional UINT (1000). Sets the CU-CP metrics report period in milliseconds.
    cu_up_report_period: 1000           # Optional UINT (1000). Sets the CU-UP metrics report period in milliseconds.
    du_report_period: 1000              # Optional UINT (1000). Sets the DU statistics report period in milliseconds. Supported: [0 - 10485760].
    executors_report_period: 1000       # Optional UINT (1000). Sets the executor metrics report period in milliseconds. Supported: [0 - 10485760].

trace:
  filename:                             # Optional TEXT. Sets the file path for trace output. Leave empty to disable tracing.
  max_tracing_events_per_file: 1000000  # Optional UINT (1000000). Sets the maximum number of events per trace file. 0 means no limit.
  nof_tracing_events_after_severe: 0    # Optional UINT (0). Sets the number of events to write prior to a severe event. Set to zero for writing all events.
  layers:
    cu_up_enable: false                 # Optional BOOLEAN (false). Enables tracing for CU-UP executors. Supported: [false, true].
    du_high_enable: false               # Optional BOOLEAN (false). Enables tracing for DU-high executors. Supported: [false, true].
    phy_enable: false                   # Optional BOOLEAN (false). Enables tracing for physical layer executors. Supported: [false, true].
