mirror of https://gerrit.osmocom.org/libosmocore
vty/telnet: Add function to allow binding telnet interface to custom IP/Interface
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
This commit is contained in:
parent
3e04ed6083
commit
a9efc12ccd
|
@ -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);
|
||||||
|
|
||||||
void telnet_exit(void);
|
void telnet_exit(void);
|
||||||
|
|
||||||
|
|
|
@ -20,12 +20,14 @@
|
||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <osmocom/core/msgb.h>
|
#include <osmocom/core/msgb.h>
|
||||||
|
#include <osmocom/core/socket.h>
|
||||||
#include <osmocom/core/talloc.h>
|
#include <osmocom/core/talloc.h>
|
||||||
#include <osmocom/core/logging.h>
|
#include <osmocom/core/logging.h>
|
||||||
|
|
||||||
|
@ -52,53 +54,38 @@ static struct osmo_fd server_socket = {
|
||||||
.priv_nr = 0,
|
.priv_nr = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! \brief Initialize telnet based VTY interface
|
/*! \brief Initialize telnet based VTY interface listening to 127.0.0.1
|
||||||
* \param[in] tall_ctx \ref talloc context
|
* \param[in] tall_ctx \ref talloc context
|
||||||
* \param[in] priv private data to be passed to callback
|
* \param[in] priv private data to be passed to callback
|
||||||
* \param[in] port UDP port number
|
* \param[in] port UDP port number
|
||||||
*/
|
*/
|
||||||
int telnet_init(void *tall_ctx, void *priv, int port)
|
int telnet_init(void *tall_ctx, void *priv, int port)
|
||||||
{
|
{
|
||||||
struct sockaddr_in sock_addr;
|
return telnet_init_dynif(tall_ctx, priv, "127.0.0.1", port);
|
||||||
int fd, rc, on = 1;
|
}
|
||||||
|
|
||||||
|
/*! \brief Initialize telnet based VTY interface
|
||||||
|
* \param[in] tall_ctx \ref talloc context
|
||||||
|
* \param[in] priv private data to be passed to callback
|
||||||
|
* \param[in] ip IP to listen to ('::1' for localhost, '::0' for all, ...)
|
||||||
|
* \param[in] port UDP port number
|
||||||
|
*/
|
||||||
|
int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
tall_telnet_ctx = talloc_named_const(tall_ctx, 1,
|
tall_telnet_ctx = talloc_named_const(tall_ctx, 1,
|
||||||
"telnet_connection");
|
"telnet_connection");
|
||||||
|
|
||||||
/* FIXME: use new socket.c code of libosmocore */
|
rc = osmo_sock_init_ofd(
|
||||||
fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
|
&server_socket,
|
||||||
|
AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP,
|
||||||
if (fd < 0) {
|
ip, port, OSMO_SOCK_F_BIND
|
||||||
LOGP(0, LOGL_ERROR, "Telnet interface socket creation failed\n");
|
);
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
|
|
||||||
|
|
||||||
memset(&sock_addr, 0, sizeof(sock_addr));
|
|
||||||
sock_addr.sin_family = AF_INET;
|
|
||||||
sock_addr.sin_port = htons(port);
|
|
||||||
sock_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
|
|
||||||
|
|
||||||
rc = bind(fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr));
|
|
||||||
if (rc < 0) {
|
|
||||||
LOGP(0, LOGL_ERROR, "Telnet interface failed to bind\n");
|
|
||||||
close(fd);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = listen(fd, 0);
|
|
||||||
if (rc < 0) {
|
|
||||||
LOGP(0, LOGL_ERROR, "Telnet interface failed to listen\n");
|
|
||||||
close(fd);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
server_socket.data = priv;
|
server_socket.data = priv;
|
||||||
server_socket.fd = fd;
|
|
||||||
osmo_fd_register(&server_socket);
|
|
||||||
|
|
||||||
return 0;
|
return (rc < 0) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern struct host host;
|
extern struct host host;
|
||||||
|
|
Loading…
Reference in New Issue