packets: Fix in6_is_lla() on systems without s6_addr32 defined.
authorJustin Pettit <jpettit@ovn.org>
Wed, 20 Jul 2016 06:01:29 +0000 (23:01 -0700)
committerJustin Pettit <jpettit@ovn.org>
Wed, 20 Jul 2016 06:49:44 +0000 (23:49 -0700)
Fixes: 6d1a4f16 ("packets: Add in6_is_lla() function.")
Reported-by: Ben Pfaff <blp@ovn.org>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
lib/packets.h

index 8f11e2c..5fd1e51 100644 (file)
@@ -987,8 +987,9 @@ in6_is_lla(struct in6_addr *addr)
 #ifdef s6_addr32
     return addr->s6_addr32[0] == htonl(0xfe800000) && !(addr->s6_addr32[1]);
 #else
-    return addr->s6_addr[0] == htons(0xfe80) &&
-         !(addr->s6_addr[1] | addr->s6_addr[2] | addr->s6_addr[3]);
+    return addr->s6_addr[0] == 0xfe && addr->s6_addr[1] == 0x80 &&
+         !(addr->s6_addr[2] | addr->s6_addr[3] | addr->s6_addr[4] |
+           addr->s6_addr[5] | addr->s6_addr[6] | addr->s6_addr[7]);
 #endif
 }