]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
socket-util: introduce in_addr_is_multicast
authorSusant Sahani <susant@redhat.com>
Thu, 23 Feb 2017 17:58:12 +0000 (23:28 +0530)
committerSusant Sahani <susant@redhat.com>
Fri, 24 Feb 2017 10:12:59 +0000 (15:42 +0530)
This patch add support to test whether a internet
address is multicast or not.

src/basic/in-addr-util.c
src/basic/in-addr-util.h

index 3b06cb00ad4ea2f6f357cc3b6cb186b666ab3597..3927df2955862436349fdee73e48487cd3eba5f1 100644 (file)
@@ -66,6 +66,18 @@ int in_addr_is_link_local(int family, const union in_addr_union *u) {
         return -EAFNOSUPPORT;
 }
 
+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));
+
+        if (family == AF_INET6)
+                return IN6_IS_ADDR_MULTICAST(&u->in6);
+
+        return -EAFNOSUPPORT;
+}
+
 bool in4_addr_is_localhost(const struct in_addr *a) {
         assert(a);
 
index 64a812c3224d46afdd135614f8f24396a0262d45..51a5aa67e4101b6ec1934748dd5475e81a10a492 100644 (file)
@@ -39,6 +39,8 @@ struct in_addr_data {
 bool in4_addr_is_null(const struct in_addr *a);
 int in_addr_is_null(int family, const union in_addr_union *u);
 
+int in_addr_is_multicast(int family, const union in_addr_union *u);
+
 bool in4_addr_is_link_local(const struct in_addr *a);
 int in_addr_is_link_local(int family, const union in_addr_union *u);