diff options
| author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2018-12-15 17:36:41 +0000 | 
|---|---|---|
| committer | Holger Freyther <holger@freyther.de> | 2018-12-23 04:20:08 +0000 | 
| commit | 99ae401e490e60fc07bef7eacc478be7bdcc9f5a (patch) | |
| tree | 2b762253f327c4f6b2f9133e32bdd9f1fb850ec0 | |
| parent | d8d0ef6b5c1431645a467d173bd14399f2e9fef7 (diff) | |
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
| -rw-r--r-- | include/osmocom/vty/telnet_interface.h | 1 | ||||
| -rw-r--r-- | include/osmocom/vty/vty.h | 2 | ||||
| -rw-r--r-- | src/vty/telnet_interface.c | 12 | ||||
| -rw-r--r-- | src/vty/vty.c | 22 | 
4 files changed, 34 insertions, 3 deletions
diff --git a/include/osmocom/vty/telnet_interface.h b/include/osmocom/vty/telnet_interface.h index d653466a..da7cf839 100644 --- a/include/osmocom/vty/telnet_interface.h +++ b/include/osmocom/vty/telnet_interface.h @@ -47,6 +47,7 @@ struct telnet_connection {  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_default(void *tall_ctx, void *priv, int default_port);  void telnet_exit(void); diff --git a/include/osmocom/vty/vty.h b/include/osmocom/vty/vty.h index 02ba03ee..c4cf707a 100644 --- a/include/osmocom/vty/vty.h +++ b/include/osmocom/vty/vty.h @@ -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" */  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; 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);  | 
