<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/20320">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty: add attributes to VTY commands indicating when they apply<br><br>Change-Id: I63978ce3ea87593c9a41e503ed3b761c64e1e80f<br>Related: SYS#4937, OS#1601<br>---<br>M src/pcu_vty.c<br>M src/pcu_vty.h<br>2 files changed, 327 insertions(+), 260 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/20/20320/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/pcu_vty.c b/src/pcu_vty.c</span><br><span>index 0756136..bdb7adb 100644</span><br><span>--- a/src/pcu_vty.c</span><br><span>+++ b/src/pcu_vty.c</span><br><span>@@ -20,6 +20,8 @@</span><br><span> #include "tbf.h"</span><br><span> #include "pcu_vty_functions.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> extern void *tall_pcu_ctx;</span><br><span> </span><br><span> static const struct value_string pcu_gsmtap_categ_names[] = {</span><br><span>@@ -257,10 +259,11 @@</span><br><span> }</span><br><span> </span><br><span> /* per-BTS configuration */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "pcu",</span><br><span style="color: hsl(0, 100%, 40%);">-      "BTS specific configure")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "pcu",</span><br><span style="color: hsl(120, 100%, 40%);">+      "BTS specific configure",</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  vty->node = PCU_NODE;</span><br><span> </span><br><span>@@ -269,10 +272,11 @@</span><br><span> </span><br><span> #define EGPRS_STR "EGPRS configuration\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_egprs,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_egprs_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "egprs only",</span><br><span style="color: hsl(0, 100%, 40%);">-      EGPRS_STR "Use EGPRS and disable plain GPRS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_egprs,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_pcu_egprs_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(PCU_VTY_ATTR_NEW_TBF),</span><br><span style="color: hsl(120, 100%, 40%);">+              "egprs only",</span><br><span style="color: hsl(120, 100%, 40%);">+       EGPRS_STR "Use EGPRS and disable plain GPRS\n")</span><br><span> {</span><br><span>         struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -281,10 +285,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_egprs,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_egprs_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no egprs",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR EGPRS_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_no_egprs,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_pcu_no_egprs_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(PCU_VTY_ATTR_NEW_TBF),</span><br><span style="color: hsl(120, 100%, 40%);">+              "no egprs",</span><br><span style="color: hsl(120, 100%, 40%);">+         NO_STR EGPRS_STR)</span><br><span> {</span><br><span>         struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -293,11 +298,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_fc_interval,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_fc_interval_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "flow-control-interval <1-10>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Interval between sending subsequent Flow Control PDUs\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Interval time in seconds\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_fc_interval,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_pcu_fc_interval_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "flow-control-interval <1-10>",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Interval between sending subsequent Flow Control PDUs\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Interval time in seconds\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -309,10 +315,11 @@</span><br><span> #define FC_BMAX_STR(who) "Force a fixed value for the " who " bucket size\n"</span><br><span> #define FC_LR_STR(who) "Force a fixed value for the " who " leak rate\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_fc_bvc_bucket_size,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_fc_bvc_bucket_size_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "flow-control force-bvc-bucket-size <1-6553500>",</span><br><span style="color: hsl(0, 100%, 40%);">-      FC_STR FC_BMAX_STR("BVC") "Bucket size in octets\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_fc_bvc_bucket_size,</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg_pcu_fc_bvc_bucket_size_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "flow-control force-bvc-bucket-size <1-6553500>",</span><br><span style="color: hsl(120, 100%, 40%);">+     FC_STR FC_BMAX_STR("BVC") "Bucket size in octets\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -321,10 +328,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_fc_bvc_bucket_size,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_fc_bvc_bucket_size_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no flow-control force-bvc-bucket-size",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR FC_STR FC_BMAX_STR("BVC"))</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_fc_bvc_bucket_size,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_pcu_no_fc_bvc_bucket_size_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "no flow-control force-bvc-bucket-size",</span><br><span style="color: hsl(120, 100%, 40%);">+    NO_STR FC_STR FC_BMAX_STR("BVC"),</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -333,10 +341,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_fc_bvc_leak_rate,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_fc_bvc_leak_rate_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "flow-control force-bvc-leak-rate <1-6553500>",</span><br><span style="color: hsl(0, 100%, 40%);">-      FC_STR FC_LR_STR("BVC") "Leak rate in bit/s\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_fc_bvc_leak_rate,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_fc_bvc_leak_rate_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "flow-control force-bvc-leak-rate <1-6553500>",</span><br><span style="color: hsl(120, 100%, 40%);">+       FC_STR FC_LR_STR("BVC") "Leak rate in bit/s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -345,10 +354,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_fc_bvc_leak_rate,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_fc_bvc_leak_rate_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no flow-control force-bvc-leak-rate",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR FC_STR FC_LR_STR("BVC"))</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_fc_bvc_leak_rate,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_no_fc_bvc_leak_rate_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "no flow-control force-bvc-leak-rate",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR FC_STR FC_LR_STR("BVC"),</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -357,10 +367,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_fc_ms_bucket_size,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_fc_ms_bucket_size_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "flow-control force-ms-bucket-size <1-6553500>",</span><br><span style="color: hsl(0, 100%, 40%);">-      FC_STR FC_BMAX_STR("default MS") "Bucket size in octets\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_fc_ms_bucket_size,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_fc_ms_bucket_size_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "flow-control force-ms-bucket-size <1-6553500>",</span><br><span style="color: hsl(120, 100%, 40%);">+      FC_STR FC_BMAX_STR("default MS") "Bucket size in octets\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -369,10 +380,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_fc_ms_bucket_size,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_fc_ms_bucket_size_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no flow-control force-ms-bucket-size",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR FC_STR FC_BMAX_STR("default MS"))</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_fc_ms_bucket_size,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_pcu_no_fc_ms_bucket_size_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "no flow-control force-ms-bucket-size",</span><br><span style="color: hsl(120, 100%, 40%);">+     NO_STR FC_STR FC_BMAX_STR("default MS"),</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -381,10 +393,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_fc_ms_leak_rate,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_fc_ms_leak_rate_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "flow-control force-ms-leak-rate <1-6553500>",</span><br><span style="color: hsl(0, 100%, 40%);">-      FC_STR FC_LR_STR("default MS") "Leak rate in bit/s\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_fc_ms_leak_rate,</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg_pcu_fc_ms_leak_rate_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "flow-control force-ms-leak-rate <1-6553500>",</span><br><span style="color: hsl(120, 100%, 40%);">+        FC_STR FC_LR_STR("default MS") "Leak rate in bit/s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -393,10 +406,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_fc_ms_leak_rate,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_fc_ms_leak_rate_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no flow-control force-ms-leak-rate",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR FC_STR FC_LR_STR("default MS"))</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_fc_ms_leak_rate,</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg_pcu_no_fc_ms_leak_rate_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "no flow-control force-ms-leak-rate",</span><br><span style="color: hsl(120, 100%, 40%);">+       NO_STR FC_STR FC_LR_STR("default MS"),</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -406,10 +420,11 @@</span><br><span> }</span><br><span> </span><br><span> #define FC_BTIME_STR "Set target downlink maximum queueing time (only affects the advertised bucket size)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_fc_bucket_time,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_fc_bucket_time_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "flow-control bucket-time <1-65534>",</span><br><span style="color: hsl(0, 100%, 40%);">-      FC_STR FC_BTIME_STR "Time in centi-seconds\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_fc_bucket_time,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_pcu_fc_bucket_time_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "flow-control bucket-time <1-65534>",</span><br><span style="color: hsl(120, 100%, 40%);">+         FC_STR FC_BTIME_STR "Time in centi-seconds\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -418,10 +433,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_fc_bucket_time,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_fc_bucket_time_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no flow-control bucket-time",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR FC_STR FC_BTIME_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_fc_bucket_time,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_pcu_no_fc_bucket_time_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "no flow-control bucket-time",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR FC_STR FC_BTIME_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -432,12 +448,13 @@</span><br><span> </span><br><span> #define CS_STR "Coding Scheme configuration\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_cs,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_cs_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "cs <1-4> [<1-4>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      CS_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Initial CS value to be used (overrides BTS config)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use a different initial CS value for the uplink")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_cs,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_pcu_cs_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "cs <1-4> [<1-4>]",</span><br><span style="color: hsl(120, 100%, 40%);">+     CS_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "Initial CS value to be used (overrides BTS config)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Use a different initial CS value for the uplink",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint8_t cs = atoi(argv[0]);</span><br><span>@@ -452,10 +469,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_cs,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_cs_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no cs",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR CS_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_cs,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_pcu_no_cs_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "no cs",</span><br><span style="color: hsl(120, 100%, 40%);">+    NO_STR CS_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -465,13 +483,14 @@</span><br><span> }</span><br><span> </span><br><span> #define CS_MAX_STR "Set maximum values for adaptive CS selection (overrides BTS config)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_cs_max,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_cs_max_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "cs max <1-4> [<1-4>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      CS_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      CS_MAX_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Maximum CS value to be used\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use a different maximum CS value for the uplink")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_cs_max,</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg_pcu_cs_max_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "cs max <1-4> [<1-4>]",</span><br><span style="color: hsl(120, 100%, 40%);">+         CS_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        CS_MAX_STR</span><br><span style="color: hsl(120, 100%, 40%);">+    "Maximum CS value to be used\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Use a different maximum CS value for the uplink",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint8_t cs = atoi(argv[0]);</span><br><span>@@ -485,10 +504,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_cs_max,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_cs_max_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no cs max",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR CS_STR CS_MAX_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_cs_max,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_no_cs_max_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "no cs max",</span><br><span style="color: hsl(120, 100%, 40%);">+        NO_STR CS_STR CS_MAX_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -499,13 +519,13 @@</span><br><span> }</span><br><span> </span><br><span> #define MCS_STR "Modulation and Coding Scheme configuration (EGPRS)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_mcs,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_mcs_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "mcs <1-9> [<1-9>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      MCS_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Initial MCS value to be used (default 1)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use a different initial MCS value for the uplink")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_mcs,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_pcu_mcs_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "mcs <1-9> [<1-9>]",</span><br><span style="color: hsl(120, 100%, 40%);">+    MCS_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "Initial MCS value to be used (default 1)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Use a different initial MCS value for the uplink",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint8_t cs = atoi(argv[0]);</span><br><span>@@ -519,10 +539,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_mcs,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_mcs_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no mcs",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR MCS_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_mcs,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_pcu_no_mcs_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no mcs",</span><br><span style="color: hsl(120, 100%, 40%);">+           NO_STR MCS_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -532,13 +553,14 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_mcs_max,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_mcs_max_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "mcs max <1-9> [<1-9>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      MCS_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      CS_MAX_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Maximum MCS value to be used\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Use a different maximum MCS value for the uplink")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_mcs_max,</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg_pcu_mcs_max_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "mcs max <1-9> [<1-9>]",</span><br><span style="color: hsl(120, 100%, 40%);">+        MCS_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       CS_MAX_STR</span><br><span style="color: hsl(120, 100%, 40%);">+    "Maximum MCS value to be used\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Use a different maximum MCS value for the uplink",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint8_t mcs = atoi(argv[0]);</span><br><span>@@ -552,10 +574,11 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_mcs_max,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_mcs_max_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no mcs max",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR MCS_STR CS_MAX_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_mcs_max,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_pcu_no_mcs_max_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "no mcs max",</span><br><span style="color: hsl(120, 100%, 40%);">+       NO_STR MCS_STR CS_MAX_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -567,12 +590,13 @@</span><br><span> </span><br><span> #define DL_STR "downlink specific configuration\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_dl_arq_type,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_dl_arq_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "egprs dl arq-type (spb|arq2)",</span><br><span style="color: hsl(0, 100%, 40%);">-      EGPRS_STR DL_STR "ARQ options\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "enable SPB(ARQ1) support\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "enable ARQ2 support")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_dl_arq_type,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_pcu_dl_arq_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "egprs dl arq-type (spb|arq2)",</span><br><span style="color: hsl(120, 100%, 40%);">+     EGPRS_STR DL_STR "ARQ options\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "enable SPB(ARQ1) support\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "enable ARQ2 support",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -584,12 +608,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_window_size,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_window_size_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "window-size <0-1024> [<0-256>]",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Window size configuration (b + N_PDCH * f)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Base value (b)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Factor for number of PDCH (f)")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_window_size,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_window_size_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(PCU_VTY_ATTR_NEW_TBF),</span><br><span style="color: hsl(120, 100%, 40%);">+              "window-size <0-1024> [<0-256>]",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Window size configuration (b + N_PDCH * f)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Base value (b)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Factor for number of PDCH (f)")</span><br><span> {</span><br><span>        struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint16_t b = atoi(argv[0]);</span><br><span>@@ -608,10 +633,11 @@</span><br><span> #define LIFETIME_STR "Set lifetime limit of LLC frame in centi-seconds " \</span><br><span>  "(overrides the value given by SGSN)\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_queue_lifetime,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_queue_lifetime_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "queue lifetime <1-65534>",</span><br><span style="color: hsl(0, 100%, 40%);">-      QUEUE_STR LIFETIME_STR "Lifetime in centi-seconds")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_queue_lifetime,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_pcu_queue_lifetime_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(PCU_VTY_ATTR_NEW_TBF),</span><br><span style="color: hsl(120, 100%, 40%);">+              "queue lifetime <1-65534>",</span><br><span style="color: hsl(120, 100%, 40%);">+           QUEUE_STR LIFETIME_STR "Lifetime in centi-seconds")</span><br><span> {</span><br><span>     struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint16_t csec = atoi(argv[0]);</span><br><span>@@ -621,10 +647,11 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_queue_lifetime_inf,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_queue_lifetime_inf_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "queue lifetime infinite",</span><br><span style="color: hsl(0, 100%, 40%);">-      QUEUE_STR LIFETIME_STR "Infinite lifetime")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_queue_lifetime_inf,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_pcu_queue_lifetime_inf_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(PCU_VTY_ATTR_NEW_TBF),</span><br><span style="color: hsl(120, 100%, 40%);">+              "queue lifetime infinite",</span><br><span style="color: hsl(120, 100%, 40%);">+          QUEUE_STR LIFETIME_STR "Infinite lifetime")</span><br><span> {</span><br><span>     struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -633,11 +660,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_queue_lifetime,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_queue_lifetime_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no queue lifetime",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR QUEUE_STR "Disable lifetime limit of LLC frame (use value given "</span><br><span style="color: hsl(0, 100%, 40%);">-      "by SGSN)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_no_queue_lifetime,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_pcu_no_queue_lifetime_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(PCU_VTY_ATTR_NEW_TBF),</span><br><span style="color: hsl(120, 100%, 40%);">+              "no queue lifetime",</span><br><span style="color: hsl(120, 100%, 40%);">+        NO_STR QUEUE_STR "Disable lifetime limit of LLC frame (use value given "</span><br><span style="color: hsl(120, 100%, 40%);">+            "by SGSN)\n")</span><br><span> {</span><br><span>   struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -649,10 +677,11 @@</span><br><span> #define QUEUE_HYSTERESIS_STR "Set lifetime hysteresis of LLC frame in centi-seconds " \</span><br><span>      "(continue discarding until lifetime-hysteresis is reached)\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_queue_hysteresis,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_queue_hysteresis_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "queue hysteresis <1-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-      QUEUE_STR QUEUE_HYSTERESIS_STR "Hysteresis in centi-seconds")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_queue_hysteresis,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_pcu_queue_hysteresis_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(PCU_VTY_ATTR_NEW_TBF),</span><br><span style="color: hsl(120, 100%, 40%);">+              "queue hysteresis <1-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+         QUEUE_STR QUEUE_HYSTERESIS_STR "Hysteresis in centi-seconds")</span><br><span> {</span><br><span>   struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint16_t csec = atoi(argv[0]);</span><br><span>@@ -662,10 +691,11 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_queue_hysteresis,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_queue_hysteresis_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no queue hysteresis",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR QUEUE_STR QUEUE_HYSTERESIS_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_no_queue_hysteresis,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_pcu_no_queue_hysteresis_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(PCU_VTY_ATTR_NEW_TBF),</span><br><span style="color: hsl(120, 100%, 40%);">+              "no queue hysteresis",</span><br><span style="color: hsl(120, 100%, 40%);">+              NO_STR QUEUE_STR QUEUE_HYSTERESIS_STR)</span><br><span> {</span><br><span>    struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -675,11 +705,11 @@</span><br><span> }</span><br><span> </span><br><span> #define QUEUE_CODEL_STR "Set CoDel queue management\n"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_queue_codel,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_queue_codel_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "queue codel",</span><br><span style="color: hsl(0, 100%, 40%);">-      QUEUE_STR QUEUE_CODEL_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_queue_codel,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_pcu_queue_codel_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(PCU_VTY_ATTR_NEW_SUBSCR),</span><br><span style="color: hsl(120, 100%, 40%);">+           "queue codel",</span><br><span style="color: hsl(120, 100%, 40%);">+              QUEUE_STR QUEUE_CODEL_STR)</span><br><span> {</span><br><span>        struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -688,10 +718,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_queue_codel_interval,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_queue_codel_interval_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "queue codel interval <1-1000>",</span><br><span style="color: hsl(0, 100%, 40%);">-      QUEUE_STR QUEUE_CODEL_STR "Specify interval\n" "Interval in centi-seconds")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_queue_codel_interval,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_pcu_queue_codel_interval_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(PCU_VTY_ATTR_NEW_SUBSCR),</span><br><span style="color: hsl(120, 100%, 40%);">+           "queue codel interval <1-1000>",</span><br><span style="color: hsl(120, 100%, 40%);">+              QUEUE_STR QUEUE_CODEL_STR "Specify interval\n" "Interval in centi-seconds")</span><br><span> {</span><br><span>   struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint16_t csec = atoi(argv[0]);</span><br><span>@@ -701,10 +732,11 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_queue_codel,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_queue_codel_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no queue codel",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR QUEUE_STR QUEUE_CODEL_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_no_queue_codel,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_pcu_no_queue_codel_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(PCU_VTY_ATTR_NEW_SUBSCR),</span><br><span style="color: hsl(120, 100%, 40%);">+           "no queue codel",</span><br><span style="color: hsl(120, 100%, 40%);">+           NO_STR QUEUE_STR QUEUE_CODEL_STR)</span><br><span> {</span><br><span>         struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -716,10 +748,11 @@</span><br><span> </span><br><span> #define QUEUE_IDLE_ACK_STR "Request an ACK after the last DL LLC frame in centi-seconds\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_queue_idle_ack_delay,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_queue_idle_ack_delay_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "queue idle-ack-delay <1-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-      QUEUE_STR QUEUE_IDLE_ACK_STR "Idle ACK delay in centi-seconds")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_queue_idle_ack_delay,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_pcu_queue_idle_ack_delay_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "queue idle-ack-delay <1-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+     QUEUE_STR QUEUE_IDLE_ACK_STR "Idle ACK delay in centi-seconds",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint16_t csec = atoi(argv[0]);</span><br><span>@@ -729,10 +762,11 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_queue_idle_ack_delay,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_queue_idle_ack_delay_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no queue idle-ack-delay",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR QUEUE_STR QUEUE_IDLE_ACK_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_queue_idle_ack_delay,</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg_pcu_no_queue_idle_ack_delay_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "no queue idle-ack-delay",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR QUEUE_STR QUEUE_IDLE_ACK_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -741,15 +775,15 @@</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_pcu_alloc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_alloc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "alloc-algorithm (a|b|dynamic)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Select slot allocation algorithm to use when assigning timeslots on "</span><br><span style="color: hsl(0, 100%, 40%);">-      "PACCH\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Single slot is assigned only\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Multiple slots are assigned for semi-duplex operation\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Dynamically select the algorithm based on the system state\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_alloc,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_alloc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "alloc-algorithm (a|b|dynamic)",</span><br><span style="color: hsl(120, 100%, 40%);">+    "Select slot allocation algorithm to use when assigning timeslots on "</span><br><span style="color: hsl(120, 100%, 40%);">+      "PACCH\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Single slot is assigned only\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Multiple slots are assigned for semi-duplex operation\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Dynamically select the algorithm based on the system state\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -768,10 +802,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_two_phase,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_two_phase_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "two-phase-access",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Force two phase access when MS requests single phase access\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_two_phase,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_two_phase_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "two-phase-access",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Force two phase access when MS requests single phase access\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -780,10 +815,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_two_phase,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_two_phase_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no two-phase-access",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR "Only use two phase access when requested my MS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_two_phase,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_pcu_no_two_phase_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "no two-phase-access",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR "Only use two phase access when requested my MS\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -792,12 +828,13 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_alpha,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_alpha_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "alpha <0-10>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Alpha parameter for MS power control in units of 0.1 (see TS 05.08) "</span><br><span style="color: hsl(0, 100%, 40%);">-      "NOTE: Be sure to set Alpha value at System information 13 too.\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Alpha in units of 0.1\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_alpha,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_alpha_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "alpha <0-10>",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Alpha parameter for MS power control in units of 0.1 (see TS 05.08) "</span><br><span style="color: hsl(120, 100%, 40%);">+      "NOTE: Be sure to set Alpha value at System information 13 too.\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Alpha in units of 0.1\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -806,11 +843,12 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_gamma,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_gamma_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "gamma <0-62>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Gamma parameter for MS power control in units of dB (see TS 05.08)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Gamma in even unit of dBs\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_gamma,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_pcu_gamma_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "gamma <0-62>",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Gamma parameter for MS power control in units of dB (see TS 05.08)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Gamma in even unit of dBs\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -867,10 +905,11 @@</span><br><span> </span><br><span> #define RETRANSMISSION_STR "retransmit blocks even before the MS had a chance to receive them (better throughput," \</span><br><span>                        " less readable traces)"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_dl_tbf_preemptive_retransmission,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_dl_tbf_preemptive_retransmission_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "dl-tbf-preemptive-retransmission",</span><br><span style="color: hsl(0, 100%, 40%);">-      RETRANSMISSION_STR " (enabled by default)")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_dl_tbf_preemptive_retransmission,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_pcu_dl_tbf_preemptive_retransmission_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "dl-tbf-preemptive-retransmission",</span><br><span style="color: hsl(120, 100%, 40%);">+         RETRANSMISSION_STR " (enabled by default)",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -879,10 +918,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_dl_tbf_preemptive_retransmission,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_dl_tbf_preemptive_retransmission_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no dl-tbf-preemptive-retransmission",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR RETRANSMISSION_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_dl_tbf_preemptive_retransmission,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_pcu_no_dl_tbf_preemptive_retransmission_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "no dl-tbf-preemptive-retransmission",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR RETRANSMISSION_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -921,10 +961,11 @@</span><br><span> }</span><br><span> </span><br><span> #define CS_ERR_LIMITS_STR "set thresholds for error rate based downlink (M)CS adjustment\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_cs_err_limits,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_cs_err_limits_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "cs threshold <0-100> <0-100>",</span><br><span style="color: hsl(0, 100%, 40%);">-      CS_STR CS_ERR_LIMITS_STR "lower limit in %\n" "upper limit in %\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_cs_err_limits,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_pcu_cs_err_limits_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "cs threshold <0-100> <0-100>",</span><br><span style="color: hsl(120, 100%, 40%);">+         CS_STR CS_ERR_LIMITS_STR "lower limit in %\n" "upper limit in %\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -945,10 +986,11 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_cs_err_limits,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_cs_err_limits_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no cs threshold",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR CS_STR CS_ERR_LIMITS_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_cs_err_limits,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_pcu_no_cs_err_limits_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "no cs threshold",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR CS_STR CS_ERR_LIMITS_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -960,10 +1002,11 @@</span><br><span> }</span><br><span> </span><br><span> #define CS_DOWNGRADE_STR "set threshold for data size based downlink (M)CS downgrade\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_cs_downgrade_thrsh,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_cs_downgrade_thrsh_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "cs downgrade-threshold <1-10000>",</span><br><span style="color: hsl(0, 100%, 40%);">-      CS_STR CS_DOWNGRADE_STR "downgrade if less octets left\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_cs_downgrade_thrsh,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_cs_downgrade_thrsh_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "cs downgrade-threshold <1-10000>",</span><br><span style="color: hsl(120, 100%, 40%);">+           CS_STR CS_DOWNGRADE_STR "downgrade if less octets left\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -972,10 +1015,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_cs_downgrade_thrsh,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_no_cs_downgrade_thrsh_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no cs downgrade-threshold",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR CS_STR CS_DOWNGRADE_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_no_cs_downgrade_thrsh,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_pcu_no_cs_downgrade_thrsh_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "no cs downgrade-threshold",</span><br><span style="color: hsl(120, 100%, 40%);">+        NO_STR CS_STR CS_DOWNGRADE_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -984,21 +1028,21 @@</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_pcu_cs_lqual_ranges,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_cs_lqual_ranges_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "cs link-quality-ranges cs1 <0-35> cs2 <0-35> <0-35> cs3 <0-35> <0-35> cs4 <0-35>",</span><br><span style="color: hsl(0, 100%, 40%);">-      CS_STR "Set link quality ranges for each uplink CS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for CS-1 (high value only)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "CS-1 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for CS-2\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "CS-2 low (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "CS-2 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for CS-3\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "CS-3 low (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "CS-3 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for CS-4 (low value only)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "CS-4 low (dB)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_cs_lqual_ranges,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_pcu_cs_lqual_ranges_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "cs link-quality-ranges cs1 <0-35> cs2 <0-35> <0-35> cs3 <0-35> <0-35> cs4 <0-35>",</span><br><span style="color: hsl(120, 100%, 40%);">+     CS_STR "Set link quality ranges for each uplink CS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set quality range for CS-1 (high value only)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "CS-1 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set quality range for CS-2\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "CS-2 low (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "CS-2 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set quality range for CS-3\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "CS-3 low (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "CS-3 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set quality range for CS-4 (low value only)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "CS-4 low (dB)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -1019,35 +1063,36 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_mcs_lqual_ranges,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_mcs_lqual_ranges_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "mcs link-quality-ranges mcs1 <0-35> mcs2 <0-35> <0-35> mcs3 <0-35> <0-35> mcs4 <0-35> <0-35> mcs5 <0-35> <0-35> mcs6 <0-35> <0-35> mcs7 <0-35> <0-35> mcs8 <0-35> <0-35> mcs9 <0-35>",</span><br><span style="color: hsl(0, 100%, 40%);">-      CS_STR "Set link quality ranges for each uplink MCS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for MCS-1 (high value only)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-1 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for MCS-2\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-2 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-2 low (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for MCS-3\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-3 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-3 low (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for MCS-4\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-4 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-4 low (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for MCS-5\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-5 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-5 low (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for MCS-6\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-6 low (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-6 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for MCS-7\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-7 low (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-7 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for MCS-8\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-8 low (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-8 high (dB)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set quality range for MCS-9 (low value only)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "MCS-9 low (dB)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_mcs_lqual_ranges,</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg_pcu_mcs_lqual_ranges_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "mcs link-quality-ranges mcs1 <0-35> mcs2 <0-35> <0-35> mcs3 <0-35> <0-35> mcs4 <0-35> <0-35> mcs5 <0-35> <0-35> mcs6 <0-35> <0-35> mcs7 <0-35> <0-35> mcs8 <0-35> <0-35> mcs9 <0-35>",</span><br><span style="color: hsl(120, 100%, 40%);">+     CS_STR "Set link quality ranges for each uplink MCS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Set quality range for MCS-1 (high value only)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "MCS-1 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Set quality range for MCS-2\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "MCS-2 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "MCS-2 low (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set quality range for MCS-3\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "MCS-3 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "MCS-3 low (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set quality range for MCS-4\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "MCS-4 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "MCS-4 low (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set quality range for MCS-5\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "MCS-5 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "MCS-5 low (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Set quality range for MCS-6\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "MCS-6 low (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "MCS-6 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Set quality range for MCS-7\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "MCS-7 low (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "MCS-7 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Set quality range for MCS-8\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "MCS-8 low (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "MCS-8 high (dB)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Set quality range for MCS-9 (low value only)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "MCS-9 low (dB)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -1087,12 +1132,13 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_gb_dialect,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_pcu_gb_dialect_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "gb-dialect (classic|ip-sns)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Select which Gb interface dialect to use\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Classic Gb interface with NS-{RESET,BLOCK,UNBLOCK} and static configuration\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Modern Gb interface with IP-SNS (Sub Network Service) and dynamic configuration\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_pcu_gb_dialect,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_pcu_gb_dialect_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(PCU_VTY_ATTR_NS_RECONNECT),</span><br><span style="color: hsl(120, 100%, 40%);">+         "gb-dialect (classic|ip-sns)",</span><br><span style="color: hsl(120, 100%, 40%);">+              "Select which Gb interface dialect to use\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Classic Gb interface with NS-{RESET,BLOCK,UNBLOCK} and static configuration\n"</span><br><span style="color: hsl(120, 100%, 40%);">+             "Modern Gb interface with IP-SNS (Sub Network Service) and dynamic configuration\n")</span><br><span> {</span><br><span>    struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span>@@ -1124,10 +1170,11 @@</span><br><span>         return osmo_tdef_vty_show_cmd(vty, bts->T_defs_pcu, T_arg, NULL);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_timer, cfg_pcu_timer_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "timer " OSMO_TDEF_VTY_ARG_SET_OPTIONAL,</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure or show PCU timers\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_TDEF_VTY_DOC_SET)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_pcu_timer, cfg_pcu_timer_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "timer " OSMO_TDEF_VTY_ARG_SET_OPTIONAL,</span><br><span style="color: hsl(120, 100%, 40%);">+    "Configure or show PCU timers\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_TDEF_VTY_DOC_SET,</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       /* If any arguments are missing, redirect to 'show' */</span><br><span>@@ -1199,6 +1246,19 @@</span><br><span>      .name           = "OsmoPCU",</span><br><span>       .version        = PACKAGE_VERSION,</span><br><span>   .copyright      = pcu_copyright,</span><br><span style="color: hsl(120, 100%, 40%);">+      .usr_attr_desc  = {</span><br><span style="color: hsl(120, 100%, 40%);">+           [PCU_VTY_ATTR_NEW_TBF] = \</span><br><span style="color: hsl(120, 100%, 40%);">+                    "This command applies when a new TBF is begins",</span><br><span style="color: hsl(120, 100%, 40%);">+            [PCU_VTY_ATTR_NEW_SUBSCR] = \</span><br><span style="color: hsl(120, 100%, 40%);">+                 "This command applies when a new subscriber attaches",</span><br><span style="color: hsl(120, 100%, 40%);">+              [PCU_VTY_ATTR_NS_RECONNECT] = \</span><br><span style="color: hsl(120, 100%, 40%);">+                       "This command applies when the NS reconnects",</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%);">+         [PCU_VTY_ATTR_NEW_TBF]          = 'N',</span><br><span style="color: hsl(120, 100%, 40%);">+                [PCU_VTY_ATTR_NEW_SUBSCR]       = 'S',</span><br><span style="color: hsl(120, 100%, 40%);">+                [PCU_VTY_ATTR_NS_RECONNECT]     = 'R',</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span> };</span><br><span> </span><br><span> int pcu_vty_init(void)</span><br><span>diff --git a/src/pcu_vty.h b/src/pcu_vty.h</span><br><span>index 2097561..4b74137 100644</span><br><span>--- a/src/pcu_vty.h</span><br><span>+++ b/src/pcu_vty.h</span><br><span>@@ -16,5 +16,12 @@</span><br><span> </span><br><span> extern struct vty_app_info pcu_vty_info;</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%);">+     PCU_VTY_ATTR_NEW_TBF = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+     PCU_VTY_ATTR_NEW_SUBSCR,</span><br><span style="color: hsl(120, 100%, 40%);">+      PCU_VTY_ATTR_NS_RECONNECT,</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 /* _PCU_VTY_H */</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/20320">change 20320</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-pcu/+/20320"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I63978ce3ea87593c9a41e503ed3b761c64e1e80f </div>
<div style="display:none"> Gerrit-Change-Number: 20320 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>