diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2024-03-13 23:32:43 +0100 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2024-03-28 03:42:07 +0100 |
commit | 1c2496294698ca60acc9b2f15d792180ed83673e (patch) | |
tree | 0c48e06d1a37c8ce425b5511dc7dba012a84e4ef /src/core | |
parent | 50e38cf36a3911629cb0871ea3f7e2e7bc1b2119 (diff) |
sockaddr_str: add conversion to,from osmo_sockaddr
Add functions to pass struct osmo_sockaddr to the
osmo_sockaddr_str_{to,from}* API directly.
So far the interface to osmo_sockaddr_str_ is:
osmo_sockaddr_str_from_sockaddr(&my_sa_str, &my_osa->u.sas);
I'm working a lot with osmo_sockaddr at the moment, and the cumulated
time of forgetting to add 'u.sas' and having another compilation cycle
because of those is justifying this additional API.
Change-Id: I0df84b4bb8cb5d8434b735fa3a38e7f95be43e91
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/libosmocore.map | 2 | ||||
-rw-r--r-- | src/core/sockaddr_str.c | 22 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/core/libosmocore.map b/src/core/libosmocore.map index fb294ba6..c5ab6e37 100644 --- a/src/core/libosmocore.map +++ b/src/core/libosmocore.map @@ -400,6 +400,7 @@ osmo_sockaddr_str_from_in_addr; osmo_sockaddr_str_from_sockaddr; osmo_sockaddr_str_from_sockaddr_in; osmo_sockaddr_str_from_sockaddr_in6; +osmo_sockaddr_str_from_osa; osmo_sockaddr_str_from_str; osmo_sockaddr_str_from_str2; osmo_sockaddr_str_is_nonzero; @@ -412,6 +413,7 @@ osmo_sockaddr_str_to_in_addr; osmo_sockaddr_str_to_sockaddr; osmo_sockaddr_str_to_sockaddr_in; osmo_sockaddr_str_to_sockaddr_in6; +osmo_sockaddr_str_to_osa; osmo_sockaddr_to_octets; osmo_sockaddr_to_str; osmo_sockaddr_to_str_and_uint; diff --git a/src/core/sockaddr_str.c b/src/core/sockaddr_str.c index 9f1e8972..bea61849 100644 --- a/src/core/sockaddr_str.c +++ b/src/core/sockaddr_str.c @@ -33,6 +33,7 @@ #include <osmocom/core/sockaddr_str.h> #include <osmocom/core/utils.h> #include <osmocom/core/byteswap.h> +#include <osmocom/core/socket.h> /*! \addtogroup sockaddr_str * @@ -359,6 +360,17 @@ int osmo_sockaddr_str_from_sockaddr(struct osmo_sockaddr_str *sockaddr_str, cons return -EINVAL; } +/*! Convert IPv4 or IPv6 address and port to osmo_sockaddr_str. + * \param[out] sockaddr_str The instance to copy to. + * \param[in] src IPv4 or IPv6 address and port data. + * \return 0 on success, negative if src does not indicate AF_INET nor AF_INET6 (or if the conversion fails, which + * should not be possible in practice). + */ +int osmo_sockaddr_str_from_osa(struct osmo_sockaddr_str *sockaddr_str, const struct osmo_sockaddr *src) +{ + return osmo_sockaddr_str_from_sockaddr(sockaddr_str, &src->u.sas); +} + /*! Convert osmo_sockaddr_str address string to IPv4 address data. * \param[in] sockaddr_str The instance to convert the IP of. * \param[out] dst IPv4 address data to write to. @@ -509,5 +521,15 @@ int osmo_sockaddr_str_to_sockaddr(const struct osmo_sockaddr_str *sockaddr_str, } } +/*! Convert osmo_sockaddr_str address string and port to IPv4 or IPv6 address and port data. + * \param[in] sockaddr_str The instance to convert the IP and port of. + * \param[out] dst IPv4/IPv6 address and port data to write to. + * \return 0 on success, negative on error (e.g. invalid IP address string for the family indicated by sockaddr_str->af). + */ +int osmo_sockaddr_str_to_osa(const struct osmo_sockaddr_str *sockaddr_str, struct osmo_sockaddr *dst) +{ + return osmo_sockaddr_str_to_sockaddr(sockaddr_str, &dst->u.sas); +} + /*! @} */ #endif // HAVE_NETINET_IN_H |