diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-08-31 12:52:06 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-08-31 12:52:09 +0200 |
commit | 5cc4fe470645cff36cb2fed7aadd3ff2f224dd40 (patch) | |
tree | afc01e54ba993c2d863a49e8d30e4916a174f50f /src/socket.c | |
parent | 7bda8549a44501a98b9a29b15fd4461fadaebef0 (diff) |
socket: Add some osmo_sockaddr print helpers
These are APIs useful to inline in log calls.
Change-Id: Ie07a38b05b7888885dba4ae795e9f3d9a561543d
Diffstat (limited to 'src/socket.c')
-rw-r--r-- | src/socket.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/socket.c b/src/socket.c index f91ad100..e8a2ce25 100644 --- a/src/socket.c +++ b/src/socket.c @@ -1001,6 +1001,38 @@ unsigned int osmo_sockaddr_to_str_and_uint(char *addr, unsigned int addr_len, ui return 0; } +/*! inet_ntop() wrapper for a struct sockaddr. + * \param[in] sa source sockaddr to get the address from. + * \param[out] dst string buffer of at least INET6_ADDRSTRLEN size. + * \returns returns a non-null pointer to dst. NULL is returned if there was an + * error, with errno set to indicate the error. + */ +const char *osmo_sockaddr_ntop(const struct sockaddr *sa, char *dst) +{ + const struct osmo_sockaddr *osa = (const struct osmo_sockaddr *)sa; + return inet_ntop(osa->u.sa.sa_family, + osa->u.sa.sa_family == AF_INET6 ? + (const void *)&osa->u.sin6.sin6_addr : + (const void *)&osa->u.sin.sin_addr, + dst, INET6_ADDRSTRLEN); +} + +/*! Get sockaddr port content (in host byte order) + * \param[in] sa source sockaddr to get the port from. + * \returns returns the sockaddr port in host byte order + */ +uint16_t osmo_sockaddr_port(const struct sockaddr *sa) +{ + const struct osmo_sockaddr *osa = (const struct osmo_sockaddr *)sa; + switch (osa->u.sa.sa_family) { + case AF_INET6: + return ntohs(osa->u.sin6.sin6_port); + case AF_INET: + return ntohs(osa->u.sin.sin_port); + } + return 0; +} + /*! Initialize a unix domain socket (including bind/connect) * \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM * \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP |