<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/19670">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty: add attributes to VTY commands indicating when they apply<br><br>Change-Id: I3bf9223295fc4a2fcb4046a1f29f792ff6a41d51<br>Depends: I2c6c7b317b2b28ce70784c0cabd1b913e721be02<br>Related: SYS#4937<br>---<br>M include/osmocom/bsc/vty.h<br>M src/osmo-bsc/bsc_vty.c<br>M src/osmo-bsc/osmo_bsc_main.c<br>3 files changed, 700 insertions(+), 533 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/70/19670/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/vty.h b/include/osmocom/bsc/vty.h</span><br><span>index 10ce16b..62a1785 100644</span><br><span>--- a/include/osmocom/bsc/vty.h</span><br><span>+++ b/include/osmocom/bsc/vty.h</span><br><span>@@ -33,4 +33,12 @@</span><br><span> </span><br><span> struct gsm_network *gsmnet_from_vty(struct vty *vty);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+enum bsc_vty_cmd_attr {</span><br><span style="color: hsl(120, 100%, 40%);">+    BSC_VTY_ATTR_RESTART_FULL = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+   BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct value_string bsc_vty_cmd_attr_desc[];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #endif</span><br><span>diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c</span><br><span>index fc7dd16..66adf84 100644</span><br><span>--- a/src/osmo-bsc/bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/bsc_vty.c</span><br><span>@@ -161,6 +161,25 @@</span><br><span>         1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string bsc_vty_cmd_attr_desc[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+   {</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_FULL,</span><br><span style="color: hsl(120, 100%, 40%);">+            "This command applies on full program restart"</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "This command applies on A-bis OML link (re)establishment"</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "This command applies on A-bis RSL link (re)establishment"</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Value-string terminator */</span><br><span style="color: hsl(120, 100%, 40%);">+         0, NULL</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static struct gsm_network *vty_global_gsm_network = NULL;</span><br><span> </span><br><span> struct gsm_network *gsmnet_from_vty(struct vty *v)</span><br><span>@@ -2042,11 +2061,12 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_neci,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_neci_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "neci (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-     "New Establish Cause Indication\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Don't set the NECI bit\n" "Set the NECI bit\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_neci,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_net_neci_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "neci (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+       "New Establish Cause Indication\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Don't set the NECI bit\n" "Set the NECI bit\n")</span><br><span> {</span><br><span>  struct gsm_network *gsmnet = gsmnet_from_vty(vty);</span><br><span> </span><br><span>@@ -2055,13 +2075,14 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_pag_any_tch,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_pag_any_tch_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "paging any use tch (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Assign a TCH when receiving a Paging Any request\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Any Channel\n" "Use\n" "TCH\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Do not use TCH for Paging Request Any\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Do use TCH for Paging Request Any\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_pag_any_tch,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_net_pag_any_tch_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "paging any use tch (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Assign a TCH when receiving a Paging Any request\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Any Channel\n" "Use\n" "TCH\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Do not use TCH for Paging Request Any\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Do use TCH for Paging Request Any\n")</span><br><span> {</span><br><span>  struct gsm_network *gsmnet = gsmnet_from_vty(vty);</span><br><span>   gsmnet->pag_any_tch = atoi(argv[0]);</span><br><span>@@ -2173,10 +2194,11 @@</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_type,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_type_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "type TYPE", /* dynamically created */</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the BTS type\n" "Type\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_type,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_type_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "type TYPE", /* dynamically created */</span><br><span style="color: hsl(120, 100%, 40%);">+              "Set the BTS type\n" "Type\n")</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span>         int rc;</span><br><span>@@ -2188,10 +2210,11 @@</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_band,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_band_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "band BAND",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the frequency band of this BTS\n" "Frequency band\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_band,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_bts_band_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "band BAND",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set the frequency band of this BTS\n" "Frequency band\n")</span><br><span> {</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span>         int band = gsm_band_parse(argv[0]);</span><br><span>@@ -2207,11 +2230,14 @@</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_dtxu, cfg_bts_dtxu_cmd, "dtx uplink [force]",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure discontinuous transmission\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Enable Uplink DTX for this BTS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MS 'shall' use DTXu instead of 'may' use (might not be supported by "</span><br><span style="color: hsl(0, 100%, 40%);">-      "older phones).\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_dtxu,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_dtxu_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "dtx uplink [force]",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Configure discontinuous transmission\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Enable Uplink DTX for this BTS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "MS 'shall' use DTXu instead of 'may' use (might not be supported by "</span><br><span style="color: hsl(120, 100%, 40%);">+              "older phones).\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2222,10 +2248,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_no_dtxu, cfg_bts_no_dtxu_cmd, "no dtx uplink",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure discontinuous transmission\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Disable Uplink DTX for this BTS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_no_dtxu,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_no_dtxu_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no dtx uplink",</span><br><span style="color: hsl(120, 100%, 40%);">+            NO_STR "Configure discontinuous transmission\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Disable Uplink DTX for this BTS\n")</span><br><span> {</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2234,9 +2262,12 @@</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_dtxd, cfg_bts_dtxd_cmd, "dtx downlink",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure discontinuous transmission\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Enable Downlink DTX for this BTS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_dtxd,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_dtxd_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "dtx downlink",</span><br><span style="color: hsl(120, 100%, 40%);">+             "Configure discontinuous transmission\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Enable Downlink DTX for this BTS\n")</span><br><span> {</span><br><span>   struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2247,10 +2278,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_no_dtxd, cfg_bts_no_dtxd_cmd, "no dtx downlink",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure discontinuous transmission\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Disable Downlink DTX for this BTS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_no_dtxd,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_no_dtxd_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no dtx downlink",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR, "Configure discontinuous transmission\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Disable Downlink DTX for this BTS\n")</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2259,10 +2292,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_ci,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_ci_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "cell_identity <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the Cell identity of this BTS\n" "Cell Identity\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_ci,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_bts_ci_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "cell_identity <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+            "Set the Cell identity of this BTS\n" "Cell Identity\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span>         int ci = atoi(argv[0]);</span><br><span>@@ -2277,10 +2311,11 @@</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_lac,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_lac_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "location_area_code <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the Location Area Code (LAC) of this BTS\n" "LAC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_lac,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_bts_lac_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "location_area_code <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set the Location Area Code (LAC) of this BTS\n" "LAC\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span>         int lac = atoi(argv[0]);</span><br><span>@@ -2312,11 +2347,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_bsic,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_bsic_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "base_station_id_code <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the Base Station Identity Code (BSIC) of this BTS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "BSIC of this BTS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_bsic,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_bsic_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "base_station_id_code <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set the Base Station Identity Code (BSIC) of this BTS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "BSIC of this BTS\n")</span><br><span> {</span><br><span>   struct gsm_bts *bts = vty->index;</span><br><span>         int bsic = atoi(argv[0]);</span><br><span>@@ -2331,13 +2367,14 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_unit_id,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_unit_id_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "ipa unit-id <0-65534> <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Abis/IP specific options\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the IPA BTS Unit ID\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Unit ID (Site)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Unit ID (BTS)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_unit_id,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_bts_unit_id_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "ipa unit-id <0-65534> <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Abis/IP specific options\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set the IPA BTS Unit ID\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Unit ID (Site)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Unit ID (BTS)\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span>         int site_id = atoi(argv[0]);</span><br><span>@@ -2362,12 +2399,13 @@</span><br><span>       "Unit ID (Site)\n"</span><br><span>       "Unit ID (BTS)\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_rsl_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_rsl_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "ipa rsl-ip A.B.C.D",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Abis/IP specific options\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the IPA RSL IP Address of the BSC\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Destination IP address for RSL connection\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_rsl_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_rsl_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "ipa rsl-ip A.B.C.D",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Abis/IP specific options\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set the IPA RSL IP Address of the BSC\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Destination IP address for RSL connection\n")</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         struct in_addr ia;</span><br><span>@@ -2453,12 +2491,13 @@</span><br><span> #define OML_STR "Organization & Maintenance Link\n"</span><br><span> #define IPA_STR "A-bis/IP Specific Options\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_stream_id,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_stream_id_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "oml ipa stream-id <0-255> line E1_LINE",</span><br><span style="color: hsl(0, 100%, 40%);">-     OML_STR IPA_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the ipa Stream ID of the OML link of this BTS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Stream Identifier\n" "Virtual E1 Line Number\n" "Virtual E1 Line Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_stream_id,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_stream_id_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "oml ipa stream-id <0-255> line E1_LINE",</span><br><span style="color: hsl(120, 100%, 40%);">+             OML_STR IPA_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set the ipa Stream ID of the OML link of this BTS\n" "Stream Identifier\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Virtual E1 Line Number\n" "Virtual E1 Line Number\n")</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span>         int stream_id = atoi(argv[0]), linenr = atoi(argv[1]);</span><br><span>@@ -2484,21 +2523,20 @@</span><br><span> </span><br><span> #define OML_E1_STR OML_STR "OML E1/T1 Configuration\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_oml_e1,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_oml_e1_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "oml e1 line E1_LINE timeslot <1-31> sub-slot (0|1|2|3|full)",</span><br><span style="color: hsl(0, 100%, 40%);">-  OML_E1_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 line number to be used for OML\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 line number to be used for OML\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 timeslot to be used for OML\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 timeslot to be used for OML\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 sub-slot to be used for OML\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use E1/T1 sub-slot 0\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use E1/T1 sub-slot 1\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use E1/T1 sub-slot 2\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use E1/T1 sub-slot 3\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use full E1 slot 3\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      )</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_DEPRECATED(cfg_bts_oml_e1, cfg_bts_oml_e1_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "oml e1 line E1_LINE timeslot <1-31> sub-slot (0|1|2|3|full)",</span><br><span style="color: hsl(120, 100%, 40%);">+                OML_E1_STR</span><br><span style="color: hsl(120, 100%, 40%);">+            "E1/T1 line number to be used for OML\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "E1/T1 line number to be used for OML\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "E1/T1 timeslot to be used for OML\n"</span><br><span style="color: hsl(120, 100%, 40%);">+               "E1/T1 timeslot to be used for OML\n"</span><br><span style="color: hsl(120, 100%, 40%);">+               "E1/T1 sub-slot to be used for OML\n"</span><br><span style="color: hsl(120, 100%, 40%);">+               "Use E1/T1 sub-slot 0\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Use E1/T1 sub-slot 1\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Use E1/T1 sub-slot 2\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Use E1/T1 sub-slot 3\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Use full E1 slot 3\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2508,12 +2546,13 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_oml_e1_tei,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_oml_e1_tei_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "oml e1 tei <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">- OML_E1_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the TEI to be used for OML\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "TEI Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_oml_e1_tei,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_oml_e1_tei_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "oml e1 tei <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+          OML_E1_STR</span><br><span style="color: hsl(120, 100%, 40%);">+            "Set the TEI to be used for OML\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "TEI Number\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2540,29 +2579,31 @@</span><br><span> </span><br><span> #define RACH_STR "Random Access Control Channel\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_rach_tx_integer,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_rach_tx_integer_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rach tx integer <0-15>",</span><br><span style="color: hsl(0, 100%, 40%);">-       RACH_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the raw tx integer value in RACH Control parameters IE\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the raw tx integer value in RACH Control parameters IE\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Raw tx integer value in RACH Control parameters IE\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_rach_tx_integer,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_bts_rach_tx_integer_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "rach tx integer <0-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+             RACH_STR</span><br><span style="color: hsl(120, 100%, 40%);">+              "Set the raw tx integer value in RACH Control parameters IE\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Set the raw tx integer value in RACH Control parameters IE\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Raw tx integer value in RACH Control parameters IE\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span>         bts->si_common.rach_control.tx_integer = atoi(argv[0]) & 0xf;</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_rach_max_trans,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_rach_max_trans_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rach max transmission (1|2|4|7)",</span><br><span style="color: hsl(0, 100%, 40%);">-    RACH_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the maximum number of RACH burst transmissions\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the maximum number of RACH burst transmissions\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Maximum number of 1 RACH burst transmissions\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Maximum number of 2 RACH burst transmissions\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Maximum number of 4 RACH burst transmissions\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Maximum number of 7 RACH burst transmissions\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_rach_max_trans,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_rach_max_trans_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "rach max transmission (1|2|4|7)",</span><br><span style="color: hsl(120, 100%, 40%);">+          RACH_STR</span><br><span style="color: hsl(120, 100%, 40%);">+              "Set the maximum number of RACH burst transmissions\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Set the maximum number of RACH burst transmissions\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Maximum number of 1 RACH burst transmissions\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Maximum number of 2 RACH burst transmissions\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Maximum number of 4 RACH burst transmissions\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Maximum number of 7 RACH burst transmissions\n")</span><br><span> {</span><br><span>       struct gsm_bts *bts = vty->index;</span><br><span>         bts->si_common.rach_control.max_trans = rach_max_trans_val2raw(atoi(argv[0]));</span><br><span>@@ -2571,13 +2612,14 @@</span><br><span> </span><br><span> #define CD_STR "Channel Description\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_chan_desc_att,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_chan_desc_att_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "channel-description attach (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-  CD_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set if attachment is required\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Attachment is NOT required\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Attachment is required (standard)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_chan_desc_att,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_chan_desc_att_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "channel-description attach (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+         CD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set if attachment is required\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Attachment is NOT required\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Attachment is required (standard)\n")</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         bts->si_common.chan_desc.att = atoi(argv[0]);</span><br><span>@@ -2591,12 +2633,13 @@</span><br><span>            "Attachment is NOT required\n"</span><br><span>             "Attachment is required (standard)\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_chan_desc_bs_pa_mfrms,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_chan_desc_bs_pa_mfrms_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "channel-description bs-pa-mfrms <2-9>",</span><br><span style="color: hsl(0, 100%, 40%);">-        CD_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set number of multiframe periods for paging groups\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Number of multiframe periods for paging groups\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_chan_desc_bs_pa_mfrms,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_chan_desc_bs_pa_mfrms_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "channel-description bs-pa-mfrms <2-9>",</span><br><span style="color: hsl(120, 100%, 40%);">+              CD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set number of multiframe periods for paging groups\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Number of multiframe periods for paging groups\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span>         int bs_pa_mfrms = atoi(argv[0]);</span><br><span>@@ -2611,12 +2654,13 @@</span><br><span>            "Set number of multiframe periods for paging groups\n"</span><br><span>             "Number of multiframe periods for paging groups\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_chan_desc_bs_ag_blks_res,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_chan_desc_bs_ag_blks_res_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "channel-description bs-ag-blks-res <0-7>",</span><br><span style="color: hsl(0, 100%, 40%);">-  CD_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set number of blocks reserved for access grant\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Number of blocks reserved for access grant\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_chan_desc_bs_ag_blks_res,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_bts_chan_desc_bs_ag_blks_res_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "channel-description bs-ag-blks-res <0-7>",</span><br><span style="color: hsl(120, 100%, 40%);">+           CD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set number of blocks reserved for access grant\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Number of blocks reserved for access grant\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span>         int bs_ag_blks_res = atoi(argv[0]);</span><br><span>@@ -2633,12 +2677,13 @@</span><br><span> </span><br><span> #define CCCH_STR "Common Control Channel\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_ccch_load_ind_thresh,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_ccch_load_ind_thresh_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "ccch load-indication-threshold <0-100>",</span><br><span style="color: hsl(0, 100%, 40%);">- CCCH_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Percentage of CCCH load at which BTS sends RSL CCCH LOAD IND\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "CCCH Load Threshold in percent (Default: 10)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_ccch_load_ind_thresh,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_ccch_load_ind_thresh_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "ccch load-indication-threshold <0-100>",</span><br><span style="color: hsl(120, 100%, 40%);">+             CCCH_STR</span><br><span style="color: hsl(120, 100%, 40%);">+              "Percentage of CCCH load at which BTS sends RSL CCCH LOAD IND\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "CCCH Load Threshold in percent (Default: 10)\n")</span><br><span> {</span><br><span>       struct gsm_bts *bts = vty->index;</span><br><span>         bts->ccch_load_ind_thresh = atoi(argv[0]);</span><br><span>@@ -2647,38 +2692,42 @@</span><br><span> </span><br><span> #define NM_STR "Network Management\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_rach_nm_b_thresh,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_rach_nm_b_thresh_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rach nm busy threshold <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-     RACH_STR NM_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the NM Busy Threshold\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the NM Busy Threshold\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "NM Busy Threshold in dB\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_rach_nm_b_thresh,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_rach_nm_b_thresh_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "rach nm busy threshold <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+             RACH_STR NM_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set the NM Busy Threshold\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set the NM Busy Threshold\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "NM Busy Threshold in dB\n")</span><br><span> {</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span>         bts->rach_b_thresh = atoi(argv[0]);</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_rach_nm_ldavg,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_rach_nm_ldavg_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rach nm load average <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">- RACH_STR NM_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the NM Loadaverage Slots value\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the NM Loadaverage Slots value\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "NM Loadaverage Slots value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_rach_nm_ldavg,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_bts_rach_nm_ldavg_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "rach nm load average <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+             RACH_STR NM_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set the NM Loadaverage Slots value\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Set the NM Loadaverage Slots value\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "NM Loadaverage Slots value\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span>         bts->rach_ldavg_slots = atoi(argv[0]);</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_cell_barred, cfg_bts_cell_barred_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "cell barred (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Should this cell be barred from access?\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Should this cell be barred from access?\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Cell should NOT be barred\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Cell should be barred\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_cell_barred,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_cell_barred_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "cell barred (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Should this cell be barred from access?\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Should this cell be barred from access?\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Cell should NOT be barred\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Cell should be barred\n")</span><br><span> </span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>@@ -2688,14 +2737,16 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_rach_ec_allowed, cfg_bts_rach_ec_allowed_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rach emergency call allowed (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-      RACH_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Should this cell allow emergency calls?\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Should this cell allow emergency calls?\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Should this cell allow emergency calls?\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Do NOT allow emergency calls\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Allow emergency calls\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_rach_ec_allowed,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_rach_ec_allowed_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "rach emergency call allowed (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+        RACH_STR</span><br><span style="color: hsl(120, 100%, 40%);">+              "Should this cell allow emergency calls?\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Should this cell allow emergency calls?\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Should this cell allow emergency calls?\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Do NOT allow emergency calls\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Allow emergency calls\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2707,27 +2758,29 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_rach_ac_class, cfg_bts_rach_ac_class_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rach access-control-class (0|1|2|3|4|5|6|7|8|9|11|12|13|14|15) (barred|allowed)",</span><br><span style="color: hsl(0, 100%, 40%);">-      RACH_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set access control class\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 0\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 1\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 2\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 3\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 4\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 5\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 6\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 7\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 8\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 9\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 11 for PLMN use\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 12 for security services\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 13 for public utilities (e.g. water/gas suppliers)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 14 for emergency services\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Access control class 15 for PLMN staff\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "barred to use access control class\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "allowed to use access control class\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_rach_ac_class,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_bts_rach_ac_class_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "rach access-control-class (0|1|2|3|4|5|6|7|8|9|11|12|13|14|15) (barred|allowed)",</span><br><span style="color: hsl(120, 100%, 40%);">+          RACH_STR</span><br><span style="color: hsl(120, 100%, 40%);">+              "Set access control class\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Access control class 0\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 1\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 2\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 3\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 4\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 5\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 6\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 7\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 8\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 9\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 11 for PLMN use\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Access control class 12 for security services\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Access control class 13 for public utilities (e.g. water/gas suppliers)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Access control class 14 for emergency services\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Access control class 15 for PLMN staff\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "barred to use access control class\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "allowed to use access control class\n")</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2771,11 +2824,13 @@</span><br><span> </span><br><span> #define CELL_STR "Cell Parameters\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_cell_resel_hyst, cfg_bts_cell_resel_hyst_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "cell reselection hysteresis <0-14>",</span><br><span style="color: hsl(0, 100%, 40%);">-      CELL_STR "Cell re-selection parameters\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Cell Re-Selection Hysteresis in dB\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Cell Re-Selection Hysteresis in dB\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_cell_resel_hyst,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_bts_cell_resel_hyst_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "cell reselection hysteresis <0-14>",</span><br><span style="color: hsl(120, 100%, 40%);">+         CELL_STR "Cell re-selection parameters\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Cell Re-Selection Hysteresis in dB\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Cell Re-Selection Hysteresis in dB\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2784,12 +2839,14 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_rxlev_acc_min, cfg_bts_rxlev_acc_min_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rxlev access min <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Minimum RxLev needed for cell access\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Minimum RxLev needed for cell access\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Minimum RxLev needed for cell access\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Minimum RxLev needed for cell access (better than -110dBm)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_rxlev_acc_min,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_bts_rxlev_acc_min_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "rxlev access min <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+            "Minimum RxLev needed for cell access\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Minimum RxLev needed for cell access\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Minimum RxLev needed for cell access\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Minimum RxLev needed for cell access (better than -110dBm)\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2798,10 +2855,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_cell_bar_qualify, cfg_bts_cell_bar_qualify_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "cell bar qualify (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-     CELL_STR "Cell Bar Qualify\n" "Cell Bar Qualify\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Set CBQ to 0\n" "Set CBQ to 1\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_cell_bar_qualify,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_bts_cell_bar_qualify_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "cell bar qualify (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+           CELL_STR "Cell Bar Qualify\n" "Cell Bar Qualify\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set CBQ to 0\n" "Set CBQ to 1\n")</span><br><span> {</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2811,12 +2870,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_cell_resel_ofs, cfg_bts_cell_resel_ofs_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "cell reselection offset <0-126>",</span><br><span style="color: hsl(0, 100%, 40%);">-      CELL_STR "Cell Re-Selection Parameters\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "Cell Re-Selection Offset (CRO) in dB\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Cell Re-Selection Offset (CRO) in dB\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      )</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_cell_resel_ofs,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_bts_cell_resel_ofs_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "cell reselection offset <0-126>",</span><br><span style="color: hsl(120, 100%, 40%);">+            CELL_STR "Cell Re-Selection Parameters\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Cell Re-Selection Offset (CRO) in dB\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Cell Re-Selection Offset (CRO) in dB\n")</span><br><span> {</span><br><span>       struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2826,11 +2886,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_temp_ofs, cfg_bts_temp_ofs_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "temporary offset <0-60>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Cell selection temporary negative offset\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Cell selection temporary negative offset\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Cell selection temporary negative offset in dB\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_temp_ofs,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_temp_ofs_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "temporary offset <0-60>",</span><br><span style="color: hsl(120, 100%, 40%);">+            "Cell selection temporary negative offset\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Cell selection temporary negative offset\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Cell selection temporary negative offset in dB\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2840,11 +2902,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_temp_ofs_inf, cfg_bts_temp_ofs_inf_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "temporary offset infinite",</span><br><span style="color: hsl(0, 100%, 40%);">-  "Cell selection temporary negative offset\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Cell selection temporary negative offset\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Sets cell selection temporary negative offset to infinity\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_temp_ofs_inf,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_temp_ofs_inf_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "temporary offset infinite",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Cell selection temporary negative offset\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Cell selection temporary negative offset\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Sets cell selection temporary negative offset to infinity\n")</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2854,11 +2918,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_penalty_time, cfg_bts_penalty_time_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "penalty time <20-620>",</span><br><span style="color: hsl(0, 100%, 40%);">-        "Cell selection penalty time\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Cell selection penalty time\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Cell selection penalty time in seconds (by 20s increments)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_penalty_time,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_penalty_time_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "penalty time <20-620>",</span><br><span style="color: hsl(120, 100%, 40%);">+              "Cell selection penalty time\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Cell selection penalty time\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Cell selection penalty time in seconds (by 20s increments)\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2868,13 +2934,15 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_penalty_time_rsvd, cfg_bts_penalty_time_rsvd_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "penalty time reserved",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Cell selection penalty time\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Cell selection penalty time\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Set cell selection penalty time to reserved value 31, "</span><br><span style="color: hsl(0, 100%, 40%);">-              "(indicate that CELL_RESELECT_OFFSET is subtracted from C2 "</span><br><span style="color: hsl(0, 100%, 40%);">-          "and TEMPORARY_OFFSET is ignored)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_penalty_time_rsvd,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_penalty_time_rsvd_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "penalty time reserved",</span><br><span style="color: hsl(120, 100%, 40%);">+            "Cell selection penalty time\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Cell selection penalty time\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Set cell selection penalty time to reserved value 31, "</span><br><span style="color: hsl(120, 100%, 40%);">+                  "(indicate that CELL_RESELECT_OFFSET is subtracted from C2 "</span><br><span style="color: hsl(120, 100%, 40%);">+                "and TEMPORARY_OFFSET is ignored)\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2884,10 +2952,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_radio_link_timeout, cfg_bts_radio_link_timeout_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "radio-link-timeout <4-64>",</span><br><span style="color: hsl(0, 100%, 40%);">-    "Radio link timeout criterion (BTS side)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Radio link timeout value (lost SACCH block)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_radio_link_timeout,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_radio_link_timeout_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "radio-link-timeout <4-64>",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Radio link timeout criterion (BTS side)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Radio link timeout value (lost SACCH block)\n")</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2896,10 +2966,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_radio_link_timeout_inf, cfg_bts_radio_link_timeout_inf_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "radio-link-timeout infinite",</span><br><span style="color: hsl(0, 100%, 40%);">-        "Radio link timeout criterion (BTS side)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Infinite Radio link timeout value (use only for BTS RF testing)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_radio_link_timeout_inf,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_radio_link_timeout_inf_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "radio-link-timeout infinite",</span><br><span style="color: hsl(120, 100%, 40%);">+              "Radio link timeout criterion (BTS side)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Infinite Radio link timeout value (use only for BTS RF testing)\n")</span><br><span> {</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2925,12 +2997,14 @@</span><br><span>           } \</span><br><span>  } while (0)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_prs_bvci, cfg_bts_gprs_bvci_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "gprs cell bvci <2-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-     GPRS_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-       "GPRS Cell Settings\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "GPRS BSSGP VC Identifier\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "GPRS BSSGP VC Identifier\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_prs_bvci,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_bts_gprs_bvci_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs cell bvci <2-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+           GPRS_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+             "GPRS Cell Settings\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "GPRS BSSGP VC Identifier\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "GPRS BSSGP VC Identifier\n")</span><br><span> {</span><br><span>   /* ETSI TS 101 343: values 0 and 1 are reserved for signalling and PTM */</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span>@@ -2942,11 +3016,13 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_nsei, cfg_bts_gprs_nsei_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "gprs nsei <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-  GPRS_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-       "GPRS NS Entity Identifier\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "GPRS NS Entity Identifier\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_nsei,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_gprs_nsei_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs nsei <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+        GPRS_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+             "GPRS NS Entity Identifier\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "GPRS NS Entity Identifier\n")</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2960,11 +3036,13 @@</span><br><span> #define NSVC_TEXT "Network Service Virtual Connection (NS-VC)\n" \</span><br><span>           "NSVC Logical Number\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_nsvci, cfg_bts_gprs_nsvci_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-  "gprs nsvc <0-1> nsvci <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-        GPRS_TEXT NSVC_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-     "NS Virtual Connection Identifier\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "GPRS NS VC Identifier\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_nsvci,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_bts_gprs_nsvci_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs nsvc <0-1> nsvci <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+              GPRS_TEXT NSVC_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+           "NS Virtual Connection Identifier\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "GPRS NS VC Identifier\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span>         int idx = atoi(argv[0]);</span><br><span>@@ -2976,13 +3054,15 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_nsvc_lport, cfg_bts_gprs_nsvc_lport_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "gprs nsvc <0-1> local udp port <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-       GPRS_TEXT NSVC_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-     "GPRS NS Local UDP Port\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "GPRS NS Local UDP Port\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "GPRS NS Local UDP Port\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "GPRS NS Local UDP Port Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_nsvc_lport,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_gprs_nsvc_lport_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs nsvc <0-1> local udp port <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+             GPRS_TEXT NSVC_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+           "GPRS NS Local UDP Port\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "GPRS NS Local UDP Port\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "GPRS NS Local UDP Port\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "GPRS NS Local UDP Port Number\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span>         int idx = atoi(argv[0]);</span><br><span>@@ -2994,13 +3074,15 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_nsvc_rport, cfg_bts_gprs_nsvc_rport_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "gprs nsvc <0-1> remote udp port <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-      GPRS_TEXT NSVC_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-     "GPRS NS Remote UDP Port\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "GPRS NS Remote UDP Port\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "GPRS NS Remote UDP Port\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "GPRS NS Remote UDP Port Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_nsvc_rport,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_gprs_nsvc_rport_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs nsvc <0-1> remote udp port <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+            GPRS_TEXT NSVC_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+           "GPRS NS Remote UDP Port\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "GPRS NS Remote UDP Port\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "GPRS NS Remote UDP Port\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "GPRS NS Remote UDP Port Number\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span>         int idx = atoi(argv[0]);</span><br><span>@@ -3012,12 +3094,14 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_nsvc_rip, cfg_bts_gprs_nsvc_rip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "gprs nsvc <0-1> remote ip A.B.C.D",</span><br><span style="color: hsl(0, 100%, 40%);">-    GPRS_TEXT NSVC_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-     "GPRS NS Remote IP Address\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "GPRS NS Remote IP Address\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "GPRS NS Remote IP Address\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_nsvc_rip,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_gprs_nsvc_rip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs nsvc <0-1> remote ip A.B.C.D",</span><br><span style="color: hsl(120, 100%, 40%);">+          GPRS_TEXT NSVC_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+           "GPRS NS Remote IP Address\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "GPRS NS Remote IP Address\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "GPRS NS Remote IP Address\n")</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         int idx = atoi(argv[0]);</span><br><span>@@ -3043,11 +3127,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_ns_timer, cfg_bts_gprs_ns_timer_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "gprs ns timer " NS_TIMERS " <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-        GPRS_TEXT "Network Service\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Network Service Timer\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     NS_TIMERS_HELP "Timer Value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_ns_timer,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_bts_gprs_ns_timer_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs ns timer " NS_TIMERS " <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+              GPRS_TEXT "Network Service\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Network Service Timer\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           NS_TIMERS_HELP "Timer Value\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span>         int idx = get_string_value(gprs_ns_timer_strs, argv[0]);</span><br><span>@@ -3077,11 +3163,13 @@</span><br><span>   "Tbvc-capa-update timeout\n"          \</span><br><span>    "Tbvc-capa-update retries\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_cell_timer, cfg_bts_gprs_cell_timer_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "gprs cell timer " BSSGP_TIMERS " <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-   GPRS_TEXT "Cell / BSSGP\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Cell/BSSGP Timer\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  BSSGP_TIMERS_HELP "Timer Value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_cell_timer,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_gprs_cell_timer_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs cell timer " BSSGP_TIMERS " <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+         GPRS_TEXT "Cell / BSSGP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Cell/BSSGP Timer\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        BSSGP_TIMERS_HELP "Timer Value\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span>         int idx = get_string_value(gprs_bssgp_cfg_strs, argv[0]);</span><br><span>@@ -3097,12 +3185,14 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_rac, cfg_bts_gprs_rac_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "gprs routing area <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-    GPRS_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-       "GPRS Routing Area Code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "GPRS Routing Area Code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "GPRS Routing Area Code\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_rac,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_gprs_rac_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs routing area <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+          GPRS_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+             "GPRS Routing Area Code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "GPRS Routing Area Code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "GPRS Routing Area Code\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3113,10 +3203,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_ctrl_ack, cfg_bts_gprs_ctrl_ack_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "gprs control-ack-type-rach", GPRS_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-       "Set GPRS Control Ack Type for PACKET CONTROL ACKNOWLEDGMENT message to "</span><br><span style="color: hsl(0, 100%, 40%);">-     "four access bursts format instead of default RLC/MAC control block\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_ctrl_ack,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_bts_gprs_ctrl_ack_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs control-ack-type-rach",</span><br><span style="color: hsl(120, 100%, 40%);">+       GPRS_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+             "Set GPRS Control Ack Type for PACKET CONTROL ACKNOWLEDGMENT message to "</span><br><span style="color: hsl(120, 100%, 40%);">+           "four access bursts format instead of default RLC/MAC control block\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3127,10 +3220,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_no_bts_gprs_ctrl_ack, cfg_no_bts_gprs_ctrl_ack_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "no gprs control-ack-type-rach", NO_STR GPRS_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-     "Set GPRS Control Ack Type for PACKET CONTROL ACKNOWLEDGMENT message to "</span><br><span style="color: hsl(0, 100%, 40%);">-     "default RLC/MAC control block\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_no_bts_gprs_ctrl_ack,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_no_bts_gprs_ctrl_ack_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no gprs control-ack-type-rach",</span><br><span style="color: hsl(120, 100%, 40%);">+            NO_STR GPRS_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+              "Set GPRS Control Ack Type for PACKET CONTROL ACKNOWLEDGMENT message to "</span><br><span style="color: hsl(120, 100%, 40%);">+           "default RLC/MAC control block\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3141,13 +3237,15 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_net_ctrl_ord, cfg_bts_gprs_net_ctrl_ord_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "gprs network-control-order (nc0|nc1|nc2)",</span><br><span style="color: hsl(0, 100%, 40%);">-   GPRS_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-       "GPRS Network Control Order\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "MS controlled cell re-selection, no measurement reporting\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "MS controlled cell re-selection, MS sends measurement reports\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "Network controlled cell re-selection, MS sends measurement reports\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_net_ctrl_ord,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_bts_gprs_net_ctrl_ord_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs network-control-order (nc0|nc1|nc2)",</span><br><span style="color: hsl(120, 100%, 40%);">+         GPRS_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+             "GPRS Network Control Order\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "MS controlled cell re-selection, no measurement reporting\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "MS controlled cell re-selection, MS sends measurement reports\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Network controlled cell re-selection, MS sends measurement reports\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3158,13 +3256,15 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_mode, cfg_bts_gprs_mode_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "gprs mode (none|gprs|egprs)",</span><br><span style="color: hsl(0, 100%, 40%);">-        GPRS_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-       "GPRS Mode for this BTS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "GPRS Disabled on this BTS\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "GPRS Enabled on this BTS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "EGPRS (EDGE) Enabled on this BTS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_gprs_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs mode (none|gprs|egprs)",</span><br><span style="color: hsl(120, 100%, 40%);">+              GPRS_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+             "GPRS Mode for this BTS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "GPRS Disabled on this BTS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "GPRS Enabled on this BTS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "EGPRS (EDGE) Enabled on this BTS\n")</span><br><span> {</span><br><span>   struct gsm_bts *bts = vty->index;</span><br><span>         enum bts_gprs_mode mode = bts_gprs_mode_parse(argv[0], NULL);</span><br><span>@@ -3208,10 +3308,11 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_gprs_egprs_pkt_chan_req,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_gprs_egprs_pkt_chan_req_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "gprs egprs-packet-channel-request",</span><br><span style="color: hsl(0, 100%, 40%);">-      GPRS_TEXT "EGPRS Packet Channel Request support")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_gprs_egprs_pkt_chan_req,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_gprs_egprs_pkt_chan_req_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "gprs egprs-packet-channel-request",</span><br><span style="color: hsl(120, 100%, 40%);">+        GPRS_TEXT "EGPRS Packet Channel Request support")</span><br><span> {</span><br><span>       struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3225,10 +3326,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_no_gprs_egprs_pkt_chan_req,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_no_gprs_egprs_pkt_chan_req_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no gprs egprs-packet-channel-request",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR GPRS_TEXT "EGPRS Packet Channel Request support")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_no_gprs_egprs_pkt_chan_req,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_no_gprs_egprs_pkt_chan_req_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no gprs egprs-packet-channel-request",</span><br><span style="color: hsl(120, 100%, 40%);">+             NO_STR GPRS_TEXT "EGPRS Packet Channel Request support")</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3266,12 +3368,14 @@</span><br><span>                   "System Information Type 5bis\n"      \</span><br><span>                    "System Information Type 5ter\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_si_mode, cfg_bts_si_mode_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "system-information " SI_TYPE_TEXT " mode (static|computed)",</span><br><span style="color: hsl(0, 100%, 40%);">-       SI_TEXT SI_TYPE_HELP</span><br><span style="color: hsl(0, 100%, 40%);">-    "System Information Mode\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Static user-specified\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "Dynamic, BSC-computed\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_si_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_si_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "system-information " SI_TYPE_TEXT " mode (static|computed)",</span><br><span style="color: hsl(120, 100%, 40%);">+             SI_TEXT SI_TYPE_HELP</span><br><span style="color: hsl(120, 100%, 40%);">+          "System Information Mode\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Static user-specified\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Dynamic, BSC-computed\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span>         int type;</span><br><span>@@ -3290,11 +3394,13 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_si_static, cfg_bts_si_static_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "system-information " SI_TYPE_TEXT " static HEXSTRING",</span><br><span style="color: hsl(0, 100%, 40%);">-     SI_TEXT SI_TYPE_HELP</span><br><span style="color: hsl(0, 100%, 40%);">-    "Static System Information filling\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Static user-specified SI content in HEX notation\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_si_static,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_si_static_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "system-information " SI_TYPE_TEXT " static HEXSTRING",</span><br><span style="color: hsl(120, 100%, 40%);">+           SI_TEXT SI_TYPE_HELP</span><br><span style="color: hsl(120, 100%, 40%);">+          "Static System Information filling\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Static user-specified SI content in HEX notation\n")</span><br><span> {</span><br><span>   struct gsm_bts *bts = vty->index;</span><br><span>         int rc, type;</span><br><span>@@ -3327,11 +3433,13 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_si_unused_send_empty, cfg_bts_si_unused_send_empty_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "system-information unused-send-empty",</span><br><span style="color: hsl(0, 100%, 40%);">-       SI_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">- "Send BCCH Info with empty 'Full BCCH Info' TLV to notify disabled SI. "</span><br><span style="color: hsl(0, 100%, 40%);">-      "Some nanoBTS fw versions are known to fail upon receival of these messages.\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_si_unused_send_empty,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_bts_si_unused_send_empty_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "system-information unused-send-empty",</span><br><span style="color: hsl(120, 100%, 40%);">+             SI_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+       "Send BCCH Info with empty 'Full BCCH Info' TLV to notify disabled SI. "</span><br><span style="color: hsl(120, 100%, 40%);">+            "Some nanoBTS fw versions are known to fail upon receival of these messages.\n")</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3340,11 +3448,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_no_si_unused_send_empty, cfg_bts_no_si_unused_send_empty_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "no system-information unused-send-empty",</span><br><span style="color: hsl(0, 100%, 40%);">-    NO_STR SI_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-  "Avoid sending BCCH Info with empty 'Full BCCH Info' TLV to notify disabled SI. "</span><br><span style="color: hsl(0, 100%, 40%);">-     "Some nanoBTS fw versions are known to fail upon receival of these messages.\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_no_si_unused_send_empty,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_no_si_unused_send_empty_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no system-information unused-send-empty",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR SI_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        "Avoid sending BCCH Info with empty 'Full BCCH Info' TLV to notify disabled SI. "</span><br><span style="color: hsl(120, 100%, 40%);">+           "Some nanoBTS fw versions are known to fail upon receival of these messages.\n")</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3359,11 +3469,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_early_cm, cfg_bts_early_cm_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "early-classmark-sending (allowed|forbidden)",</span><br><span style="color: hsl(0, 100%, 40%);">-        "Early Classmark Sending\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Early Classmark Sending is allowed\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Early Classmark Sending is forbidden\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_early_cm,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_early_cm_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "early-classmark-sending (allowed|forbidden)",</span><br><span style="color: hsl(120, 100%, 40%);">+              "Early Classmark Sending\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Early Classmark Sending is allowed\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Early Classmark Sending is forbidden\n")</span><br><span> {</span><br><span>       struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3375,11 +3487,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_early_cm_3g, cfg_bts_early_cm_3g_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "early-classmark-sending-3g (allowed|forbidden)",</span><br><span style="color: hsl(0, 100%, 40%);">-     "3G Early Classmark Sending\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "3G Early Classmark Sending is allowed\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "3G Early Classmark Sending is forbidden\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_early_cm_3g,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_early_cm_3g_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "early-classmark-sending-3g (allowed|forbidden)",</span><br><span style="color: hsl(120, 100%, 40%);">+           "3G Early Classmark Sending\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "3G Early Classmark Sending is allowed\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "3G Early Classmark Sending is forbidden\n")</span><br><span> {</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3391,11 +3505,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_neigh_mode, cfg_bts_neigh_mode_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "neighbor-list mode (automatic|manual|manual-si5)",</span><br><span style="color: hsl(0, 100%, 40%);">-   "Neighbor List\n" "Mode of Neighbor List generation\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Automatically from all BTS in this BSC\n" "Manual\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Manual with different lists for SI2 and SI5\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_neigh_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_neigh_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "neighbor-list mode (automatic|manual|manual-si5)",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Neighbor List\n" "Mode of Neighbor List generation\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Automatically from all BTS in this BSC\n" "Manual\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Manual with different lists for SI2 and SI5\n")</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span>         int mode = get_string_value(bts_neigh_mode_strs, argv[0]);</span><br><span>@@ -3418,11 +3534,13 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_neigh, cfg_bts_neigh_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "neighbor-list (add|del) arfcn <0-1023>",</span><br><span style="color: hsl(0, 100%, 40%);">-       "Neighbor List\n" "Add to manual neighbor list\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Delete from manual neighbor list\n" "ARFCN of neighbor\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "ARFCN of neighbor\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_neigh,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_neigh_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "neighbor-list (add|del) arfcn <0-1023>",</span><br><span style="color: hsl(120, 100%, 40%);">+             "Neighbor List\n" "Add to manual neighbor list\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Delete from manual neighbor list\n" "ARFCN of neighbor\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "ARFCN of neighbor\n")</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         struct bitvec *bv = &bts->si_common.neigh_list;</span><br><span>@@ -3449,17 +3567,19 @@</span><br><span> }</span><br><span> </span><br><span> /* help text should be kept in sync with EARFCN_*_INVALID defines */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_si2quater_neigh_add, cfg_bts_si2quater_neigh_add_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "si2quater neighbor-list add earfcn <0-65535> thresh-hi <0-31> "</span><br><span style="color: hsl(0, 100%, 40%);">-      "thresh-lo <0-32> prio <0-8> qrxlv <0-32> meas <0-8>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "SI2quater Neighbor List\n" "SI2quater Neighbor List\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Add to manual SI2quater neighbor list\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "EARFCN of neighbor\n" "EARFCN of neighbor\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "threshold high bits\n" "threshold high bits\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "threshold low bits\n" "threshold low bits (32 means NA)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "priority\n" "priority (8 means NA)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "QRXLEVMIN\n" "QRXLEVMIN (32 means NA)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "measurement bandwidth\n" "measurement bandwidth (8 means NA)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_si2quater_neigh_add,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_bts_si2quater_neigh_add_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "si2quater neighbor-list add earfcn <0-65535> thresh-hi <0-31> "</span><br><span style="color: hsl(120, 100%, 40%);">+        "thresh-lo <0-32> prio <0-8> qrxlv <0-32> meas <0-8>",</span><br><span style="color: hsl(120, 100%, 40%);">+              "SI2quater Neighbor List\n" "SI2quater Neighbor List\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Add to manual SI2quater neighbor list\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "EARFCN of neighbor\n" "EARFCN of neighbor\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "threshold high bits\n" "threshold high bits\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "threshold low bits\n" "threshold low bits (32 means NA)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "priority\n" "priority (8 means NA)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "QRXLEVMIN\n" "QRXLEVMIN (32 means NA)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "measurement bandwidth\n" "measurement bandwidth (8 means NA)\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span>         struct osmo_earfcn_si2q *e = &bts->si_common.si2quater_neigh_list;</span><br><span>@@ -3502,13 +3622,15 @@</span><br><span>  return CMD_WARNING;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_si2quater_neigh_del, cfg_bts_si2quater_neigh_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "si2quater neighbor-list del earfcn <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">- "SI2quater Neighbor List\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "SI2quater Neighbor List\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Delete from SI2quater manual neighbor list\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "EARFCN of neighbor\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "EARFCN\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_si2quater_neigh_del,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_si2quater_neigh_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "si2quater neighbor-list del earfcn <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+       "SI2quater Neighbor List\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "SI2quater Neighbor List\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Delete from SI2quater manual neighbor list\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "EARFCN of neighbor\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "EARFCN\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span>         struct osmo_earfcn_si2q *e = &bts->si_common.si2quater_neigh_list;</span><br><span>@@ -3523,12 +3645,14 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_si2quater_uarfcn_add, cfg_bts_si2quater_uarfcn_add_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "si2quater neighbor-list add uarfcn <0-16383> <0-511> <0-1>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "SI2quater Neighbor List\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "SI2quater Neighbor List\n" "Add to manual SI2quater neighbor list\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "UARFCN of neighbor\n" "UARFCN of neighbor\n" "scrambling code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "diversity bit\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_si2quater_uarfcn_add,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_si2quater_uarfcn_add_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "si2quater neighbor-list add uarfcn <0-16383> <0-511> <0-1>",</span><br><span style="color: hsl(120, 100%, 40%);">+             "SI2quater Neighbor List\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "SI2quater Neighbor List\n" "Add to manual SI2quater neighbor list\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "UARFCN of neighbor\n" "UARFCN of neighbor\n" "scrambling code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "diversity bit\n")</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span>         uint16_t arfcn = atoi(argv[0]), scramble = atoi(argv[1]);</span><br><span>@@ -3551,14 +3675,16 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_si2quater_uarfcn_del, cfg_bts_si2quater_uarfcn_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "si2quater neighbor-list del uarfcn <0-16383> <0-511>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "SI2quater Neighbor List\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "SI2quater Neighbor List\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Delete from SI2quater manual neighbor list\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "UARFCN of neighbor\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "UARFCN\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "scrambling code\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_si2quater_uarfcn_del,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_si2quater_uarfcn_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "si2quater neighbor-list del uarfcn <0-16383> <0-511>",</span><br><span style="color: hsl(120, 100%, 40%);">+         "SI2quater Neighbor List\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "SI2quater Neighbor List\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Delete from SI2quater manual neighbor list\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "UARFCN of neighbor\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "UARFCN\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "scrambling code\n")</span><br><span> {</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3571,12 +3697,14 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_si5_neigh, cfg_bts_si5_neigh_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "si5 neighbor-list (add|del) arfcn <0-1023>",</span><br><span style="color: hsl(0, 100%, 40%);">-   "SI5 Neighbor List\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "SI5 Neighbor List\n" "Add to manual SI5 neighbor list\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Delete from SI5 manual neighbor list\n" "ARFCN of neighbor\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "ARFCN of neighbor\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_si5_neigh,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_si5_neigh_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "si5 neighbor-list (add|del) arfcn <0-1023>",</span><br><span style="color: hsl(120, 100%, 40%);">+         "SI5 Neighbor List\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "SI5 Neighbor List\n" "Add to manual SI5 neighbor list\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Delete from SI5 manual neighbor list\n" "ARFCN of neighbor\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "ARFCN of neighbor\n")</span><br><span> {</span><br><span>  enum gsm_band unused;</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span>@@ -3602,10 +3730,12 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_pcu_sock, cfg_bts_pcu_sock_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "pcu-socket PATH",</span><br><span style="color: hsl(0, 100%, 40%);">-    "PCU Socket Path for using OsmoPCU co-located with BSC (legacy BTS)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Path in the file system for the unix-domain PCU socket\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_pcu_sock,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_pcu_sock_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_FULL,</span><br><span style="color: hsl(120, 100%, 40%);">+            "pcu-socket PATH",</span><br><span style="color: hsl(120, 100%, 40%);">+          "PCU Socket Path for using OsmoPCU co-located with BSC (legacy BTS)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Path in the file system for the unix-domain PCU socket\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span>         int rc;</span><br><span>@@ -3784,10 +3914,11 @@</span><br><span> </span><br><span> #define FORCE_COMB_SI_STR "Force the generation of a single SI (no ter/bis)\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_force_comb_si,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_force_comb_si_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "force-combined-si",</span><br><span style="color: hsl(0, 100%, 40%);">-      FORCE_COMB_SI_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_force_comb_si,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_bts_force_comb_si_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "force-combined-si",</span><br><span style="color: hsl(120, 100%, 40%);">+        FORCE_COMB_SI_STR)</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span>         bts->force_combined_si = 1;</span><br><span>@@ -3795,10 +3926,11 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_no_force_comb_si,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_no_force_comb_si_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no force-combined-si",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR FORCE_COMB_SI_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_no_force_comb_si,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_no_force_comb_si_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no force-combined-si",</span><br><span style="color: hsl(120, 100%, 40%);">+             NO_STR FORCE_COMB_SI_STR)</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span>         bts->force_combined_si = 0;</span><br><span>@@ -4371,11 +4503,12 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trx_arfcn,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trx_arfcn_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "arfcn <0-1023>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the ARFCN for this TRX\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Absolute Radio Frequency Channel Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trx_arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_trx_arfcn_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "arfcn <0-1023>",</span><br><span style="color: hsl(120, 100%, 40%);">+             "Set the ARFCN for this TRX\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Absolute Radio Frequency Channel Number\n")</span><br><span> {</span><br><span>    enum gsm_band unused;</span><br><span>        struct gsm_bts_trx *trx = vty->index;</span><br><span>@@ -4411,11 +4544,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trx_max_power_red,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trx_max_power_red_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "max_power_red <0-100>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Reduction of maximum BS RF Power (relative to nominal power)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Reduction of maximum BS RF Power in dB\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trx_max_power_red,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_trx_max_power_red_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "max_power_red <0-100>",</span><br><span style="color: hsl(120, 100%, 40%);">+              "Reduction of maximum BS RF Power (relative to nominal power)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Reduction of maximum BS RF Power in dB\n")</span><br><span> {</span><br><span>     int maxpwr_r = atoi(argv[0]);</span><br><span>        struct gsm_bts_trx *trx = vty->index;</span><br><span>@@ -4440,21 +4574,22 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trx_rsl_e1,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trx_rsl_e1_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rsl e1 line E1_LINE timeslot <1-31> sub-slot (0|1|2|3|full)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "RSL Parameters\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 interface to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 interface to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 Line Number to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 Timeslot to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 Timeslot to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 Sub-slot to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 Sub-slot 0 is to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 Sub-slot 1 is to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 Sub-slot 2 is to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 Sub-slot 3 is to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 full timeslot is to be used for RSL\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trx_rsl_e1,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_trx_rsl_e1_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           0x00, /* FIXME: BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK? */</span><br><span style="color: hsl(120, 100%, 40%);">+        "rsl e1 line E1_LINE timeslot <1-31> sub-slot (0|1|2|3|full)",</span><br><span style="color: hsl(120, 100%, 40%);">+        "RSL Parameters\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "E1/T1 interface to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "E1/T1 interface to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "E1/T1 Line Number to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "E1/T1 Timeslot to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "E1/T1 Timeslot to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "E1/T1 Sub-slot to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "E1/T1 Sub-slot 0 is to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "E1/T1 Sub-slot 1 is to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "E1/T1 Sub-slot 2 is to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "E1/T1 Sub-slot 3 is to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "E1/T1 full timeslot is to be used for RSL\n")</span><br><span> {</span><br><span>  struct gsm_bts_trx *trx = vty->index;</span><br><span> </span><br><span>@@ -4463,13 +4598,14 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trx_rsl_e1_tei,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trx_rsl_e1_tei_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rsl e1 tei <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "RSL Parameters\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the TEI to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the TEI to be used for RSL\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "TEI to be used for RSL\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trx_rsl_e1_tei,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_trx_rsl_e1_tei_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "rsl e1 tei <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+          "RSL Parameters\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set the TEI to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set the TEI to be used for RSL\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "TEI to be used for RSL\n")</span><br><span> {</span><br><span>     struct gsm_bts_trx *trx = vty->index;</span><br><span> </span><br><span>@@ -4517,10 +4653,11 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ts_pchan,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_pchan_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "phys_chan_config PCHAN", /* dynamically generated! */</span><br><span style="color: hsl(0, 100%, 40%);">-      "Physical Channel configuration (TCH/SDCCH/...)\n" "Physical Channel\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_ts_pchan,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_ts_pchan_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "phys_chan_config PCHAN", /* dynamically generated! */</span><br><span style="color: hsl(120, 100%, 40%);">+              "Physical Channel configuration (TCH/SDCCH/...)\n" "Physical Channel\n")</span><br><span> {</span><br><span>      struct gsm_bts_trx_ts *ts = vty->index;</span><br><span>   int pchanc;</span><br><span>@@ -4557,10 +4694,11 @@</span><br><span> </span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ts_tsc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_tsc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "training_sequence_code <0-7>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Training Sequence Code of the Timeslot\n" "TSC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_ts_tsc,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_ts_tsc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "training_sequence_code <0-7>",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Training Sequence Code of the Timeslot\n" "TSC\n")</span><br><span> {</span><br><span>   struct gsm_bts_trx_ts *ts = vty->index;</span><br><span> </span><br><span>@@ -4578,11 +4716,12 @@</span><br><span> </span><br><span> #define HOPPING_STR "Configure frequency hopping\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ts_hopping,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_hopping_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "hopping enabled (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">- HOPPING_STR "Enable or disable frequency hopping\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Disable frequency hopping\n" "Enable frequency hopping\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_ts_hopping,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_ts_hopping_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "hopping enabled (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+            HOPPING_STR "Enable or disable frequency hopping\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Disable frequency hopping\n" "Enable frequency hopping\n")</span><br><span> {</span><br><span>   struct gsm_bts_trx_ts *ts = vty->index;</span><br><span>   int enabled = atoi(argv[0]);</span><br><span>@@ -4599,12 +4738,13 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ts_hsn,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_hsn_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "hopping sequence-number <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-       HOPPING_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Which hopping sequence to use for this channel\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Hopping Sequence Number (HSN)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_ts_hsn,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_ts_hsn_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "hopping sequence-number <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+             HOPPING_STR</span><br><span style="color: hsl(120, 100%, 40%);">+           "Which hopping sequence to use for this channel\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Hopping Sequence Number (HSN)\n")</span><br><span> {</span><br><span>      struct gsm_bts_trx_ts *ts = vty->index;</span><br><span> </span><br><span>@@ -4613,12 +4753,13 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ts_maio,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_maio_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "hopping maio <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-        HOPPING_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Which hopping MAIO to use for this channel\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Mobile Allocation Index Offset (MAIO)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_ts_maio,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_ts_maio_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "hopping maio <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+        HOPPING_STR</span><br><span style="color: hsl(120, 100%, 40%);">+           "Which hopping MAIO to use for this channel\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Mobile Allocation Index Offset (MAIO)\n")</span><br><span> {</span><br><span>      struct gsm_bts_trx_ts *ts = vty->index;</span><br><span> </span><br><span>@@ -4627,11 +4768,12 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ts_arfcn_add,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_arfcn_add_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "hopping arfcn add <0-1023>",</span><br><span style="color: hsl(0, 100%, 40%);">-       HOPPING_STR "Configure hopping ARFCN list\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Add an entry to the hopping ARFCN list\n" "ARFCN\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_ts_arfcn_add,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_ts_arfcn_add_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "hopping arfcn add <0-1023>",</span><br><span style="color: hsl(120, 100%, 40%);">+         HOPPING_STR "Configure hopping ARFCN list\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Add an entry to the hopping ARFCN list\n" "ARFCN\n")</span><br><span> {</span><br><span>         enum gsm_band unused;</span><br><span>        struct gsm_bts_trx_ts *ts = vty->index;</span><br><span>@@ -4647,11 +4789,12 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ts_arfcn_del,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_arfcn_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "hopping arfcn del <0-1023>",</span><br><span style="color: hsl(0, 100%, 40%);">-       HOPPING_STR "Configure hopping ARFCN list\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Delete an entry to the hopping ARFCN list\n" "ARFCN\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_ts_arfcn_del,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_ts_arfcn_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_ABIS_OML_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "hopping arfcn del <0-1023>",</span><br><span style="color: hsl(120, 100%, 40%);">+         HOPPING_STR "Configure hopping ARFCN list\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Delete an entry to the hopping ARFCN list\n" "ARFCN\n")</span><br><span> {</span><br><span>      enum gsm_band unused;</span><br><span>        struct gsm_bts_trx_ts *ts = vty->index;</span><br><span>@@ -4667,20 +4810,21 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ts_e1_subslot,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_e1_subslot_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "e1 line E1_LINE timeslot <1-31> sub-slot (0|1|2|3|full)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 channel connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 channel connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 line connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 timeslot connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 timeslot connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 sub-slot connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 sub-slot 0 connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 sub-slot 1 connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 sub-slot 2 connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "E1/T1 sub-slot 3 connected to this on-air timeslot\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Full E1/T1 timeslot connected to this on-air timeslot\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_ts_e1_subslot,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_ts_e1_subslot_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        0x00, /* FIXME: BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK? */</span><br><span style="color: hsl(120, 100%, 40%);">+        "e1 line E1_LINE timeslot <1-31> sub-slot (0|1|2|3|full)",</span><br><span style="color: hsl(120, 100%, 40%);">+            "E1/T1 channel connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "E1/T1 channel connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "E1/T1 line connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "E1/T1 timeslot connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "E1/T1 timeslot connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "E1/T1 sub-slot connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "E1/T1 sub-slot 0 connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "E1/T1 sub-slot 1 connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "E1/T1 sub-slot 2 connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "E1/T1 sub-slot 3 connected to this on-air timeslot\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Full E1/T1 timeslot connected to this on-air timeslot\n")</span><br><span> {</span><br><span>      struct gsm_bts_trx_ts *ts = vty->index;</span><br><span> </span><br><span>@@ -5204,13 +5348,14 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_ncc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_ncc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "network country code <1-999>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the GSM network country code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Country commands\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      CODE_CMD_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Network Country Code to use\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_ncc,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_net_ncc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "network country code <1-999>",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set the GSM network country code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Country commands\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        CODE_CMD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+          "Network Country Code to use\n")</span><br><span> {</span><br><span>        struct gsm_network *gsmnet = gsmnet_from_vty(vty);</span><br><span>   uint16_t mcc;</span><br><span>@@ -5225,13 +5370,14 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_mnc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_mnc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "mobile network code <0-999>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the GSM mobile network code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Network Commands\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      CODE_CMD_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Mobile Network Code to use\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_mnc,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_net_mnc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK,</span><br><span style="color: hsl(120, 100%, 40%);">+           "mobile network code <0-999>",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set the GSM mobile network code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Network Commands\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        CODE_CMD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+          "Mobile Network Code to use\n")</span><br><span> {</span><br><span>         struct gsm_network *gsmnet = gsmnet_from_vty(vty);</span><br><span>   uint16_t mnc;</span><br><span>@@ -5343,12 +5489,15 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_per_loc_upd, cfg_net_per_loc_upd_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "periodic location update <6-1530>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Periodic Location Updating Interval in Minutes\n")</span><br><span style="color: hsl(120, 100%, 40%);">+/* FIXME: changing this value would not affect generated System Information */</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_per_loc_upd,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_net_per_loc_upd_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              BSC_VTY_ATTR_RESTART_FULL,</span><br><span style="color: hsl(120, 100%, 40%);">+            "periodic location update <6-1530>",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Periodic Location Updating Interval in Minutes\n")</span><br><span> {</span><br><span>     struct gsm_network *net = vty->index;</span><br><span>     struct osmo_tdef *d = osmo_tdef_get_entry(net->T_defs, 3212);</span><br><span>@@ -5359,12 +5508,15 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_no_per_loc_upd, cfg_net_no_per_loc_upd_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no periodic location update",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Periodic Location Updating Interval\n")</span><br><span style="color: hsl(120, 100%, 40%);">+/* FIXME: changing this value would not affect generated System Information */</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_no_per_loc_upd,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_net_no_per_loc_upd_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           BSC_VTY_ATTR_RESTART_FULL,</span><br><span style="color: hsl(120, 100%, 40%);">+            "no periodic location update",</span><br><span style="color: hsl(120, 100%, 40%);">+              NO_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Periodic Location Updating Interval\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Periodic Location Updating Interval\n")</span><br><span> {</span><br><span>        struct gsm_network *net = vty->index;</span><br><span>     struct osmo_tdef *d = osmo_tdef_get_entry(net->T_defs, 3212);</span><br><span>@@ -5423,9 +5575,11 @@</span><br><span>    return osmo_tdef_vty_set_cmd(vty, net->T_defs, argv);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_allow_unusable_timeslots, cfg_net_allow_unusable_timeslots_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "allow-unusable-timeslots",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Don't refuse to start with mutually exclusive codec settings\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_allow_unusable_timeslots,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_net_allow_unusable_timeslots_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         BSC_VTY_ATTR_RESTART_FULL,</span><br><span style="color: hsl(120, 100%, 40%);">+            "allow-unusable-timeslots",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Don't refuse to start with mutually exclusive codec settings\n")</span><br><span> {</span><br><span>   struct gsm_network *net = gsmnet_from_vty(vty);</span><br><span>      net->allow_unusable_timeslots = true;</span><br><span>@@ -5817,10 +5971,11 @@</span><br><span>   addr->ssn = OSMO_SCCP_SSN_BSSAP;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_msc_cs7_bsc_addr,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_msc_cs7_bsc_addr_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "bsc-addr NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Calling Address (local address of this BSC)\n" "SCCP address name\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_msc_cs7_bsc_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_msc_cs7_bsc_addr_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_FULL,</span><br><span style="color: hsl(120, 100%, 40%);">+            "bsc-addr NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+            "Calling Address (local address of this BSC)\n" "SCCP address name\n")</span><br><span> {</span><br><span>        struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span>        const char *bsc_addr_name = argv[0];</span><br><span>@@ -5849,10 +6004,11 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_msc_cs7_msc_addr,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_msc_cs7_msc_addr_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "msc-addr NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Called Address (remote address of the MSC)\n" "SCCP address name\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_msc_cs7_msc_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_msc_cs7_msc_addr_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             BSC_VTY_ATTR_RESTART_FULL,</span><br><span style="color: hsl(120, 100%, 40%);">+            "msc-addr NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+            "Called Address (remote address of the MSC)\n" "SCCP address name\n")</span><br><span> {</span><br><span>         struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span>        const char *msc_addr_name = argv[0];</span><br><span>@@ -5881,13 +6037,14 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_msc_cs7_asp_proto,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_msc_cs7_asp_proto_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "asp-protocol (m3ua|sua|ipa)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "A interface protocol to use for this MSC)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MTP3 User Adaptation\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "SCCP User Adaptation\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "IPA Multiplex (SCCP Lite)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_msc_cs7_asp_proto,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_msc_cs7_asp_proto_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            BSC_VTY_ATTR_RESTART_FULL,</span><br><span style="color: hsl(120, 100%, 40%);">+            "asp-protocol (m3ua|sua|ipa)",</span><br><span style="color: hsl(120, 100%, 40%);">+              "A interface protocol to use for this MSC)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "MTP3 User Adaptation\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "SCCP User Adaptation\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "IPA Multiplex (SCCP Lite)\n")</span><br><span> {</span><br><span>  struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span> </span><br><span>@@ -5985,10 +6142,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_rf_socket,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_rf_socket_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "bsc-rf-socket PATH",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the filename for the RF control interface.\n" "RF Control path\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_rf_socket,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_net_rf_socket_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_VTY_ATTR_RESTART_FULL,</span><br><span style="color: hsl(120, 100%, 40%);">+            "bsc-rf-socket PATH",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set the filename for the RF control interface.\n" "RF Control path\n")</span><br><span> {</span><br><span>       osmo_talloc_replace_string(bsc_gsmnet, &bsc_gsmnet->rf_ctrl_name, argv[0]);</span><br><span>   return CMD_SUCCESS;</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_main.c b/src/osmo-bsc/osmo_bsc_main.c</span><br><span>index 84b44f7..dd0328c 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_main.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_main.c</span><br><span>@@ -641,6 +641,7 @@</span><br><span>       .version        = PACKAGE_VERSION,</span><br><span>   .go_parent_cb   = bsc_vty_go_parent,</span><br><span>         .is_config_node = bsc_vty_is_config_node,</span><br><span style="color: hsl(120, 100%, 40%);">+     .attr_desc      = bsc_vty_cmd_attr_desc,</span><br><span> };</span><br><span> </span><br><span> extern int bsc_shutdown_net(struct gsm_network *net);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/19670">change 19670</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-bsc/+/19670"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I3bf9223295fc4a2fcb4046a1f29f792ff6a41d51 </div>
<div style="display:none"> Gerrit-Change-Number: 19670 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>