[ovs-dev] [PATCH] sparse: Make IN6_IS_ADDR_MC_LINKLOCAL and IN6_ARE_ADDR_EQUAL pickier.
Ben Pfaff
blp at ovn.org
Tue Jul 10 16:27:18 UTC 2018
On GNU systems these macros work with arbitrary pointers, but the relevant
standards only require IN6_IS_ADDR_MC_LINKLOCAL to work with in6_addr (and
don't specify IN6_ARE_ADDR_EQUAL at all). Make the "sparse"
implementations correspondingly pickier so that we catch any introduced
problems more quickly.
CC: Aaron Conole <aconole at redhat.com>
Signed-off-by: Ben Pfaff <blp at ovn.org>
---
include/sparse/netinet/in.h | 27 +++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)
diff --git a/include/sparse/netinet/in.h b/include/sparse/netinet/in.h
index eea41bd7f672..21deceb28d41 100644
--- a/include/sparse/netinet/in.h
+++ b/include/sparse/netinet/in.h
@@ -124,14 +124,25 @@ struct sockaddr_in6 {
(X)->s6_addr[11] == 0xff)
#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
- (((const uint8_t *) (a))[0] == 0xff && \
- (((const uint8_t *) (a))[1] & 0xf) == 0x2)
-
-# define IN6_ARE_ADDR_EQUAL(a,b) \
- ((((const uint32_t *) (a))[0] == ((const uint32_t *) (b))[0]) && \
- (((const uint32_t *) (a))[1] == ((const uint32_t *) (b))[1]) && \
- (((const uint32_t *) (a))[2] == ((const uint32_t *) (b))[2]) && \
- (((const uint32_t *) (a))[3] == ((const uint32_t *) (b))[3]))
+ ((a)->s6_addr[0] == 0xff && ((a)->s6_addr[1] & 0xf) == 0x2)
+
+# define IN6_ARE_ADDR_EQUAL(a, b) \
+ ((a)->s6_addr[0] == (b)->s6_addr[0] && \
+ (a)->s6_addr[1] == (b)->s6_addr[1] && \
+ (a)->s6_addr[2] == (b)->s6_addr[2] && \
+ (a)->s6_addr[3] == (b)->s6_addr[3] && \
+ (a)->s6_addr[4] == (b)->s6_addr[4] && \
+ (a)->s6_addr[5] == (b)->s6_addr[5] && \
+ (a)->s6_addr[6] == (b)->s6_addr[6] && \
+ (a)->s6_addr[7] == (b)->s6_addr[7] && \
+ (a)->s6_addr[8] == (b)->s6_addr[8] && \
+ (a)->s6_addr[9] == (b)->s6_addr[9] && \
+ (a)->s6_addr[10] == (b)->s6_addr[10] && \
+ (a)->s6_addr[11] == (b)->s6_addr[11] && \
+ (a)->s6_addr[12] == (b)->s6_addr[12] && \
+ (a)->s6_addr[13] == (b)->s6_addr[13] && \
+ (a)->s6_addr[14] == (b)->s6_addr[14] && \
+ (a)->s6_addr[15] == (b)->s6_addr[15])
#define INET_ADDRSTRLEN 16
#define INET6_ADDRSTRLEN 46
--
2.16.1
More information about the dev
mailing list