From 6143ece59cfe8f48eee4185290cf911d88499e88 Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Wed, 8 Mar 2017 13:05:05 +0100 Subject: [PATCH] util: ipv4 multicast socket address test utility --- include/wicked/address.h | 2 ++ src/address.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/wicked/address.h b/include/wicked/address.h index 9c8cdc4b2..5a8ebb579 100644 --- a/include/wicked/address.h +++ b/include/wicked/address.h @@ -60,6 +60,7 @@ typedef struct ni_address_array { extern ni_bool_t ni_sockaddr_is_ipv4_loopback(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_ipv4_linklocal(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_ipv4_broadcast(const ni_sockaddr_t *); +extern ni_bool_t ni_sockaddr_is_ipv4_multicast(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_ipv4_specified(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_ipv4_unspecified(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_ipv6_loopback(const ni_sockaddr_t *); @@ -72,6 +73,7 @@ extern ni_bool_t ni_sockaddr_is_ipv6_specified(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_ipv6_unspecified(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_loopback(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_linklocal(const ni_sockaddr_t *); +extern ni_bool_t ni_sockaddr_is_multicast(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_specified(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_is_unspecified(const ni_sockaddr_t *); extern ni_bool_t ni_sockaddr_equal(const ni_sockaddr_t *, const ni_sockaddr_t *); diff --git a/src/address.c b/src/address.c index 1e6bc225c..199ff919d 100644 --- a/src/address.c +++ b/src/address.c @@ -635,6 +635,15 @@ ni_sockaddr_is_ipv4_broadcast(const ni_sockaddr_t *saddr) return FALSE; } +ni_bool_t +ni_sockaddr_is_ipv4_multicast(const ni_sockaddr_t *saddr) +{ + if (saddr->ss_family == AF_INET) { + return IN_MULTICAST(ntohl(saddr->sin.sin_addr.s_addr)); + } + return FALSE; +} + ni_bool_t ni_sockaddr_is_ipv4_specified(const ni_sockaddr_t *saddr) { @@ -754,6 +763,19 @@ ni_sockaddr_is_linklocal(const ni_sockaddr_t *saddr) } } +ni_bool_t +ni_sockaddr_is_multicast(const ni_sockaddr_t *saddr) +{ + switch (saddr->ss_family) { + case AF_INET: + return ni_sockaddr_is_ipv4_multicast(saddr); + case AF_INET6: + return ni_sockaddr_is_ipv6_multicast(saddr); + default: + return FALSE; + } +} + ni_bool_t ni_sockaddr_is_specified(const ni_sockaddr_t *saddr) {