From 1230fc407075a523099c5f5173cf70367efab12b Mon Sep 17 00:00:00 2001
From: Martine Lenders <mlenders@inf.fu-berlin.de>
Date: Tue, 14 Apr 2015 03:01:02 +0200
Subject: [PATCH] ipv6_addr: do not null remaining bits in prefix
 initialization

---
 sys/include/net/ng_ipv6/addr.h                    | 2 +-
 sys/net/network_layer/ng_ipv6/addr/ng_ipv6_addr.c | 5 ++---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/sys/include/net/ng_ipv6/addr.h b/sys/include/net/ng_ipv6/addr.h
index 76588fc69c..aef571ed63 100644
--- a/sys/include/net/ng_ipv6/addr.h
+++ b/sys/include/net/ng_ipv6/addr.h
@@ -330,7 +330,7 @@ uint8_t ng_ipv6_addr_match_prefix(const ng_ipv6_addr_t *a, const ng_ipv6_addr_t
 
 /**
  * @brief   Sets IPv6 address @p out with the first @p bits bit taken
- *          from @p prefix and the remaining bits to 0.
+ *          from @p prefix and leaves the remaining bits untouched.
  *
  * @param[out]  out     Prefix to be set.
  * @param[in]   prefix  Address to take prefix from.
diff --git a/sys/net/network_layer/ng_ipv6/addr/ng_ipv6_addr.c b/sys/net/network_layer/ng_ipv6/addr/ng_ipv6_addr.c
index a329810ee4..6030979d95 100644
--- a/sys/net/network_layer/ng_ipv6/addr/ng_ipv6_addr.c
+++ b/sys/net/network_layer/ng_ipv6/addr/ng_ipv6_addr.c
@@ -62,8 +62,6 @@ void ng_ipv6_addr_init_prefix(ng_ipv6_addr_t *out, const ng_ipv6_addr_t *prefix,
 {
     uint8_t bytes;
 
-    ng_ipv6_addr_set_unspecified(out);
-
     if (bits > 128) {
         bits = 128;
     }
@@ -75,7 +73,8 @@ void ng_ipv6_addr_init_prefix(ng_ipv6_addr_t *out, const ng_ipv6_addr_t *prefix,
     if (bits % 8) {
         uint8_t mask = 0xff << (8 - (bits - (bytes * 8)));
 
-        out->u8[bytes] = prefix->u8[bytes] & mask;
+        out->u8[bytes] &= ~mask;
+        out->u8[bytes] |= prefix->u8[bytes];
     }
 }
 
-- 
GitLab