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