<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/20250">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgcp_vty: add user attributes to configuration commands<br><br>To make clear which configuration changes (configure terminal)<br>apply when, add appropriate user attributes to VTY commands.<br><br>Change-Id: I2d9487801b3b78f94577264b56d217c926ef76a9<br>Related: SYS#4937<br>---<br>M include/osmocom/mgcp/vty.h<br>M src/libosmo-mgcp/mgcp_vty.c<br>M src/osmo-mgw/mgw_main.c<br>3 files changed, 295 insertions(+), 211 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/50/20250/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/mgcp/vty.h b/include/osmocom/mgcp/vty.h</span><br><span>index bf6b7a8..2fe4953 100644</span><br><span>--- a/include/osmocom/mgcp/vty.h</span><br><span>+++ b/include/osmocom/mgcp/vty.h</span><br><span>@@ -6,3 +6,9 @@</span><br><span>       MGCP_NODE = _LAST_OSMOVTY_NODE + 1,</span><br><span>  TRUNK_NODE,</span><br><span> };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum mgw_vty_cmd_attr {</span><br><span style="color: hsl(120, 100%, 40%);">+  MGW_VTY_ATTR_RESTART_FULL = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+        MGW_VTY_ATTR_IMMEDIATE,</span><br><span style="color: hsl(120, 100%, 40%);">+       MGW_VTY_ATTR_NEW_CONN,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>index 1df69c6..293856e 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_vty.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>@@ -42,6 +42,7 @@</span><br><span> #define RTP_KEEPALIVE_STR "Send dummy UDP packet to net RTP destination\n"</span><br><span> #define RTP_TS101318_RFC5993_CONV_STR "Convert GSM-HR from TS101318 to RFC5993 and vice versa\n"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define X(x) (1 << x)</span><br><span> </span><br><span> static struct mgcp_config *g_cfg = NULL;</span><br><span> </span><br><span>@@ -408,34 +409,37 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_local_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_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%);">-      "Local options for the SDP record\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      IP_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "IPv4 Address to use in SDP record\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "IPv6 Address to use in SDP record\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_mgcp_local_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "local ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+          "Local options for the SDP record\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        IP_STR</span><br><span style="color: hsl(120, 100%, 40%);">+        "IPv4 Address to use in SDP record\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "IPv6 Address to use in SDP record\n")</span><br><span> {</span><br><span>  osmo_talloc_replace_string(g_cfg, &g_cfg->local_ip, argv[0]);</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span> #define BIND_STR "Listen/Bind related socket option\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_bind_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_bind_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "bind ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(0, 100%, 40%);">-      BIND_STR IP_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "IPv4 Address to bind to\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "IPv6 Address to bind to\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_bind_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_mgcp_bind_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(MGW_VTY_ATTR_RESTART_FULL),</span><br><span style="color: hsl(120, 100%, 40%);">+         "bind ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+           BIND_STR IP_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "IPv4 Address to bind to\n"</span><br><span style="color: hsl(120, 100%, 40%);">+         "IPv6 Address to bind to\n")</span><br><span> {</span><br><span>    osmo_talloc_replace_string(g_cfg, &g_cfg->source_addr, argv[0]);</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_bind_port,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_bind_port_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "bind port <0-65534>",</span><br><span style="color: hsl(0, 100%, 40%);">-      BIND_STR "Port information\n" "UDP port to listen for MGCP messages\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_bind_port,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_mgcp_bind_port_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(MGW_VTY_ATTR_RESTART_FULL),</span><br><span style="color: hsl(120, 100%, 40%);">+         "bind port <0-65534>",</span><br><span style="color: hsl(120, 100%, 40%);">+        BIND_STR "Port information\n" "UDP port to listen for MGCP messages\n")</span><br><span> {</span><br><span>       unsigned int port = atoi(argv[0]);</span><br><span>   g_cfg->source_port = port;</span><br><span>@@ -457,11 +461,12 @@</span><br><span> #define RANGE_START_STR "Start of the range of ports\n"</span><br><span> #define RANGE_END_STR "End of the range of ports\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_port_range,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_port_range_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp port-range <1024-65534> <1025-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR "Range of ports to use for the NET side\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      RANGE_START_STR RANGE_END_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_port_range,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_mgcp_rtp_port_range_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_RESTART_FULL),</span><br><span style="color: hsl(120, 100%, 40%);">+         "rtp port-range <1024-65534> <1025-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+             RTP_STR "Range of ports to use for the NET side\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          RANGE_START_STR RANGE_END_STR)</span><br><span> {</span><br><span>    int start;</span><br><span>   int end;</span><br><span>@@ -499,11 +504,12 @@</span><br><span>              RTP_STR "Range of ports to use for the NET side\n"</span><br><span>                 RANGE_START_STR RANGE_END_STR)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_bind_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_bind_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp bind-ip A.B.C.D",</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR "Bind endpoints facing the Network\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "IPv4 Address to bind to\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_bind_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_mgcp_rtp_bind_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp bind-ip A.B.C.D",</span><br><span style="color: hsl(120, 100%, 40%);">+              RTP_STR "Bind endpoints facing the Network\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "IPv4 Address to bind to\n")</span><br><span> {</span><br><span>    osmo_talloc_replace_string(g_cfg, &g_cfg->net_ports.bind_addr_v4, argv[0]);</span><br><span>   return CMD_SUCCESS;</span><br><span>@@ -513,11 +519,12 @@</span><br><span>           "rtp net-bind-ip A.B.C.D",</span><br><span>                 RTP_STR "Bind endpoints facing the Network\n" "Address to bind to\n")</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_no_bind_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_no_bind_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp bind-ip",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR RTP_STR "Bind endpoints facing the Network\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Address to bind to\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_no_bind_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_mgcp_rtp_no_bind_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp bind-ip",</span><br><span style="color: hsl(120, 100%, 40%);">+           NO_STR RTP_STR "Bind endpoints facing the Network\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Address to bind to\n")</span><br><span> {</span><br><span>         talloc_free(g_cfg->net_ports.bind_addr_v4);</span><br><span>       g_cfg->net_ports.bind_addr_v4 = NULL;</span><br><span>@@ -529,50 +536,55 @@</span><br><span>              NO_STR RTP_STR "Bind endpoints facing the Network\n"</span><br><span>               "Address to bind to\n")</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_bind_ip_v6,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_bind_ip_v6_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp bind-ip-v6 " VTY_IPV6_CMD,</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR "Bind endpoints facing the Network\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "IPv6 Address to bind to\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_bind_ip_v6,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_mgcp_rtp_bind_ip_v6_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp bind-ip-v6 " VTY_IPV6_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+             RTP_STR "Bind endpoints facing the Network\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "IPv6 Address to bind to\n")</span><br><span> {</span><br><span>    osmo_talloc_replace_string(g_cfg, &g_cfg->net_ports.bind_addr_v6, argv[0]);</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_no_bind_ip_v6,</span><br><span style="color: hsl(0, 100%, 40%);">-cfg_mgcp_rtp_no_bind_ip_v6_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-"no rtp bind-ip-v6",</span><br><span style="color: hsl(0, 100%, 40%);">-NO_STR RTP_STR "Bind endpoints facing the Network\n"</span><br><span style="color: hsl(0, 100%, 40%);">-"Address to bind to\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_no_bind_ip_v6,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_mgcp_rtp_no_bind_ip_v6_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp bind-ip-v6",</span><br><span style="color: hsl(120, 100%, 40%);">+        NO_STR RTP_STR "Bind endpoints facing the Network\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "Address to bind to\n")</span><br><span> {</span><br><span>         talloc_free(g_cfg->net_ports.bind_addr_v6);</span><br><span>       g_cfg->net_ports.bind_addr_v6 = NULL;</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_net_bind_ip_probing,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_net_bind_ip_probing_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp ip-probing",</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR "automatic rtp bind ip selection\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_net_bind_ip_probing,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_mgcp_rtp_net_bind_ip_probing_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp ip-probing",</span><br><span style="color: hsl(120, 100%, 40%);">+           RTP_STR "automatic rtp bind ip selection\n")</span><br><span> {</span><br><span>    g_cfg->net_ports.bind_addr_probe = true;</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_no_net_bind_ip_probing,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_no_net_bind_ip_probing_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp ip-probing",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR RTP_STR "no automatic rtp bind ip selection\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_no_net_bind_ip_probing,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_mgcp_rtp_no_net_bind_ip_probing_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp ip-probing",</span><br><span style="color: hsl(120, 100%, 40%);">+        NO_STR RTP_STR "no automatic rtp bind ip selection\n")</span><br><span> {</span><br><span>  g_cfg->net_ports.bind_addr_probe = false;</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_ip_dscp,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_ip_dscp_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp ip-dscp <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "Apply IP_TOS to the audio stream (including Osmux)\n" "The DSCP value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_ip_dscp,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_mgcp_rtp_ip_dscp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp ip-dscp <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+        RTP_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "Apply IP_TOS to the audio stream (including Osmux)\n" "The DSCP value\n")</span><br><span> {</span><br><span>    int dscp = atoi(argv[0]);</span><br><span>    g_cfg->endp_dscp = dscp;</span><br><span>@@ -584,29 +596,32 @@</span><br><span>           RTP_STR</span><br><span>              "Apply IP_TOS to the audio stream\n" "The DSCP value\n")</span><br><span> #define FORCE_PTIME_STR "Force a fixed ptime for packets sent"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_force_ptime,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_force_ptime_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp force-ptime (10|20|40)",</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR FORCE_PTIME_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "The required ptime (packet duration) in ms\n" "10 ms\n20 ms\n40 ms\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_force_ptime,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_mgcp_rtp_force_ptime_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp force-ptime (10|20|40)",</span><br><span style="color: hsl(120, 100%, 40%);">+       RTP_STR FORCE_PTIME_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "The required ptime (packet duration) in ms\n" "10 ms\n20 ms\n40 ms\n")</span><br><span> {</span><br><span>       g_cfg->force_ptime = atoi(argv[0]);</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_rtp_force_ptime,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_rtp_force_ptime_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp force-ptime", NO_STR RTP_STR FORCE_PTIME_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_rtp_force_ptime,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_mgcp_no_rtp_force_ptime_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp force-ptime", NO_STR RTP_STR FORCE_PTIME_STR)</span><br><span> {</span><br><span>   g_cfg->force_ptime = 0;</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_sdp_fmtp_extra,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_sdp_fmtp_extra_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "sdp audio fmtp-extra .NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Add extra fmtp for the SDP file\n" "Audio\n" "Fmtp-extra\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Extra Information\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_sdp_fmtp_extra,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_mgcp_sdp_fmtp_extra_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "sdp audio fmtp-extra .NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Add extra fmtp for the SDP file\n" "Audio\n" "Fmtp-extra\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Extra Information\n")</span><br><span> {</span><br><span>  struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -619,9 +634,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_allow_transcoding,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_allow_transcoding_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "allow-transcoding", "Allow transcoding\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_allow_transcoding,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_mgcp_allow_transcoding_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "allow-transcoding", "Allow transcoding\n")</span><br><span> {</span><br><span>   struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -629,9 +645,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_allow_transcoding,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_allow_transcoding_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no allow-transcoding", NO_STR "Allow transcoding\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_allow_transcoding,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_mgcp_no_allow_transcoding_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no allow-transcoding", NO_STR "Allow transcoding\n")</span><br><span> {</span><br><span>         struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -666,10 +683,11 @@</span><br><span>           "sdp audio payload name NAME",</span><br><span>             SDP_STR AUDIO_STR AUDIO_STR "Name\n" "Payload name\n")</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_sdp_payload_send_ptime,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_sdp_payload_send_ptime_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "sdp audio-payload send-ptime",</span><br><span style="color: hsl(0, 100%, 40%);">-      SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_sdp_payload_send_ptime,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_mgcp_sdp_payload_send_ptime_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "sdp audio-payload send-ptime",</span><br><span style="color: hsl(120, 100%, 40%);">+             SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span> {</span><br><span>       struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -677,10 +695,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_sdp_payload_send_ptime,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_sdp_payload_send_ptime_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no sdp audio-payload send-ptime",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_sdp_payload_send_ptime,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_mgcp_no_sdp_payload_send_ptime_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no sdp audio-payload send-ptime",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span> {</span><br><span>        struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -688,10 +707,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_sdp_payload_send_name,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_sdp_payload_send_name_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "sdp audio-payload send-name",</span><br><span style="color: hsl(0, 100%, 40%);">-      SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_sdp_payload_send_name,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_mgcp_sdp_payload_send_name_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "sdp audio-payload send-name",</span><br><span style="color: hsl(120, 100%, 40%);">+              SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span> {</span><br><span>      struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -699,10 +719,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_sdp_payload_send_name,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_sdp_payload_send_name_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no sdp audio-payload send-name",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_sdp_payload_send_name,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_mgcp_no_sdp_payload_send_name_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no sdp audio-payload send-name",</span><br><span style="color: hsl(120, 100%, 40%);">+           NO_STR SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span> {</span><br><span>       struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -718,11 +739,12 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_force_realloc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_force_realloc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "force-realloc (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Force endpoint reallocation when the endpoint is still seized\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Don't force reallocation\n" "force reallocation\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_force_realloc,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_mgcp_force_realloc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "force-realloc (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+              "Force endpoint reallocation when the endpoint is still seized\n"</span><br><span style="color: hsl(120, 100%, 40%);">+           "Don't force reallocation\n" "force reallocation\n")</span><br><span> {</span><br><span>      struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -730,11 +752,12 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_accept_all,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_accept_all_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp-accept-all (0|1)",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Accept all RTP packets, even when the originating IP/Port does not match\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "enable filter\n" "disable filter\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_accept_all,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_mgcp_rtp_accept_all_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "rtp-accept-all (0|1)",</span><br><span style="color: hsl(120, 100%, 40%);">+             "Accept all RTP packets, even when the originating IP/Port does not match\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "enable filter\n" "disable filter\n")</span><br><span> {</span><br><span>         struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -742,10 +765,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_number_endp,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_number_endp_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "number endpoints <1-65534>",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Number options\n" "Endpoints available\n" "Number endpoints\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_number_endp,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_mgcp_number_endp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(MGW_VTY_ATTR_RESTART_FULL),</span><br><span style="color: hsl(120, 100%, 40%);">+         "number endpoints <1-65534>",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Number options\n" "Endpoints available\n" "Number endpoints\n")</span><br><span> {</span><br><span>    struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -753,15 +777,21 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_omit_rtcp, cfg_mgcp_omit_rtcp_cmd, "rtcp-omit", RTCP_OMIT_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_omit_rtcp,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_mgcp_omit_rtcp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "rtcp-omit", RTCP_OMIT_STR)</span><br><span> {</span><br><span>     struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         trunk->omit_rtcp = 1;</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_omit_rtcp,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_omit_rtcp_cmd, "no rtcp-omit", NO_STR RTCP_OMIT_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_omit_rtcp,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_mgcp_no_omit_rtcp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "no rtcp-omit",</span><br><span style="color: hsl(120, 100%, 40%);">+             NO_STR RTCP_OMIT_STR)</span><br><span> {</span><br><span>     struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -769,9 +799,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_patch_rtp_ssrc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_patch_rtp_ssrc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp-patch ssrc", RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_patch_rtp_ssrc,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_mgcp_patch_rtp_ssrc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp-patch ssrc", RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span> {</span><br><span>       struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -779,9 +810,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_patch_rtp_ssrc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_patch_rtp_ssrc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp-patch ssrc", NO_STR RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_patch_rtp_ssrc,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_mgcp_no_patch_rtp_ssrc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp-patch ssrc", NO_STR RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span> {</span><br><span>     struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -789,9 +821,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_patch_rtp_ts,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_patch_rtp_ts_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp-patch timestamp", RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_patch_rtp_ts,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_mgcp_patch_rtp_ts_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp-patch timestamp", RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span> {</span><br><span>        struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -799,9 +832,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_patch_rtp_ts,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_patch_rtp_ts_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp-patch timestamp", NO_STR RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_patch_rtp_ts,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_mgcp_no_patch_rtp_ts_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp-patch timestamp", NO_STR RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span> {</span><br><span>      struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -809,9 +843,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_patch_rtp_rfc5993hr,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_patch_rtp_rfc5993hr_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp-patch rfc5993hr", RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_patch_rtp_rfc5993hr,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_mgcp_patch_rtp_rfc5993hr_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp-patch rfc5993hr", RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span> {</span><br><span>     struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -819,9 +854,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_patch_rtp_rfc5993hr,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_patch_rtp_rfc5993hr_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp-patch rfc5993hr", NO_STR RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_patch_rtp_rfc5993hr,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_mgcp_no_patch_rtp_rfc5993hr_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp-patch rfc5993hr", NO_STR RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span> {</span><br><span>   struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -829,8 +865,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_patch_rtp,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_patch_rtp_cmd, "no rtp-patch", NO_STR RTP_PATCH_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_patch_rtp,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_mgcp_no_patch_rtp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp-patch", NO_STR RTP_PATCH_STR)</span><br><span> {</span><br><span>   struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -840,10 +878,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_keepalive,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_keepalive_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp keep-alive <1-120>",</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR RTP_KEEPALIVE_STR "Keep alive interval in secs\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_keepalive,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_mgcp_rtp_keepalive_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "rtp keep-alive <1-120>",</span><br><span style="color: hsl(120, 100%, 40%);">+             RTP_STR RTP_KEEPALIVE_STR "Keep alive interval in secs\n")</span><br><span> {</span><br><span>      struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -851,10 +890,11 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_rtp_keepalive_once,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_rtp_keepalive_once_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp keep-alive once",</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR RTP_KEEPALIVE_STR "Send dummy packet only once after CRCX/MDCX\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_keepalive_once,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_mgcp_rtp_keepalive_once_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "rtp keep-alive once",</span><br><span style="color: hsl(120, 100%, 40%);">+              RTP_STR RTP_KEEPALIVE_STR "Send dummy packet only once after CRCX/MDCX\n")</span><br><span> {</span><br><span>      struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -862,9 +902,10 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_no_rtp_keepalive,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_no_rtp_keepalive_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp keep-alive", NO_STR RTP_STR RTP_KEEPALIVE_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_no_rtp_keepalive,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_mgcp_no_rtp_keepalive_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "no rtp keep-alive", NO_STR RTP_STR RTP_KEEPALIVE_STR)</span><br><span> {</span><br><span>  struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);</span><br><span>         OSMO_ASSERT(trunk);</span><br><span>@@ -873,12 +914,13 @@</span><br><span> }</span><br><span> </span><br><span> #define CALL_AGENT_STR "Call agent information\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_agent_addr,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_mgcp_agent_addr_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "call-agent ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(0, 100%, 40%);">-      CALL_AGENT_STR IP_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      "IPv4 Address of the call agent\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "IPv6 Address of the call agent\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_agent_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_mgcp_agent_addr_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(MGW_VTY_ATTR_RESTART_FULL),</span><br><span style="color: hsl(120, 100%, 40%);">+         "call-agent ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+             CALL_AGENT_STR IP_STR</span><br><span style="color: hsl(120, 100%, 40%);">+         "IPv4 Address of the call agent\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "IPv6 Address of the call agent\n")</span><br><span> {</span><br><span>     osmo_talloc_replace_string(g_cfg, &g_cfg->call_agent_addr, argv[0]);</span><br><span>  return CMD_SUCCESS;</span><br><span>@@ -889,8 +931,10 @@</span><br><span>            CALL_AGENT_STR CALL_AGENT_STR IP_STR</span><br><span>                 "IPv4 Address of the callagent\n")</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgcp_trunk, cfg_mgcp_trunk_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "trunk <0-64>", "Configure a SS7 trunk\n" "Trunk Nr\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_trunk,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_mgcp_trunk_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(MGW_VTY_ATTR_RESTART_FULL),</span><br><span style="color: hsl(120, 100%, 40%);">+         "trunk <0-64>", "Configure a SS7 trunk\n" "Trunk Nr\n")</span><br><span> {</span><br><span>       struct mgcp_trunk *trunk;</span><br><span>    int index = atoi(argv[0]);</span><br><span>@@ -969,11 +1013,12 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_sdp_fmtp_extra,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_sdp_fmtp_extra_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "sdp audio fmtp-extra .NAME",</span><br><span style="color: hsl(0, 100%, 40%);">-      "Add extra fmtp for the SDP file\n" "Audio\n" "Fmtp-extra\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "Extra Information\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_sdp_fmtp_extra,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_trunk_sdp_fmtp_extra_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "sdp audio fmtp-extra .NAME",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Add extra fmtp for the SDP file\n" "Audio\n" "Fmtp-extra\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "Extra Information\n")</span><br><span> {</span><br><span>  struct mgcp_trunk *trunk = vty->index;</span><br><span>    char *txt = argv_concat(argv, argc, 0);</span><br><span>@@ -1017,117 +1062,134 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_sdp_payload_send_ptime,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_sdp_payload_send_ptime_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "sdp audio-payload send-ptime",</span><br><span style="color: hsl(0, 100%, 40%);">-      SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_sdp_payload_send_ptime,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_trunk_sdp_payload_send_ptime_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "sdp audio-payload send-ptime",</span><br><span style="color: hsl(120, 100%, 40%);">+             SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span> {</span><br><span>       struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->audio_send_ptime = 1;</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_no_sdp_payload_send_ptime,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_no_sdp_payload_send_ptime_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no sdp audio-payload send-ptime",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_no_sdp_payload_send_ptime,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_trunk_no_sdp_payload_send_ptime_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no sdp audio-payload send-ptime",</span><br><span style="color: hsl(120, 100%, 40%);">+          NO_STR SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span> {</span><br><span>        struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->audio_send_ptime = 0;</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_sdp_payload_send_name,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_sdp_payload_send_name_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "sdp audio-payload send-name",</span><br><span style="color: hsl(0, 100%, 40%);">-      SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_sdp_payload_send_name,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_trunk_sdp_payload_send_name_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "sdp audio-payload send-name",</span><br><span style="color: hsl(120, 100%, 40%);">+              SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span> {</span><br><span>      struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->audio_send_name = 1;</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_no_sdp_payload_send_name,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_no_sdp_payload_send_name_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no sdp audio-payload send-name",</span><br><span style="color: hsl(0, 100%, 40%);">-      NO_STR SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_no_sdp_payload_send_name,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_trunk_no_sdp_payload_send_name_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no sdp audio-payload send-name",</span><br><span style="color: hsl(120, 100%, 40%);">+           NO_STR SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span> {</span><br><span>       struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->audio_send_name = 0;</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_omit_rtcp, cfg_trunk_omit_rtcp_cmd, "rtcp-omit", RTCP_OMIT_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_omit_rtcp,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_trunk_omit_rtcp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "rtcp-omit", RTCP_OMIT_STR)</span><br><span> {</span><br><span>     struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->omit_rtcp = 1;</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_no_omit_rtcp,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_no_omit_rtcp_cmd, "no rtcp-omit", NO_STR RTCP_OMIT_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_no_omit_rtcp,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_trunk_no_omit_rtcp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "no rtcp-omit", NO_STR RTCP_OMIT_STR)</span><br><span> {</span><br><span>   struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->omit_rtcp = 0;</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_patch_rtp_ssrc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_patch_rtp_ssrc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp-patch ssrc", RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_patch_rtp_ssrc,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_trunk_patch_rtp_ssrc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp-patch ssrc", RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span> {</span><br><span>       struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->force_constant_ssrc = 1;</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_no_patch_rtp_ssrc,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_no_patch_rtp_ssrc_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp-patch ssrc", NO_STR RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_no_patch_rtp_ssrc,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_trunk_no_patch_rtp_ssrc_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp-patch ssrc", NO_STR RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span> {</span><br><span>     struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->force_constant_ssrc = 0;</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_patch_rtp_ts,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_patch_rtp_ts_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp-patch timestamp", RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_patch_rtp_ts,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_trunk_patch_rtp_ts_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp-patch timestamp", RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span> {</span><br><span>        struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->force_aligned_timing = 1;</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_no_patch_rtp_ts,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_no_patch_rtp_ts_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp-patch timestamp", NO_STR RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_no_patch_rtp_ts,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_trunk_no_patch_rtp_ts_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp-patch timestamp", NO_STR RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span> {</span><br><span>      struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->force_aligned_timing = 0;</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_patch_rtp_rfc5993hr,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_patch_rtp_rfc5993hr_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp-patch rfc5993hr", RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_patch_rtp_rfc5993hr,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_trunk_patch_rtp_rfc5993hr_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "rtp-patch rfc5993hr", RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span> {</span><br><span>     struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->rfc5993_hr_convert = true;</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_no_patch_rtp_rfc5993hr,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_no_patch_rtp_rfc5993hr_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp-patch rfc5993hr", NO_STR RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_no_patch_rtp_rfc5993hr,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_trunk_no_patch_rtp_rfc5993hr_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp-patch rfc5993hr", NO_STR RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span> {</span><br><span>   struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->rfc5993_hr_convert = false;</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_no_patch_rtp,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_no_patch_rtp_cmd, "no rtp-patch", NO_STR RTP_PATCH_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_no_patch_rtp,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_trunk_no_patch_rtp_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no rtp-patch", NO_STR RTP_PATCH_STR)</span><br><span> {</span><br><span>   struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->force_constant_ssrc = 0;</span><br><span>@@ -1136,47 +1198,52 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_rtp_keepalive,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_rtp_keepalive_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp keep-alive <1-120>",</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR RTP_KEEPALIVE_STR "Keep-alive interval in secs\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_rtp_keepalive,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_trunk_rtp_keepalive_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+          X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "rtp keep-alive <1-120>",</span><br><span style="color: hsl(120, 100%, 40%);">+             RTP_STR RTP_KEEPALIVE_STR "Keep-alive interval in secs\n")</span><br><span> {</span><br><span>      struct mgcp_trunk *trunk = vty->index;</span><br><span>    mgcp_trunk_set_keepalive(trunk, atoi(argv[0]));</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_rtp_keepalive_once,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_rtp_keepalive_once_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "rtp keep-alive once",</span><br><span style="color: hsl(0, 100%, 40%);">-      RTP_STR RTP_KEEPALIVE_STR "Send dummy packet only once after CRCX/MDCX\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_rtp_keepalive_once,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_trunk_rtp_keepalive_once_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+             X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "rtp keep-alive once",</span><br><span style="color: hsl(120, 100%, 40%);">+              RTP_STR RTP_KEEPALIVE_STR "Send dummy packet only once after CRCX/MDCX\n")</span><br><span> {</span><br><span>      struct mgcp_trunk *trunk = vty->index;</span><br><span>    mgcp_trunk_set_keepalive(trunk, MGCP_KEEPALIVE_ONCE);</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_no_rtp_keepalive,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_no_rtp_keepalive_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no rtp keep-alive", NO_STR RTP_STR RTP_KEEPALIVE_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_no_rtp_keepalive,</span><br><span style="color: hsl(120, 100%, 40%);">+         cfg_trunk_no_rtp_keepalive_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       X(MGW_VTY_ATTR_IMMEDIATE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "no rtp keep-alive", NO_STR RTP_STR RTP_KEEPALIVE_STR)</span><br><span> {</span><br><span>  struct mgcp_trunk *trunk = vty->index;</span><br><span>    mgcp_trunk_set_keepalive(trunk, 0);</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_allow_transcoding,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_allow_transcoding_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "allow-transcoding", "Allow transcoding\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_allow_transcoding,</span><br><span style="color: hsl(120, 100%, 40%);">+       cfg_trunk_allow_transcoding_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "allow-transcoding", "Allow transcoding\n")</span><br><span> {</span><br><span>   struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->no_audio_transcoding = 0;</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_no_allow_transcoding,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_no_allow_transcoding_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "no allow-transcoding", NO_STR "Allow transcoding\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_no_allow_transcoding,</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg_trunk_no_allow_transcoding_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(MGW_VTY_ATTR_NEW_CONN),</span><br><span style="color: hsl(120, 100%, 40%);">+             "no allow-transcoding", NO_STR "Allow transcoding\n")</span><br><span> {</span><br><span>         struct mgcp_trunk *trunk = vty->index;</span><br><span>    trunk->no_audio_transcoding = 1;</span><br><span>@@ -1185,10 +1252,11 @@</span><br><span> </span><br><span> #define LINE_STR "Configure trunk for given Line\nE1/T1 Line Number\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_trunk_line,</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg_trunk_line_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-      "line <0-255>",</span><br><span style="color: hsl(0, 100%, 40%);">-      LINE_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_trunk_line,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_trunk_line_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(MGW_VTY_ATTR_RESTART_FULL),</span><br><span style="color: hsl(120, 100%, 40%);">+         "line <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+       LINE_STR)</span><br><span> {</span><br><span>         struct mgcp_trunk *trunk = vty->index;</span><br><span>    int line_nr = atoi(argv[0]);</span><br><span>diff --git a/src/osmo-mgw/mgw_main.c b/src/osmo-mgw/mgw_main.c</span><br><span>index 37357a0..c913373 100644</span><br><span>--- a/src/osmo-mgw/mgw_main.c</span><br><span>+++ b/src/osmo-mgw/mgw_main.c</span><br><span>@@ -306,6 +306,16 @@</span><br><span>                 return -1;</span><br><span> </span><br><span>       vty_info.copyright = osmomgw_copyright;</span><br><span style="color: hsl(120, 100%, 40%);">+       vty_info.usr_attr_desc[MGW_VTY_ATTR_RESTART_FULL] = \</span><br><span style="color: hsl(120, 100%, 40%);">+         "This command applies on full program restart";</span><br><span style="color: hsl(120, 100%, 40%);">+     vty_info.usr_attr_desc[MGW_VTY_ATTR_IMMEDIATE] = \</span><br><span style="color: hsl(120, 100%, 40%);">+            "This command applies immediately";</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_info.usr_attr_desc[MGW_VTY_ATTR_NEW_CONN] = \</span><br><span style="color: hsl(120, 100%, 40%);">+             "This command applies when a new connection is created";</span><br><span style="color: hsl(120, 100%, 40%);">+    vty_info.usr_attr_letters[MGW_VTY_ATTR_RESTART_FULL] = 'F';</span><br><span style="color: hsl(120, 100%, 40%);">+   vty_info.usr_attr_letters[MGW_VTY_ATTR_IMMEDIATE] = 'I';</span><br><span style="color: hsl(120, 100%, 40%);">+      vty_info.usr_attr_letters[MGW_VTY_ATTR_NEW_CONN] = 'N';</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    vty_init(&vty_info);</span><br><span>     logging_vty_add_cmds();</span><br><span>      osmo_talloc_vty_add_cmds();</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/20250">change 20250</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-mgw/+/20250"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I2d9487801b3b78f94577264b56d217c926ef76a9 </div>
<div style="display:none"> Gerrit-Change-Number: 20250 </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>