aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-06-20 13:43:41 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2023-06-20 13:48:25 +0200
commitb04f0384eef5b1a35a4cc660f6f97fd8348987f2 (patch)
tree1a85b41263b8ff173c320812bd448e07d1b1ee74
parent64c241be5d9d9c5836d96041cf84c5fcaa98a06d (diff)
stream: Print socket info as part of the logging context
Since the local port is logged now in stream_test, it must be set to a specific value in order to have deterministic log output being validated. Change-Id: I17ef699dab72c1b613708070d22e9f040b0fe069
-rw-r--r--src/stream.c28
-rw-r--r--tests/stream/stream_test.c1
-rw-r--r--tests/stream/stream_test.err10
3 files changed, 29 insertions, 10 deletions
diff --git a/src/stream.c b/src/stream.c
index 0f56969..a5a5bf1 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -77,19 +77,22 @@
#endif
#define LOGSCLI(cli, level, fmt, args...) \
- LOGP(DLINP, level, "CLICONN(%s){%s} " fmt, \
+ LOGP(DLINP, level, "CLICONN(%s,%s){%s} " fmt, \
cli->name ? : "", \
+ cli->sockname, \
get_value_string(stream_cli_state_names, (cli)->state), \
## args)
#define LOGSLNK(link, level, fmt, args...) \
- LOGP(DLINP, level, "SRV(%s) " fmt, \
+ LOGP(DLINP, level, "SRV(%s,%s) " fmt, \
link->name ? : "", \
+ link->sockname, \
## args)
#define LOGSSRV(srv, level, fmt, args...) \
- LOGP(DLINP, level, "SRVCONN(%s) " fmt, \
+ LOGP(DLINP, level, "SRVCONN(%s,%s) " fmt, \
srv->name ? : "", \
+ srv->sockname, \
## args)
/* is any of the bytes from offset .. u8_size in 'u8' non-zero? return offset or -1 if all zero */
@@ -271,6 +274,7 @@ enum osmo_stream_mode {
struct osmo_stream_cli {
char *name;
+ char sockname[OSMO_SOCK_NAME_MAXLEN];
enum osmo_stream_mode mode;
union {
struct osmo_fd ofd;
@@ -513,6 +517,9 @@ static void stream_cli_handle_connecting(struct osmo_stream_cli *cli, int res)
if (cli->mode == OSMO_STREAM_MODE_OSMO_FD && llist_empty(&cli->tx_queue))
osmo_fd_write_disable(&cli->ofd);
+ /* Update sockname based on socket info: */
+ osmo_sock_get_name_buf(cli->sockname, sizeof(cli->sockname), osmo_stream_cli_fd(cli));
+
LOGSCLI(cli, LOGL_DEBUG, "connection established\n");
cli->state = STREAM_CLI_STATE_CONNECTED;
switch (cli->sk_domain) {
@@ -1145,6 +1152,7 @@ void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli)
struct osmo_stream_srv_link {
struct osmo_fd ofd;
char *name;
+ char sockname[OSMO_SOCK_NAME_MAXLEN];
char *addr[OSMO_STREAM_MAX_ADDRS];
uint8_t addrcnt;
uint16_t port;
@@ -1483,6 +1491,8 @@ int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link)
link->ofd.fd = -1;
return -EIO;
}
+
+ OSMO_STRLCPY_ARRAY(link->sockname, osmo_stream_srv_link_get_sockname(link));
return 0;
}
@@ -1517,6 +1527,7 @@ void osmo_stream_srv_link_close(struct osmo_stream_srv_link *link)
struct osmo_stream_srv {
struct osmo_stream_srv_link *srv;
char *name;
+ char sockname[OSMO_SOCK_NAME_MAXLEN];
enum osmo_stream_mode mode;
union {
struct osmo_fd ofd;
@@ -1693,6 +1704,8 @@ osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link,
conn->data = data;
INIT_LLIST_HEAD(&conn->tx_queue);
+ osmo_sock_get_name_buf(conn->sockname, sizeof(conn->sockname), fd);
+
if (osmo_fd_register(&conn->ofd) < 0) {
LOGSSRV(conn, LOGL_ERROR, "could not register FD\n");
talloc_free(conn);
@@ -1722,8 +1735,13 @@ osmo_stream_srv_create2(void *ctx, const char *name,
conn->mode = OSMO_STREAM_MODE_OSMO_IO;
conn->srv = link;
- conn->name = talloc_strdup(conn, name);
- conn->iofd = osmo_iofd_setup(conn, fd, name, OSMO_IO_FD_MODE_READ_WRITE, &srv_ioops, conn);
+
+ if (name)
+ conn->name = talloc_strdup(conn, name);
+ osmo_sock_get_name_buf(conn->sockname, sizeof(conn->sockname), fd);
+
+ conn->iofd = osmo_iofd_setup(conn, fd, conn->name ? : conn->sockname,
+ OSMO_IO_FD_MODE_READ_WRITE, &srv_ioops, conn);
if (!conn->iofd) {
talloc_free(conn);
return NULL;
diff --git a/tests/stream/stream_test.c b/tests/stream/stream_test.c
index 1b82d1a..67603e9 100644
--- a/tests/stream/stream_test.c
+++ b/tests/stream/stream_test.c
@@ -214,6 +214,7 @@ static struct osmo_stream_cli *make_client(void *ctx, const char *host, unsigned
printf("Prepare %s stream client...\n", ASTR(autoreconnect));
+ osmo_stream_cli_set_local_port(cli, 8976);
osmo_stream_cli_set_name(cli, "cli_test");
osmo_stream_cli_set_addr(cli, host);
osmo_stream_cli_set_port(cli, port);
diff --git a/tests/stream/stream_test.err b/tests/stream/stream_test.err
index 9fba03e..2409c07 100644
--- a/tests/stream/stream_test.err
+++ b/tests/stream/stream_test.err
@@ -12,15 +12,15 @@
{2.000006} autoreconnecting test step 6 [client OK, server OK], FD reg 1
{2.000007} autoreconnecting test step 5 [client OK, server OK], FD reg 1
-CLICONN(cli_test){CONNECTED} connection closed with srv
-CLICONN(cli_test){WAIT_RECONNECT} retrying reconnect in 9 seconds...
+CLICONN(cli_test,r=127.0.0.11:1111<->l=127.0.0.1:8976){CONNECTED} connection closed with srv
+CLICONN(cli_test,r=127.0.0.11:1111<->l=127.0.0.1:8976){WAIT_RECONNECT} retrying reconnect in 9 seconds...
{11.000008} autoreconnecting test step 4 [client OK, server OK], FD reg 0
{11.000009} autoreconnecting test step 3 [client OK, server OK], FD reg 1
{11.000010} autoreconnecting test step 2 [client OK, server OK], FD reg 0
-SRVCONN(srv_test) connection closed with client
+SRVCONN(srv_test,r=127.0.0.1:8976<->l=127.0.0.11:1111) connection closed with client
{11.000011} autoreconnecting test step 1 [client OK, server NA], FD reg 0
@@ -37,7 +37,7 @@ SRVCONN(srv_test) connection closed with client
{11.000017} non-reconnecting test step 2 [client OK, server OK], FD reg 1
{11.000018} non-reconnecting test step 1 [client OK, server OK], FD reg 1
-CLICONN(cli_test){CONNECTED} connection closed with srv
-CLICONN(cli_test){CLOSED} not reconnecting, disabled
+CLICONN(cli_test,r=127.0.0.11:1111<->l=127.0.0.1:8976){CONNECTED} connection closed with srv
+CLICONN(cli_test,r=127.0.0.11:1111<->l=127.0.0.1:8976){CLOSED} not reconnecting, disabled
{20.000019} non-reconnecting test step 0 [client OK, server OK], FD reg 0