> From: openssl-users <openssl-users-bounces@xxxxxxxxxxx> On Behalf Of Matt > Caswell > Sent: Tuesday, 22 March, 2022 10:31 > > There is already code in bss_dgram.c that is conditionally compiled on > OPENSSL_USE_IPV6. Is it reasonable to assume that if AF_INET6 is defined > then ip6.h exists? I meant to look into this earlier but got distracted. Windows has IPv6 support and defines AF_INET6, but does not have ip6.h (at least in the SDK version I have installed on this machine). If you do a search online you'll see many projects have copied the ip6.h from some other platform into their source trees for use by Windows. I've confirmed it's present on: * AIX 7.1 * HP-UX 11.31316 * Solaris 11.3 and of course on Linux generally. I don't have other platforms handy to test. Windows will be the sticking point. However, the Microsoft Windows SDK includes a header shared/netiodef.h, which includes at least some of the structures defined by RFC 3542, albeit with different type and field names; and macros mapping the RFC 3542 names to those identifiers. At least the following are available in that header: ip6_hdr ip6_flow ip6_plen ip6_nxt ip6_hops ip6_hlim ip6_src ip6_dst So something like this might work: #if defined OPENSSL_SYS_WINDOWS # include <shared/netiodef.h> #else # include <netinet/ip6.h> #endif (Note C does not require the argument of the operator "defined" to be parenthesized. Doing so just adds visual noise. ISO 9899-1999 6.10.1 #1.) -- Michael Wojcik