1. 23 Jan, 2024 10 commits
    • Kirill Smelkov's avatar
      software/ors-amarisoft: enb.jinja2.cfg: nr: Move tunable parameters from... · 825a5522
      Kirill Smelkov authored
      software/ors-amarisoft: enb.jinja2.cfg: nr: Move tunable parameters from nr_cell_default to nr_cell_list
      
      This patch is similar and has the same rationale as the previous patch
      (software/ors-amarisoft: enb.jinja2.cfg: lte: Move tunable parameters
      from cell_default to cell_list). Please see its description for context
      and details.
      
      Like with previous patch I've made sure via json_util that effective gnb
      configuration stays exactly the same. Also, since for NR case we move
      more code, and also use enb merging feature(*) I tested that the
      effective gnb configuration stays exactly the same with both
      
        * tdd_config = 3  (5ms 8UL 1DL 2/10 (maximum uplink)),	and
        * tdd_config = 1  (5ms 2UL 7DL 4/6 (default))
      
      In all the cases effective gnb configuration stayed exactly the same
      before and after this patch which proves that effective configuration
      for single cell case remains unchanged.
      
      (*) enb implements merging process for cell/cell_default and
      nr_cell/nr_cell_default as demonstrated below:
      
        cell={a: 10, d:15}  cell_default={a:1, b:2, c:3}       ->  cell={a:10, b:2, c: 3, d: 15}
        cell={x: [{}, 2]}   cell_default={x: [{a:1}]}          ->  cell={x: [{a:1}, 2]}
        cell={x: [{c:11}]}  cell_default={x: [{a:1}, {b:2}]    ->  cell={x: [{a:1, c:11}, {b:2}]}
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1515
      825a5522
    • Kirill Smelkov's avatar
      software/ors-amarisoft: enb.jinja2.cfg: lte: Move tunable parameters from cell_default to cell_list · 4f2d9791
      Kirill Smelkov authored
      Currently we set some cell tunable parameters on the cell object itself
      (e.g. dl_earfcn), while other cell tunable parameters on the
      cell_default object, e.g. cell bandwidth. This works ok when there is
      only one cell, but with multiple cells it makes a problem because
      different cells can have e.g. different bandwidth.
      
      So as preparatory step for MultiRU move the code, that sets tunable
      parameters for lte cells, from cell_default to cell object itself.
      
      Rendered config changes but we can verify that the configuration, that
      enb actually uses, stays the same: When enb starts it builds internal
      configuration for all configured cell objects by merging cell_default +
      cell's explicit configuration and using the result as the actual
      configuration for the cell. There is no more cell_default in that actual
      configuration. And also enb emits that actual runtime configuration in
      the beginning of enb.log which we can extract and investigate(*)
      
      So this way we can run enb with old and new generated enb.cfg and then
      compare the actual configuration. It turns out to be empty:
      
          ~/enb# ./lteenb -n x/old/enb.cfg
          ...
          RF0: sample_rate=11.520 MHz dl_freq=1910.000 MHz ul_freq=1910.000 MHz (band 33) dl_ant=2 ul_ant=2
          (enb) quit
          ~/enb# mv log/enb.log log/enb.log.old
      
          ~/enb# ./lteenb -n x/out/enb.cfg
          ...
          RF0: sample_rate=11.520 MHz dl_freq=1910.000 MHz ul_freq=1910.000 MHz (band 33) dl_ant=2 ul_ant=2
          (enb) quit
          ~/enb# mv log/enb.log log/enb.log.new
      
          ~/enb# ../ots/json_util log log/enb.log.old >a
          ~/enb# ../ots/json_util log log/enb.log.new >b
          ~/enb# diff -u a b  # output is empty
      
      which means that effective enb configuration before and after this patch is exactly the same.
      
      For the reference, how internal configuration looks like is provided in the appendix.
      
      (*) see https://tech-academy.amarisoft.com/ExtractConfigFromLog.html for details.
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1515
      
      P.S. for now I do not plan to expose full measurement configuration in
           the generic MultiRU and so it stays in cell_default with corresponding TODO.
      
      --------
      
      Appendix. Dump of internal enb configuration for enb.cfg before and after the patch
      
      ```
      $ ../ots/json_util log log/enb.log.old
      ```
      
      ```json
      {
          "cell_list": [
              {
                  "cell_barred": false,
                  "cell_id": 0,
                  "cipher_algo_pref": [],
                  "cqi_period": 40,
                  "cyclic_prefix": "normal",
                  "dl_256qam": true,
                  "dl_earfcn": 36100,
                  "dpc": true,
                  "dpc_pucch_snr_target": 25,
                  "dpc_pusch_snr_target": 25,
                  "drb_config": [ ... ],		# removed for brevity
                  "ho_from_meas": true,
                  "inactivity_timer": 10000,
                  "initial_cqi": 3,
                  "integ_algo_pref": [2, 1],
                  "intra_freq_reselection": true,
                  "m_ri": 8,
                  "mac_config": {
                      "dl_max_harq_tx": 5,
                      "ul_max_harq_tx": 5
                  },
                  "manual_ref_signal_power": true,
                  "meas_config_desc": {
                      "a1_hysteresis": 0,
                      "a1_report_type": "rsrp",
                      "a1_rsrp": -70,
                      "a1_time_to_trigger": 640,
                      "a2_hysteresis": 0,
                      "a2_report_type": "rsrp",
                      "a2_rsrp": -80,
                      "a2_time_to_trigger": 640,
                      "a3_hysteresis": 0,
                      "a3_offset": 6,
                      "a3_report_type": "rsrp",
                      "a3_time_to_trigger": 480
                  },
                  "meas_gap_config": "gp0",
                  "n_antenna_dl": 2,
                  "n_antenna_ul": 2,
                  "n_id_cell": 0,
                  "n_rb_dl": 50,
                  "n_symb_cch": 0,
                  "pdcch_format": 2,
                  "pdsch_dedicated": {
                      "p_a": -3,
                      "p_b": -1
                  },
                  "phich_duration": "normal",
                  "phich_resource": "1",
                  "plmn_list": ["00101"],
                  "prach_config_index": 4,
                  "prach_freq_offset": -1,
                  "pucch_dedicated": {
                      "cqi_pucch_n_rb": 1,
                      "n1_pucch_sr_count": 11,
                      "tdd_ack_nack_feedback_mode": "multiplexing"
                  },
                  "pusch_dedicated": {
                      "beta_offset_ack_index": 9,
                      "beta_offset_cqi_index": 6,
                      "beta_offset_ri_index": 6
                  },
                  "pusch_hopping_offset": -1,
                  "pusch_max_its": 6,
                  "pusch_msg3_mcs": 0,
                  "q_rx_lev_min": -70,
                  "rf_port": 0,
                  "root_sequence_index": 204,
                  "scell_list": [],
                  "si_coderate": 0.2,
                  "si_pdcch_format": 2,
                  "si_value_tag": 0,
                  "si_window_length": 40,
                  "sib_sched_list": [ ... ],		# remove for brevity
                  "sp_config": 7,
                  "sr_period": 20,
                  "srb_config": [
                      {
                          "id": 1,
                          "maxRetxThreshold": 32,
                          "t_PollRetransmit": 60,
                          "t_Reordering": 45
                      },
                      {
                          "id": 2,
                          "maxRetxThreshold": 32,
                          "t_PollRetransmit": 60,
                          "t_Reordering": 45
                      }
                  ],
                  "srs_dedicated": {
                      "srs_bandwidth": 2,
                      "srs_bandwidth_config": 2,
                      "srs_hopping_bandwidth": 0,
                      "srs_period": 40,
                      "srs_subframe_config": 3
                  },
                  "tac": 1,
                  "transmission_mode": 3,
                  "ul_64qam": true,
                  "uldl_config": 6
              }
          ],
          "com_addr": "127.0.1.2:9001",
          "enb_id": 107216,
          "gtp_addr": "127.0.1.1",
          "log_filename": "log/enb.log",
          "log_options": "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,s1ap.level=debug,s1ap.max_size=1,x2ap.level=debug,x2ap.max_size=1,rrc.level=debug,rrc.max_size=1,phy.level=info,file.rotate=1G,file.path=/dev/null",
          "mme_list": [
              {
                  "mme_addr": "127.0.1.100"
              }
          ],
          "rf_driver": {
              "args": "dev0=/dev/sdr0",
              "name": "sdr",
              "realtime": 1,
              "rx_antenna": "tx_rx",
              "tdd_tx_mod": 1
          },
          "rx_gain": 43,
          "tx_gain": 62
      }
      ```
      4f2d9791
    • Kirill Smelkov's avatar
      software/ors-amarisoft: slapos-render-config: Replace *arfcn numbers with valid ones · fe512654
      Kirill Smelkov authored
      So that it is possible to try running enb on generated configs becuase
      with previous numbers enb refuses to start:
      
          ~/enb# ./lteenb  x/old/enb.cfg
          ...
          x/old/enb.cfg:50: field 'dl_earfcn': range is [0:262143] (LTE Cell #0)
      
          ~/enb# ./lteenb  x/old/gnb.cfg
          ...
          x/old/gnb.cfg:54: invalid frequency band (NR Cell #1)
      
      We need enb to be able to start with generated config because enb dumps in its
      enb.log the real configuration that it builds from cell_list + cell_default and
      nr_cell_list + cell_default - which is possible to extract via `json_util` and
      which we want to check after our changes to enb.jinja2.cfg to see if we
      really don't introduce semantic mistakes when e.g. moving things in between
      cell_default to cell_list (see next patch).
      
      With new frequencies enb and gnb both start ok.
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1515
      fe512654
    • Kirill Smelkov's avatar
      software/ors-amarisoft: ru/*: Wrap with `if not testing` things that require real environment · e155a995
      Kirill Smelkov authored
      For example there is no slaptap under StandaloneSlapOS and <RU>-netconf-socket
      promise needs real RU hardware to be around and accepting incoming connections.
      
      If we don't wrap such things with `if not testing` running test on testnodes will fail.
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1514
      e155a995
    • Kirill Smelkov's avatar
      software/ors-amarisoft: ru/*: Pull testing initialization and default into one place · db05a810
      Kirill Smelkov authored
      Less need to keep default synchronized and less noise in the code. We will need
      to refer to `testing` more in the next patch, so it will help a bit.
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1514
      db05a810
    • Kirill Smelkov's avatar
      software/ors-amarisoft: Merge ue-lte.jinja2.cfg and ue-nr.jinja2.cfg into ue.jinja2.cfg · 9179f739
      Kirill Smelkov authored
      Similarly to f365a440 (software/ors-amarisoft: Merge gnb.jinja2.cfg into
      enb.jinja2.cfg) merge LTE and NR configuration files for UEsim into single
      config as the preparation for MultiRU - there UEsim will be also handling TDD,
      FDD, LTE and NR cells and UEs all at the same time.
      
      In this patch for now we only move code without changing it and wrap parts with
      `if do_lte` and `if do_nr` correspondingly.  The end result of rendered
      ue-lte.cfg and ue-nr.cfg stays practically the same as shown in the appendix.
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1513
      
      --------
      
      Appendix. Diff for rendered ue-*.cfg before and after this patch.
      
      ```
      $ ./pythonwitheggs slapos-render-config.py && git diff --no-index -w config/old/ config/out/
      ```
      
      ```diff
      diff --git a/config/old/ue-lte.cfg b/config/out/ue-lte.cfg
      index 7f1530daf..836a95e79 100644
      --- a/config/old/ue-lte.cfg
      +++ b/config/out/ue-lte.cfg
      @@ -1,5 +1,6 @@
      
       #define N_RB_DL             50
      +
       {
         log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1,phy.level=info,file.rotate=1G,file.path=/dev/null",
         log_filename: "log/ue.log",
      @@ -14,7 +15,8 @@ rf_driver: {
       },
         tx_gain: 60,
         rx_gain: 40,
      -  cell_groups: [{
      +  cell_groups: [
      +  {
           multi_ue: true,
           cells: [
             {
      @@ -27,7 +29,8 @@ rf_driver: {
           ],
           pdcch_decode_opt: false,
           pdcch_decode_opt_threshold: 0.1,
      -  }],
      +  },
      +  ],
         ue_list: [
           {
           sim_algo: "milenage",
      @@ -38,8 +41,8 @@ rf_driver: {
           impi: "",
           imsi: "001010123456789",
           K: "00112233445566778899aabbccddeeff",
      -    rue_addr: "host1",
           ue_category: 12,
      +    rue_addr: "host1",
           tun_setup_script: "ue-ifup",
           apn: "internet",
           }
      diff --git a/config/old/ue-nr.cfg b/config/out/ue-nr.cfg
      index 41758ab6f..631e1ab1e 100644
      --- a/config/old/ue-nr.cfg
      +++ b/config/out/ue-nr.cfg
      @@ -1,3 +1,5 @@
      +
      +
       {
         log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1,phy.level=info,file.rotate=1G,file.path=/dev/null",
         log_filename: "log/ue.log",
      @@ -12,7 +14,8 @@ rf_driver: {
       },
         tx_gain: 60,
         rx_gain: 40,
      -    cell_groups: [{
      +  cell_groups: [
      +  {
           group_type: "nr",
           multi_ue: false,
           cells: [{
      @@ -26,7 +29,8 @@ rf_driver: {
             n_antenna_ul: 2,
             }
           ],
      -    }],
      +  },
      +  ],
         ue_list: [
           {
           sim_algo: "milenage",
      @@ -37,11 +41,11 @@ rf_driver: {
           impi: "",
           imsi: "001010123456789",
           K: "00112233445566778899aabbccddeeff",
      -      rue_addr: "host2",
           as_release: 15,
           ue_category: "nr",
      +    rue_addr: "host2",
           tun_setup_script: "ue-ifup",
           apn: "internet",
           }
      -    ]
      +  ],
       }
      ```
      9179f739
    • Kirill Smelkov's avatar
      software/ors-amarisoft: slapos-render-config: Also render ue-*.cfg · dce00434
      Kirill Smelkov authored
      This is useful during development while working on ue-*.jinja2.cfg
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1513
      dce00434
    • Kirill Smelkov's avatar
      software/ors-amarisoft: slapos-render-config: Emit rendered files into config/out/ · 9c4b340e
      Kirill Smelkov authored
      We are going to generate more and more type of files via slapos-render-config:
      currently we generate only enb.cfg and gnb.cfg, but soon it will be also
      ue-*.cfg, drb_*.cfg, asn etc.
      
      So it will be handy to easily separate generated files from their source, to
      make snapshots of generated stuff for comparison, and to also e.g. to be able
      to copy generated configs to a callbox/simbox for testing.
      
      -> Move the place where generated files are emitted from config/ to config/out/
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1513
      9c4b340e
    • Jérome Perrin's avatar
      software/jstestnode: serve test files on https · b5b7360d
      Jérome Perrin authored
      Now that we have a more modern firefox, it requires secure context for
      many things. This fixes `TypeError: crypto.subtle is undefined` test
      failures for JIO.
      b5b7360d
    • Alain Takoudjou's avatar
      Upgrade Gitlab to 12.10.14 · 349df3cb
      Alain Takoudjou authored
      See merge request nexedi/slapos!1503
      349df3cb
  2. 22 Jan, 2024 22 commits
  3. 19 Jan, 2024 6 commits
    • Kirill Smelkov's avatar
      software/ors-amarisoft: Merge gnb.jinja2.cfg into enb.jinja2.cfg · f365a440
      Kirill Smelkov authored
      In MultiRU there will be only one ENB which supports all TDD, FDD, LTE and NR
      cells and different types of radio units - all at the same time. This patch is
      preparatory step for that: it merges gnb configuration template into enb
      configuration template, so that enb.jinja2.cfg now serves both enb and gnb
      instances.
      
      In this patch for now we only move code from gnb.jinja2.cfg without changing
      it(*) and wrap parts with `if do_lte` and `if do_nr` correspondingly.
      
      The end result of rendered enb.cfg and gnb.cfg stays the same modulo space
      changes and added innoccent `#define TDD` as Appendix shows.
      
      (*) the only exception is set up of gtp_addr which has practically the same
      code, was wrapped with `if mme_list` in enb and `if amf_list` in gnb, and is now
      wrapped with `if mme_list or amf_list`.
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on !1512
      
      --------
      
      Appendix. Diff for rendered enb.cfg and gnb.cfg before and after this patch.
      
      ```
      $ ./pythonwitheggs slapos-render-config.py && (git diff -w --no-index config/enb.cfg.old config/enb.cfg ; git diff -w --no-index config/gnb.cfg.old config/gnb.cfg)
      ```
      
      ```diff
      diff --git a/config/enb.cfg.old b/config/enb.cfg
      index fdf3ab24d..cb46697ea 100644
      --- a/config/enb.cfg.old
      +++ b/config/enb.cfg
      @@ -1,11 +1,15 @@
      
      +
       #define TDD                 1
      
       #define N_RB_DL             50
      +
       #define N_ANTENNA_DL        2
      +
       #define N_ANTENNA_UL        2
      
      +
       {
      
         log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,s1ap.level=debug,s1ap.max_size=1,x2ap.level=debug,x2ap.max_size=1,rrc.level=debug,rrc.max_size=1,phy.level=info,file.rota>
      @@ -24,7 +28,6 @@
         rx_gain: 43,
      
         com_addr: "127.0.1.2:9001",
      -
         mme_list: [
      
           {
      @@ -33,9 +36,9 @@
      
         ],
      
      +
         gtp_addr: "127.0.1.1",
      
      -
         enb_id: 0x1A2D0,
      
         cell_list: [{
      @@ -49,7 +52,6 @@
             ],
           }
         ],
      -
         cell_default: {
           plmn_list: [
             "00101",
      @@ -226,4 +228,6 @@
         meas_gap_config: "gp0",
         ho_from_meas: true,
         },
      +
      +
       }
      \ No newline at end of file
      diff --git a/config/gnb.cfg.old b/config/gnb.cfg
      index e3d671e09..4e47a2094 100644
      --- a/config/gnb.cfg.old
      +++ b/config/gnb.cfg
      @@ -1,15 +1,21 @@
      
      +
      +#define TDD                 1
      +
      +
       #define N_ANTENNA_DL        2
      
       #define N_ANTENNA_UL        2
      
      +
       {
      
         log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,ngap.level=debug,ngap.max_size=1,xnap.level=debug,xnap.max_size=1,rrc.level=debug,rrc.max_size=1,phy.level=info,file.rota>
      
         log_filename: "log/gnb.log",
      
      +
         rf_driver: {
             name: "sdr",
             args: "dev0=/dev/sdr0",
      @@ -30,15 +36,17 @@
         ],
      
      -
      -
         gtp_addr: "127.0.1.1",
      
         gnb_id_bits: 28,
         gnb_id: 0x12345,
         en_dc_support: true,
      -  cell_list: [],
      +
      +  cell_list: [
      +  ],
      +
      +
         nr_cell_list: [
         {
           rf_port: 0,
      ```
      f365a440
    • Kirill Smelkov's avatar
      software/ors-amarisoft: enb.jinja2.cfg: Remove unused cell_count · d078060c
      Kirill Smelkov authored
      It stopped to be used after 49ce8ef5 (software/ors-amarisoft: Provide dedicated
      TAP interface for each Radio Unit).
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1512
      d078060c
    • Kirill Smelkov's avatar
      software/ors-amarisoft: Push amarisoft-stats.jinja2.py and amarisoft-rf-info.jinja2.py into ru/ · 7502f5a1
      Kirill Smelkov authored
      Because
      
      1) those services are needed and used only by ru/ promises like check_cpri_lock
         and check_rx_saturated.
      2) in general we will need to initialize and setup radio units not only in eNB -
         for example UEsim will use the same code library to initialize radio units.
         Thus the proper place to keep everything required for RU to be operational have to
         be located inside ru/ and activated by that radio-units library.
      
      Push corresponding code from instance-enb to ru/ and do only minor adjustments
      to instance-gnb trying not to break it, since gnb does not currently use rulib,
      and because in the future gnb will be replaced by enb which will be serving
      both lte and nr cells in the same service.
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1511
      7502f5a1
    • Kirill Smelkov's avatar
      software/ors-amarisoft: Push SSH server code into ru/lopcomm/ · d29ece87
      Kirill Smelkov authored
      Because:
      
      - ssh server is needed for and used by ru/lopcomm/ only
      - in general we will need to initialize and setup radio units not only in eNB -
        for example UEsim will use the same code library to initialize radio units.
        Thus the proper place to keep everything required for RU to be operational have to
        be located inside ru/ and activated by that radio-units library.
      
      /cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1510
      d29ece87
    • Kirill Smelkov's avatar
      software/ors-amarisoft: Do not give RU more than /64 · 055bdf14
      Kirill Smelkov authored
      Dnsmasq insists on dhcp-range's prefixlen to be at most 64, which
      triggers the following error if original slaptap is wider than that:
      
          dnsmasq: prefix length must be at least 64 at line 5 of /srv/slapgrid/slappart6/etc/dnsmasq.cfg
      
      -> Fix it by capping provided range to /64
      
      /cc @tomo, @xavier_thompson, @Daetalus
      /reported-by @lu.xu
      /reviewed-by @jhuge
      /reviewed-on nexedi/slapos!1509
      055bdf14
    • Thomas Gambier's avatar
      1494d6d5
  4. 13 Jan, 2024 1 commit
  5. 12 Jan, 2024 1 commit