diff options
Diffstat (limited to 'shared/systemd/src/basic/in-addr-util.c')
| -rw-r--r-- | shared/systemd/src/basic/in-addr-util.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/shared/systemd/src/basic/in-addr-util.c b/shared/systemd/src/basic/in-addr-util.c index 5899f62f..91d687c2 100644 --- a/shared/systemd/src/basic/in-addr-util.c +++ b/shared/systemd/src/basic/in-addr-util.c @@ -11,6 +11,7 @@ #include <stdlib.h> #include "alloc-util.h" +#include "errno-util.h" #include "in-addr-util.h" #include "macro.h" #include "parse-util.h" @@ -93,12 +94,19 @@ int in_addr_is_localhost(int family, const union in_addr_union *u) { return -EAFNOSUPPORT; } +bool in4_addr_equal(const struct in_addr *a, const struct in_addr *b) { + assert(a); + assert(b); + + return a->s_addr == b->s_addr; +} + int in_addr_equal(int family, const union in_addr_union *a, const union in_addr_union *b) { assert(a); assert(b); if (family == AF_INET) - return a->in.s_addr == b->in.s_addr; + return in4_addr_equal(&a->in, &b->in); if (family == AF_INET6) return @@ -319,7 +327,7 @@ int in_addr_to_string(int family, const union in_addr_union *u, char **ret) { errno = 0; if (!inet_ntop(family, u, x, l)) - return errno > 0 ? -errno : -EINVAL; + return errno_or_else(EINVAL); *ret = TAKE_PTR(x); return 0; @@ -350,7 +358,7 @@ int in_addr_prefix_to_string(int family, const union in_addr_union *u, unsigned errno = 0; if (!inet_ntop(family, u, x, l)) - return errno > 0 ? -errno : -EINVAL; + return errno_or_else(EINVAL); p = x + strlen(x); l -= strlen(x); @@ -390,7 +398,7 @@ int in_addr_ifindex_to_string(int family, const union in_addr_union *u, int ifin errno = 0; if (!inet_ntop(family, u, x, l)) - return errno > 0 ? -errno : -EINVAL; + return errno_or_else(EINVAL); sprintf(strchr(x, 0), "%%%i", ifindex); @@ -410,7 +418,7 @@ int in_addr_from_string(int family, const char *s, union in_addr_union *ret) { errno = 0; if (inet_pton(family, s, ret ?: &buffer) <= 0) - return errno > 0 ? -errno : -EINVAL; + return errno_or_else(EINVAL); return 0; } @@ -747,4 +755,16 @@ static int in_addr_data_compare_func(const struct in_addr_data *x, const struct } DEFINE_HASH_OPS(in_addr_data_hash_ops, struct in_addr_data, in_addr_data_hash_func, in_addr_data_compare_func); + +static void in6_addr_hash_func(const struct in6_addr *addr, struct siphash *state) { + assert(addr); + + siphash24_compress(addr, sizeof(*addr), state); +} + +static int in6_addr_compare_func(const struct in6_addr *a, const struct in6_addr *b) { + return memcmp(a, b, sizeof(*a)); +} + +DEFINE_HASH_OPS(in6_addr_hash_ops, struct in6_addr, in6_addr_hash_func, in6_addr_compare_func); #endif /* NM_IGNORED */ |