mirror of https://gerrit.osmocom.org/libosmocore
vty: Make TCP port configurable and introduce telnet_init_default
Extend the vty_bind_cmd VTY command to allow to optionally specify a port in addition to the IPv4 address. Introduce telnet_init_default to relieve client code from having to query the bind IPv4 address (and now the TCP port). Instead a client only needs to pass the default TCP port to use. Client code should use it like: int rc = telnet_init_default(ctx, priv, OSMO_VTY_PORT_SGSN); Change-Id: Id5fb2faaf4311bd7284ee870526a6f87b7e260f3
This commit is contained in:
parent
d8d0ef6b5c
commit
99ae401e49
|
@ -47,6 +47,7 @@ struct telnet_connection {
|
||||||
|
|
||||||
int telnet_init(void *tall_ctx, void *priv, int port);
|
int telnet_init(void *tall_ctx, void *priv, int port);
|
||||||
int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port);
|
int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port);
|
||||||
|
int telnet_init_default(void *tall_ctx, void *priv, int default_port);
|
||||||
|
|
||||||
void telnet_exit(void);
|
void telnet_exit(void);
|
||||||
|
|
||||||
|
|
|
@ -210,6 +210,8 @@ int vty_go_parent(struct vty *vty);
|
||||||
|
|
||||||
/* Return IP address passed to the 'line vty'/'bind' command, or "127.0.0.1" */
|
/* Return IP address passed to the 'line vty'/'bind' command, or "127.0.0.1" */
|
||||||
const char *vty_get_bind_addr(void);
|
const char *vty_get_bind_addr(void);
|
||||||
|
/** Returns configured port passed to the 'line vty'/'bind' command or default_port. */
|
||||||
|
int vty_get_bind_port(int default_port);
|
||||||
|
|
||||||
extern void *tall_vty_ctx;
|
extern void *tall_vty_ctx;
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,18 @@ int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port)
|
||||||
return 0;
|
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;
|
extern struct host host;
|
||||||
|
|
||||||
/*! close a telnet connection */
|
/*! close a telnet connection */
|
||||||
|
|
|
@ -90,6 +90,8 @@ char *vty_cwd = NULL;
|
||||||
* use NULL and VTY_BIND_ADDR_DEFAULT instead. */
|
* use NULL and VTY_BIND_ADDR_DEFAULT instead. */
|
||||||
static const char *vty_bind_addr = NULL;
|
static const char *vty_bind_addr = NULL;
|
||||||
#define VTY_BIND_ADDR_DEFAULT "127.0.0.1"
|
#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. */
|
/* Configure lock. */
|
||||||
static int vty_config;
|
static int vty_config;
|
||||||
|
@ -1612,12 +1614,13 @@ DEFUN(no_vty_login,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* vty bind */
|
/* 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"
|
"Accept VTY telnet connections on local interface\n"
|
||||||
"Local interface IP address (default: " VTY_BIND_ADDR_DEFAULT ")\n")
|
"Local interface IP address (default: " VTY_BIND_ADDR_DEFAULT ")\n")
|
||||||
{
|
{
|
||||||
talloc_free((void*)vty_bind_addr);
|
talloc_free((void*)vty_bind_addr);
|
||||||
vty_bind_addr = talloc_strdup(tall_vty_ctx, argv[0]);
|
vty_bind_addr = talloc_strdup(tall_vty_ctx, argv[0]);
|
||||||
|
vty_bind_port = argc > 1 ? atoi(argv[1]) : -1;
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1628,6 +1631,13 @@ const char *vty_get_bind_addr(void)
|
||||||
return vty_bind_addr;
|
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,
|
DEFUN(service_advanced_vty,
|
||||||
service_advanced_vty_cmd,
|
service_advanced_vty_cmd,
|
||||||
"service advanced-vty",
|
"service advanced-vty",
|
||||||
|
@ -1700,8 +1710,14 @@ static int vty_config_write(struct vty *vty)
|
||||||
vty_out(vty, " login%s", VTY_NEWLINE);
|
vty_out(vty, " login%s", VTY_NEWLINE);
|
||||||
|
|
||||||
/* bind */
|
/* bind */
|
||||||
if (vty_bind_addr && (strcmp(vty_bind_addr, VTY_BIND_ADDR_DEFAULT) != 0))
|
if (vty_bind_addr && (strcmp(vty_bind_addr, VTY_BIND_ADDR_DEFAULT) != 0 || vty_bind_port >= 0)) {
|
||||||
vty_out(vty, " bind %s%s", vty_bind_addr, VTY_NEWLINE);
|
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);
|
vty_out(vty, "!%s", VTY_NEWLINE);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue