> Hi,
>
> attached you'll find another patch that is needed to make OpenVPN compile
> on Windows.  After quite some consideration I have decided to change
> the implementation for all platforms, as doing this with #ifdef WIN32
> would be messy at best.
>
> What the function in question does is "add a 32 bit offset to an IPv6
> address" - needed for server IP address calculation and for client pool
> assignment.  The old implementation did so in rounds of 32 bit, but the
> windows declaration of "struct in6_addr" has no 32bit-accessor in the
> underlying union...  windows has 8 and 16 bit, solaris has 8 and 32 bit,
> etc., so the only thing available everywhere is "8 bit".
>
> The addition stuff is a bit tricky as you need to be able to handle 
> overflows (what's 0x2 + 0xffffffff in 32bit-math?) - but I've actually
> tested this for the relevant overflow candidates on Linux/i386 and
> NetBSD/Sparc64 (different word size, different endianness), and also ran 
> random additions on 3 different implementations and compared the results 
> (same!).  So I'm sure it works :-)
>
> The new function takes about 1.5-1.8x more time, that is, 70usec vs. 40usec
> on my Atom 330 - and it's only called once per client connect on the
> server.  I'm willing to accept the slowness here to make the code easier
> to read, and more portable.
>
> Samuli has confirmed that it fixes this particular compilation problem
> on Windows :-)
>
> gert
>   
As far Visual Studio 2008 compatibility is concerned, I give this patch
an ACK. Also, the approach chosen here sounds reasonable.

-- 
Samuli Seppänen
Community Manager
OpenVPN Technologies, Inc

irc freenode net: mattock


Reply via email to