Hi,

we currently fail on OpenBSD (4.9) with this error message:

if gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include  -I../../src/compat      
-I/usr/include -I/usr/include     -g -O2 -MT tun.o -MD -MP -MF ".deps/tun.Tpo" 
-c -o tun.o tun.c;  then mv -f ".deps/tun.Tpo" ".deps/tun.Po"; else rm -f 
".deps/tun.Tpo"; exit 1; fi
tun.c: In function 'write_tun':
tun.c:2070: error: dereferencing pointer to incomplete type
*** Error code 1

which looks like

------------------------------------------
      struct ip *iph;

      iph = (struct ip *) buf;

      if (tt->ipv6 && iph->ip_v == 6)   <<< here
------------------------------------------

"struct ip" is defined in <netinet/ip.h>, which "syshead.h" includes
in weird ways - "syshead.h" has 5 different

#ifdef HAVE_NETINET_IP_H
#include <netinet/ip.h>
#endif

stanzas, always inside #ifdef TARGET_SOMETHING blocks.  It does have such
a block for TARGET_OPENBSD, but configure doesn't find it:

checking for net/if.h... yes
checking for netinet/ip.h... no
checking for netinet/if_ether.h... no

The relevant section from config.log is here:

---------------------------- snip ---------------------------------
configure:21681: checking for netinet/ip.h
configure:21681: gcc -c -g -O2  conftest.c >&5
In file included from conftest.c:170:
/usr//include/netinet/ip.h:178: error: expected specifier-qualifier-list before
'n_time'
configure:21681: $? = 1
configure: failed program was:
---------------------------- snip ---------------------------------

which is defined in <netinet/in_systm.h> - which syshead.h already includes.

the full config log can be found on 
  http://public.greenie.net/gert/openvpn/config-obsd49-20120326.log


I'd promise instead of trying to fix configure here, and since these
are inside well-understood #ifdef TARGET_<foo> things already, just 
assume that "if it's *BSD, it will always have <netinet/ip.h>" and 
don't bother running fragile tests from configure.

So that would turn syshead.h

#ifdef TARGET_OPENBSD

#ifdef HAVE_SYS_UIO_H
#include <sys/uio.h>
#endif

#ifdef HAVE_NETINET_IN_SYSTM_H
#include <netinet/in_systm.h>
#endif

#ifdef HAVE_NETINET_IP_H
#include <netinet/ip.h>
#endif

#ifdef HAVE_NET_IF_TUN_H
#include <net/if_tun.h>
#endif

#endif /* TARGET_OPENBSD */


into

#ifdef TARGET_OPENBSD

#include <sys/uio.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <net/if_tun.h>

#endif /* TARGET_OPENBSD */

... which is to the point, and works.

gert

-- 
USENET is *not* the non-clickable part of WWW!
                                                           //www.muc.de/~gert/
Gert Doering - Munich, Germany                             g...@greenie.muc.de
fax: +49-89-35655025                        g...@net.informatik.tu-muenchen.de

Attachment: pgpHPuNkeNgd7.pgp
Description: PGP signature

Reply via email to