Problems with IPv6-related include files on Windows

Stefan Puiu stefanpuiu at itcnetworks.ro
Thu Feb 10 18:54:37 UTC 2005


Oops, I double checked and it seems that changing the include directory 
order fixes also the in_addr6 problem. Sorry for the noise.

Stefan Puiu wrote:

>Ok, applying both changes seems to break the Win32 build, the wrapping 
>of #include <isc/ipv6.h> being the main problem. The IPv6-related 
>warnings seem to go away when putting lib/isc/win32/include before 
>lib/isc/include in the includes directory search list, making one of the 
>changes unnecessary. However, the:
>
>d:\src\bind\bind-9.3.0\lib\isc\win32\include\isc\net.h(115) : error 
>C2079: 'ipi6_addr' uses undefined struct 'in6_addr'
>
>message is still there and I still need to edit the two files (or 
>#define in6_addr in my app). I'll need to check, but only applying the 
>part about ISC_PLATFORM_HAVEINADDR6 from the patches below shouldn't be 
>harmful, IMO.
>
>Stefan Puiu wrote:
>
>  
>
>>I've tried to write a simple wrapper library around the functionality 
>>provided by cfg_parse_file()/bind9_check_namedconf() and the zone 
>>parsing stuff, mainly inspired by what the named-check* binaries do; I'm 
>>using the BIND 9.3.0 headers and libraries. I've tried building the 
>>library on Windows 2000 using MS VC++ 6.0 (SP6), but I've stumbled on a 
>>problem we're familiar with here: conflicts between BIND 9 includes and 
>>various stuff in winsock2.h, mostly IPv6-related. We already have an app 
>>that uses BIND 9.2.3 libraries and includes and a lot of the source 
>>files are prefixed by an:
>>
>>#ifdef WIN32
>># ifndef ISC_IPV6_H
>># define ISC_IPV6_H 1
>># endif
>>#endif
>>
>>because otherwise sockaddr_in6 from isc/include/isc/ipv6.h would show up 
>>as redefined - it's already defined in ws2tcpip.h in the MSDEV includes. 
>>Now with BIND 9.3.0, doing that doesn't help for my test library, since 
>>I'm getting another error about:
>>
>>d:\src\bind\bind-9.3.0\lib\isc\win32\include\isc\net.h(116) : error 
>>C2079: 'ipi6_addr' uses undefined struct 'in6_addr'
>>
>>Digging a bit I see MSDEV 6 only has in_addr6 defined (ws2tcpip.h), not 
>>in6_addr. In the lib/isc/include/isc/platform.h for Solaris, I noticed 
>>this:
>>
>>/*
>>* If this system has in_addr6, rather than in6_addr, 
>>ISC_PLATFORM_HAVEINADDR6
>>* will be defined.
>>*/
>>#undef ISC_PLATFORM_HAVEINADDR6
>>
>>And in lib/isc/unix/include/isc/net.h:
>>
>>#ifdef ISC_PLATFORM_HAVEINADDR6
>>#define in6_addr in_addr6       /* Required for pre RFC2133 
>>implementations. */
>>#endif
>>
>>Adding #define ISC_PLATFORM_HAVEINADDR6 to the Win32 platform.h and the 
>>part above to lib/isc/win32/include/isc/net.h right before the line that 
>>gives the said error fixes the problem - this is a fix I'd really love 
>>to see in 9.3.1. I've checked, it isn't in 9.3.1beta2, and neither is 
>>the one I'm talking about below.
>>
>>Another fix I needed to apply was in lib/isc/win32/include/isc/net.h by 
>>wrapping the "#include <isc/ipv6.h>" line in a "#ifndef 
>>ISC_PLATFORM_HAVEIPV6" block, just like things are right now in its UNIX 
>>counterpart. These two fixes would make all compile errors go away. I've 
>>attached two diffs, one for each file I had to edit.
>>
>>Any reason not to apply these simple changes? I don't know about MSDEV 
>>7, though, maybe some #ifdefs to detect compiler/include file version 
>>would also be needed in order to maintain compatibility.
>>
>>
>>-- Attached file included as plaintext by Ecartis --
>>-- File: platform.h.diff
>>
>>--- platform.h	2004-04-19 09:39:56.000000000 +0300
>>+++ /d/src/bind/bind-9.3.0/lib/isc/win32/include/isc/platform.h	2005-02-10 20:05:26.269750000 +0200
>>@@ -33,7 +33,8 @@
>>#define ISC_PLATFORM_HAVEIPV6
>>#if _MSC_VER > 1200
>>#define ISC_PLATFORM_HAVEIN6PKTINFO
>>-#endif
>>+#endif
>>+#define ISC_PLATFORM_HAVEINADDR6 1
>>#define ISC_PLATFORM_NEEDPORTT
>>#undef MSG_TRUNC
>>#define ISC_PLATFORM_NEEDNTOP
>>
>>
>>
>>-- Attached file included as plaintext by Ecartis --
>>-- File: net.h.diff
>>
>>--- net.h	2004-04-29 04:31:23.000000000 +0300
>>+++ /d/src/bind/bind-9.3.0/lib/isc/win32/include/isc/net.h	2005-02-10 20:06:21.894750000 +0200
>>@@ -98,7 +98,13 @@
>>#include <isc/types.h>
>>
>>#include <ws2tcpip.h>
>>-#include <isc/ipv6.h>
>>+#ifndef ISC_PLATFORM_HAVEIPV6
>>+#include <isc/ipv6.h>
>>+#endif
>>+
>>+#ifdef ISC_PLATFORM_HAVEINADDR6
>>+#define in6_addr in_addr6       /* Required for pre RFC2133 implementations. */
>>+#endif
>>
>>/*
>> * This is here because named client, interfacemgr.c, etc. use the name as
>>
>>
>>
>>
>> 
>>
>>    
>>
>
>
>
>  
>



More information about the bind-users mailing list