diff --git a/sys/include/net/ng_ipv6/addr.h b/sys/include/net/ng_ipv6/addr.h index 76588fc69cce1b33454ce5b4c4abc0d6d66834cb..aef571ed63410a85ed2fda4e2ab9c3af9b17439b 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 a329810ee4aff597515e3009071333bf5b2f4700..6030979d956db5173c10ca21e6e1afbb783da40f 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]; } }