add osmo_sockaddr_str_from_128()

Change-Id: Id67f419ad41f614202912500c96d82b6ff873a6a
This commit is contained in:
Neels Hofmeyr 2023-04-01 23:52:26 +02:00
parent f3917b177c
commit 46d1b84c3f
3 changed files with 21 additions and 0 deletions

View File

@ -76,6 +76,7 @@ int osmo_sockaddr_str_from_in_addr(struct osmo_sockaddr_str *sockaddr_str, const
int osmo_sockaddr_str_from_in6_addr(struct osmo_sockaddr_str *sockaddr_str, const struct in6_addr *addr, uint16_t port);
int osmo_sockaddr_str_from_32(struct osmo_sockaddr_str *sockaddr_str, uint32_t ip, uint16_t port);
int osmo_sockaddr_str_from_32h(struct osmo_sockaddr_str *sockaddr_str, uint32_t ip, uint16_t port);
int osmo_sockaddr_str_from_128(struct osmo_sockaddr_str *sockaddr_str, uint8_t *ip, uint16_t port);
int osmo_sockaddr_str_from_sockaddr_in(struct osmo_sockaddr_str *sockaddr_str, const struct sockaddr_in *src);
int osmo_sockaddr_str_from_sockaddr_in6(struct osmo_sockaddr_str *sockaddr_str, const struct sockaddr_in6 *src);
int osmo_sockaddr_str_from_sockaddr(struct osmo_sockaddr_str *sockaddr_str, const struct sockaddr_storage *src);

View File

@ -360,6 +360,7 @@ osmo_sockaddr_set_port;
osmo_sockaddr_str_cmp;
osmo_sockaddr_str_from_32;
osmo_sockaddr_str_from_32h;
osmo_sockaddr_str_from_128;
osmo_sockaddr_str_from_32n;
osmo_sockaddr_str_from_in6_addr;
osmo_sockaddr_str_from_in_addr;

View File

@ -299,6 +299,25 @@ int osmo_sockaddr_str_from_32h(struct osmo_sockaddr_str *sockaddr_str, uint32_t
return osmo_sockaddr_str_from_32(sockaddr_str, osmo_ntohl(ip), port);
}
/*! Convert IPv6 address from 128bit network-byte-order to osmo_sockaddr_str, and set port.
* \param[out] sockaddr_str The instance to copy to.
* \param[in] ip 128bit IPv6 address data.
* \param[in] port Port number.
* \return 0 on success, negative on error.
*/
int osmo_sockaddr_str_from_128(struct osmo_sockaddr_str *sockaddr_str, uint8_t *ip, uint16_t port)
{
if (!sockaddr_str)
return -ENOSPC;
*sockaddr_str = (struct osmo_sockaddr_str){
.af = AF_INET6,
.port = port,
};
if (!inet_ntop(AF_INET6, ip, sockaddr_str->ip, sizeof(sockaddr_str->ip)))
return -ENOSPC;
return 0;
}
/*! DEPRECATED: the name suggests a conversion from network byte order, but actually converts from host byte order. Use
* osmo_sockaddr_str_from_32 for network byte order and osmo_sockaddr_str_from_32h for host byte order. */
int osmo_sockaddr_str_from_32n(struct osmo_sockaddr_str *sockaddr_str, uint32_t ip, uint16_t port)