<p>fixeria <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/21011">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty: call bts_model_vty_init() from bts_vty_init()<br><br>Similar to bts_vty_init(), BTS specific bts_model_vty_init()<br>requires a pointer to 'struct gsm_bts'.  Not only it's used<br>as a parent talloc context, but also stored locally, so then<br>it can be used by some VTY commands.<br><br>Let's expose the global 'struct gsm_bts' from main, and pass<br>the application's talloc context like was done in [1].<br><br>This finally makes the BTS model specific options appear in<br>the automatically generated VTY reference (--vty-ref-xml).<br><br>[1] Ic356a950da85de02c82e9882a5fbadaaa6929680<br><br>Change-Id: Iee7fee6747dd1e7c0af36f9b27326f651ae37aaf<br>Related: SYS#4937, OS#3036<br>---<br>M include/osmo-bts/bts_model.h<br>M include/osmo-bts/vty.h<br>M src/common/main.c<br>M src/common/vty.c<br>M src/osmo-bts-litecell15/lc15bts_vty.c<br>M src/osmo-bts-oc2g/oc2gbts_vty.c<br>M src/osmo-bts-octphy/octphy_vty.c<br>M src/osmo-bts-sysmo/sysmobts_vty.c<br>M src/osmo-bts-trx/trx_vty.c<br>M src/osmo-bts-virtual/virtualbts_vty.c<br>10 files changed, 67 insertions(+), 89 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/bts_model.h b/include/osmo-bts/bts_model.h</span><br><span>index 568ff00..ef93fda 100644</span><br><span>--- a/include/osmo-bts/bts_model.h</span><br><span>+++ b/include/osmo-bts/bts_model.h</span><br><span>@@ -34,7 +34,7 @@</span><br><span> /* Implementation should call bts_model_trx_close_cb when done */</span><br><span> void bts_model_trx_close(struct gsm_bts_trx *trx);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int bts_model_vty_init(struct gsm_bts *bts);</span><br><span style="color: hsl(120, 100%, 40%);">+int bts_model_vty_init(void *ctx);</span><br><span> </span><br><span> void bts_model_config_write_bts(struct vty *vty, const struct gsm_bts *bts);</span><br><span> void bts_model_config_write_trx(struct vty *vty, const struct gsm_bts_trx *trx);</span><br><span>diff --git a/include/osmo-bts/vty.h b/include/osmo-bts/vty.h</span><br><span>index c9840d1..c815c85 100644</span><br><span>--- a/include/osmo-bts/vty.h</span><br><span>+++ b/include/osmo-bts/vty.h</span><br><span>@@ -27,6 +27,7 @@</span><br><span> struct gsm_network *gsmnet_from_vty(struct vty *v);</span><br><span> </span><br><span> extern struct vty_app_info bts_vty_info;</span><br><span style="color: hsl(120, 100%, 40%);">+extern struct gsm_bts *g_bts;</span><br><span> </span><br><span> enum bts_vty_cmd_attr {</span><br><span>      BTS_VTY_ATTR_NEW_LCHAN,</span><br><span>diff --git a/src/common/main.c b/src/common/main.c</span><br><span>index 67aeff3..102bf88 100644</span><br><span>--- a/src/common/main.c</span><br><span>+++ b/src/common/main.c</span><br><span>@@ -211,7 +211,8 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct gsm_bts *bts;</span><br><span style="color: hsl(120, 100%, 40%);">+/* FIXME: remove this once we add multi-BTS support */</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_bts *g_bts = NULL;</span><br><span> </span><br><span> static void signal_handler(int signal)</span><br><span> {</span><br><span>@@ -221,10 +222,10 @@</span><br><span>      case SIGINT:</span><br><span>         case SIGTERM:</span><br><span>                if (!quit) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    oml_tx_failure_event_rep(&bts->mo,</span><br><span style="color: hsl(120, 100%, 40%);">+                     oml_tx_failure_event_rep(&g_bts->mo,</span><br><span>                                           NM_SEVER_CRITICAL, OSMO_EVT_CRIT_PROC_STOP,</span><br><span>                                                  "BTS: SIGINT received -> shutdown");</span><br><span style="color: hsl(0, 100%, 40%);">-                      bts_shutdown(bts, "SIGINT");</span><br><span style="color: hsl(120, 100%, 40%);">+                        bts_shutdown(g_bts, "SIGINT");</span><br><span>             }</span><br><span>            quit++;</span><br><span>              break;</span><br><span>@@ -288,8 +289,8 @@</span><br><span> </span><br><span>     handle_options(argc, argv);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- bts = gsm_bts_alloc(tall_bts_ctx, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-   if (!bts) {</span><br><span style="color: hsl(120, 100%, 40%);">+   g_bts = gsm_bts_alloc(tall_bts_ctx, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!g_bts) {</span><br><span>                fprintf(stderr, "Failed to create BTS structure\n");</span><br><span>               exit(1);</span><br><span>     }</span><br><span>@@ -317,12 +318,12 @@</span><br><span>            gsmtap_source_add_sink(gsmtap);</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (bts_init(bts) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (bts_init(g_bts) < 0) {</span><br><span>                fprintf(stderr, "unable to open bts\n");</span><br><span>           exit(1);</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   abis_init(bts);</span><br><span style="color: hsl(120, 100%, 40%);">+       abis_init(g_bts);</span><br><span> </span><br><span>        rc = vty_read_config_file(config_file, NULL);</span><br><span>        if (rc < 0) {</span><br><span>@@ -336,7 +337,7 @@</span><br><span>               exit(1);</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   llist_for_each_entry(trx, &bts->trx_list, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+      llist_for_each_entry(trx, &g_bts->trx_list, list) {</span><br><span>           if (!trx->role_bts.l1h) {</span><br><span>                         fprintf(stderr, "TRX %u has no associated PHY instance\n",</span><br><span>                                 trx->nr);</span><br><span>@@ -346,7 +347,7 @@</span><br><span> </span><br><span>       write_pid_file("osmo-bts");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       bts_controlif_setup(bts, ctrl_vty_get_bind_addr(), OSMO_CTRL_PORT_BTS);</span><br><span style="color: hsl(120, 100%, 40%);">+       bts_controlif_setup(g_bts, ctrl_vty_get_bind_addr(), OSMO_CTRL_PORT_BTS);</span><br><span> </span><br><span>        rc = telnet_init_dynif(tall_bts_ctx, NULL, vty_get_bind_addr(),</span><br><span>                             g_vty_port_num);</span><br><span>@@ -355,7 +356,7 @@</span><br><span>                exit(1);</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (pcu_sock_init(bts->pcu.sock_path)) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (pcu_sock_init(g_bts->pcu.sock_path)) {</span><br><span>                fprintf(stderr, "PCU L1 socket failed\n");</span><br><span>                 exit(1);</span><br><span>     }</span><br><span>@@ -367,12 +368,12 @@</span><br><span>    signal(SIGUSR2, &signal_handler);</span><br><span>        osmo_init_ignore_signals();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (!bts->bsc_oml_host) {</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!g_bts->bsc_oml_host) {</span><br><span>               fprintf(stderr, "Cannot start BTS without knowing BSC OML IP\n");</span><br><span>          exit(1);</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   line = abis_open(bts, bts->bsc_oml_host, "sysmoBTS");</span><br><span style="color: hsl(120, 100%, 40%);">+    line = abis_open(g_bts, g_bts->bsc_oml_host, "sysmoBTS");</span><br><span>       if (!line) {</span><br><span>                 fprintf(stderr, "unable to connect to BSC\n");</span><br><span>             exit(2);</span><br><span>diff --git a/src/common/vty.c b/src/common/vty.c</span><br><span>index 7126458..7baddef 100644</span><br><span>--- a/src/common/vty.c</span><br><span>+++ b/src/common/vty.c</span><br><span>@@ -1921,5 +1921,6 @@</span><br><span> </span><br><span>    install_node(&phy_inst_node, config_write_dummy);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Install variant-specific VTY options */</span><br><span style="color: hsl(120, 100%, 40%);">+    return bts_model_vty_init(ctx);</span><br><span> }</span><br><span>diff --git a/src/osmo-bts-litecell15/lc15bts_vty.c b/src/osmo-bts-litecell15/lc15bts_vty.c</span><br><span>index 5308d1a..4a9d790 100644</span><br><span>--- a/src/osmo-bts-litecell15/lc15bts_vty.c</span><br><span>+++ b/src/osmo-bts-litecell15/lc15bts_vty.c</span><br><span>@@ -69,8 +69,6 @@</span><br><span>    TRX_STR</span><br><span> #define DSP_TRACE_F_STR              "DSP Trace Flag\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct gsm_bts *vty_bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static const struct value_string lc15_diversity_mode_strs[] = {</span><br><span>   { LC15_DIVERSITY_SISO_A, "siso-a" },</span><br><span>       { LC15_DIVERSITY_SISO_B, "siso-b" },</span><br><span>@@ -146,7 +144,7 @@</span><br><span>         SHOW_TRX_STR "Display the current setting of the DSP trace flags")</span><br><span> {</span><br><span>    int trx_nr = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-     struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct lc15l1_hdl *fl1h;</span><br><span>     int i;</span><br><span> </span><br><span>@@ -268,7 +266,7 @@</span><br><span>     int trx_nr = atoi(argv[0]);</span><br><span>  int ts_nr = atoi(argv[1]);</span><br><span>   int lchan_nr = atoi(argv[3]);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];</span><br><span>  struct gsm_lchan *lchan = &ts->lchan[lchan_nr];</span><br><span> </span><br><span>@@ -289,7 +287,7 @@</span><br><span> {</span><br><span>        int trx_nr = atoi(argv[0]);</span><br><span>  int power = atoi(argv[1]);</span><br><span style="color: hsl(0, 100%, 40%);">-      struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span> </span><br><span>        power_ramp_start(trx, to_mdB(power), 1, NULL);</span><br><span> </span><br><span>@@ -306,7 +304,7 @@</span><br><span>     int trx_nr = atoi(argv[0]);</span><br><span>  int ts_nr = atoi(argv[1]);</span><br><span>   int lchan_nr = atoi(argv[2]);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];</span><br><span>  struct gsm_lchan *lchan = &ts->lchan[lchan_nr];</span><br><span> </span><br><span>@@ -325,7 +323,7 @@</span><br><span>     int trx_nr = atoi(argv[0]);</span><br><span>  int ts_nr = atoi(argv[1]);</span><br><span>   int lchan_nr = atoi(argv[2]);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];</span><br><span>  struct gsm_lchan *lchan = &ts->lchan[lchan_nr];</span><br><span> </span><br><span>@@ -565,39 +563,37 @@</span><br><span> #endif</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int bts_model_vty_init(struct gsm_bts *bts)</span><br><span style="color: hsl(120, 100%, 40%);">+int bts_model_vty_init(void *ctx)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        vty_bts = bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       /* runtime-patch the command strings with debug levels */</span><br><span style="color: hsl(0, 100%, 40%);">-       dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts, lc15bts_tracef_names,</span><br><span style="color: hsl(120, 100%, 40%);">+        dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx, lc15bts_tracef_names,</span><br><span>                                               "phy <0-0> dsp-trace-flag (",</span><br><span>                                                "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts, lc15bts_tracef_docs,</span><br><span style="color: hsl(120, 100%, 40%);">+    dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx, lc15bts_tracef_docs,</span><br><span>                                           TRX_STR DSP_TRACE_F_STR,</span><br><span>                                             "\n", "", 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts, lc15bts_tracef_names,</span><br><span style="color: hsl(120, 100%, 40%);">+     no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx, lc15bts_tracef_names,</span><br><span>                                            "no phy <0-0> dsp-trace-flag (",</span><br><span>                                             "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts, lc15bts_tracef_docs,</span><br><span style="color: hsl(120, 100%, 40%);">+ no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx, lc15bts_tracef_docs,</span><br><span>                                                NO_STR TRX_STR DSP_TRACE_F_STR,</span><br><span>                                              "\n", "", 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   cfg_phy_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_phy_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx,</span><br><span>                                             lc15bts_tracef_names,</span><br><span>                                                "dsp-trace-flag (",</span><br><span>                                                "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     cfg_phy_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts,</span><br><span style="color: hsl(120, 100%, 40%);">+ cfg_phy_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx,</span><br><span>                                                lc15bts_tracef_docs,</span><br><span>                                                 DSP_TRACE_F_STR,</span><br><span>                                             "\n", "", 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   cfg_phy_no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts,</span><br><span style="color: hsl(120, 100%, 40%);">+   cfg_phy_no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx,</span><br><span>                                          lc15bts_tracef_names,</span><br><span>                                                "no dsp-trace-flag (",</span><br><span>                                             "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     cfg_phy_no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_phy_no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx,</span><br><span>                                             lc15bts_tracef_docs,</span><br><span>                                                 NO_STR DSP_TRACE_F_STR,</span><br><span>                                              "\n", "", 0);</span><br><span>diff --git a/src/osmo-bts-oc2g/oc2gbts_vty.c b/src/osmo-bts-oc2g/oc2gbts_vty.c</span><br><span>index c12d0bf..c3b2a31 100644</span><br><span>--- a/src/osmo-bts-oc2g/oc2gbts_vty.c</span><br><span>+++ b/src/osmo-bts-oc2g/oc2gbts_vty.c</span><br><span>@@ -69,8 +69,6 @@</span><br><span>       TRX_STR</span><br><span> #define DSP_TRACE_F_STR              "DSP Trace Flag\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct gsm_bts *vty_bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static const struct value_string oc2g_pedestal_mode_strs[] = {</span><br><span>    { OC2G_PEDESTAL_OFF, "off" },</span><br><span>      { OC2G_PEDESTAL_ON, "on" },</span><br><span>@@ -139,7 +137,7 @@</span><br><span>  SHOW_TRX_STR "Display the current setting of the DSP trace flags")</span><br><span> {</span><br><span>    int trx_nr = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-     struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct oc2gl1_hdl *fl1h;</span><br><span>     int i;</span><br><span> </span><br><span>@@ -261,7 +259,7 @@</span><br><span>     int trx_nr = atoi(argv[0]);</span><br><span>  int ts_nr = atoi(argv[1]);</span><br><span>   int lchan_nr = atoi(argv[3]);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];</span><br><span>  struct gsm_lchan *lchan = &ts->lchan[lchan_nr];</span><br><span> </span><br><span>@@ -282,7 +280,7 @@</span><br><span> {</span><br><span>        int trx_nr = atoi(argv[0]);</span><br><span>  int power = atoi(argv[1]);</span><br><span style="color: hsl(0, 100%, 40%);">-      struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span> </span><br><span>        power_ramp_start(trx, to_mdB(power), 1, NULL);</span><br><span> </span><br><span>@@ -299,7 +297,7 @@</span><br><span>     int trx_nr = atoi(argv[0]);</span><br><span>  int ts_nr = atoi(argv[1]);</span><br><span>   int lchan_nr = atoi(argv[2]);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];</span><br><span>  struct gsm_lchan *lchan = &ts->lchan[lchan_nr];</span><br><span> </span><br><span>@@ -318,7 +316,7 @@</span><br><span>     int trx_nr = atoi(argv[0]);</span><br><span>  int ts_nr = atoi(argv[1]);</span><br><span>   int lchan_nr = atoi(argv[2]);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];</span><br><span>  struct gsm_lchan *lchan = &ts->lchan[lchan_nr];</span><br><span> </span><br><span>@@ -599,44 +597,42 @@</span><br><span>                   pinst->u.oc2g.tx_c0_idle_pwr_red, VTY_NEWLINE);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int bts_model_vty_init(struct gsm_bts *bts)</span><br><span style="color: hsl(120, 100%, 40%);">+int bts_model_vty_init(void *ctx)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  vty_bts = bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       /* runtime-patch the command strings with debug levels */</span><br><span style="color: hsl(0, 100%, 40%);">-       dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts, oc2gbts_tracef_names,</span><br><span style="color: hsl(120, 100%, 40%);">+        dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx, oc2gbts_tracef_names,</span><br><span>                                               "phy <0-1> dsp-trace-flag (",</span><br><span>                                                "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts, oc2gbts_tracef_docs,</span><br><span style="color: hsl(120, 100%, 40%);">+    dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx, oc2gbts_tracef_docs,</span><br><span>                                           TRX_STR DSP_TRACE_F_STR,</span><br><span>                                             "\n", "", 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts, oc2gbts_tracef_names,</span><br><span style="color: hsl(120, 100%, 40%);">+     no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx, oc2gbts_tracef_names,</span><br><span>                                            "no phy <0-1> dsp-trace-flag (",</span><br><span>                                             "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts, oc2gbts_tracef_docs,</span><br><span style="color: hsl(120, 100%, 40%);">+ no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx, oc2gbts_tracef_docs,</span><br><span>                                                NO_STR TRX_STR DSP_TRACE_F_STR,</span><br><span>                                              "\n", "", 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   cfg_phy_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_phy_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx,</span><br><span>                                             oc2gbts_tracef_names,</span><br><span>                                                "dsp-trace-flag (",</span><br><span>                                                "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     cfg_phy_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts,</span><br><span style="color: hsl(120, 100%, 40%);">+ cfg_phy_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx,</span><br><span>                                                oc2gbts_tracef_docs,</span><br><span>                                                 DSP_TRACE_F_STR,</span><br><span>                                             "\n", "", 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   cfg_phy_no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts,</span><br><span style="color: hsl(120, 100%, 40%);">+   cfg_phy_no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx,</span><br><span>                                          oc2gbts_tracef_names,</span><br><span>                                                "no dsp-trace-flag (",</span><br><span>                                             "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     cfg_phy_no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_phy_no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx,</span><br><span>                                             oc2gbts_tracef_docs,</span><br><span>                                                 NO_STR DSP_TRACE_F_STR,</span><br><span>                                              "\n", "", 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   trigger_ho_cause_cmd.string = vty_cmd_string_from_valstr(bts,</span><br><span style="color: hsl(120, 100%, 40%);">+ trigger_ho_cause_cmd.string = vty_cmd_string_from_valstr(ctx,</span><br><span>                                                oc2gbts_rsl_ho_causes,</span><br><span>                                               "trigger-ho-cause trx <0-1> ts <0-7> lchan <0-1> cause (",</span><br><span>                                               "|",")", VTY_DO_LOWER);</span><br><span>diff --git a/src/osmo-bts-octphy/octphy_vty.c b/src/osmo-bts-octphy/octphy_vty.c</span><br><span>index 8b263fd..308252b 100644</span><br><span>--- a/src/osmo-bts-octphy/octphy_vty.c</span><br><span>+++ b/src/osmo-bts-octphy/octphy_vty.c</span><br><span>@@ -54,8 +54,6 @@</span><br><span> </span><br><span> #define OCT_STR     "OCTPHY Um interface\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct gsm_bts *vty_bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* configuration */</span><br><span> </span><br><span> DEFUN(cfg_phy_hwaddr, cfg_phy_hwaddr_cmd,</span><br><span>@@ -437,10 +435,8 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int bts_model_vty_init(struct gsm_bts *bts)</span><br><span style="color: hsl(120, 100%, 40%);">+int bts_model_vty_init(void *ctx)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     vty_bts = bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       install_element(PHY_NODE, &cfg_phy_hwaddr_cmd);</span><br><span>  install_element(PHY_NODE, &cfg_phy_netdev_cmd);</span><br><span>  install_element(PHY_NODE, &cfg_phy_rf_port_idx_cmd);</span><br><span>diff --git a/src/osmo-bts-sysmo/sysmobts_vty.c b/src/osmo-bts-sysmo/sysmobts_vty.c</span><br><span>index b613031..f575884 100644</span><br><span>--- a/src/osmo-bts-sysmo/sysmobts_vty.c</span><br><span>+++ b/src/osmo-bts-sysmo/sysmobts_vty.c</span><br><span>@@ -60,8 +60,6 @@</span><br><span>        TRX_STR</span><br><span> #define DSP_TRACE_F_STR              "DSP Trace Flag\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct gsm_bts *vty_bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* configuration */</span><br><span> </span><br><span> DEFUN(cfg_phy_clkcal_eeprom, cfg_phy_clkcal_eeprom_cmd,</span><br><span>@@ -221,7 +219,7 @@</span><br><span>  SHOW_TRX_STR "Display the current setting of the DSP trace flags")</span><br><span> {</span><br><span>    int trx_nr = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-     struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct femtol1_hdl *fl1h;</span><br><span>    int i;</span><br><span> </span><br><span>@@ -341,7 +339,7 @@</span><br><span>     int trx_nr = atoi(argv[0]);</span><br><span>  int ts_nr = atoi(argv[1]);</span><br><span>   int lchan_nr = atoi(argv[3]);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];</span><br><span>  struct gsm_lchan *lchan = &ts->lchan[lchan_nr];</span><br><span> </span><br><span>@@ -361,7 +359,7 @@</span><br><span> {</span><br><span>        int trx_nr = atoi(argv[0]);</span><br><span>  int power = atoi(argv[1]);</span><br><span style="color: hsl(0, 100%, 40%);">-      struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span> </span><br><span>        power_ramp_start(trx, to_mdB(power), 1, NULL);</span><br><span> </span><br><span>@@ -374,7 +372,7 @@</span><br><span>       "RF Clock Information\n" "Reset the counter\n")</span><br><span> {</span><br><span>   int trx_nr = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-     struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct femtol1_hdl *fl1h = trx_femtol1_hdl(trx);</span><br><span> </span><br><span>         l1if_rf_clock_info_reset(fl1h);</span><br><span>@@ -387,7 +385,7 @@</span><br><span>       "RF Clock Information\n" "Apply\n")</span><br><span> {</span><br><span>  int trx_nr = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-     struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct femtol1_hdl *fl1h = trx_femtol1_hdl(trx);</span><br><span> </span><br><span>         l1if_rf_clock_info_correct(fl1h);</span><br><span>@@ -404,7 +402,7 @@</span><br><span>      int trx_nr = atoi(argv[0]);</span><br><span>  int ts_nr = atoi(argv[1]);</span><br><span>   int lchan_nr = atoi(argv[2]);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];</span><br><span>  struct gsm_lchan *lchan = &ts->lchan[lchan_nr];</span><br><span> </span><br><span>@@ -423,7 +421,7 @@</span><br><span>     int trx_nr = atoi(argv[0]);</span><br><span>  int ts_nr = atoi(argv[1]);</span><br><span>   int lchan_nr = atoi(argv[2]);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts_trx *trx = gsm_bts_trx_num(g_bts, trx_nr);</span><br><span>    struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];</span><br><span>  struct gsm_lchan *lchan = &ts->lchan[lchan_nr];</span><br><span> </span><br><span>@@ -475,39 +473,37 @@</span><br><span>                                    pinst->u.sysmobts.clk_src), VTY_NEWLINE);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int bts_model_vty_init(struct gsm_bts *bts)</span><br><span style="color: hsl(120, 100%, 40%);">+int bts_model_vty_init(void *ctx)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-       vty_bts = bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       /* runtime-patch the command strings with debug levels */</span><br><span style="color: hsl(0, 100%, 40%);">-       dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts, femtobts_tracef_names,</span><br><span style="color: hsl(120, 100%, 40%);">+       dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx, femtobts_tracef_names,</span><br><span>                                              "trx <0-0> dsp-trace-flag (",</span><br><span>                                                "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts, femtobts_tracef_docs,</span><br><span style="color: hsl(120, 100%, 40%);">+   dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx, femtobts_tracef_docs,</span><br><span>                                          TRX_STR DSP_TRACE_F_STR,</span><br><span>                                             "\n", "", 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(bts, femtobts_tracef_names,</span><br><span style="color: hsl(120, 100%, 40%);">+    no_dsp_trace_f_cmd.string = vty_cmd_string_from_valstr(ctx, femtobts_tracef_names,</span><br><span>                                           "no trx <0-0> dsp-trace-flag (",</span><br><span>                                             "|",")", VTY_DO_LOWER);</span><br><span style="color: hsl(0, 100%, 40%);">-     no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(bts, femtobts_tracef_docs,</span><br><span style="color: hsl(120, 100%, 40%);">+        no_dsp_trace_f_cmd.doc = vty_cmd_string_from_valstr(ctx, femtobts_tracef_docs,</span><br><span>                                               NO_STR TRX_STR DSP_TRACE_F_STR,</span><br><span>                                              "\n", "", 0);</span><br><span> </span><br><span>        cfg_phy_dsp_trace_f_cmd.string =</span><br><span style="color: hsl(0, 100%, 40%);">-                vty_cmd_string_from_valstr(bts, femtobts_tracef_names,</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_cmd_string_from_valstr(ctx, femtobts_tracef_names,</span><br><span>                                          "dsp-trace-flag (", "|", ")",</span><br><span>                                          VTY_DO_LOWER);</span><br><span>    cfg_phy_dsp_trace_f_cmd.doc =</span><br><span style="color: hsl(0, 100%, 40%);">-           vty_cmd_string_from_valstr(bts, femtobts_tracef_docs,</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_cmd_string_from_valstr(ctx, femtobts_tracef_docs,</span><br><span>                                           DSP_TRACE_F_STR, "\n", "", 0);</span><br><span> </span><br><span>    cfg_phy_no_dsp_trace_f_cmd.string =</span><br><span style="color: hsl(0, 100%, 40%);">-             vty_cmd_string_from_valstr(bts, femtobts_tracef_names,</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_cmd_string_from_valstr(ctx, femtobts_tracef_names,</span><br><span>                                          "no dsp-trace-flag (", "|", ")",</span><br><span>                                       VTY_DO_LOWER);</span><br><span>    cfg_phy_no_dsp_trace_f_cmd.doc =</span><br><span style="color: hsl(0, 100%, 40%);">-                vty_cmd_string_from_valstr(bts, femtobts_tracef_docs,</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_cmd_string_from_valstr(ctx, femtobts_tracef_docs,</span><br><span>                                           NO_STR DSP_TRACE_F_STR, "\n",</span><br><span>                                      "", 0);</span><br><span> </span><br><span>diff --git a/src/osmo-bts-trx/trx_vty.c b/src/osmo-bts-trx/trx_vty.c</span><br><span>index 6dc28f6..ceca330 100644</span><br><span>--- a/src/osmo-bts-trx/trx_vty.c</span><br><span>+++ b/src/osmo-bts-trx/trx_vty.c</span><br><span>@@ -52,16 +52,13 @@</span><br><span> </span><br><span> #define OSMOTRX_STR  "OsmoTRX Transceiver configuration\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct gsm_bts *vty_bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> DEFUN(show_transceiver, show_transceiver_cmd, "show transceiver",</span><br><span>    SHOW_STR "Display information about transceivers\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     struct gsm_bts *bts = vty_bts;</span><br><span>       struct gsm_bts_trx *trx;</span><br><span>     struct trx_l1h *l1h;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        llist_for_each_entry(trx, &bts->trx_list, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+      llist_for_each_entry(trx, &g_bts->trx_list, list) {</span><br><span>           struct phy_instance *pinst = trx_phy_instance(trx);</span><br><span>          struct phy_link *plink = pinst->phy_link;</span><br><span>                 char *sname = osmo_sock_get_name(NULL, plink->u.osmotrx.trx_ofd_clk.fd);</span><br><span>@@ -201,7 +198,7 @@</span><br><span> {</span><br><span>       vty_out (vty, "'osmotrx ms-power-loop' is deprecated, use 'uplink-power-target' instead%s", VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- vty_bts->ul_power_target = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+  g_bts->ul_power_target = atoi(argv[0]);</span><br><span> </span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span>@@ -599,10 +596,8 @@</span><br><span>                      VTY_NEWLINE);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int bts_model_vty_init(struct gsm_bts *bts)</span><br><span style="color: hsl(120, 100%, 40%);">+int bts_model_vty_init(void *ctx)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-       vty_bts = bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       install_element_ve(&show_transceiver_cmd);</span><br><span>       install_element_ve(&show_phy_cmd);</span><br><span> </span><br><span>diff --git a/src/osmo-bts-virtual/virtualbts_vty.c b/src/osmo-bts-virtual/virtualbts_vty.c</span><br><span>index 9d63242..3933bd2 100644</span><br><span>--- a/src/osmo-bts-virtual/virtualbts_vty.c</span><br><span>+++ b/src/osmo-bts-virtual/virtualbts_vty.c</span><br><span>@@ -50,8 +50,6 @@</span><br><span>      SHOW_STR                                \</span><br><span>    TRX_STR</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct gsm_bts *vty_bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> void bts_model_config_write_bts(struct vty *vty, const struct gsm_bts *bts)</span><br><span> {</span><br><span> }</span><br><span>@@ -191,10 +189,8 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int bts_model_vty_init(struct gsm_bts *bts)</span><br><span style="color: hsl(120, 100%, 40%);">+int bts_model_vty_init(void *ctx)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- vty_bts = bts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       install_element(PHY_NODE, &cfg_phy_ms_mcast_group_cmd);</span><br><span>  install_element(PHY_NODE, &cfg_phy_ms_mcast_port_cmd);</span><br><span>   install_element(PHY_NODE, &cfg_phy_bts_mcast_group_cmd);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/21011">change 21011</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bts/+/21011"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Iee7fee6747dd1e7c0af36f9b27326f651ae37aaf </div>
<div style="display:none"> Gerrit-Change-Number: 21011 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>