Commit 79370ebf authored by Kirill Smelkov's avatar Kirill Smelkov

software/ors-amarisoft: enb.jinja2.cfg: Stop using C Preprocessor and switch to Jinja2 completely

To support multiple Radio Units and multiple cells, we will need to loop over them
and emit corresponding configuration parts taking RU/Cell parameters into
account for each part. We currently handle some such parameters at Jinja2 level
(e.g. dl_earfcn), while some other parameters at CPP level (e.g. cell
bandwidth) and rely on enb to preprocess generated enb.cfg with CPP on its own.

While CPP works ok for simple 1RU-1CELL cases, and CPP is also the tool that Amarisoft
itself uses in its examples, it has the limitation that it cannot cooperate
with loops. In other words there can be only one global N_RB_DL #define, and it
cannot be different for different cells while we are looping over them at
Jinja2 level. That means that we cannot use CPP to handle multiple cells.

For this reason switch enb.jinja2.cfg to be using Jinja2 only without CPP.

While rendered enb.cfg/gnb.cfg change, we can see that they change in expected
way, with leaving only blocks that should be active for input parameters. See
the Appendix for details.

The switch is straightforward but one thing deserves to be mentioned: due to
limitation of Jinja2, where macros can return only strings, we use JSON
encoding to be able to return arbitrary types - integers, floats, dicts, etc,
and use a convention to name such macros with j prefix and wrap their usage
with J so that whole invocation does not add much noise. See added slaplte.J
documentation for details.

/cc @lu.xu, @tomo, @xavier_thompson, @Daetalus
/reviewed-by @jhuge
/reviewed-on nexedi/slapos!1520

--------

Appendix. Diff for rendered enb.cfg/gnb.cfg before and after this patch

```
$ git diff --no-index config/{old,out}
```

```diff
diff --git a/config/old/enb.cfg b/config/out/enb.cfg
index 23e56c9a9..ee2661640 100644
--- a/config/old/enb.cfg
+++ b/config/out/enb.cfg
@@ -1,14 +1,6 @@

-#define TDD                 1
-
-#define N_RB_DL             50
-
-#define N_ANTENNA_DL        2
-
-#define N_ANTENNA_UL        2
-

 {

@@ -44,8 +36,8 @@
   cell_list: [
     {
       rf_port: 0,
-      n_antenna_dl: N_ANTENNA_DL,
-      n_antenna_ul: N_ANTENNA_UL,
+      n_antenna_dl: 2,
+      n_antenna_ul: 2,

       cell_id: 0x00,
       tac: 0x0001,
@@ -59,83 +51,33 @@

     manual_ref_signal_power: true,

-
-#if TDD == 1
     uldl_config: 6,
     sp_config: 7,
-#endif
-
-    n_rb_dl: N_RB_DL,
-#if N_RB_DL == 6
-    si_coderate: 0.30,
-#else
-    si_coderate: 0.20,
-#endif
+    n_rb_dl: 50,
+    si_coderate: 0.2,

     pdsch_dedicated: {
-#if N_ANTENNA_DL == 4
-      p_a: -6,
-#elif N_ANTENNA_DL == 2
       p_a: -3,
-#else
-      p_a: 0,
-#endif
       p_b: -1,
     },

-#if N_RB_DL == 6
-    pdcch_format: 1,
-#else
-    pdcch_format: 2,
-#endif
-
-#if N_RB_DL == 6
-    prach_config_index: 15,
-#else
+    pdcch_format:       2,
     prach_config_index: 4,
-#endif
-
-#if N_RB_DL == 6
-    initial_cqi: 5,
-#else
-    initial_cqi: 3,
-#endif
+    initial_cqi:        3,

     pucch_dedicated: {
       n1_pucch_sr_count: 11,
       cqi_pucch_n_rb: 1,
       n1_pucch_an_cs_count: 8,
       n3_pucch_an_n_rb: 3,
-#if TDD == 1
       tdd_ack_nack_feedback_mode: "multiplexing", /* TDD only */
-#endif
     },
-
-#if N_ANTENNA_DL >= 2
     m_ri: 8,
     transmission_mode: 3,
-#endif

     srs_dedicated: {
-#if N_RB_DL == 6
-      srs_bandwidth_config: 7,
-      srs_bandwidth: 1,
-#elif N_RB_DL == 15
-      srs_bandwidth_config: 6,
-      srs_bandwidth: 1,
-#elif N_RB_DL == 25
-      srs_bandwidth_config: 3,
-      srs_bandwidth: 1,
-#elif N_RB_DL == 50
       srs_bandwidth_config: 2,
       srs_bandwidth: 2,
-#elif N_RB_DL == 75
-      srs_bandwidth_config: 2,
-      srs_bandwidth: 2,
-#else
-      srs_bandwidth_config: 2,
-      srs_bandwidth: 3,
-#endif
       srs_subframe_config: 3,
       srs_period: 40,
       srs_hopping_bandwidth: 0,
diff --git a/config/old/gnb.cfg b/config/out/gnb.cfg
index 5bfd3bb01..0b6a1445c 100644
--- a/config/old/gnb.cfg
+++ b/config/out/gnb.cfg
@@ -1,13 +1,6 @@

-#define TDD                 1
-
-
-#define N_ANTENNA_DL        2
-
-#define N_ANTENNA_UL        2
-

 {

@@ -50,8 +43,8 @@
   nr_cell_list: [
   {
     rf_port: 0,
-    n_antenna_dl: N_ANTENNA_DL,
-    n_antenna_ul: N_ANTENNA_UL,
+    n_antenna_dl: 2,
+    n_antenna_ul: 2,

     cell_id: 0x01,
     n_id_cell: 500,
@@ -108,29 +101,10 @@
     csi_rs: {
       nzp_csi_rs_resource: [
         {
-#if N_ANTENNA_DL == 1
-          n_ports: 1,
-          frequency_domain_allocation: "row2",
-          bitmap: "100000000000",
-          cdm_type: "no_cdm",
-#elif N_ANTENNA_DL == 2
           n_ports: 2,
           frequency_domain_allocation: "other",
           bitmap: "100000",
           cdm_type: "fd_cdm2",
-#elif N_ANTENNA_DL == 4
-          n_ports: 4,
-          frequency_domain_allocation: "row4",
-          bitmap: "100",
-          cdm_type: "fd_cdm2",
-#elif N_ANTENNA_DL == 8
-          n_ports: 8,
-          frequency_domain_allocation: "other",
-          bitmap: "110011",
-          cdm_type: "fd_cdm2",
-#else
-#error unsupported number of DL antennas
-#endif
         },

       ],
@@ -148,22 +122,10 @@

       csi_report_config: [
         {
-#if N_ANTENNA_DL > 1
           codebook_config: {
             codebook_type: "type1",
             sub_type: "typeI_SinglePanel",
-#if N_ANTENNA_DL == 2
-#elif N_ANTENNA_DL == 4
-            n1: 2,
-            n2: 1,
-            codebook_mode: 1,
-#elif N_ANTENNA_DL == 8
-            n1: 4,
-            n2: 1,
-            codebook_mode: 1,
-#endif
           },
-#endif
         },
       ],
     },
```
parent 6404f810
Pipeline #32434 failed with stage
in 0 seconds