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

</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: If77aea2223891663d465f162614ce8db18168c09<br>Related: SYS#4937, OS#1601<br>---<br>M src/osmo_ss7_vty.c<br>M src/sccp_vty.c<br>2 files changed, 280 insertions(+), 227 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_ss7_vty.c b/src/osmo_ss7_vty.c</span><br><span>index 2692209..b3aa9ef 100644</span><br><span>--- a/src/osmo_ss7_vty.c</span><br><span>+++ b/src/osmo_ss7_vty.c</span><br><span>@@ -68,10 +68,11 @@</span><br><span>    1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_instance, cs7_instance_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "cs7 instance <0-15>",</span><br><span style="color: hsl(0, 100%, 40%);">-  CS7_STR "Configure a SS7 Instance\n" INST_STR</span><br><span style="color: hsl(0, 100%, 40%);">- "Number of the instance\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_instance, cs7_instance_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "cs7 instance <0-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+        CS7_STR "Configure a SS7 Instance\n" INST_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "Number of the instance\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  int id = atoi(argv[0]);</span><br><span>      struct osmo_ss7_instance *inst;</span><br><span>@@ -98,13 +99,14 @@</span><br><span> };</span><br><span> </span><br><span> /* cs7 network-indicator */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_net_ind, cs7_net_ind_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "network-indicator (international | national | reserved | spare)",</span><br><span style="color: hsl(0, 100%, 40%);">-    "Configure the Network Indicator\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "International Network\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "National Network\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Reserved Network\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Spare Network\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_net_ind, cs7_net_ind_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "network-indicator (international | national | reserved | spare)",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Configure the Network Indicator\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "International Network\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "National Network\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Reserved Network\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Spare Network\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      int ni = get_string_value(ss7_network_indicator_vals, argv[0]);</span><br><span>@@ -114,12 +116,13 @@</span><br><span> }</span><br><span> </span><br><span> /* TODO: cs7 point-code format */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_pc_format, cs7_pc_format_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-    "point-code format <1-24> [<1-23>] [<1-22>]",</span><br><span style="color: hsl(0, 100%, 40%);">-       PC_STR "Configure Point Code Format\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Length of first PC component\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Length of second PC component\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "Length of third PC component\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_pc_format, cs7_pc_format_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "point-code format <1-24> [<1-23>] [<1-22>]",</span><br><span style="color: hsl(120, 100%, 40%);">+     PC_STR "Configure Point Code Format\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Length of first PC component\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Length of second PC component\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Length of third PC component\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      int argind = 0;</span><br><span>@@ -139,10 +142,11 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_pc_format_def, cs7_pc_format_def_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "point-code format default",</span><br><span style="color: hsl(0, 100%, 40%);">-  PC_STR "Configure Point Code Format\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Default Point Code Format (3.8.3)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_pc_format_def, cs7_pc_format_def_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "point-code format default",</span><br><span style="color: hsl(120, 100%, 40%);">+        PC_STR "Configure Point Code Format\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Default Point Code Format (3.8.3)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      inst->cfg.pc_fmt.component_len[0] = 3;</span><br><span>@@ -153,11 +157,12 @@</span><br><span> </span><br><span> </span><br><span> /* cs7 point-code delimiter */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_pc_delimiter, cs7_pc_delimiter_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-        "point-code delimiter (default|dash)",</span><br><span style="color: hsl(0, 100%, 40%);">-        PC_STR "Configure Point Code Delimiter\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "Use dot as delimiter\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "User dash as delimiter\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_pc_delimiter, cs7_pc_delimiter_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "point-code delimiter (default|dash)",</span><br><span style="color: hsl(120, 100%, 40%);">+      PC_STR "Configure Point Code Delimiter\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Use dot as delimiter\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "User dash as delimiter\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span> </span><br><span>@@ -169,10 +174,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_point_code, cs7_point_code_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "point-code POINT_CODE",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure the local Point Code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Point Code\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_point_code, cs7_point_code_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "point-code POINT_CODE",</span><br><span style="color: hsl(120, 100%, 40%);">+    "Configure the local Point Code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Point Code\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      int pc = osmo_ss7_pointcode_parse(inst, argv[0]);</span><br><span>@@ -187,13 +193,13 @@</span><br><span> </span><br><span> /* TODO: cs7 secondary-pc */</span><br><span> /* TODO: cs7 capability-pc */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_permit_dyn_rkm, cs7_permit_dyn_rkm_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "xua rkm routing-key-allocation (static-only|dynamic-permitted)",</span><br><span style="color: hsl(0, 100%, 40%);">-     "SIGTRAN xxxUA related\n" "Routing Key Management\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Routing Key Management Allocation Policy\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Only static (pre-confgured) Routing Keys permitted\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Dynamically allocate Routing Keys for what ASPs request\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_permit_dyn_rkm, cs7_permit_dyn_rkm_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "xua rkm routing-key-allocation (static-only|dynamic-permitted)",</span><br><span style="color: hsl(120, 100%, 40%);">+           "SIGTRAN xxxUA related\n" "Routing Key Management\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Routing Key Management Allocation Policy\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Only static (pre-confgured) Routing Keys permitted\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Dynamically allocate Routing Keys for what ASPs request\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span> </span><br><span>@@ -258,10 +264,11 @@</span><br><span>  1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_route_table, cs7_route_table_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "route-table system",</span><br><span style="color: hsl(0, 100%, 40%);">- "Specify the name of the route table\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Name of the route table\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_route_table, cs7_route_table_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "route-table system",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Specify the name of the route table\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Name of the route table\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      struct osmo_ss7_route_table *rtable;</span><br><span>@@ -274,20 +281,21 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_rt_upd, cs7_rt_upd_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "update route POINT_CODE MASK linkset LS_NAME [priority PRIO] [qos-class (CLASS|default)]",</span><br><span style="color: hsl(0, 100%, 40%);">-   "Update the Route\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Update the Route\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Destination Point Code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Point Code Mask\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Point Code Length\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Specify Destination Linkset\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Linkset Name\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Specify Priority\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Priority\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Specify QoS Class\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "QoS Class\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Default QoS Class\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_rt_upd, cs7_rt_upd_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "update route POINT_CODE MASK linkset LS_NAME [priority PRIO] [qos-class (CLASS|default)]",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Update the Route\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Update the Route\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Destination Point Code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Point Code Mask\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Point Code Length\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Specify Destination Linkset\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Linkset Name\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Specify Priority\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Priority\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Specify QoS Class\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "QoS Class\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Default QoS Class\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_route_table *rtable = vty->index;</span><br><span>         struct osmo_ss7_route *rt;</span><br><span>@@ -327,13 +335,14 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_rt_rem, cs7_rt_rem_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "remove route POINT_CODE MASK",</span><br><span style="color: hsl(0, 100%, 40%);">-       "Remove a Route\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Remove a Route\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Destination Point Code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Point Code Mask\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Point Code Length\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_rt_rem, cs7_rt_rem_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "remove route POINT_CODE MASK",</span><br><span style="color: hsl(120, 100%, 40%);">+     "Remove a Route\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Remove a Route\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Destination Point Code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Point Code Mask\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Point Code Length\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_route_table *rtable = vty->index;</span><br><span>         struct osmo_ss7_route *rt;</span><br><span>@@ -429,10 +438,11 @@</span><br><span>   1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_xua, cs7_xua_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "listen " XUA_VAR_STR " <0-65534>",</span><br><span style="color: hsl(0, 100%, 40%);">-   "Configure/Enable xUA Listener\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     XUA_VAR_HELP_STR "SCTP Port number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_xua, cs7_xua_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "listen " XUA_VAR_STR " <0-65534>",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Configure/Enable xUA Listener\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           XUA_VAR_HELP_STR "SCTP Port number\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      struct osmo_xua_server *xs;</span><br><span>@@ -453,10 +463,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(no_cs7_xua, no_cs7_xua_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "no listen " XUA_VAR_STR " <0-65534>",</span><br><span style="color: hsl(0, 100%, 40%);">-        NO_STR "Disable xUA Listener on given SCTP Port\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    XUA_VAR_HELP_STR "SCTP Port number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(no_cs7_xua, no_cs7_xua_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "no listen " XUA_VAR_STR " <0-65534>",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR "Disable xUA Listener on given SCTP Port\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          XUA_VAR_HELP_STR "SCTP Port number\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      struct osmo_xua_server *xs;</span><br><span>@@ -472,11 +483,12 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(xua_local_ip, xua_local_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "local-ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(0, 100%, 40%);">-    "Configure the Local IP Address for xUA\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "IPv4 Address to use for XUA\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "IPv6 Address to use for XUA\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(xua_local_ip, xua_local_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "local-ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+          "Configure the Local IP Address for xUA\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "IPv4 Address to use for XUA\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "IPv6 Address to use for XUA\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_xua_server *xs = vty->index;</span><br><span> </span><br><span>@@ -485,11 +497,12 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(xua_accept_dyn_asp, xua_accept_dyn_asp_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "accept-asp-connections (pre-configured|dynamic-permitted)",</span><br><span style="color: hsl(0, 100%, 40%);">-  "Define what kind of ASP connections to accept\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "Accept only pre-confiugred ASPs (source IP/prt)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Accept any connection and dynamically create an ASP definition\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(xua_accept_dyn_asp, xua_accept_dyn_asp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "accept-asp-connections (pre-configured|dynamic-permitted)",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Define what kind of ASP connections to accept\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Accept only pre-confiugred ASPs (source IP/prt)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Accept any connection and dynamically create an ASP definition\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_xua_server *xs = vty->index;</span><br><span> </span><br><span>@@ -571,13 +584,14 @@</span><br><span>      1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_asp, cs7_asp_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "asp NAME <0-65535> <0-65535> " XUA_VAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-      "Configure Application Server Process\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Name of ASP\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Remote SCTP port number\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Local SCTP port number\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    XUA_VAR_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_asp, cs7_asp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "asp NAME <0-65535> <0-65535> " XUA_VAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+    "Configure Application Server Process\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Name of ASP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Remote SCTP port number\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Local SCTP port number\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          XUA_VAR_HELP_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_NODE_EXIT)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      const char *name = argv[0];</span><br><span>@@ -608,10 +622,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(no_cs7_asp, no_cs7_asp_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "no asp NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-        NO_STR "Disable Application Server Process\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Name of ASP\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(no_cs7_asp, no_cs7_asp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "no asp NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR "Disable Application Server Process\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Name of ASP\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      const char *name = argv[0];</span><br><span>@@ -626,11 +641,12 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(asp_local_ip, asp_local_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "local-ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(0, 100%, 40%);">-    "Specify Local IP Address from which to contact ASP\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Local IPv4 Address from which to contact of ASP\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Local IPv6 Address from which to contact of ASP\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(asp_local_ip, asp_local_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "local-ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+          "Specify Local IP Address from which to contact ASP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Local IPv4 Address from which to contact of ASP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Local IPv6 Address from which to contact of ASP\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_NODE_EXIT)</span><br><span> {</span><br><span>  struct osmo_ss7_asp *asp = vty->index;</span><br><span>    if (osmo_ss7_asp_peer_add_host(&asp->cfg.local, asp, argv[0]) != 0) {</span><br><span>@@ -640,11 +656,12 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(asp_remote_ip, asp_remote_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "remote-ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(0, 100%, 40%);">-   "Specify Remote IP Address of ASP\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Remote IPv4 Address of ASP\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Remote IPv6 Address of ASP\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(asp_remote_ip, asp_remote_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "remote-ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+         "Specify Remote IP Address of ASP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Remote IPv4 Address of ASP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Remote IPv6 Address of ASP\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_NODE_EXIT)</span><br><span> {</span><br><span>  struct osmo_ss7_asp *asp = vty->index;</span><br><span>    if (osmo_ss7_asp_peer_add_host(&asp->cfg.remote, asp, argv[0]) != 0) {</span><br><span>@@ -654,22 +671,24 @@</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(asp_qos_clas, asp_qos_class_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "qos-class <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-    "Specify QoS Class of ASP\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "QoS Class of ASP\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(asp_qos_clas, asp_qos_class_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "qos-class <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Specify QoS Class of ASP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "QoS Class of ASP\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_NODE_EXIT)</span><br><span> {</span><br><span>  struct osmo_ss7_asp *asp = vty->index;</span><br><span>    asp->cfg.qos_class = 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(asp_role, asp_role_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "role (sg|asp|ipsp)",</span><br><span style="color: hsl(0, 100%, 40%);">- "Specify the xUA role for this ASP\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "SG (Signaling Gateway)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "ASP (Application Server Process)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "IPSP (IP Signalling Point)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(asp_role, asp_role_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "role (sg|asp|ipsp)",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Specify the xUA role for this ASP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "SG (Signaling Gateway)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "ASP (Application Server Process)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "IPSP (IP Signalling Point)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_NODE_EXIT)</span><br><span> {</span><br><span>  struct osmo_ss7_asp *asp = vty->index;</span><br><span> </span><br><span>@@ -687,11 +706,12 @@</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(sctp_role, asp_sctp_role_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "sctp-role (client|server)",</span><br><span style="color: hsl(0, 100%, 40%);">-  "Specify the SCTP role for this ASP\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Operate as SCTP client; connect to a server\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Operate as SCTP server; wait for client connections\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(sctp_role, asp_sctp_role_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "sctp-role (client|server)",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Specify the SCTP role for this ASP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Operate as SCTP client; connect to a server\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Operate as SCTP server; wait for client connections\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_NODE_EXIT)</span><br><span> {</span><br><span>  struct osmo_ss7_asp *asp = vty->index;</span><br><span> </span><br><span>@@ -705,18 +725,20 @@</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(asp_block, asp_block_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "block",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Allows a SCTP Association with ASP, but doesn't let it become active\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(asp_block, asp_block_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "block",</span><br><span style="color: hsl(120, 100%, 40%);">+    "Allows a SCTP Association with ASP, but doesn't let it become active\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_NODE_EXIT)</span><br><span> {</span><br><span>  /* TODO */</span><br><span>   vty_out(vty, "Not supported yet%s", VTY_NEWLINE);</span><br><span>  return CMD_WARNING;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(asp_shutdown, asp_shutdown_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "shutdown",</span><br><span style="color: hsl(0, 100%, 40%);">-   "Terminates SCTP association; New associations will be rejected\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(asp_shutdown, asp_shutdown_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "shutdown",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Terminates SCTP association; New associations will be rejected\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_NODE_EXIT)</span><br><span> {</span><br><span>  /* TODO */</span><br><span>   vty_out(vty, "Not supported yet%s", VTY_NEWLINE);</span><br><span>@@ -795,11 +817,12 @@</span><br><span>  1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_as, cs7_as_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "as NAME " XUA_VAR_STR,</span><br><span style="color: hsl(0, 100%, 40%);">-       "Configure an Application Server\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "Name of the Application Server\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    XUA_VAR_HELP_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_as, cs7_as_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "as NAME " XUA_VAR_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+     "Configure an Application Server\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "Name of the Application Server\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          XUA_VAR_HELP_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      struct osmo_ss7_as *as;</span><br><span>@@ -826,10 +849,11 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(no_cs7_as, no_cs7_as_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "no as NAME",</span><br><span style="color: hsl(0, 100%, 40%);">- NO_STR "Disable Application Server\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Name of AS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(no_cs7_as, no_cs7_as_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "no as NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+       NO_STR "Disable Application Server\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Name of AS\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = vty->index;</span><br><span>      const char *name = argv[0];</span><br><span>@@ -845,10 +869,11 @@</span><br><span> }</span><br><span> </span><br><span> /* TODO: routing-key */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_asp, as_asp_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-        "asp NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-   "Specify that a given ASP is part of this AS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-       "Name of ASP to be added to AS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_asp, as_asp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "asp NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Specify that a given ASP is part of this AS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+     "Name of ASP to be added to AS\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_as *as = vty->index;</span><br><span> </span><br><span>@@ -860,10 +885,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_no_asp, as_no_asp_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "no asp NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-        NO_STR "Specify ASP to be removed from this AS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "Name of ASP to be removed\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_no_asp, as_no_asp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "no asp NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR "Specify ASP to be removed from this AS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Name of ASP to be removed\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_as *as = vty->index;</span><br><span> </span><br><span>@@ -875,13 +901,14 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_traf_mode, as_traf_mode_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "traffic-mode (broadcast | loadshare | roundrobin | override)",</span><br><span style="color: hsl(0, 100%, 40%);">-       "Specifies traffic mode of operation of the ASP within the AS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Broadcast to all ASP within AS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "Share Load among all ASP within AS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Round-Robin between all ASP within AS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "Override\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(as_traf_mode, as_traf_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              OSMO_SCCP_LIB_ATTR_RSTRT_ASP,</span><br><span style="color: hsl(120, 100%, 40%);">+         "traffic-mode (broadcast | loadshare | roundrobin | override)",</span><br><span style="color: hsl(120, 100%, 40%);">+             "Specifies traffic mode of operation of the ASP within the AS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Broadcast to all ASP within AS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "Share Load among all ASP within AS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "Round-Robin between all ASP within AS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Override\n")</span><br><span> {</span><br><span>   struct osmo_ss7_as *as = vty->index;</span><br><span> </span><br><span>@@ -890,9 +917,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_no_traf_mode, as_no_traf_mode_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "no traffic-mode",</span><br><span style="color: hsl(0, 100%, 40%);">-    NO_STR "Remove explicit traffic mode of operation of this AS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(as_no_traf_mode, as_no_traf_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             OSMO_SCCP_LIB_ATTR_RSTRT_ASP,</span><br><span style="color: hsl(120, 100%, 40%);">+         "no traffic-mode",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR "Remove explicit traffic mode of operation of this AS\n")</span><br><span> {</span><br><span>        struct osmo_ss7_as *as = vty->index;</span><br><span> </span><br><span>@@ -901,20 +929,22 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_recov_tout, as_recov_tout_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "recovery-timeout <1-2000>",</span><br><span style="color: hsl(0, 100%, 40%);">-    "Specifies the recovery timeout value in milliseconds\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Recovery Timeout in Milliseconds\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_recov_tout, as_recov_tout_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "recovery-timeout <1-2000>",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Specifies the recovery timeout value in milliseconds\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Recovery Timeout in Milliseconds\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_as *as = vty->index;</span><br><span>      as->cfg.recovery_timeout_msec = 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(as_qos_clas, as_qos_class_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-        "qos-class <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-    "Specity QoS Class of AS\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "QoS Class of AS\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_qos_clas, as_qos_class_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "qos-class <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Specity QoS Class of AS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "QoS Class of AS\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_as *as = vty->index;</span><br><span>      as->cfg.qos_class = atoi(argv[0]);</span><br><span>@@ -984,41 +1014,46 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_rout_key, as_rout_key_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      ROUTING_KEY_CMD,</span><br><span style="color: hsl(0, 100%, 40%);">-      ROUTING_KEY_CMD_STRS)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_rout_key, as_rout_key_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       ROUTING_KEY_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+      ROUTING_KEY_CMD_STRS,</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  return _rout_key(vty, argv[0], argv[1], NULL, NULL);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_rout_key_si, as_rout_key_si_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      ROUTING_KEY_CMD      ROUTING_KEY_SI_ARG,</span><br><span style="color: hsl(0, 100%, 40%);">-      ROUTING_KEY_CMD_STRS ROUTING_KEY_SI_ARG_STRS)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_rout_key_si, as_rout_key_si_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          ROUTING_KEY_CMD      ROUTING_KEY_SI_ARG,</span><br><span style="color: hsl(120, 100%, 40%);">+      ROUTING_KEY_CMD_STRS ROUTING_KEY_SI_ARG_STRS,</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  return _rout_key(vty, argv[0], argv[1], argv[2], NULL);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_rout_key_ssn, as_rout_key_ssn_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      ROUTING_KEY_CMD      ROUTING_KEY_SSN_ARG,</span><br><span style="color: hsl(0, 100%, 40%);">-      ROUTING_KEY_CMD_STRS ROUTING_KEY_SSN_ARG_STRS)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_rout_key_ssn, as_rout_key_ssn_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         ROUTING_KEY_CMD      ROUTING_KEY_SSN_ARG,</span><br><span style="color: hsl(120, 100%, 40%);">+     ROUTING_KEY_CMD_STRS ROUTING_KEY_SSN_ARG_STRS,</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  return _rout_key(vty, argv[0], argv[1], NULL, argv[2]);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_rout_key_si_ssn, as_rout_key_si_ssn_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      ROUTING_KEY_CMD      ROUTING_KEY_SI_ARG      ROUTING_KEY_SSN_ARG,</span><br><span style="color: hsl(0, 100%, 40%);">-      ROUTING_KEY_CMD_STRS ROUTING_KEY_SI_ARG_STRS ROUTING_KEY_SSN_ARG_STRS)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_rout_key_si_ssn, as_rout_key_si_ssn_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     ROUTING_KEY_CMD      ROUTING_KEY_SI_ARG      ROUTING_KEY_SSN_ARG,</span><br><span style="color: hsl(120, 100%, 40%);">+     ROUTING_KEY_CMD_STRS ROUTING_KEY_SI_ARG_STRS ROUTING_KEY_SSN_ARG_STRS,</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  return _rout_key(vty, argv[0], argv[1], argv[2], argv[3]);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_pc_override, as_pc_override_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-    "point-code override dpc PC",</span><br><span style="color: hsl(0, 100%, 40%);">- "Point Code Specific Features\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Override (force) a point-code to hard-coded value\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Override Source Point Code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "Override Destination Point Code\n"</span><br><span style="color: hsl(0, 100%, 40%);">-   "New Point Code\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_pc_override, as_pc_override_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "point-code override dpc PC",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Point Code Specific Features\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Override (force) a point-code to hard-coded value\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Override Source Point Code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Override Destination Point Code\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "New Point Code\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_as *as = vty->index;</span><br><span>      int pc = osmo_ss7_pointcode_parse(as->inst, argv[0]);</span><br><span>@@ -1038,13 +1073,14 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(as_pc_patch_sccp, as_pc_patch_sccp_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "point-code override patch-sccp (disabled|both)",</span><br><span style="color: hsl(0, 100%, 40%);">-     "Point Code Specific Features\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Override (force) a point-code to hard-coded value\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Patch point code values into SCCP called/calling address\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Don't patch any point codes into SCCP called/calling address\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "Patch both origin and destination point codes into SCCP called/calling address\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(as_pc_patch_sccp, as_pc_patch_sccp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "point-code override patch-sccp (disabled|both)",</span><br><span style="color: hsl(120, 100%, 40%);">+           "Point Code Specific Features\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Override (force) a point-code to hard-coded value\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Patch point code values into SCCP called/calling address\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Don't patch any point codes into SCCP called/calling address\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Patch both origin and destination point codes into SCCP called/calling address\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_as *as = vty->index;</span><br><span> </span><br><span>@@ -1423,9 +1459,10 @@</span><br><span> }</span><br><span> </span><br><span> /* Create a new addressbook entry and switch nodes */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr, cs7_sccpaddr_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "sccp-address NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Create/Modify an SCCP addressbook entry\n" "Name of the SCCP Address\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr, cs7_sccpaddr_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "sccp-address NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Create/Modify an SCCP addressbook entry\n" "Name of the SCCP Address\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = (struct osmo_ss7_instance *)vty->index;</span><br><span>  struct osmo_sccp_addr_entry *entry;</span><br><span>@@ -1466,9 +1503,10 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_del, cs7_sccpaddr_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no sccp-address NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR "Delete an SCCP addressbook entry\n" "Name of the SCCP Address\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_del, cs7_sccpaddr_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "no sccp-address NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+     NO_STR "Delete an SCCP addressbook entry\n" "Name of the SCCP Address\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_ss7_instance *inst = (struct osmo_ss7_instance *)vty->index;</span><br><span>  struct osmo_sccp_addr_entry *entry;</span><br><span>@@ -1488,10 +1526,11 @@</span><br><span> }</span><br><span> </span><br><span> /* Set routing indicator of sccp address */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_ri, cs7_sccpaddr_ri_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "routing-indicator (GT|PC|IP)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Add Routing Indicator\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "by global-title\n" "by point-code\n" "by ip-address\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_ri, cs7_sccpaddr_ri_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "routing-indicator (GT|PC|IP)",</span><br><span style="color: hsl(120, 100%, 40%);">+     "Add Routing Indicator\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "by global-title\n" "by point-code\n" "by ip-address\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1511,8 +1550,9 @@</span><br><span> }</span><br><span> </span><br><span> /* Set point-code number of sccp address */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_pc, cs7_sccpaddr_pc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "point-code POINT_CODE", "Add point-code Number\n" "PC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_pc, cs7_sccpaddr_pc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "point-code POINT_CODE", "Add point-code Number\n" "PC\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  int pc;</span><br><span>      struct osmo_sccp_addr_entry *entry =</span><br><span>@@ -1533,8 +1573,9 @@</span><br><span> }</span><br><span> </span><br><span> /* Remove point-code number from sccp address */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_pc_del, cs7_sccpaddr_pc_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no point-code", NO_STR "Remove point-code Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_pc_del, cs7_sccpaddr_pc_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "no point-code", NO_STR "Remove point-code Number\n",</span><br><span style="color: hsl(120, 100%, 40%);">+     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1545,8 +1586,9 @@</span><br><span> }</span><br><span> </span><br><span> /* Set subsystem number of sccp address */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_ssn, cs7_sccpaddr_ssn_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "subsystem-number <0-4294967295>", "Add Subsystem Number\n" "SSN\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_ssn, cs7_sccpaddr_ssn_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          "subsystem-number <0-4294967295>", "Add Subsystem Number\n" "SSN\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1557,8 +1599,9 @@</span><br><span> }</span><br><span> </span><br><span> /* Remove subsystem number from sccp address */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_ssn_del, cs7_sccpaddr_ssn_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no subsystem-number", NO_STR "Remove Subsystem Number\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_ssn_del, cs7_sccpaddr_ssn_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "no subsystem-number", NO_STR "Remove Subsystem Number\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1573,9 +1616,10 @@</span><br><span>  * so we leave the related VTY options out for now */</span><br><span> </span><br><span> /* Set IP Address (V4) of sccp address */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_ipv4, cs7_sccpaddr_ipv4_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "ip-address V4 A.B.C.D",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Add IP-Address\n" "Protocol version 4\n" "IP-Address digits\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_ipv4, cs7_sccpaddr_ipv4_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+    "ip-address V4 A.B.C.D",</span><br><span style="color: hsl(120, 100%, 40%);">+    "Add IP-Address\n" "Protocol version 4\n" "IP-Address digits\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1603,9 +1647,10 @@</span><br><span> }</span><br><span> </span><br><span> /* Set IP Address (V6) of sccp address */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_ipv6, cs7_sccpaddr_ipv6_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "ip-address V6 A:B:C:D:E:F:G:H",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Add IP-Address\n" "Protocol version 6\n" "IP-Address digits\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_ipv6, cs7_sccpaddr_ipv6_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "ip-address V6 A:B:C:D:E:F:G:H",</span><br><span style="color: hsl(120, 100%, 40%);">+    "Add IP-Address\n" "Protocol version 6\n" "IP-Address digits\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1633,8 +1678,9 @@</span><br><span> }</span><br><span> </span><br><span> /* Remove IP Address from sccp address */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_ip_del, cs7_sccpaddr_ip_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no ip-address", NO_STR "Remove IP-Address\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_ip_del, cs7_sccpaddr_ip_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "no ip-address", NO_STR "Remove IP-Address\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1647,8 +1693,9 @@</span><br><span> #endif</span><br><span> </span><br><span> /* Configure global title and switch nodes */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_gt, cs7_sccpaddr_gt_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "global-title", "Add/Modify Global Title\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_gt, cs7_sccpaddr_gt_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "global-title", "Add/Modify Global Title\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1658,8 +1705,9 @@</span><br><span> }</span><br><span> </span><br><span> /* Remove global title from sccp address */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_gt_del, cs7_sccpaddr_gt_del_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no global-title", NO_STR "Remove Global Title\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_gt_del, cs7_sccpaddr_gt_del_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "no global-title", NO_STR "Remove Global Title\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1670,8 +1718,9 @@</span><br><span> }</span><br><span> </span><br><span> /* Set global title inicator of the sccp address gt */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_gt_gti, cs7_sccpaddr_gt_gti_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "global-title-indicator <0-15>", "Set Global Title Indicator\n" "GTI\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_gt_gti, cs7_sccpaddr_gt_gti_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "global-title-indicator <0-15>", "Set Global Title Indicator\n" "GTI\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1681,8 +1730,9 @@</span><br><span> }</span><br><span> </span><br><span> /* Set global title translation type of the sccp address gt */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_gt_tt, cs7_sccpaddr_gt_tt_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "translation-type <0-255>", "Set Global Title Translation Type\n" "TT\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_gt_tt, cs7_sccpaddr_gt_tt_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "translation-type <0-255>", "Set Global Title Translation Type\n" "TT\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1692,9 +1742,10 @@</span><br><span> }</span><br><span> </span><br><span> /* Set global title numbering plan indicator of the sccp address gt */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_gt_npi, cs7_sccpaddr_gt_npi_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "numbering-plan-indicator <0-15>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set Global Title Numbering Plan Indicator\n" "NPI\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_gt_npi, cs7_sccpaddr_gt_npi_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "numbering-plan-indicator <0-15>",</span><br><span style="color: hsl(120, 100%, 40%);">+    "Set Global Title Numbering Plan Indicator\n" "NPI\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1704,9 +1755,10 @@</span><br><span> }</span><br><span> </span><br><span> /* Set global title nature of address indicator of the sccp address gt */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_gt_nai, cs7_sccpaddr_gt_nai_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "nature-of-address-indicator <0-127>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Set Global Title Nature of Address Indicator\n" "NAI\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_gt_nai, cs7_sccpaddr_gt_nai_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "nature-of-address-indicator <0-127>",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Set Global Title Nature of Address Indicator\n" "NAI\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>@@ -1716,8 +1768,9 @@</span><br><span> }</span><br><span> </span><br><span> /* Set global title digits of the sccp address gt */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cs7_sccpaddr_gt_digits, cs7_sccpaddr_gt_digits_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "digits DIGITS", "Set Global Title Digits\n" "Number digits\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cs7_sccpaddr_gt_digits, cs7_sccpaddr_gt_digits_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           "digits DIGITS", "Set Global Title Digits\n" "Number digits\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  struct osmo_sccp_addr_entry *entry =</span><br><span>             (struct osmo_sccp_addr_entry *)vty->index;</span><br><span>diff --git a/src/sccp_vty.c b/src/sccp_vty.c</span><br><span>index 2e5b345..13fe402 100644</span><br><span>--- a/src/sccp_vty.c</span><br><span>+++ b/src/sccp_vty.c</span><br><span>@@ -143,8 +143,8 @@</span><br><span> </span><br><span> /* sccp-timer <name> <1-999999></span><br><span>  * (cmdstr and doc are dynamically generated from osmo_sccp_timer_names.) */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(sccp_timer, sccp_timer_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      NULL, NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(sccp_timer, sccp_timer_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        NULL, NULL, CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>      struct osmo_ss7_instance *ss7 = vty->index;</span><br><span>       enum osmo_sccp_timer timer = get_string_value(osmo_sccp_timer_names, argv[0]);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/20465">change 20465</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/libosmo-sccp/+/20465"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmo-sccp </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If77aea2223891663d465f162614ce8db18168c09 </div>
<div style="display:none"> Gerrit-Change-Number: 20465 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: 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: daniel <dwillmann@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>