IPv6addr fails on /64 prefixes
Hi Simon,
it seems I am the one unlucky guy who uses heartbeat with IPv6....
I started updateing my cluster today to lenny and IPv6addr fails again:
scs1:/etc/heartbeat/resource.d# ./IPv6addr 2001:629:3800:33:0:0:0:122 start
2009/02/16_20:19:50 ERROR: Generic error
ERROR: Generic error
I dug into the source of IPv6addr.c and it seems that the mask is too long
and therefore the scan_if isn't matching.
I have a 2001:629:3800:33::/64 subnet but it seems from my debug output
that IPv6addr tries to match /96 bits of the IP address which fails.
My C knowledge is sadly too little to fix this myself.
I would greatly be happy if you could help me with that.
Hi,
we found some discussion about this issue here:
http://www.velocityreviews.com/forums/t283343-shifting-bits-shift-32-bits-on-32-bit-int.html
In post #4 it reads:
The behaviour of shifts defined only if the value of the right operand
is less than the number of bits in the left operand. So shifting a
32-bit value by 32 or more is undefined...
further info in #7:
Better yet, read the first part of section 5.8 of the ISO/IEC 14882:2003
standard:
The behavior is undefined if the right operand is negative,
or greater than or equal to the length in bits of the
promoted left operand.
So it seems that my patch is the proper fix in the end after all.
Attached as file, since BT distroyed the formatting.
This bug was reported as Debian bug #515662
http://bugs.debian.org/515662
Signed-off-by: Simon Horman <horms@verge.net.au>