Fix getting wrong bits in IP addresses
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 31 Jan 2018 21:45:21 +0000 (21:45 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 31 Jan 2018 21:45:21 +0000 (21:45 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/loc/private.h

index 7008fdf..ce4c357 100644 (file)
@@ -70,11 +70,11 @@ static inline int in6_addr_cmp(const struct in6_addr* a1, const struct in6_addr*
 }
 
 static inline int in6_addr_get_bit(const struct in6_addr* address, unsigned int i) {
-       return ((address->s6_addr[i / 8] >> (i % 8)) & 1);
+       return ((address->s6_addr[i / 8] >> (7 - (i % 8))) & 1);
 }
 
 static inline void in6_addr_set_bit(struct in6_addr* address, unsigned int i, unsigned int val) {
-       address->s6_addr[i / 8] ^= (-val ^ address->s6_addr[i / 8]) & (1 << (i % 8));
+       address->s6_addr[i / 8] ^= (-val ^ address->s6_addr[i / 8]) & (1 << (7 - (i % 8)));
 }
 
 #endif