<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/19670">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><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>Related: SYS#4937, OS#1601<br>---<br>M include/osmocom/bsc/vty.h<br>M src/osmo-bsc/abis_om2000_vty.c<br>M src/osmo-bsc/bsc_vty.c<br>M src/osmo-bsc/handover_vty.c<br>M src/osmo-bsc/osmo_bsc_main.c<br>5 files changed, 1,190 insertions(+), 912 deletions(-)<br><br></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 ba44f5e..a5a8452 100644</span><br><span>--- a/include/osmocom/bsc/vty.h</span><br><span>+++ b/include/osmocom/bsc/vty.h</span><br><span>@@ -35,4 +35,11 @@</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_ABIS_OML_LINK = 0,</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%);">+   BSC_VTY_ATTR_NEW_LCHAN,</span><br><span style="color: hsl(120, 100%, 40%);">+       /* NOTE: up to 32 entries */</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #endif</span><br><span>diff --git a/src/osmo-bsc/abis_om2000_vty.c b/src/osmo-bsc/abis_om2000_vty.c</span><br><span>index 26e8488..206fd6b 100644</span><br><span>--- a/src/osmo-bsc/abis_om2000_vty.c</span><br><span>+++ b/src/osmo-bsc/abis_om2000_vty.c</span><br><span>@@ -41,6 +41,8 @@</span><br><span> #include <osmocom/vty/logging.h></span><br><span> #include <osmocom/vty/telnet_interface.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define X(x) (1 << x)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static struct cmd_node om2k_node = {</span><br><span>        OM2K_NODE,</span><br><span>   "%s(om2k)# ",</span><br><span>@@ -343,10 +345,11 @@</span><br><span>      return -ENOENT;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_om2k_con_group, cfg_om2k_con_group_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "con-connection-group <1-31>",</span><br><span style="color: hsl(0, 100%, 40%);">-  "Configure a CON (Concentrator) Connection Group\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "CON Connection Group Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_om2k_con_group, cfg_om2k_con_group_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "con-connection-group <1-31>",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Configure a CON (Concentrator) Connection Group\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "CON Connection Group Number\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         struct con_group *cg;</span><br><span>@@ -371,10 +374,11 @@</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(del_om2k_con_group, del_om2k_con_group_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "del-connection-group <1-31>",</span><br><span style="color: hsl(0, 100%, 40%);">-  "Delete a CON (Concentrator) Connection Group\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "CON Connection Group Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(del_om2k_con_group, del_om2k_con_group_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "del-connection-group <1-31>",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Delete a CON (Concentrator) Connection Group\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "CON Connection Group Number\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         int rc;</span><br><span>@@ -402,9 +406,10 @@</span><br><span>                       "CON Connection Point\n"                              \</span><br><span>                    "Contiguity Index\n"                          \</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_om2k_con_path_dec, cfg_om2k_con_path_dec_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-    "con-path (add|del) <0-2047> <0-255> deconcentrated <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-        CON_PATH_HELP "De-concentrated in/outlet\n" "TEI Value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_om2k_con_path_dec, cfg_om2k_con_path_dec_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),</span><br><span style="color: hsl(120, 100%, 40%);">+        "con-path (add|del) <0-2047> <0-255> deconcentrated <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+              CON_PATH_HELP "De-concentrated in/outlet\n" "TEI Value\n")</span><br><span> {</span><br><span>    struct con_group *cg = vty->index;</span><br><span>        uint16_t ccp = atoi(argv[1]);</span><br><span>@@ -424,9 +429,10 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_om2k_con_path_conc, cfg_om2k_con_path_conc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "con-path (add|del) <0-2047> <0-255> concentrated <1-16>",</span><br><span style="color: hsl(0, 100%, 40%);">-  CON_PATH_HELP "Concentrated in/outlet\n" "Tag Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_om2k_con_path_conc, cfg_om2k_con_path_conc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),</span><br><span style="color: hsl(120, 100%, 40%);">+        "con-path (add|del) <0-2047> <0-255> concentrated <1-16>",</span><br><span style="color: hsl(120, 100%, 40%);">+        CON_PATH_HELP "Concentrated in/outlet\n" "Tag Number\n")</span><br><span> {</span><br><span>      struct con_group *cg = vty->index;</span><br><span>        uint16_t ccp = atoi(argv[1]);</span><br><span>@@ -446,11 +452,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_alt_mode, cfg_bts_alt_mode_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "abis-lower-transport (single-timeslot|super-channel)",</span><br><span style="color: hsl(0, 100%, 40%);">-       "Configure thee Abis Lower Transport\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Single Timeslot (classic Abis)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "SuperChannel (Packet Abis)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_alt_mode, cfg_bts_alt_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),</span><br><span style="color: hsl(120, 100%, 40%);">+        "abis-lower-transport (single-timeslot|super-channel)",</span><br><span style="color: hsl(120, 100%, 40%);">+             "Configure thee Abis Lower Transport\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Single Timeslot (classic Abis)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "SuperChannel (Packet Abis)\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -468,15 +475,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_om2k_version_limit, cfg_bts_om2k_version_limit_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "om2000 version-limit (oml|rsl) gen <0-99> rev <0-99>",</span><br><span style="color: hsl(0, 100%, 40%);">-   "Configure OM2K specific parameters\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Configure optional maximum protocol version to negotiate\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Limit OML IWD version\n" "Limit RSL IWD version\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Generation limit\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Generation number to limit to (inclusive)\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Revision limit\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Revision number to limit to (inclusive)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_om2k_version_limit, cfg_bts_om2k_version_limit_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),</span><br><span style="color: hsl(120, 100%, 40%);">+        "om2000 version-limit (oml|rsl) gen <0-99> rev <0-99>",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Configure OM2K specific parameters\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Configure optional maximum protocol version to negotiate\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Limit OML IWD version\n" "Limit RSL IWD version\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Generation limit\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Generation number to limit to (inclusive)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Revision limit\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Revision number to limit to (inclusive)\n")</span><br><span> {</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span>         int iwd;</span><br><span>@@ -502,11 +510,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_is_conn_list, cfg_bts_is_conn_list_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "is-connection-list (add|del) <0-2047> <0-2047> <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-   "Interface Switch Connection List\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Add to IS list\n" "Delete from IS list\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "ICP1\n" "ICP2\n" "Contiguity Index\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_is_conn_list, cfg_bts_is_conn_list_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),</span><br><span style="color: hsl(120, 100%, 40%);">+        "is-connection-list (add|del) <0-2047> <0-2047> <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Interface Switch Connection List\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Add to IS list\n" "Delete from IS list\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "ICP1\n" "ICP2\n" "Contiguity Index\n")</span><br><span> {</span><br><span>     struct gsm_bts *bts = vty->index;</span><br><span>         uint16_t icp1 = atoi(argv[1]);</span><br><span>diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c</span><br><span>index cd7d0e0..f4baefb 100644</span><br><span>--- a/src/osmo-bsc/bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/bsc_vty.c</span><br><span>@@ -82,6 +82,8 @@</span><br><span> </span><br><span> #include "../../bscconfig.h"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define X(x) (1 << x)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define BTS_NR_STR "BTS Number\n"</span><br><span> #define TRX_NR_STR "TRX Number\n"</span><br><span> #define TS_NR_STR "Timeslot Number\n"</span><br><span>@@ -2057,11 +2059,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%);">+             X(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>@@ -2070,13 +2073,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%);">+              X(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>@@ -2106,22 +2110,25 @@</span><br><span>            LOGP(DMSC, LOGL_ERROR, "msc %d: " FORMAT "\n", MSC->nr, ##args); \</span><br><span>    } while (0)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_nri_bitlen,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_nri_bitlen_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nri bitlen <1-15>",</span><br><span style="color: hsl(0, 100%, 40%);">-      NRI_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set number of bits that an NRI has, to extract from TMSI identities (always starting just after the TMSI's most significant octet).\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "bit count (default: " OSMO_STRINGIFY_VAL(NRI_BITLEN_DEFAULT) ")\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_nri_bitlen,</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg_net_nri_bitlen_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "nri bitlen <1-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+          NRI_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set number of bits that an NRI has, to extract from TMSI identities (always starting just after the TMSI's most significant octet).\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "bit count (default: " OSMO_STRINGIFY_VAL(NRI_BITLEN_DEFAULT) ")\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_network *gsmnet = gsmnet_from_vty(vty);</span><br><span>   gsmnet->nri_bitlen = 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_net_nri_null_add, cfg_net_nri_null_add_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nri null add <0-32767> [<0-32767>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      NRI_STR NULL_NRI_STR "Add NULL-NRI value (or range)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      NRI_FIRST_LAST_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_nri_null_add,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_net_nri_null_add_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "nri null add <0-32767> [<0-32767>]",</span><br><span style="color: hsl(120, 100%, 40%);">+           NRI_STR NULL_NRI_STR "Add NULL-NRI value (or range)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      NRI_FIRST_LAST_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  int rc;</span><br><span>      const char *message;</span><br><span>@@ -2135,10 +2142,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_nri_null_del, cfg_net_nri_null_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nri null del <0-32767> [<0-32767>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      NRI_STR NULL_NRI_STR "Remove NRI value or range from the NRI mapping for this MSC\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      NRI_FIRST_LAST_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_nri_null_del,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_net_nri_null_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "nri null del <0-32767> [<0-32767>]",</span><br><span style="color: hsl(120, 100%, 40%);">+           NRI_STR NULL_NRI_STR "Remove NRI value or range from the NRI mapping for this MSC\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        NRI_FIRST_LAST_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  int rc;</span><br><span>      const char *message;</span><br><span>@@ -2153,11 +2162,12 @@</span><br><span> }</span><br><span> </span><br><span> /* per-BTS configuration */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "bts <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Select a BTS to configure\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      BTS_NR_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts,</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg_bts_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "bts <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Select a BTS to configure\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       BTS_NR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_network *gsmnet = gsmnet_from_vty(vty);</span><br><span>   int bts_nr = atoi(argv[0]);</span><br><span>@@ -2188,10 +2198,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%);">+             X(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>@@ -2203,10 +2214,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%);">+             X(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>@@ -2222,11 +2234,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%);">+             X(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>@@ -2237,10 +2252,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%);">+          X(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>@@ -2249,9 +2266,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%);">+             X(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>@@ -2262,10 +2282,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%);">+          X(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>@@ -2274,10 +2296,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%);">+       X(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>@@ -2292,10 +2315,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%);">+              X(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>@@ -2327,11 +2351,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%);">+             X(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>@@ -2346,13 +2371,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%);">+          X(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>@@ -2377,12 +2403,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%);">+           X(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>@@ -2407,12 +2434,13 @@</span><br><span> </span><br><span> #define NOKIA_STR "Nokia *Site related commands\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_nokia_site_skip_reset,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_nokia_site_skip_reset_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nokia_site skip-reset (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-      NOKIA_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Skip the reset step during bootstrap process of this BTS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Do NOT skip the reset\n" "Skip the reset\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_nokia_site_skip_reset,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_nokia_site_skip_reset_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),</span><br><span style="color: hsl(120, 100%, 40%);">+        "nokia_site skip-reset (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+              NOKIA_STR</span><br><span style="color: hsl(120, 100%, 40%);">+             "Skip the reset step during bootstrap process of this BTS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Do NOT skip the reset\n" "Skip the reset\n")</span><br><span> {</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2426,12 +2454,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_nokia_site_no_loc_rel_cnf,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_nokia_site_no_loc_rel_cnf_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nokia_site no-local-rel-conf (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-      NOKIA_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Do not wait for RELease CONFirm message when releasing channel locally\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Wait for RELease CONFirm\n" "Do not wait for RELease CONFirm\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_nokia_site_no_loc_rel_cnf,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_bts_nokia_site_no_loc_rel_cnf_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "nokia_site no-local-rel-conf (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+       NOKIA_STR</span><br><span style="color: hsl(120, 100%, 40%);">+     "Do not wait for RELease CONFirm message when releasing channel locally\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Wait for RELease CONFirm\n" "Do not wait for RELease CONFirm\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2446,12 +2475,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_nokia_site_bts_reset_timer_cnf,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_nokia_site_bts_reset_timer_cnf_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nokia_site bts-reset-timer  <15-100>",</span><br><span style="color: hsl(0, 100%, 40%);">-      NOKIA_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "The amount of time (in sec.) between BTS_RESET is sent,\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "and the BTS is being bootstrapped.\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_nokia_site_bts_reset_timer_cnf,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_bts_nokia_site_bts_reset_timer_cnf_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "nokia_site bts-reset-timer  <15-100>",</span><br><span style="color: hsl(120, 100%, 40%);">+       NOKIA_STR</span><br><span style="color: hsl(120, 100%, 40%);">+     "The amount of time (in sec.) between BTS_RESET is sent,\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "and the BTS is being bootstrapped.\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2468,12 +2498,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%);">+        X(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>@@ -2499,6 +2530,8 @@</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(120, 100%, 40%);">+/* NOTE: This requires a full restart as bsc_network_configure() is executed</span><br><span style="color: hsl(120, 100%, 40%);">+ * only once on startup from osmo_bsc_main.c */</span><br><span> DEFUN(cfg_bts_oml_e1,</span><br><span>       cfg_bts_oml_e1_cmd,</span><br><span>       "oml e1 line E1_LINE timeslot <1-31> sub-slot (0|1|2|3|full)",</span><br><span>@@ -2522,13 +2555,13 @@</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</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%);">+       X(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>@@ -2537,11 +2570,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_challoc, cfg_bts_challoc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "channel allocator (ascending|descending)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Channel Allocator\n" "Channel Allocator\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Allocate Timeslots and Transceivers in ascending order\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Allocate Timeslots and Transceivers in descending order\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_challoc,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_bts_challoc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "channel allocator (ascending|descending)",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Channel Allocator\n" "Channel Allocator\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Allocate Timeslots and Transceivers in ascending order\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Allocate Timeslots and Transceivers in descending order\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2555,29 +2590,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%);">+          X(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%);">+           X(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>@@ -2586,13 +2623,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%);">+            X(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>@@ -2606,12 +2644,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%);">+            X(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>@@ -2626,12 +2665,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%);">+         X(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>@@ -2648,12 +2688,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%);">+             X(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>@@ -2662,38 +2703,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%);">+         X(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%);">+            X(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%);">+              X(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>@@ -2703,14 +2748,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%);">+          X(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>@@ -2722,27 +2769,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%);">+            X(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>@@ -2770,12 +2819,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_ms_max_power, cfg_bts_ms_max_power_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "ms max power <0-40>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "MS Options\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Maximum transmit power of the MS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Maximum transmit power of the MS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Maximum transmit power of the MS in dBm\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_ms_max_power,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_ms_max_power_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "ms max power <0-40>",</span><br><span style="color: hsl(120, 100%, 40%);">+        "MS Options\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Maximum transmit power of the MS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Maximum transmit power of the MS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Maximum transmit power of the MS in dBm\n")</span><br><span> {</span><br><span>    struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -2786,11 +2837,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%);">+          X(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>@@ -2799,12 +2852,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%);">+            X(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>@@ -2813,10 +2868,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%);">+         X(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>@@ -2826,12 +2883,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%);">+           X(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>@@ -2841,11 +2899,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%);">+         X(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>@@ -2855,11 +2915,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%);">+             X(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>@@ -2869,11 +2931,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%);">+             X(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>@@ -2883,13 +2947,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%);">+        X(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>@@ -2899,10 +2965,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%);">+       X(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>@@ -2911,10 +2979,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%);">+           X(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>@@ -2940,12 +3010,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%);">+        X(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>@@ -2957,11 +3029,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%);">+        X(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>@@ -2975,11 +3049,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%);">+       X(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>@@ -2991,13 +3067,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%);">+          X(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>@@ -3009,13 +3087,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%);">+          X(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>@@ -3028,13 +3108,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_rip, cfg_bts_gprs_nsvc_rip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "gprs nsvc <0-1> remote ip " VTY_IPV46_CMD,</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 IPv4 Address\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "GPRS NS Remote IPv6 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%);">+            X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),</span><br><span style="color: hsl(120, 100%, 40%);">+        "gprs nsvc <0-1> remote ip " VTY_IPV46_CMD,</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 IPv4 Address\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "GPRS NS Remote IPv6 Address\n")</span><br><span> {</span><br><span>        struct gsm_bts *bts = vty->index;</span><br><span>         struct osmo_sockaddr_str remote;</span><br><span>@@ -3063,11 +3145,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_pag_free, cfg_bts_pag_free_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "paging free <-1-1024>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Paging options\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Only page when having a certain amount of free slots\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "amount of required free paging slots. -1 to disable\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_pag_free, cfg_bts_pag_free_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "paging free <-1-1024>",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Paging options\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Only page when having a certain amount of free slots\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "amount of required free paging slots. -1 to disable\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3075,11 +3158,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%);">+            X(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>@@ -3109,11 +3194,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%);">+          X(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>@@ -3129,12 +3216,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%);">+         X(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>@@ -3145,10 +3234,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%);">+            X(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>@@ -3159,10 +3251,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%);">+         X(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>@@ -3173,13 +3268,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%);">+        X(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>@@ -3190,13 +3287,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%);">+        X(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>@@ -3240,10 +3339,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%);">+          X(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>@@ -3257,10 +3357,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%);">+       X(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>@@ -3298,12 +3399,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%);">+          X(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>@@ -3322,11 +3425,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%);">+        X(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>@@ -3359,11 +3464,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%);">+             X(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>@@ -3372,11 +3479,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%);">+          X(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>@@ -3391,11 +3500,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%);">+         X(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>@@ -3407,11 +3518,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%);">+              X(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>@@ -3423,11 +3536,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%);">+       X(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>@@ -3450,11 +3565,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%);">+            X(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>@@ -3481,17 +3598,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%);">+              X(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>@@ -3534,13 +3653,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%);">+              X(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>@@ -3555,12 +3676,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%);">+             X(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>@@ -3583,14 +3706,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%);">+             X(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>@@ -3603,12 +3728,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%);">+        X(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>@@ -3634,10 +3761,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_ATTR(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%);">+         "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 style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         int rc;</span><br><span>@@ -3654,11 +3783,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_acc_rotate,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_acc_rotate_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "access-control-class-rotate <0-10>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Enable Access Control Class allowed subset rotation\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Size of the rotating allowed ACC 0-9 subset (default=10, no subset)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_acc_rotate,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_bts_acc_rotate_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "access-control-class-rotate <0-10>",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Enable Access Control Class allowed subset rotation\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Size of the rotating allowed ACC 0-9 subset (default=10, no subset)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         int len_allowed_adm = atoi(argv[0]);</span><br><span>@@ -3666,11 +3796,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_acc_rotate_quantum,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_acc_rotate_quantum_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "access-control-class-rotate-quantum <1-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Time between rotation of ACC 0-9 generated subsets\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Time in seconds (default=" OSMO_STRINGIFY_VAL(ACC_MGR_QUANTUM_DEFAULT) ")\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_acc_rotate_quantum,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_acc_rotate_quantum_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "access-control-class-rotate-quantum <1-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Time between rotation of ACC 0-9 generated subsets\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Time in seconds (default=" OSMO_STRINGIFY_VAL(ACC_MGR_QUANTUM_DEFAULT) ")\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         uint32_t rotation_time_sec = (uint32_t)atoi(argv[0]);</span><br><span>@@ -3678,10 +3809,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_acc_ramping,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_acc_ramping_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "access-control-class-ramping",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Enable Access Control Class ramping\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_acc_ramping,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_bts_acc_ramping_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "access-control-class-ramping",</span><br><span style="color: hsl(120, 100%, 40%);">+     "Enable Access Control Class ramping\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         struct gsm_bts_trx *trx;</span><br><span>@@ -3704,10 +3836,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_acc_ramping, cfg_bts_no_acc_ramping_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no access-control-class-ramping",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Disable Access Control Class ramping\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_no_acc_ramping,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_bts_no_acc_ramping_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no access-control-class-ramping",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "Disable Access Control Class ramping\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span>@@ -3724,14 +3858,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_acc_ramping_step_interval,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_acc_ramping_step_interval_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "access-control-class-ramping-step-interval (<"</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_INTERVAL_MIN) "-"</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_INTERVAL_MAX) ">|dynamic)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure Access Control Class ramping step interval\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set a fixed step interval (in seconds)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use dynamic step interval based on BTS channel load (deprecated, don't use, ignored)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_acc_ramping_step_interval,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_acc_ramping_step_interval_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "access-control-class-ramping-step-interval (<"</span><br><span style="color: hsl(120, 100%, 40%);">+          OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_INTERVAL_MIN) "-"</span><br><span style="color: hsl(120, 100%, 40%);">+          OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_INTERVAL_MAX) ">|dynamic)",</span><br><span style="color: hsl(120, 100%, 40%);">+     "Configure Access Control Class ramping step interval\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Set a fixed step interval (in seconds)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Use dynamic step interval based on BTS channel load (deprecated, don't use, ignored)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         bool dynamic = (strcmp(argv[0], "dynamic") == 0);</span><br><span>@@ -3754,13 +3889,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_acc_ramping_step_size,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_acc_ramping_step_size_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "access-control-class-ramping-step-size (<"</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_SIZE_MIN) "-"</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_SIZE_MAX) ">)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure Access Control Class ramping step size\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the number of Access Control Classes to enable per ramping step\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_acc_ramping_step_size,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_bts_acc_ramping_step_size_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "access-control-class-ramping-step-size (<"</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_SIZE_MIN) "-"</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_SIZE_MAX) ">)",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Configure Access Control Class ramping step size\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set the number of Access Control Classes to enable per ramping step\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         int error;</span><br><span>@@ -3777,12 +3913,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_acc_ramping_chan_load,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_acc_ramping_chan_load_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "access-control-class-ramping-chan-load <0-100> <0-100>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure Access Control Class ramping channel load thresholds\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Lower Channel load threshold (%) below which subset size of allowed broadcast ACCs can be increased\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Upper channel load threshold (%) above which subset size of allowed broadcast ACCs can be decreased\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_acc_ramping_chan_load,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_acc_ramping_chan_load_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "access-control-class-ramping-chan-load <0-100> <0-100>",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Configure Access Control Class ramping channel load thresholds\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Lower Channel load threshold (%) below which subset size of allowed broadcast ACCs can be increased\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Upper channel load threshold (%) above which subset size of allowed broadcast ACCs can be decreased\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         int rc;</span><br><span>@@ -3798,20 +3935,22 @@</span><br><span> </span><br><span> #define EXCL_RFLOCK_STR "Exclude this BTS from the global RF Lock\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_excl_rf_lock,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_excl_rf_lock_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rf-lock-exclude",</span><br><span style="color: hsl(0, 100%, 40%);">-      EXCL_RFLOCK_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_excl_rf_lock,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_excl_rf_lock_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "rf-lock-exclude",</span><br><span style="color: hsl(120, 100%, 40%);">+          EXCL_RFLOCK_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         bts->excl_from_rf_lock = 1;</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_excl_rf_lock,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_bts_no_excl_rf_lock_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rf-lock-exclude",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR EXCL_RFLOCK_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_no_excl_rf_lock,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_bts_no_excl_rf_lock_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "no rf-lock-exclude",</span><br><span style="color: hsl(120, 100%, 40%);">+       NO_STR EXCL_RFLOCK_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>         bts->excl_from_rf_lock = 0;</span><br><span>@@ -3820,10 +3959,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%);">+            X(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>@@ -3831,10 +3971,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%);">+         X(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>@@ -3865,54 +4006,64 @@</span><br><span> #define CODEC_HELP_STR      "Half Rate\n" \</span><br><span>                    "Enhanced Full Rate\nAdaptive Multirate\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_codec0, cfg_bts_codec0_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "codec-support fr",</span><br><span style="color: hsl(0, 100%, 40%);">-   "Codec Support settings\nFullrate\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_codec0,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_codec0_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "codec-support fr",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Codec Support settings\nFullrate\n")</span><br><span> {</span><br><span>   _get_codec_from_arg(vty, 0, argv);</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_codec1, cfg_bts_codec1_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "codec-support fr" CODEC_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-     "Codec Support settings\nFullrate\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  CODEC_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_codec1,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_codec1_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "codec-support fr" CODEC_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+           "Codec Support settings\nFullrate\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        CODEC_HELP_STR)</span><br><span> {</span><br><span>   _get_codec_from_arg(vty, 1, argv);</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_codec2, cfg_bts_codec2_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "codec-support fr" CODEC_PAR_STR CODEC_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-       "Codec Support settings\nFullrate\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  CODEC_HELP_STR CODEC_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_codec2,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_codec2_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "codec-support fr" CODEC_PAR_STR CODEC_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+             "Codec Support settings\nFullrate\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        CODEC_HELP_STR CODEC_HELP_STR)</span><br><span> {</span><br><span>    _get_codec_from_arg(vty, 2, argv);</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_codec3, cfg_bts_codec3_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "codec-support fr" CODEC_PAR_STR CODEC_PAR_STR CODEC_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">- "Codec Support settings\nFullrate\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  CODEC_HELP_STR CODEC_HELP_STR CODEC_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_codec3,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_codec3_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "codec-support fr" CODEC_PAR_STR CODEC_PAR_STR CODEC_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+       "Codec Support settings\nFullrate\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        CODEC_HELP_STR CODEC_HELP_STR CODEC_HELP_STR)</span><br><span> {</span><br><span>     _get_codec_from_arg(vty, 3, argv);</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_codec4, cfg_bts_codec4_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "codec-support fr" CODEC_PAR_STR CODEC_PAR_STR CODEC_PAR_STR CODEC_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-   "Codec Support settings\nFullrate\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  CODEC_HELP_STR CODEC_HELP_STR CODEC_HELP_STR CODEC_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_codec4,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_bts_codec4_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "codec-support fr" CODEC_PAR_STR CODEC_PAR_STR CODEC_PAR_STR CODEC_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+         "Codec Support settings\nFullrate\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        CODEC_HELP_STR CODEC_HELP_STR CODEC_HELP_STR CODEC_HELP_STR)</span><br><span> {</span><br><span>      _get_codec_from_arg(vty, 4, argv);</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_depends_on, cfg_bts_depends_on_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "depends-on-bts <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-       "This BTS can only be started if another one is up\n"</span><br><span style="color: hsl(0, 100%, 40%);">- BTS_NR_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_depends_on, cfg_bts_depends_on_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "depends-on-bts <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+     "This BTS can only be started if another one is up\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       BTS_NR_STR, CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span>         struct gsm_bts *other_bts;</span><br><span>@@ -3942,10 +4093,10 @@</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_depends_on, cfg_bts_no_depends_on_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "no depends-on-bts <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-    NO_STR "This BTS can only be started if another one is up\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  BTS_NR_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_no_depends_on, cfg_bts_no_depends_on_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "no depends-on-bts <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR "This BTS can only be started if another one is up\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        BTS_NR_STR, CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span>         int dep = atoi(argv[0]);</span><br><span>@@ -4118,215 +4269,260 @@</span><br><span> #define AMR_TH_HELP_STR "Threshold between codec 1 and 2\n"</span><br><span> #define        AMR_HY_HELP_STR "Hysteresis between codec 1 and 2\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_modes1, cfg_bts_amr_fr_modes1_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "amr tch-f modes" AMR_TCHF_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-   AMR_TEXT "Full Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TCHF_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_modes1,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_bts_amr_fr_modes1_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f modes" AMR_TCHF_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+         AMR_TEXT "Full Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TCHF_HELP_STR)</span><br><span> {</span><br><span>        if (get_amr_from_arg(vty, 1, argv, 1))</span><br><span>               return CMD_WARNING;</span><br><span>  return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_modes2, cfg_bts_amr_fr_modes2_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-f modes" AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TEXT "Full Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_modes2,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_amr_fr_modes2_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f modes" AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TEXT "Full Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)</span><br><span> {</span><br><span>      if (get_amr_from_arg(vty, 2, argv, 1))</span><br><span>               return CMD_WARNING;</span><br><span>  return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_modes3, cfg_bts_amr_fr_modes3_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-f modes" AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">- AMR_TEXT "Full Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_modes3,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_amr_fr_modes3_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f modes" AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+       AMR_TEXT "Full Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)</span><br><span> {</span><br><span>    if (get_amr_from_arg(vty, 3, argv, 1))</span><br><span>               return CMD_WARNING;</span><br><span>  return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_modes4, cfg_bts_amr_fr_modes4_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-f modes" AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-        AMR_TEXT "Full Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_modes4,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_amr_fr_modes4_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f modes" AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR AMR_TCHF_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+              AMR_TEXT "Full Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)</span><br><span> {</span><br><span>  if (get_amr_from_arg(vty, 4, argv, 1))</span><br><span>               return CMD_WARNING;</span><br><span>  return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_start_mode, cfg_bts_amr_fr_start_mode_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-f start-mode (auto|1|2|3|4)",</span><br><span style="color: hsl(0, 100%, 40%);">-        AMR_TEXT "Full Rate\n" AMR_START_TEXT)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_start_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_amr_fr_start_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f start-mode (auto|1|2|3|4)",</span><br><span style="color: hsl(120, 100%, 40%);">+              AMR_TEXT "Full Rate\n" AMR_START_TEXT)</span><br><span> {</span><br><span>  get_amr_start_from_arg(vty, argv, 1);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_thres1, cfg_bts_amr_fr_thres1_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-f threshold (ms|bts) <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TEXT "Full Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_TH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_thres1,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_amr_fr_thres1_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f threshold (ms|bts) <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TEXT "Full Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_TH_HELP_STR)</span><br><span> {</span><br><span>  get_amr_th_from_arg(vty, 2, argv, 1);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_thres2, cfg_bts_amr_fr_thres2_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-f threshold (ms|bts) <0-63> <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-     AMR_TEXT "Full Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_thres2,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_amr_fr_thres2_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f threshold (ms|bts) <0-63> <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+           AMR_TEXT "Full Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span> {</span><br><span>  get_amr_th_from_arg(vty, 3, argv, 1);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_thres3, cfg_bts_amr_fr_thres3_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-f threshold (ms|bts) <0-63> <0-63> <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-        AMR_TEXT "Full Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_TH_HELP_STR AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_thres3,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_amr_fr_thres3_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f threshold (ms|bts) <0-63> <0-63> <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+              AMR_TEXT "Full Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_TH_HELP_STR AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span> {</span><br><span>  get_amr_th_from_arg(vty, 4, argv, 1);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_hyst1, cfg_bts_amr_fr_hyst1_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "amr tch-f hysteresis (ms|bts) <0-15>",</span><br><span style="color: hsl(0, 100%, 40%);">- AMR_TEXT "Full Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_HY_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_hyst1,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_amr_fr_hyst1_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f hysteresis (ms|bts) <0-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+       AMR_TEXT "Full Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_HY_HELP_STR)</span><br><span> {</span><br><span>  get_amr_hy_from_arg(vty, 2, argv, 1);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_hyst2, cfg_bts_amr_fr_hyst2_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "amr tch-f hysteresis (ms|bts) <0-15> <0-15>",</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_TEXT "Full Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_hyst2,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_amr_fr_hyst2_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f hysteresis (ms|bts) <0-15> <0-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_TEXT "Full Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span> {</span><br><span>  get_amr_hy_from_arg(vty, 3, argv, 1);</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_fr_hyst3, cfg_bts_amr_fr_hyst3_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "amr tch-f hysteresis (ms|bts) <0-15> <0-15> <0-15>",</span><br><span style="color: hsl(0, 100%, 40%);">-       AMR_TEXT "Full Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_HY_HELP_STR AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_fr_hyst3,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_amr_fr_hyst3_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-f hysteresis (ms|bts) <0-15> <0-15> <0-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+             AMR_TEXT "Full Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_HY_HELP_STR AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span> {</span><br><span>  get_amr_hy_from_arg(vty, 4, argv, 1);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_modes1, cfg_bts_amr_hr_modes1_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-h modes" AMR_TCHH_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-   AMR_TEXT "Half Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TCHH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_modes1,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_bts_amr_hr_modes1_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h modes" AMR_TCHH_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+         AMR_TEXT "Half Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TCHH_HELP_STR)</span><br><span> {</span><br><span>        if (get_amr_from_arg(vty, 1, argv, 0))</span><br><span>               return CMD_WARNING;</span><br><span>  return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_modes2, cfg_bts_amr_hr_modes2_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-h modes" AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TEXT "Half Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_modes2,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_amr_hr_modes2_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h modes" AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TEXT "Half Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)</span><br><span> {</span><br><span>      if (get_amr_from_arg(vty, 2, argv, 0))</span><br><span>               return CMD_WARNING;</span><br><span>  return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_modes3, cfg_bts_amr_hr_modes3_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-h modes" AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">- AMR_TEXT "Half Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_modes3,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_bts_amr_hr_modes3_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h modes" AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+       AMR_TEXT "Half Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)</span><br><span> {</span><br><span>    if (get_amr_from_arg(vty, 3, argv, 0))</span><br><span>               return CMD_WARNING;</span><br><span>  return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_modes4, cfg_bts_amr_hr_modes4_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-h modes" AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-        AMR_TEXT "Half Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_modes4,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_amr_hr_modes4_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h modes" AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR AMR_TCHH_PAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+              AMR_TEXT "Half Rate\n" AMR_MODE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)</span><br><span> {</span><br><span>  if (get_amr_from_arg(vty, 4, argv, 0))</span><br><span>               return CMD_WARNING;</span><br><span>  return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_start_mode, cfg_bts_amr_hr_start_mode_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-h start-mode (auto|1|2|3|4)",</span><br><span style="color: hsl(0, 100%, 40%);">-        AMR_TEXT "Half Rate\n" AMR_START_TEXT)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_start_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_bts_amr_hr_start_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h start-mode (auto|1|2|3|4)",</span><br><span style="color: hsl(120, 100%, 40%);">+              AMR_TEXT "Half Rate\n" AMR_START_TEXT)</span><br><span> {</span><br><span>  get_amr_start_from_arg(vty, argv, 0);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_thres1, cfg_bts_amr_hr_thres1_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-h threshold (ms|bts) <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-  AMR_TEXT "Half Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_TH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_thres1,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_amr_hr_thres1_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h threshold (ms|bts) <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+        AMR_TEXT "Half Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_TH_HELP_STR)</span><br><span> {</span><br><span>  get_amr_th_from_arg(vty, 2, argv, 0);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_thres2, cfg_bts_amr_hr_thres2_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-h threshold (ms|bts) <0-63> <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-     AMR_TEXT "Half Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_thres2,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_amr_hr_thres2_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h threshold (ms|bts) <0-63> <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+           AMR_TEXT "Half Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span> {</span><br><span>  get_amr_th_from_arg(vty, 3, argv, 0);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_thres3, cfg_bts_amr_hr_thres3_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "amr tch-h threshold (ms|bts) <0-63> <0-63> <0-63>",</span><br><span style="color: hsl(0, 100%, 40%);">-        AMR_TEXT "Half Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_TH_HELP_STR AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_thres3,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_bts_amr_hr_thres3_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h threshold (ms|bts) <0-63> <0-63> <0-63>",</span><br><span style="color: hsl(120, 100%, 40%);">+              AMR_TEXT "Half Rate\n" AMR_TH_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_TH_HELP_STR AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span> {</span><br><span>  get_amr_th_from_arg(vty, 4, argv, 0);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_hyst1, cfg_bts_amr_hr_hyst1_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "amr tch-h hysteresis (ms|bts) <0-15>",</span><br><span style="color: hsl(0, 100%, 40%);">- AMR_TEXT "Half Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_HY_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_hyst1,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_amr_hr_hyst1_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h hysteresis (ms|bts) <0-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+       AMR_TEXT "Half Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_HY_HELP_STR)</span><br><span> {</span><br><span>  get_amr_hy_from_arg(vty, 2, argv, 0);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_hyst2, cfg_bts_amr_hr_hyst2_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "amr tch-h hysteresis (ms|bts) <0-15> <0-15>",</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_TEXT "Half Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_hyst2,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_amr_hr_hyst2_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h hysteresis (ms|bts) <0-15> <0-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_TEXT "Half Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span> {</span><br><span>  get_amr_hy_from_arg(vty, 3, argv, 0);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_amr_hr_hyst3, cfg_bts_amr_hr_hyst3_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "amr tch-h hysteresis (ms|bts) <0-15> <0-15> <0-15>",</span><br><span style="color: hsl(0, 100%, 40%);">-       AMR_TEXT "Half Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-    AMR_HY_HELP_STR AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_bts_amr_hr_hyst3,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_bts_amr_hr_hyst3_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr tch-h hysteresis (ms|bts) <0-15> <0-15> <0-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+             AMR_TEXT "Half Rate\n" AMR_HY_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+          AMR_HY_HELP_STR AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span> {</span><br><span>  get_amr_hy_from_arg(vty, 4, argv, 0);</span><br><span>        return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> #define TNUM_STR "T-number, optionally preceded by 't' or 'T'\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_bts_t3113_dynamic, cfg_bts_t3113_dynamic_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "timer-dynamic TNNNN",</span><br><span style="color: hsl(0, 100%, 40%);">-        "Calculate T3113 dynamically based on channel config and load\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      TNUM_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_t3113_dynamic, cfg_bts_t3113_dynamic_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "timer-dynamic TNNNN",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Calculate T3113 dynamically based on channel config and load\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    TNUM_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_tdef *d;</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span>@@ -4348,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_bts_no_t3113_dynamic, cfg_bts_no_t3113_dynamic_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "no timer-dynamic TNNNN",</span><br><span style="color: hsl(0, 100%, 40%);">-     NO_STR</span><br><span style="color: hsl(0, 100%, 40%);">-  "Set given timer to non-dynamic and use the default or user provided fixed value\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   TNUM_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_bts_no_t3113_dynamic, cfg_bts_no_t3113_dynamic_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "no timer-dynamic TNNNN",</span><br><span style="color: hsl(120, 100%, 40%);">+           NO_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set given timer to non-dynamic and use the default or user provided fixed value\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         TNUM_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_tdef *d;</span><br><span>         struct gsm_bts *bts = vty->index;</span><br><span>@@ -4377,11 +4574,12 @@</span><br><span> #define TRX_TEXT "Radio Transceiver\n"</span><br><span> </span><br><span> /* per TRX configuration */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trx,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trx_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "trx <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-      TRX_TEXT</span><br><span style="color: hsl(0, 100%, 40%);">-      "Select a TRX to configure\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_trx,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_trx_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "trx <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+        TRX_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+      "Select a TRX to configure\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  int trx_nr = atoi(argv[0]);</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span>@@ -4407,11 +4605,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%);">+            X(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>@@ -4433,12 +4632,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trx_nominal_power,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trx_nominal_power_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nominal power <-20-100>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Nominal TRX RF Power in dBm\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Nominal TRX RF Power in dBm\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Nominal TRX RF Power in dBm\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trx_nominal_power,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_trx_nominal_power_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),</span><br><span style="color: hsl(120, 100%, 40%);">+        "nominal power <-20-100>",</span><br><span style="color: hsl(120, 100%, 40%);">+            "Nominal TRX RF Power in dBm\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Nominal TRX RF Power in dBm\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Nominal TRX RF Power in dBm\n")</span><br><span> {</span><br><span>        struct gsm_bts_trx *trx = vty->index;</span><br><span> </span><br><span>@@ -4447,11 +4647,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%);">+            X(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>@@ -4476,6 +4677,8 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* NOTE: This requires a full restart as bsc_network_configure() is executed</span><br><span style="color: hsl(120, 100%, 40%);">+ * only once on startup from osmo_bsc_main.c */</span><br><span> DEFUN(cfg_trx_rsl_e1,</span><br><span>       cfg_trx_rsl_e1_cmd,</span><br><span>       "rsl e1 line E1_LINE timeslot <1-31> sub-slot (0|1|2|3|full)",</span><br><span>@@ -4499,13 +4702,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%);">+       X(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>@@ -4514,12 +4718,13 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trx_rf_locked,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trx_rf_locked_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rf_locked (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set or unset the RF Locking (Turn off RF of the TRX)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "TRX is NOT RF locked (active)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "TRX is RF locked (turned off)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_trx_rf_locked,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_trx_rf_locked_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "rf_locked (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set or unset the RF Locking (Turn off RF of the TRX)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "TRX is NOT RF locked (active)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "TRX is RF locked (turned off)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  int locked = atoi(argv[0]);</span><br><span>  struct gsm_bts_trx *trx = vty->index;</span><br><span>@@ -4529,11 +4734,12 @@</span><br><span> }</span><br><span> </span><br><span> /* per TS configuration */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ts,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "timeslot <0-7>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Select a Timeslot to configure\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timeslot number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_ts,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_ts_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "timeslot <0-7>",</span><br><span style="color: hsl(120, 100%, 40%);">+     "Select a Timeslot to configure\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Timeslot number\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  int ts_nr = atoi(argv[0]);</span><br><span>   struct gsm_bts_trx *trx = vty->index;</span><br><span>@@ -4553,10 +4759,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%);">+             X(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>@@ -4591,12 +4798,11 @@</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</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%);">+       X(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>@@ -4614,11 +4820,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%);">+           X(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>@@ -4635,12 +4842,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%);">+       X(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>@@ -4649,12 +4857,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%);">+              X(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>@@ -4663,11 +4872,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%);">+         X(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>@@ -4683,11 +4893,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%);">+         X(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>@@ -4703,11 +4914,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_all,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_ts_arfcn_del_all_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "hopping arfcn del-all",</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 all previously configured entries\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_ts_arfcn_del_all,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_ts_arfcn_del_all_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),</span><br><span style="color: hsl(120, 100%, 40%);">+        "hopping arfcn del-all",</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 all previously configured entries\n")</span><br><span> {</span><br><span>   struct gsm_bts_trx_ts *ts = vty->index;</span><br><span> </span><br><span>@@ -4716,20 +4928,24 @@</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%);">+/* NOTE: This will have an effect on newly created voice lchans since the E1</span><br><span style="color: hsl(120, 100%, 40%);">+ * voice channels are handled by osmo-mgw and the information put in e1_link</span><br><span style="color: hsl(120, 100%, 40%);">+ * here is only used to generate the MGCP messages for the mgw. */</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(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%);">+        "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 style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_bts_trx_ts *ts = vty->index;</span><br><span> </span><br><span>@@ -5407,9 +5623,10 @@</span><br><span> #define NAME_CMD_STR "Name Commands\n"</span><br><span> #define NAME_STR "Name to use\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "network", NETWORK_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_net_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "network", NETWORK_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  vty->index = gsmnet_from_vty(vty);</span><br><span>        vty->node = GSMNET_NODE;</span><br><span>@@ -5417,13 +5634,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%);">+              X(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>@@ -5438,13 +5656,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%);">+              X(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>@@ -5461,15 +5680,16 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_encryption,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_encryption_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "encryption a5 <0-3> [<0-3>] [<0-3>] [<0-3>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Encryption options\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "GSM A5 Air Interface Encryption\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "A5/n Algorithm Number\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "A5/n Algorithm Number\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "A5/n Algorithm Number\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "A5/n Algorithm Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_encryption,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_net_encryption_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "encryption a5 <0-3> [<0-3>] [<0-3>] [<0-3>]",</span><br><span style="color: hsl(120, 100%, 40%);">+              "Encryption options\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "GSM A5 Air Interface Encryption\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "A5/n Algorithm Number\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "A5/n Algorithm Number\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "A5/n Algorithm Number\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "A5/n Algorithm Number\n")</span><br><span> {</span><br><span>      struct gsm_network *gsmnet = gsmnet_from_vty(vty);</span><br><span>   unsigned int i;</span><br><span>@@ -5495,16 +5715,16 @@</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_timezone,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_timezone_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "timezone <-19-19> (0|15|30|45)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the Timezone Offset of the network\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (hours)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (00 minutes)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (15 minutes)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (30 minutes)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (45 minutes)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      )</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_timezone,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_net_timezone_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "timezone <-19-19> (0|15|30|45)",</span><br><span style="color: hsl(120, 100%, 40%);">+     "Set the Timezone Offset of the network\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Timezone offset (hours)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Timezone offset (00 minutes)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Timezone offset (15 minutes)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Timezone offset (30 minutes)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Timezone offset (45 minutes)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_network *net = vty->index;</span><br><span>     int tzhr = atoi(argv[0]);</span><br><span>@@ -5518,17 +5738,17 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_timezone_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_timezone_dst_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "timezone <-19-19> (0|15|30|45) <0-2>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the Timezone Offset of the network\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (hours)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (00 minutes)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (15 minutes)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (30 minutes)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Timezone offset (45 minutes)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "DST offset (hours)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      )</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_timezone_dst,</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg_net_timezone_dst_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "timezone <-19-19> (0|15|30|45) <0-2>",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Set the Timezone Offset of the network\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Timezone offset (hours)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Timezone offset (00 minutes)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Timezone offset (15 minutes)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Timezone offset (30 minutes)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Timezone offset (45 minutes)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "DST offset (hours)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_network *net = vty->index;</span><br><span>     int tzhr = atoi(argv[0]);</span><br><span>@@ -5543,11 +5763,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_no_timezone,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_no_timezone_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no timezone",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Disable network timezone override, use system tz\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_no_timezone,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_net_no_timezone_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "no timezone",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "Disable network timezone override, use system tz\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gsm_network *net = vty->index;</span><br><span> </span><br><span>@@ -5556,6 +5777,7 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* FIXME: changing this value would not affect generated System Information */</span><br><span> DEFUN(cfg_net_per_loc_upd, cfg_net_per_loc_upd_cmd,</span><br><span>       "periodic location update <6-1530>",</span><br><span>       "Periodic Location Updating Interval\n"</span><br><span>@@ -5572,6 +5794,7 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* FIXME: changing this value would not affect generated System Information */</span><br><span> DEFUN(cfg_net_no_per_loc_upd, cfg_net_no_per_loc_upd_cmd,</span><br><span>       "no periodic location update",</span><br><span>       NO_STR</span><br><span>@@ -5590,9 +5813,10 @@</span><br><span> </span><br><span> #define MEAS_FEED_STR "Measurement Report export\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_meas_feed_dest, cfg_net_meas_feed_dest_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-  "meas-feed destination ADDR <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">- MEAS_FEED_STR "Where to forward Measurement Report feeds\n" "address or hostname\n" "port number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_meas_feed_dest, cfg_net_meas_feed_dest_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "meas-feed destination ADDR <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+       MEAS_FEED_STR "Where to forward Measurement Report feeds\n" "address or hostname\n" "port number\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  int rc;</span><br><span>      const char *host = argv[0];</span><br><span>@@ -5605,9 +5829,10 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_meas_feed_scenario, cfg_net_meas_feed_scenario_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "meas-feed scenario NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-    MEAS_FEED_STR "Set a name to include in the Measurement Report feeds\n" "Name string, up to 31 characters\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_meas_feed_scenario, cfg_net_meas_feed_scenario_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "meas-feed scenario NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+          MEAS_FEED_STR "Set a name to include in the Measurement Report feeds\n" "Name string, up to 31 characters\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  meas_feed_scenario_set(argv[0]);</span><br><span> </span><br><span>@@ -5689,8 +5914,10 @@</span><br><span> </span><br><span> #define MSC_NR_RANGE "<0-1000>"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_msc, cfg_net_msc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "msc [" MSC_NR_RANGE "]", "Configure MSC details\n" "MSC connection to configure\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_msc,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_net_msc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "msc [" MSC_NR_RANGE "]", "Configure MSC details\n" "MSC connection to configure\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  int index = argc == 1 ? atoi(argv[0]) : 0;</span><br><span>   struct bsc_msc_data *msc;</span><br><span>@@ -5706,8 +5933,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_bsc, cfg_net_bsc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "bsc", "Configure BSC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_bsc,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_net_bsc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "bsc", "Configure BSC\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  vty->node = BSC_NODE;</span><br><span>     return CMD_SUCCESS;</span><br><span>@@ -5841,10 +6070,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_bsc_ncc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_bsc_ncc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "core-mobile-network-code <1-999>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use this network code for the core network\n" "MNC value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_bsc_ncc,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_net_bsc_ncc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "core-mobile-network-code <1-999>",</span><br><span style="color: hsl(120, 100%, 40%);">+           "Use this network code for the core network\n" "MNC value\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span>       uint16_t mnc;</span><br><span>@@ -5859,10 +6089,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_bsc_mcc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_bsc_mcc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "core-mobile-country-code <1-999>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use this country code for the core network\n" "MCC value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_bsc_mcc,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_net_bsc_mcc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "core-mobile-country-code <1-999>",</span><br><span style="color: hsl(120, 100%, 40%);">+           "Use this country code for the core network\n" "MCC value\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  uint16_t mcc;</span><br><span>        struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span>@@ -5874,20 +6105,22 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_bsc_lac,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_bsc_lac_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "core-location-area-code <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use this location area code for the core network\n" "LAC value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_bsc_lac,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_net_bsc_lac_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "core-location-area-code <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Use this location area code for the core network\n" "LAC value\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span>       data->core_lac = 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_net_bsc_ci,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_bsc_ci_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "core-cell-identity <0-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use this cell identity for the core network\n" "CI value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_bsc_ci,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_net_bsc_ci_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "core-cell-identity <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Use this cell identity for the core network\n" "CI value\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span>       data->core_ci = atoi(argv[0]);</span><br><span>@@ -5903,11 +6136,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_bsc_codec_list,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_bsc_codec_list_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "codec-list .LIST",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set the allowed audio codecs\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "List of audio codecs, e.g. fr3 fr1 hr3\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_bsc_codec_list,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_net_bsc_codec_list_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           BSC_VTY_ATTR_NEW_LCHAN,</span><br><span style="color: hsl(120, 100%, 40%);">+       "codec-list .LIST",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Set the allowed audio codecs\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "List of audio codecs, e.g. fr3 fr1 hr3\n")</span><br><span> {</span><br><span>     struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span>       int i;</span><br><span>@@ -6005,11 +6239,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_msc_emerg,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_msc_emerg_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "allow-emergency (allow|deny)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Allow CM ServiceRequests with type emergency\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Allow\n" "Deny\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_msc_emerg,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_net_msc_emerg_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "allow-emergency (allow|deny)",</span><br><span style="color: hsl(120, 100%, 40%);">+     "Allow CM ServiceRequests with type emergency\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Allow\n" "Deny\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span>       data->allow_emerg = strcmp("allow", argv[0]) == 0;</span><br><span>@@ -6018,8 +6253,8 @@</span><br><span> </span><br><span> #define AMR_CONF_STR "AMR Multirate Configuration\n"</span><br><span> #define AMR_COMMAND(name) \</span><br><span style="color: hsl(0, 100%, 40%);">-    DEFUN(cfg_net_msc_amr_##name,                                   \</span><br><span style="color: hsl(0, 100%, 40%);">-         cfg_net_msc_amr_##name##_cmd,                                 \</span><br><span style="color: hsl(120, 100%, 40%);">+     DEFUN_USRATTR(cfg_net_msc_amr_##name,                           \</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_net_msc_amr_##name##_cmd,BSC_VTY_ATTR_NEW_LCHAN,          \</span><br><span>      "amr-config " #name "k (allowed|forbidden)",                      \</span><br><span>      AMR_CONF_STR "Bitrate\n" "Allowed\n" "Forbidden\n")             \</span><br><span> {                                                                  \</span><br><span>@@ -6131,25 +6366,27 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_msc_lcls_mode,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_msc_lcls_mode_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "lcls-mode (disabled|mgw-loop|bts-loop)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure 3GPP LCLS (Local Call, Local Switch)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Disable LCLS for all calls of this MSC\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Enable LCLS with looping traffic in MGW\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Enable LCLS with looping traffic between BTS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_msc_lcls_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_net_msc_lcls_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "lcls-mode (disabled|mgw-loop|bts-loop)",</span><br><span style="color: hsl(120, 100%, 40%);">+           "Configure 3GPP LCLS (Local Call, Local Switch)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Disable LCLS for all calls of this MSC\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Enable LCLS with looping traffic in MGW\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Enable LCLS with looping traffic between BTS\n")</span><br><span> {</span><br><span>       struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span>       data->lcls_mode = get_string_value(bsc_lcls_mode_names, 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_net_msc_lcls_mismtch,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_msc_lcls_mismtch_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "lcls-codec-mismatch (allowed|forbidden)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Allow 3GPP LCLS (Local Call, Local Switch) when call legs use different codec/rate\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Allow LCLS only only for calls that use the same codec/rate on both legs\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Do not Allow LCLS for calls that use a different codec/rate on both legs\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_msc_lcls_mismtch,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_net_msc_lcls_mismtch_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "lcls-codec-mismatch (allowed|forbidden)",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Allow 3GPP LCLS (Local Call, Local Switch) when call legs use different codec/rate\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Allow LCLS only only for calls that use the same codec/rate on both legs\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Do not Allow LCLS for calls that use a different codec/rate on both legs\n")</span><br><span> {</span><br><span>   struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span> </span><br><span>@@ -6161,15 +6398,16 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_msc_mgw_x_osmo_ign,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_msc_mgw_x_osmo_ign_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "mgw x-osmo-ign call-id",</span><br><span style="color: hsl(0, 100%, 40%);">-      MGCP_CLIENT_MGW_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set a (non-standard) X-Osmo-IGN header in all CRCX messages for RTP streams"</span><br><span style="color: hsl(0, 100%, 40%);">-      " associated with this MSC, useful for A/SCCPlite MSCs, since osmo-bsc cannot know"</span><br><span style="color: hsl(0, 100%, 40%);">-      " the MSC's chosen CallID. This is enabled by default for A/SCCPlite connections,"</span><br><span style="color: hsl(0, 100%, 40%);">-      " disabled by default for all others.\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Send 'X-Osmo-IGN: C' to ignore CallID mismatches. See OsmoMGW.\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_msc_mgw_x_osmo_ign,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_msc_mgw_x_osmo_ign_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "mgw x-osmo-ign call-id",</span><br><span style="color: hsl(120, 100%, 40%);">+           MGCP_CLIENT_MGW_STR</span><br><span style="color: hsl(120, 100%, 40%);">+           "Set a (non-standard) X-Osmo-IGN header in all CRCX messages for RTP streams"</span><br><span style="color: hsl(120, 100%, 40%);">+       " associated with this MSC, useful for A/SCCPlite MSCs, since osmo-bsc cannot know"</span><br><span style="color: hsl(120, 100%, 40%);">+         " the MSC's chosen CallID. This is enabled by default for A/SCCPlite connections,"</span><br><span style="color: hsl(120, 100%, 40%);">+              " disabled by default for all others.\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Send 'X-Osmo-IGN: C' to ignore CallID mismatches. See OsmoMGW.\n")</span><br><span> {</span><br><span>     struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span>        msc->x_osmo_ign |= MGCP_X_OSMO_IGN_CALLID;</span><br><span>@@ -6177,12 +6415,13 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_msc_no_mgw_x_osmo_ign,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_msc_no_mgw_x_osmo_ign_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no mgw x-osmo-ign",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      MGCP_CLIENT_MGW_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Do not send X-Osmo-IGN MGCP header to this MSC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_msc_no_mgw_x_osmo_ign,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_msc_no_mgw_x_osmo_ign_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "no mgw x-osmo-ign",</span><br><span style="color: hsl(120, 100%, 40%);">+        NO_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        MGCP_CLIENT_MGW_STR</span><br><span style="color: hsl(120, 100%, 40%);">+           "Do not send X-Osmo-IGN MGCP header to this MSC\n")</span><br><span> {</span><br><span>     struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span>        msc->x_osmo_ign = 0;</span><br><span>@@ -6191,10 +6430,11 @@</span><br><span> }</span><br><span> </span><br><span> #define OSMUX_STR "RTP multiplexing\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_msc_osmux,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_msc_osmux_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "osmux (on|off|only)",</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMUX_STR "Enable OSMUX\n" "Disable OSMUX\n" "Only use OSMUX\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_msc_osmux,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_msc_osmux_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "osmux (on|off|only)",</span><br><span style="color: hsl(120, 100%, 40%);">+              OSMUX_STR "Enable OSMUX\n" "Disable OSMUX\n" "Only use OSMUX\n")</span><br><span> {</span><br><span>    struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span>        if (strcmp(argv[0], "off") == 0)</span><br><span>@@ -6212,10 +6452,11 @@</span><br><span>       "mid-call-text .TEXT",</span><br><span>       LEGACY_STR LEGACY_STR);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_bsc_mid_call_timeout,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_bsc_mid_call_timeout_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "mid-call-timeout NR",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Switch from Grace to Off in NR seconds.\n" "Timeout in seconds\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_bsc_mid_call_timeout,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_net_bsc_mid_call_timeout_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "mid-call-timeout NR",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Switch from Grace to Off in NR seconds.\n" "Timeout in seconds\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  bsc_gsmnet->mid_call_timeout = atoi(argv[0]);</span><br><span>     return CMD_SUCCESS;</span><br><span>@@ -6230,19 +6471,21 @@</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_off_time,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_rf_off_time_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "bsc-auto-rf-off <1-65000>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Disable RF on MSC Connection\n" "Timeout\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_rf_off_time,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_net_rf_off_time_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "bsc-auto-rf-off <1-65000>",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Disable RF on MSC Connection\n" "Timeout\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  bsc_gsmnet->auto_off_timeout = 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_net_no_rf_off_time,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_no_rf_off_time_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no bsc-auto-rf-off",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR "Disable RF on MSC Connection\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_no_rf_off_time,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_net_no_rf_off_time_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no bsc-auto-rf-off",</span><br><span style="color: hsl(120, 100%, 40%);">+       NO_STR "Disable RF on MSC Connection\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  bsc_gsmnet->auto_off_timeout = -1;</span><br><span>        return CMD_SUCCESS;</span><br><span>@@ -6411,12 +6654,13 @@</span><br><span> ALIAS_DEPRECATED(cfg_net_msc_dest, cfg_net_msc_no_dest_cmd,</span><br><span>       "no dest A.B.C.D <1-65000> <0-255>", NO_STR LEGACY_STR "-\n" "-\n" "-\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_msc_amr_octet_align,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_net_msc_amr_octet_align_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "amr-payload (octet-aligned|bandwith-efficient",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set AMR payload framing mode\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "payload fields aligned on octet boundaries\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "payload fields packed (AoIP)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_net_msc_amr_octet_align,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_net_msc_amr_octet_align_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+            "amr-payload (octet-aligned|bandwith-efficient",</span><br><span style="color: hsl(120, 100%, 40%);">+            "Set AMR payload framing mode\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "payload fields aligned on octet boundaries\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "payload fields packed (AoIP)\n")</span><br><span> {</span><br><span>       struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span> </span><br><span>@@ -6428,10 +6672,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_nri_add, cfg_msc_nri_add_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nri add <0-32767> [<0-32767>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      NRI_STR "Add NRI value or range to the NRI mapping for this MSC\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      NRI_FIRST_LAST_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_msc_nri_add, cfg_msc_nri_add_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "nri add <0-32767> [<0-32767>]",</span><br><span style="color: hsl(120, 100%, 40%);">+        NRI_STR "Add NRI value or range to the NRI mapping for this MSC\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          NRI_FIRST_LAST_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span>        struct bsc_msc_data *other_msc;</span><br><span>@@ -6466,10 +6711,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_nri_del, cfg_msc_nri_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nri del <0-32767> [<0-32767>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      NRI_STR "Remove NRI value or range from the NRI mapping for this MSC\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      NRI_FIRST_LAST_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_msc_nri_del, cfg_msc_nri_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "nri del <0-32767> [<0-32767>]",</span><br><span style="color: hsl(120, 100%, 40%);">+        NRI_STR "Remove NRI value or range from the NRI mapping for this MSC\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     NRI_FIRST_LAST_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span>        int rc;</span><br><span>@@ -6484,22 +6730,24 @@</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_msc_allow_attach, cfg_msc_allow_attach_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "allow-attach",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Allow this MSC to attach new subscribers (default).\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_msc_allow_attach, cfg_msc_allow_attach_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "allow-attach",</span><br><span style="color: hsl(120, 100%, 40%);">+     "Allow this MSC to attach new subscribers (default).\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span>        msc->allow_attach = true;</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_msc_no_allow_attach, cfg_msc_no_allow_attach_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no allow-attach",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Do not assign new subscribers to this MSC."</span><br><span style="color: hsl(0, 100%, 40%);">-      " Useful if an MSC in an MSC pool is configured to off-load subscribers."</span><br><span style="color: hsl(0, 100%, 40%);">-      " The MSC will still be operational for already IMSI-Attached subscribers,"</span><br><span style="color: hsl(0, 100%, 40%);">-      " but the NAS node selection function will skip this MSC for new subscribers\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_msc_no_allow_attach, cfg_msc_no_allow_attach_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "no allow-attach",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "Do not assign new subscribers to this MSC."</span><br><span style="color: hsl(120, 100%, 40%);">+        " Useful if an MSC in an MSC pool is configured to off-load subscribers."</span><br><span style="color: hsl(120, 100%, 40%);">+           " The MSC will still be operational for already IMSI-Attached subscribers,"</span><br><span style="color: hsl(120, 100%, 40%);">+         " but the NAS node selection function will skip this MSC for new subscribers\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct bsc_msc_data *msc = bsc_msc_data(vty);</span><br><span>        msc->allow_attach = false;</span><br><span>diff --git a/src/osmo-bsc/handover_vty.c b/src/osmo-bsc/handover_vty.c</span><br><span>index 81313e2..e5435f5 100644</span><br><span>--- a/src/osmo-bsc/handover_vty.c</span><br><span>+++ b/src/osmo-bsc/handover_vty.c</span><br><span>@@ -47,10 +47,10 @@</span><br><span>                           VTY_CMD_PREFIX, VTY_CMD, VTY_CMD_ARG, VTY_ARG_EVAL, \</span><br><span>                        VTY_WRITE_FMT, VTY_WRITE_CONV, \</span><br><span>                     VTY_DOC) \</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_ho_##NAME, cfg_ho_##NAME##_cmd, \</span><br><span style="color: hsl(0, 100%, 40%);">-      VTY_CMD_PREFIX VTY_CMD " (" VTY_CMD_ARG "|default)", \</span><br><span style="color: hsl(0, 100%, 40%);">-      VTY_DOC \</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use default (" #DEFAULT_VAL "), remove explicit setting on this node\n") \</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_ho_##NAME, cfg_ho_##NAME##_cmd, \</span><br><span style="color: hsl(120, 100%, 40%);">+    VTY_CMD_PREFIX VTY_CMD " (" VTY_CMD_ARG "|default)", \</span><br><span style="color: hsl(120, 100%, 40%);">+    VTY_DOC                                                      \</span><br><span style="color: hsl(120, 100%, 40%);">+        "Use default (" #DEFAULT_VAL "), remove explicit setting on this node\n", CMD_ATTR_IMMEDIATE) \</span><br><span> { \</span><br><span>        struct handover_cfg *ho = ho_cfg_from_vty(vty); \</span><br><span>    const char *val = argv[0]; \</span><br><span>@@ -104,15 +104,16 @@</span><br><span>         return str;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_net_ho_congestion_check_interval, cfg_net_ho_congestion_check_interval_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "handover2 congestion-check (disabled|<1-999>|now)",</span><br><span style="color: hsl(0, 100%, 40%);">-      HO_CFG_STR_HANDOVER2</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure congestion check interval\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Disable congestion checking, do not handover based on cell load. Note: there is one global congestion check"</span><br><span style="color: hsl(0, 100%, 40%);">-      " interval, i.e. contrary to other handover2 settings, this is not configurable per individual cell.\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Congestion check interval in seconds (default "</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_STRINGIFY_VAL(HO_CFG_CONGESTION_CHECK_DEFAULT) ")\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Manually trigger a congestion check to run right now\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_net_ho_congestion_check_interval, cfg_net_ho_congestion_check_interval_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "handover2 congestion-check (disabled|<1-999>|now)",</span><br><span style="color: hsl(120, 100%, 40%);">+          HO_CFG_STR_HANDOVER2</span><br><span style="color: hsl(120, 100%, 40%);">+          "Configure congestion check interval\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Disable congestion checking, do not handover based on cell load. Note: there is one global congestion check"</span><br><span style="color: hsl(120, 100%, 40%);">+       " interval, i.e. contrary to other handover2 settings, this is not configurable per individual cell.\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Congestion check interval in seconds (default "</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_STRINGIFY_VAL(HO_CFG_CONGESTION_CHECK_DEFAULT) ")\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Manually trigger a congestion check to run right now\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  if (!strcmp(argv[0], "now")) {</span><br><span>             hodec2_congestion_check(gsmnet_from_vty(vty));</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 20bd620..ce9df1d 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>@@ -642,6 +642,19 @@</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%);">+     .usr_attr_desc  = {</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%);">+         [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%);">+         [BSC_VTY_ATTR_NEW_LCHAN] = \</span><br><span style="color: hsl(120, 100%, 40%);">+                  "This command applies for newly created lchans",</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    .usr_attr_letters = {</span><br><span style="color: hsl(120, 100%, 40%);">+         [BSC_VTY_ATTR_RESTART_ABIS_OML_LINK]    = 'o',</span><br><span style="color: hsl(120, 100%, 40%);">+                [BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK]    = 'r',</span><br><span style="color: hsl(120, 100%, 40%);">+                [BSC_VTY_ATTR_NEW_LCHAN]                = 'l',</span><br><span style="color: hsl(120, 100%, 40%);">+        },</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: 10 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Assignee: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>