log: socket.c: rather use the osmo_sockaddr_str _FMT

The OSMO_SOCKADDR_STR_FMT() and _ARGS() macros properly place square
braces around IPv6 addresses, so that the port nr is clearly
distinguishable.

before: 1:2::3:4:5
after: [1:2::3:4]:5

When using a struct reference, the macro resolves to '(&sastr) ? .. : ..',
which the compiler complains about as "condition is always true". Shim
around that error with a pointer variable.

I considered using osmo_sockaddr_to_str_c() instead, but here in
socket.c we cannot assume that osmo_select_main_ctx() is being used and
hence can't just use OTC_SELECT for log string composition. The
struct osmo_sockaddr_str is a string representation in a local variable,
and hence doesn't need talloc for log strings.

I considered adding log_check_level() around the log string conversion,
but since all of these instances are on LOGL_ERROR, I didn't bother.

Related: SYS#5599
Change-Id: Idbe7582b2b7f14540919e911dad08af6d491f68f
This commit is contained in:
Neels Hofmeyr 2021-12-17 14:21:29 +01:00
parent e452dd053e
commit f3270f246f
1 changed files with 12 additions and 13 deletions

View File

@ -484,8 +484,8 @@ int osmo_sock_init2(uint16_t family, uint16_t type, uint8_t proto,
}
#define _SOCKADDR_TO_STR(dest, sockaddr) do { \
if (osmo_sockaddr_str_from_sockaddr(&dest, &sockaddr->u.sas)) \
osmo_strlcpy(dest.ip, "Invalid IP", 11); \
if (osmo_sockaddr_str_from_sockaddr(dest, &sockaddr->u.sas)) \
osmo_strlcpy((dest)->ip, "Invalid IP", 11); \
} while (0)
/*! Initialize a socket (including bind and/or connect)
@ -520,7 +520,8 @@ int osmo_sock_init_osa(uint16_t type, uint8_t proto,
unsigned int flags)
{
int sfd = -1, rc, on = 1;
struct osmo_sockaddr_str sastr = {};
struct osmo_sockaddr_str _sastr = {};
struct osmo_sockaddr_str *sastr = &_sastr;
if ((flags & (OSMO_SOCK_F_BIND | OSMO_SOCK_F_CONNECT)) == 0) {
LOGP(DLGLOBAL, LOGL_ERROR, "invalid: you have to specify either "
@ -551,8 +552,8 @@ int osmo_sock_init_osa(uint16_t type, uint8_t proto,
sfd = socket_helper_osa(local, type, proto, flags);
if (sfd < 0) {
_SOCKADDR_TO_STR(sastr, local);
LOGP(DLGLOBAL, LOGL_ERROR, "no suitable local addr found for: %s:%u\n",
sastr.ip, sastr.port);
LOGP(DLGLOBAL, LOGL_ERROR, "no suitable local addr found for: " OSMO_SOCKADDR_STR_FMT "\n",
OSMO_SOCKADDR_STR_FMT_ARGS(sastr));
return -ENODEV;
}
@ -562,10 +563,8 @@ int osmo_sock_init_osa(uint16_t type, uint8_t proto,
if (rc < 0) {
_SOCKADDR_TO_STR(sastr, local);
LOGP(DLGLOBAL, LOGL_ERROR,
"cannot setsockopt socket:"
" %s:%u: %s\n",
sastr.ip, sastr.port,
strerror(errno));
"cannot setsockopt socket: " OSMO_SOCKADDR_STR_FMT ": %s\n",
OSMO_SOCKADDR_STR_FMT_ARGS(sastr), strerror(errno));
close(sfd);
return rc;
}
@ -573,8 +572,8 @@ int osmo_sock_init_osa(uint16_t type, uint8_t proto,
if (bind(sfd, &local->u.sa, sizeof(struct osmo_sockaddr)) == -1) {
_SOCKADDR_TO_STR(sastr, local);
LOGP(DLGLOBAL, LOGL_ERROR, "unable to bind socket: %s:%u: %s\n",
sastr.ip, sastr.port, strerror(errno));
LOGP(DLGLOBAL, LOGL_ERROR, "unable to bind socket: " OSMO_SOCKADDR_STR_FMT ": %s\n",
OSMO_SOCKADDR_STR_FMT_ARGS(sastr), strerror(errno));
close(sfd);
return -1;
}
@ -596,8 +595,8 @@ int osmo_sock_init_osa(uint16_t type, uint8_t proto,
rc = connect(sfd, &remote->u.sa, sizeof(struct osmo_sockaddr));
if (rc != 0 && errno != EINPROGRESS) {
_SOCKADDR_TO_STR(sastr, remote);
LOGP(DLGLOBAL, LOGL_ERROR, "unable to connect socket: %s:%u: %s\n",
sastr.ip, sastr.port, strerror(errno));
LOGP(DLGLOBAL, LOGL_ERROR, "unable to connect socket: " OSMO_SOCKADDR_STR_FMT ": %s\n",
OSMO_SOCKADDR_STR_FMT_ARGS(sastr), strerror(errno));
close(sfd);
return rc;
}