On 1 June 2016 at 13:33, Patrick Wildt <[email protected]> wrote:
> Hi,
>
> The IPv6 address assignment was basically copied from the IPv4
> code.  Instead of working on the last 32-bits, it actually worked
> on the fourth byte.  Thus it modified the network bits instead of
> the host bits.
>
> This diff fixes the code so that we can have at least a 32-bit
> address pool space by using the current IPv4 code.  In the future
> it might be nice to be able to leverage all host bits.
>
> Is there a saner way to access the last 32-bits of an IPv6 address?
> Another possibility would be
>
>     *((uint32_t *)&in6->sin6_addr.s6_addr[12]) = ...;
>
> but I'm not sure that's any better.
>

The best way to do it is via memcpy.  Save htonl(host) in a uint32_t
on the stack and memcpy it into the (char *)&...s6_addr[12].

I think __u6_addr.__u6_addr32 is an implementation detail.

> Patrick
>

Reply via email to