in-addr-util: introduce in{4,6}_addr_is_multicast()

This commit is contained in:
Yu Watanabe
2024-02-23 13:12:57 +09:00
committed by Luca Boccassi
parent 9f0430b74b
commit c7f46150bb
2 changed files with 16 additions and 2 deletions

View File

@@ -91,14 +91,26 @@ bool in6_addr_is_link_local_all_nodes(const struct in6_addr *a) {
be32toh(a->s6_addr32[3]) == UINT32_C(0x00000001);
}
bool in4_addr_is_multicast(const struct in_addr *a) {
assert(a);
return IN_MULTICAST(be32toh(a->s_addr));
}
bool in6_addr_is_multicast(const struct in6_addr *a) {
assert(a);
return IN6_IS_ADDR_MULTICAST(a);
}
int in_addr_is_multicast(int family, const union in_addr_union *u) {
assert(u);
if (family == AF_INET)
return IN_MULTICAST(be32toh(u->in.s_addr));
return in4_addr_is_multicast(&u->in);
if (family == AF_INET6)
return IN6_IS_ADDR_MULTICAST(&u->in6);
return in6_addr_is_multicast(&u->in6);
return -EAFNOSUPPORT;
}

View File

@@ -40,6 +40,8 @@ static inline bool in_addr_data_is_set(const struct in_addr_data *a) {
return in_addr_data_is_null(a);
}
bool in4_addr_is_multicast(const struct in_addr *a);
bool in6_addr_is_multicast(const struct in6_addr *a);
int in_addr_is_multicast(int family, const union in_addr_union *u);
bool in4_addr_is_link_local(const struct in_addr *a);