summaryrefslogtreecommitdiffstats
path: root/src/vty
diff options
context:
space:
mode:
Diffstat (limited to 'src/vty')
-rw-r--r--src/vty/telnet_interface.c12
-rw-r--r--src/vty/vty.c22
2 files changed, 31 insertions, 3 deletions
diff --git a/src/vty/telnet_interface.c b/src/vty/telnet_interface.c
index 47c45fcf..e090e17e 100644
--- a/src/vty/telnet_interface.c
+++ b/src/vty/telnet_interface.c
@@ -105,6 +105,18 @@ int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port)
return 0;
}
+/*! Initializes telnet based VTY interface using the configured bind addr/port.
+ * \param[in] tall_ctx \ref talloc context
+ * \param[in] priv private data to be passed to callback
+ * \param[in] default_port TCP port number to bind to if not explicitely configured
+ */
+int telnet_init_default(void *tall_ctx, void *priv, int default_port)
+{
+ return telnet_init_dynif(tall_ctx, priv, vty_get_bind_addr(),
+ vty_get_bind_port(default_port));
+}
+
+
extern struct host host;
/*! close a telnet connection */
diff --git a/src/vty/vty.c b/src/vty/vty.c
index 70f6811a..7f6c2255 100644
--- a/src/vty/vty.c
+++ b/src/vty/vty.c
@@ -90,6 +90,8 @@ char *vty_cwd = NULL;
* use NULL and VTY_BIND_ADDR_DEFAULT instead. */
static const char *vty_bind_addr = NULL;
#define VTY_BIND_ADDR_DEFAULT "127.0.0.1"
+/* Port the VTY should bind to. -1 means not configured */
+static int vty_bind_port = -1;
/* Configure lock. */
static int vty_config;
@@ -1612,12 +1614,13 @@ DEFUN(no_vty_login,
}
/* vty bind */
-DEFUN(vty_bind, vty_bind_cmd, "bind A.B.C.D",
+DEFUN(vty_bind, vty_bind_cmd, "bind A.B.C.D [<0-65535>]",
"Accept VTY telnet connections on local interface\n"
"Local interface IP address (default: " VTY_BIND_ADDR_DEFAULT ")\n")
{
talloc_free((void*)vty_bind_addr);
vty_bind_addr = talloc_strdup(tall_vty_ctx, argv[0]);
+ vty_bind_port = argc > 1 ? atoi(argv[1]) : -1;
return CMD_SUCCESS;
}
@@ -1628,6 +1631,13 @@ const char *vty_get_bind_addr(void)
return vty_bind_addr;
}
+int vty_get_bind_port(int default_port)
+{
+ if (vty_bind_port >= 0)
+ return vty_bind_port;
+ return default_port;
+}
+
DEFUN(service_advanced_vty,
service_advanced_vty_cmd,
"service advanced-vty",
@@ -1700,8 +1710,14 @@ static int vty_config_write(struct vty *vty)
vty_out(vty, " login%s", VTY_NEWLINE);
/* bind */
- if (vty_bind_addr && (strcmp(vty_bind_addr, VTY_BIND_ADDR_DEFAULT) != 0))
- vty_out(vty, " bind %s%s", vty_bind_addr, VTY_NEWLINE);
+ if (vty_bind_addr && (strcmp(vty_bind_addr, VTY_BIND_ADDR_DEFAULT) != 0 || vty_bind_port >= 0)) {
+ if (vty_bind_port >= 0) {
+ vty_out(vty, " bind %s %d%s", vty_bind_addr,
+ vty_bind_port, VTY_NEWLINE);
+ } else {
+ vty_out(vty, " bind %s%s", vty_bind_addr, VTY_NEWLINE);
+ }
+ }
vty_out(vty, "!%s", VTY_NEWLINE);