diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index bebb6ad3dc..73189f44c2 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -1997,7 +1997,7 @@ int nm_platform_link_wireguard_change (NMPlatform *self, int ifindex, const NMPlatformLnkWireGuard *lnk_wireguard, - const struct _NMPWireGuardPeer *peers, + const NMPWireGuardPeer *peers, guint peers_len) { _CHECK_SELF (self, klass, -NME_BUG); @@ -5604,33 +5604,24 @@ nm_platform_wireguard_peer_to_string (const NMPWireGuardPeer *peer, char *buf, g { char *buf0 = buf; gs_free char *public_key_b64 = NULL; - char s_endpoint[NM_UTILS_INET_ADDRSTRLEN + 100]; + char s_sockaddr[NM_UTILS_INET_ADDRSTRLEN + 100]; + char s_endpoint[20 + sizeof (s_sockaddr)]; char s_addr[NM_UTILS_INET_ADDRSTRLEN]; - char s_scope_id[40]; guint i; nm_utils_to_string_buffer_init (&buf, &len); - if (peer->endpoint.sa.sa_family == AF_INET) { + public_key_b64 = g_base64_encode (peer->public_key, sizeof (peer->public_key)); + + if (peer->endpoint.sa.sa_family != AF_UNSPEC) { nm_sprintf_buf (s_endpoint, - " endpoint %s:%u", - nm_utils_inet4_ntop (peer->endpoint.in.sin_addr.s_addr, s_addr), - (guint) htons (peer->endpoint.in.sin_port)); - } else if (peer->endpoint.sa.sa_family == AF_INET6) { - if (peer->endpoint.in6.sin6_scope_id != 0) - nm_sprintf_buf (s_scope_id, "@%u", peer->endpoint.in6.sin6_scope_id); - else - s_scope_id[0] = '\0'; - nm_sprintf_buf (s_endpoint, - " endpoint [%s]%s:%u", - nm_utils_inet6_ntop (&peer->endpoint.in6.sin6_addr, s_addr), - s_scope_id, - (guint) htons (peer->endpoint.in6.sin6_port)); + " endpoint %s", + nm_sock_addr_union_to_string (&peer->endpoint, + s_sockaddr, + sizeof (s_sockaddr))); } else s_endpoint[0] = '\0'; - public_key_b64 = g_base64_encode (peer->public_key, sizeof (peer->public_key)); - nm_utils_strbuf_append (&buf, &len, "public-key %s" "%s" /* preshared-key */ diff --git a/src/platform/nmp-object.c b/src/platform/nmp-object.c index 0293ccb016..80e65b494c 100644 --- a/src/platform/nmp-object.c +++ b/src/platform/nmp-object.c @@ -228,6 +228,51 @@ nm_sock_addr_union_cpy_untrusted (NMSockAddrUnion *dst, nm_assert (dst->sa.sa_family == sa.sa_family); } +const char * +nm_sock_addr_union_to_string (const NMSockAddrUnion *sa, + char *buf, + gsize len) +{ + char s_addr[NM_UTILS_INET_ADDRSTRLEN]; + char s_scope_id[40]; + + if (!nm_utils_to_string_buffer_init_null (sa, &buf, &len)) + return buf; + + /* maybe we should use getnameinfo(), but here implement it ourself. + * + * We want to see the actual bytes for debugging (as we understand them), + * and now what getnameinfo() makes of it. Also, it's simpler this way. */ + + switch (sa->sa.sa_family) { + case AF_INET: + g_snprintf (buf, len, + "%s:%u", + nm_utils_inet4_ntop (sa->in.sin_addr.s_addr, s_addr), + (guint) htons (sa->in.sin_port)); + break; + case AF_INET6: + g_snprintf (buf, len, + "[%s%s]:%u", + nm_utils_inet6_ntop (&sa->in6.sin6_addr, s_addr), + ( sa->in6.sin6_scope_id != 0 + ? nm_sprintf_buf (s_scope_id, "%u", sa->in6.sin6_scope_id) + : ""), + (guint) htons (sa->in6.sin6_port)); + break; + case AF_UNSPEC: + g_snprintf (buf, len, "unspec"); + break; + default: + g_snprintf (buf, len, + "{addr-family:%u}", + (unsigned) sa->sa.sa_family); + break; + } + + return buf; +} + /*****************************************************************************/ static const NMDedupMultiIdxTypeClass _dedup_multi_idx_type_class; diff --git a/src/platform/nmp-object.h b/src/platform/nmp-object.h index b559f6d3b7..4649441bc5 100644 --- a/src/platform/nmp-object.h +++ b/src/platform/nmp-object.h @@ -57,6 +57,10 @@ void nm_sock_addr_union_cpy_untrusted (NMSockAddrUnion *dst, gconstpointer src /* unaligned (const NMSockAddrUnion *) */, gsize src_len); +const char *nm_sock_addr_union_to_string (const NMSockAddrUnion *sa, + char *buf, + gsize len); + /*****************************************************************************/ typedef struct {