<p>Holger Freyther has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12321">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty: Introduce telnet_init_default and make vty port configurable<br><br>Make configuring the bind port optional in the line vty/bind command<br>and introduce telnet_init_default to automatically consume this value.<br><br>Client code should use it like:<br><br>   int rc = telnet_init_default(ctx, priv, OSMO_VTY_PORT_SGSN);<br><br>Change-Id: Id5fb2faaf4311bd7284ee870526a6f87b7e260f3<br>---<br>M include/osmocom/vty/telnet_interface.h<br>M include/osmocom/vty/vty.h<br>M src/vty/telnet_interface.c<br>M src/vty/vty.c<br>4 files changed, 34 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/21/12321/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/vty/telnet_interface.h b/include/osmocom/vty/telnet_interface.h</span><br><span>index d653466..da7cf83 100644</span><br><span>--- a/include/osmocom/vty/telnet_interface.h</span><br><span>+++ b/include/osmocom/vty/telnet_interface.h</span><br><span>@@ -47,6 +47,7 @@</span><br><span> </span><br><span> int telnet_init(void *tall_ctx, void *priv, int port);</span><br><span> int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port);</span><br><span style="color: hsl(120, 100%, 40%);">+int telnet_init_default(void *tall_ctx, void *priv, int default_port);</span><br><span> </span><br><span> void telnet_exit(void);</span><br><span> </span><br><span>diff --git a/include/osmocom/vty/vty.h b/include/osmocom/vty/vty.h</span><br><span>index 02ba03e..c4cf707 100644</span><br><span>--- a/include/osmocom/vty/vty.h</span><br><span>+++ b/include/osmocom/vty/vty.h</span><br><span>@@ -210,6 +210,8 @@</span><br><span> </span><br><span> /* Return IP address passed to the 'line vty'/'bind' command, or "127.0.0.1" */</span><br><span> const char *vty_get_bind_addr(void);</span><br><span style="color: hsl(120, 100%, 40%);">+/** Returns configured port passed to the 'line vty'/'bind' command or default_port. */</span><br><span style="color: hsl(120, 100%, 40%);">+int vty_get_bind_port(int default_port);</span><br><span> </span><br><span> extern void *tall_vty_ctx;</span><br><span> </span><br><span>diff --git a/src/vty/telnet_interface.c b/src/vty/telnet_interface.c</span><br><span>index fcb4c8d..031bfab 100644</span><br><span>--- a/src/vty/telnet_interface.c</span><br><span>+++ b/src/vty/telnet_interface.c</span><br><span>@@ -105,6 +105,18 @@</span><br><span>        return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Initializes telnet based VTY interface using the configured bind addr/port.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] tall_ctx \ref talloc context</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] priv private data to be passed to callback</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] default_port UDP port number to use if not explicitely configured</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int telnet_init_default(void *tall_ctx, void *priv, int default_port)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  return telnet_init_dynif(tall_ctx, priv, vty_get_bind_addr(),</span><br><span style="color: hsl(120, 100%, 40%);">+                          vty_get_bind_port(default_port));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> extern struct host host;</span><br><span> </span><br><span> /*! close a telnet connection */</span><br><span>diff --git a/src/vty/vty.c b/src/vty/vty.c</span><br><span>index 70f6811..7f6c225 100644</span><br><span>--- a/src/vty/vty.c</span><br><span>+++ b/src/vty/vty.c</span><br><span>@@ -90,6 +90,8 @@</span><br><span>  * use NULL and VTY_BIND_ADDR_DEFAULT instead. */</span><br><span> static const char *vty_bind_addr = NULL;</span><br><span> #define VTY_BIND_ADDR_DEFAULT "127.0.0.1"</span><br><span style="color: hsl(120, 100%, 40%);">+/* Port the VTY should bind to. -1 means not configured */</span><br><span style="color: hsl(120, 100%, 40%);">+static int vty_bind_port = -1;</span><br><span> </span><br><span> /* Configure lock. */</span><br><span> static int vty_config;</span><br><span>@@ -1612,12 +1614,13 @@</span><br><span> }</span><br><span> </span><br><span> /* vty bind */</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(vty_bind, vty_bind_cmd, "bind A.B.C.D",</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(vty_bind, vty_bind_cmd, "bind A.B.C.D [<0-65535>]",</span><br><span>       "Accept VTY telnet connections on local interface\n"</span><br><span>       "Local interface IP address (default: " VTY_BIND_ADDR_DEFAULT ")\n")</span><br><span> {</span><br><span>  talloc_free((void*)vty_bind_addr);</span><br><span>   vty_bind_addr = talloc_strdup(tall_vty_ctx, argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_bind_port = argc > 1 ? atoi(argv[1]) : -1;</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -1628,6 +1631,13 @@</span><br><span>        return vty_bind_addr;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int vty_get_bind_port(int default_port)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    if (vty_bind_port >= 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            return vty_bind_port;</span><br><span style="color: hsl(120, 100%, 40%);">+ return default_port;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(service_advanced_vty,</span><br><span>       service_advanced_vty_cmd,</span><br><span>       "service advanced-vty",</span><br><span>@@ -1700,8 +1710,14 @@</span><br><span>              vty_out(vty, " login%s", VTY_NEWLINE);</span><br><span> </span><br><span>         /* bind */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (vty_bind_addr && (strcmp(vty_bind_addr, VTY_BIND_ADDR_DEFAULT) != 0))</span><br><span style="color: hsl(0, 100%, 40%);">-               vty_out(vty, " bind %s%s", vty_bind_addr, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (vty_bind_addr && (strcmp(vty_bind_addr, VTY_BIND_ADDR_DEFAULT) != 0 || vty_bind_port >= 0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          if (vty_bind_port >= 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  vty_out(vty, " bind %s %d%s", vty_bind_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                vty_bind_port, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+          } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      vty_out(vty, " bind %s%s", vty_bind_addr, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span>        vty_out(vty, "!%s", VTY_NEWLINE);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12321">change 12321</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/12321"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Id5fb2faaf4311bd7284ee870526a6f87b7e260f3 </div>
<div style="display:none"> Gerrit-Change-Number: 12321 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Holger Freyther <holger@freyther.de> </div>