2 dnl Copyright (c) 1994, 1995, 1996, 1997
3 dnl The Regents of the University of California. All rights reserved.
5 dnl Process this file with autoconf to produce a configure script.
11 # http://ftp.gnu.org/gnu/config/README
13 # for the URLs to use to fetch new versions of config.guess and
19 AC_INIT(pcap, m4_esyscmd_s([cat VERSION]))
20 AC_CONFIG_SRCDIR(pcap.c)
21 AC_SUBST(PACKAGE_NAME)
25 AC_LBL_C_INIT_BEFORE_CC(V_CCOPT, V_INCLS)
27 AC_LBL_C_INIT(V_CCOPT, V_INCLS)
31 if test "$ac_cv___attribute__" = "yes"; then
32 AC_C___ATTRIBUTE___UNUSED
36 # Try to arrange for large file support.
42 dnl Even if <net/bpf.h> were, on all OSes that support BPF, fixed to
43 dnl include <sys/ioccom.h>, and we were to drop support for older
44 dnl releases without that fix, so that pcap-bpf.c doesn't need to
45 dnl include <sys/ioccom.h>, the test program in "AC_LBL_FIXINCLUDES"
46 dnl in "aclocal.m4" uses it, so we would still have to test for it
47 dnl and set "HAVE_SYS_IOCCOM_H" if we have it, otherwise
48 dnl "AC_LBL_FIXINCLUDES" wouldn't work on some platforms such as Solaris.
50 AC_CHECK_HEADERS(sys/ioccom.h sys/sockio.h limits.h)
51 AC_CHECK_HEADERS(netpacket/packet.h)
52 AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
53 #include <sys/socket.h>
55 if test "$ac_cv_header_net_pfvar_h" = yes; then
57 # Check for various PF actions.
59 AC_MSG_CHECKING(whether net/pfvar.h defines PF_NAT through PF_NORDR)
61 [#include <sys/types.h>
62 #include <sys/socket.h>
64 #include <net/pfvar.h>],
65 [return PF_NAT+PF_NONAT+PF_BINAT+PF_NOBINAT+PF_RDR+PF_NORDR;],
68 AC_DEFINE(HAVE_PF_NAT_THROUGH_PF_NORDR, 1,
69 [define if net/pfvar.h defines PF_NAT through PF_NORDR])
76 AC_CHECK_HEADERS(linux/sockios.h linux/if_bonding.h,,,
78 #include <sys/socket.h>
86 AC_CHECK_FUNCS(strerror strlcpy strlcat)
89 AC_CHECK_FUNCS(vsnprintf snprintf,,
91 if test $needsnprintf = yes; then
96 AC_CHECK_FUNCS(strtok_r,,
98 if test $needstrtok_r = yes; then
103 # Do we have ffs(), and is it declared in <strings.h>?
106 if test "$ac_cv_func_ffs" = yes; then
108 # We have ffs(); is it declared in <strings.h>?
110 # This test fails if we don't have <strings.h> or if we do
111 # but it doesn't declare ffs().
115 AC_DEFINE(STRINGS_H_DECLARES_FFS,,
116 [Define to 1 if strings.h declares `ffs'])
124 # Do this before checking for ether_hostton(), as it's a
125 # "gethostbyname() -ish function".
130 # You are in a twisty little maze of UN*Xes, all different.
131 # Some might not have ether_hostton().
132 # Some might have it and declare it in <net/ethernet.h>.
133 # Some might have it and declare it in <netinet/ether.h>
134 # Some might have it and declare it in <sys/ethernet.h>.
135 # Some might have it and declare it in <arpa/inet.h>.
136 # Some might have it and declare it in <netinet/if_ether.h>.
137 # Some might have it and not declare it in any header file.
139 # Before you is a C compiler.
141 AC_CHECK_FUNCS(ether_hostton)
142 if test "$ac_cv_func_ether_hostton" = yes; then
144 # OK, we have ether_hostton(). Is it declared in <net/ethernet.h>?
146 # This test fails if we don't have <net/ethernet.h> or if we do
147 # but it doesn't declare ether_hostton().
149 AC_CHECK_DECL(ether_hostton,
151 AC_DEFINE(NET_ETHERNET_H_DECLARES_ETHER_HOSTTON,,
152 [Define to 1 if net/ethernet.h declares `ether_hostton'])
155 #include <net/ethernet.h>
160 if test "$ac_cv_have_decl_ether_hostton" != yes; then
162 # No, how about <netinet/ether.h>, as on Linux?
164 # This test fails if we don't have <netinet/ether.h>
165 # or if we do but it doesn't declare ether_hostton().
167 # Unset ac_cv_have_decl_ether_hostton so we don't
168 # treat the previous failure as a cached value and
169 # suppress the next test.
171 unset ac_cv_have_decl_ether_hostton
172 AC_CHECK_DECL(ether_hostton,
174 AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_HOSTTON,,
175 [Define to 1 if netinet/ether.h declares `ether_hostton'])
178 #include <netinet/ether.h>
184 if test "$ac_cv_have_decl_ether_hostton" != yes; then
186 # No, how about <sys/ethernet.h>, as on Solaris 10
189 # This test fails if we don't have <sys/ethernet.h>
190 # or if we do but it doesn't declare ether_hostton().
192 # Unset ac_cv_have_decl_ether_hostton so we don't
193 # treat the previous failure as a cached value and
194 # suppress the next test.
196 unset ac_cv_have_decl_ether_hostton
197 AC_CHECK_DECL(ether_hostton,
199 AC_DEFINE(SYS_ETHERNET_H_DECLARES_ETHER_HOSTTON,,
200 [Define to 1 if sys/ethernet.h declares `ether_hostton'])
203 #include <sys/ethernet.h>
209 if test "$ac_cv_have_decl_ether_hostton" != yes; then
211 # No, how about <arpa/inet.h>, as in AIX?
213 # This test fails if we don't have <arpa/inet.h>
214 # (if we have ether_hostton(), we should have
215 # networking, and if we have networking, we should
216 # have <arapa/inet.h>) or if we do but it doesn't
217 # declare ether_hostton().
219 # Unset ac_cv_have_decl_ether_hostton so we don't
220 # treat the previous failure as a cached value and
221 # suppress the next test.
223 unset ac_cv_have_decl_ether_hostton
224 AC_CHECK_DECL(ether_hostton,
226 AC_DEFINE(ARPA_INET_H_DECLARES_ETHER_HOSTTON,,
227 [Define to 1 if arpa/inet.h declares `ether_hostton'])
230 #include <arpa/inet.h>
236 if test "$ac_cv_have_decl_ether_hostton" != yes; then
238 # No, how about <netinet/if_ether.h>?
239 # On some platforms, it requires <net/if.h> and
240 # <netinet/in.h>, and we always include it with
241 # both of them, so test it with both of them.
243 # This test fails if we don't have <netinet/if_ether.h>
244 # and the headers we include before it, or if we do but
245 # <netinet/if_ether.h> doesn't declare ether_hostton().
247 # Unset ac_cv_have_decl_ether_hostton so we don't
248 # treat the previous failure as a cached value and
249 # suppress the next test.
251 unset ac_cv_have_decl_ether_hostton
252 AC_CHECK_DECL(ether_hostton,
254 AC_DEFINE(NETINET_IF_ETHER_H_DECLARES_ETHER_HOSTTON,,
255 [Define to 1 if netinet/if_ether.h declares `ether_hostton'])
258 #include <sys/types.h>
259 #include <sys/socket.h>
261 #include <netinet/in.h>
262 #include <netinet/if_ether.h>
266 # After all that, is ether_hostton() declared?
268 if test "$ac_cv_have_decl_ether_hostton" = yes; then
272 AC_DEFINE(HAVE_DECL_ETHER_HOSTTON, 1,
273 [Define to 1 if you have the declaration of `ether_hostton'])
276 # No, we'll have to declare it ourselves.
277 # Do we have "struct ether_addr" if we include
278 # <netinet/if_ether.h>?
280 AC_CHECK_TYPES(struct ether_addr,,,
282 #include <sys/types.h>
283 #include <sys/socket.h>
285 #include <netinet/in.h>
286 #include <netinet/if_ether.h>
291 dnl to pacify those who hate protochain insn
292 AC_MSG_CHECKING(if --disable-protochain option is specified)
293 AC_ARG_ENABLE(protochain,
294 AC_HELP_STRING([--disable-protochain],[disable \"protochain\" insn]))
295 case "x$enable_protochain" in
296 xyes) enable_protochain=enabled ;;
297 xno) enable_protochain=disabled ;;
298 x) enable_protochain=enabled ;;
301 if test "$enable_protochain" = "disabled"; then
302 AC_DEFINE(NO_PROTOCHAIN,1,[do not use protochain])
304 AC_MSG_RESULT(${enable_protochain})
307 # valgrindtest directly uses the native capture mechanism, but
308 # only tests with BPF and PF_PACKET sockets; only enable it if
309 # we have BPF or PF_PACKET sockets.
314 # SITA support is mutually exclusive with native capture support;
315 # "--with-sita" selects SITA support.
318 AC_HELP_STRING([--with-sita],[include SITA support]),
320 if test ! "x$withval" = "xno" ; then
321 AC_DEFINE(SITA,1,[include ACN support])
322 AC_MSG_NOTICE(Enabling SITA ACN support)
328 AC_HELP_STRING([--with-pcap=TYPE],[use packet capture TYPE]))
329 if test ! -z "$with_pcap" ; then
333 # Check for a bunch of headers for various packet
334 # capture mechanisms.
336 AC_CHECK_HEADERS(net/bpf.h)
337 if test "$ac_cv_header_net_bpf_h" = yes; then
339 # Does it define BIOCSETIF?
340 # I.e., is it a header for an LBL/BSD-style capture
341 # mechanism, or is it just a header for a BPF filter
342 # engine? Some versions of Arch Linux, for example,
343 # have a net/bpf.h that doesn't define BIOCSETIF;
344 # as it's a Linux, it should use packet sockets,
347 AC_MSG_CHECKING(if net/bpf.h defines BIOCSETIF)
348 AC_CACHE_VAL(ac_cv_lbl_bpf_h_defines_biocsetif,
351 #include <sys/ioctl.h>
352 #ifdef HAVE_SYS_IOCCOM_H
353 #include <sys/ioccom.h>
358 [u_int i = BIOCSETIF;],
359 ac_cv_lbl_bpf_h_defines_biocsetif=yes,
360 ac_cv_lbl_bpf_h_defines_biocsetif=no))
361 AC_MSG_RESULT($ac_cv_lbl_bpf_h_defines_biocsetif)
363 AC_CHECK_HEADERS(net/pfilt.h net/enet.h)
364 AC_CHECK_HEADERS(net/nit.h sys/net/nit.h)
365 AC_CHECK_HEADERS(linux/socket.h net/raw.h sys/dlpi.h)
367 if test "$ac_cv_lbl_bpf_h_defines_biocsetif" = yes; then
370 # Check this before DLPI, so that we pick BPF on
371 # Solaris 11 and later.
376 # We have BPF, so build valgrindtest with "make test"
377 # on macOS, FreeBSD, and Linux (add your OS once
378 # there's a valgrind for it).
382 freebsd*|darwin*|linux*)
383 VALGRINDTEST=valgrindtest
386 elif test "$ac_cv_header_linux_socket_h" = yes; then
388 # No prizes for guessing this one.
393 # XXX - this won't work with older kernels that have
394 # SOCK_PACKET sockets but not PF_PACKET sockets.
396 VALGRINDTEST=valgrindtest
397 elif test "$ac_cv_header_net_pfilt_h" = yes; then
399 # DEC OSF/1, Digital UNIX, Tru64 UNIX
402 elif test "$ac_cv_header_net_enet_h" = yes; then
404 # Stanford Enetfilter.
407 elif test "$ac_cv_header_net_nit_h" = yes; then
409 # SunOS 4.x STREAMS NIT.
412 elif test "$ac_cv_header_sys_net_nit_h" = yes; then
414 # Pre-SunOS 4.x non-STREAMS NIT.
417 elif test "$ac_cv_header_net_raw_h" = yes; then
422 elif test "$ac_cv_header_sys_dlpi_h" = yes; then
424 # DLPI on pre-Solaris 11 SunOS 5, HP-UX, possibly others.
429 # Nothing we support.
432 AC_MSG_WARN(cannot determine packet capture interface)
433 AC_MSG_WARN((see the INSTALL doc for more info))
436 AC_MSG_CHECKING(packet capture type)
437 AC_MSG_RESULT($V_PCAP)
438 AC_SUBST(VALGRINDTEST)
441 # Do capture-mechanism-dependent tests.
446 # Needed for common functions used by pcap-[dlpi,libdlpi].c
451 # Checks for some header files.
453 AC_CHECK_HEADERS(sys/bufmod.h sys/dlpi_ext.h)
456 # Checks to see if Solaris has the public libdlpi(3LIB) library.
457 # Note: The existence of /usr/include/libdlpi.h does not mean it is the
458 # public libdlpi(3LIB) version. Before libdlpi was made public, a
459 # private version also existed, which did not have the same APIs.
460 # Due to a gcc bug, the default search path for 32-bit libraries does
461 # not include /lib, we add it explicitly here.
462 # [http://bugs.opensolaris.org/view_bug.do?bug_id=6619485].
463 # Also, due to the bug above applications that link to libpcap with
464 # libdlpi will have to add "-L/lib" option to "configure".
466 saved_ldflags=$LDFLAGS
467 LDFLAGS="$LIBS -L/lib"
468 AC_CHECK_LIB(dlpi, dlpi_walk,
472 AC_DEFINE(HAVE_LIBDLPI,1,[if libdlpi exists])
475 LDFLAGS=$saved_ldflags
478 # Checks whether <sys/dlpi.h> is usable, to catch weird SCO
481 AC_MSG_CHECKING(whether <sys/dlpi.h> is usable)
482 AC_CACHE_VAL(ac_cv_sys_dlpi_usable,
485 #include <sys/types.h>
486 #include <sys/time.h>
487 #include <sys/dlpi.h>
489 [int i = DL_PROMISC_PHYS;],
490 ac_cv_sys_dlpi_usable=yes,
491 ac_cv_sys_dlpi_usable=no))
492 AC_MSG_RESULT($ac_cv_sys_dlpi_usable)
493 if test $ac_cv_sys_dlpi_usable = no ; then
494 AC_MSG_ERROR(<sys/dlpi.h> is not usable on this system; it probably has a non-standard DLPI)
498 # This check is for Solaris with DLPI support for passive modes.
499 # See dlpi(7P) for more details.
501 AC_LBL_DL_PASSIVE_REQ_T
506 # Do we have the wireless extensions?
508 AC_CHECK_HEADERS(linux/wireless.h, [], [],
510 #include <sys/socket.h>
511 #include <linux/if.h>
512 #include <linux/types.h>
519 AC_HELP_STRING([--without-libnl],[disable libnl support @<:@default=yes, on Linux, if present@:>@]),
520 with_libnl=$withval,,)
522 if test x$with_libnl != xno ; then
525 incdir=-I/usr/include/libnl3
527 if test x$withval != x ; then
528 libnldir=-L${withval}/lib/.libs
529 incdir=-I${withval}/include
533 # Try libnl 3.x first.
535 AC_CHECK_LIB(nl-3, nl_socket_alloc,
538 # Yes, we have libnl 3.x.
540 LIBS="${libnldir} -lnl-genl-3 -lnl-3 $LIBS"
541 AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
542 AC_DEFINE(HAVE_LIBNL_3_x,1,[if libnl exists and is version 3.x])
543 AC_DEFINE(HAVE_LIBNL_NLE,1,[libnl has NLE_FAILURE])
544 AC_DEFINE(HAVE_LIBNL_SOCKETS,1,[libnl has new-style socket api])
545 V_INCLS="$V_INCLS ${incdir}"
547 ],[], ${incdir} ${libnldir} -lnl-genl-3 -lnl-3 )
549 if test x$have_any_nl = xno ; then
553 AC_CHECK_LIB(nl, nl_socket_alloc,
556 # Yes, we have libnl 2.x.
558 LIBS="${libnldir} -lnl-genl -lnl $LIBS"
559 AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
560 AC_DEFINE(HAVE_LIBNL_2_x,1,[if libnl exists and is version 2.x])
561 AC_DEFINE(HAVE_LIBNL_NLE,1,[libnl has NLE_FAILURE])
562 AC_DEFINE(HAVE_LIBNL_SOCKETS,1,[libnl has new-style socket api])
567 if test x$have_any_nl = xno ; then
569 # No, we don't; do we have libnl 1.x?
571 AC_CHECK_LIB(nl, nl_handle_alloc,
576 LIBS="${libnldir} -lnl $LIBS"
577 AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
582 if test x$have_any_nl = xno ; then
584 # No, we don't have libnl at all.
586 if test x$with_libnl = xyes ; then
587 AC_MSG_ERROR([libnl support requested but libnl not found])
592 AC_CHECK_HEADERS(linux/ethtool.h,,,
595 #include <linux/types.h>
598 AC_LBL_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI
603 # Check whether we have the *BSD-style ioctls.
605 AC_CHECK_HEADERS(net/if_media.h)
608 # Check whether we have struct BPF_TIMEVAL.
610 AC_CHECK_TYPES(struct BPF_TIMEVAL,,,
612 #include <sys/types.h>
613 #include <sys/ioctl.h>
614 #ifdef HAVE_SYS_IOCCOM_H
615 #include <sys/ioccom.h>
623 # --with-pcap=dag is the only way to get here, and it means
624 # "DAG support but nothing else"
626 V_DEFS="$V_DEFS -DDAG_ONLY"
632 # --with-pcap=septel is the only way to get here, and it means
633 # "Septel support but nothing else"
635 V_DEFS="$V_DEFS -DSEPTEL_ONLY"
641 # --with-pcap=snf is the only way to get here, and it means
642 # "SNF support but nothing else"
644 V_DEFS="$V_DEFS -DSNF_ONLY"
652 AC_MSG_ERROR($V_PCAP is not a valid pcap type)
657 dnl Now figure out how we get a list of interfaces and addresses,
658 dnl if we support capturing. Don't bother if we don't support
661 if test "$V_PCAP" != null
663 AC_CHECK_FUNC(getifaddrs,[
665 # We have "getifaddrs()"; make sure we have <ifaddrs.h>
666 # as well, just in case some platform is really weird.
668 AC_CHECK_HEADER(ifaddrs.h,[
670 # We have the header, so we use "getifaddrs()" to
671 # get the list of interfaces.
673 V_FINDALLDEVS=fad-getad.c
676 # We don't have the header - give up.
677 # XXX - we could also fall back on some other
678 # mechanism, but, for now, this'll catch this
679 # problem so that we can at least try to figure
680 # out something to do on systems with "getifaddrs()"
681 # but without "ifaddrs.h", if there is something
682 # we can do on those systems.
684 AC_MSG_ERROR([Your system has getifaddrs() but doesn't have a usable <ifaddrs.h>.])
688 # Well, we don't have "getifaddrs()", so we have to use
689 # some other mechanism; determine what that mechanism is.
691 # The first thing we use is the type of capture mechanism,
692 # which is somewhat of a proxy for the OS we're using.
698 # This might be Solaris 8 or later, with
699 # SIOCGLIFCONF, or it might be some other OS
700 # or some older version of Solaris, with
703 AC_MSG_CHECKING(whether we have SIOCGLIFCONF)
704 AC_CACHE_VAL(ac_cv_lbl_have_siocglifconf,
706 [#include <sys/param.h>
707 #include <sys/file.h>
708 #include <sys/ioctl.h>
709 #include <sys/socket.h>
710 #include <sys/sockio.h>],
711 [ioctl(0, SIOCGLIFCONF, (char *)0);],
712 ac_cv_lbl_have_siocglifconf=yes,
713 ac_cv_lbl_have_siocglifconf=no))
714 AC_MSG_RESULT($ac_cv_lbl_have_siocglifconf)
715 if test $ac_cv_lbl_have_siocglifconf = yes ; then
716 V_FINDALLDEVS=fad-glifc.c
718 V_FINDALLDEVS=fad-gifc.c
724 # Assume we just have SIOCGIFCONF.
725 # (XXX - on at least later Linux kernels, there's
726 # another mechanism, and we should be using that
729 V_FINDALLDEVS=fad-gifc.c
735 dnl check for hardware timestamp support
738 AC_CHECK_HEADERS([linux/net_tstamp.h])
741 AC_MSG_NOTICE(no hardware timestamp support implemented for $host_os)
745 AC_ARG_ENABLE([packet-ring],
746 [AC_HELP_STRING([--enable-packet-ring],[enable Linux packet ring support @<:@default=yes@:>@])],
747 ,enable_packet_ring=yes)
749 if test "x$enable_packet_ring" != "xno" ; then
750 AC_DEFINE(PCAP_SUPPORT_PACKET_RING, 1, [use Linux packet ring capture if available])
751 AC_SUBST(PCAP_SUPPORT_PACKET_RING)
754 AC_MSG_CHECKING(for socklen_t)
756 #include <sys/types.h>
757 #include <sys/socket.h>
762 if test "x$have_socklen_t" = "xyes"; then
763 AC_DEFINE(HAVE_SOCKLEN_T, 1, [define if socklen_t is defined])
765 AC_MSG_RESULT($have_socklen_t)
768 AC_HELP_STRING([--enable-ipv6],[build IPv6-capable version @<:@default=yes, if getaddrinfo available@:>@]),
770 [enable_ipv6=ifavailable])
771 if test "$enable_ipv6" != "no"; then
772 AC_CHECK_FUNC(getaddrinfo,
774 AC_DEFINE(INET6,1,[IPv6])
777 if test "$enable_ipv6" != "ifavailable"; then
778 AC_MSG_FAILURE([--enable-ipv6 was given, but getaddrinfo isn't available])
783 # Check for Endace DAG card support.
785 AC_HELP_STRING([--with-dag@<:@=DIR@:>@],[include Endace DAG support (located in directory DIR, if supplied). @<:@default=yes, if present@:>@]),
787 if test "$withval" = no
789 # User doesn't want DAG support.
791 elif test "$withval" = yes
793 # User wants DAG support but hasn't specified a directory.
796 # User wants DAG support and has specified a directory, so use the provided value.
801 if test "$V_PCAP" = dag; then
802 # User requested DAG-only libpcap, so we'd better have
805 elif test "xxx_only" = yes; then
806 # User requested something-else-only pcap, so they don't
811 # Use DAG API if present, otherwise don't
817 AC_ARG_WITH([dag-includes],
818 AC_HELP_STRING([--with-dag-includes=IDIR],[Endace DAG include directory, if not DIR/include]),
820 # User wants DAG support and has specified a header directory, so use the provided value.
822 dag_include_dir=$withval
825 AC_ARG_WITH([dag-libraries],
826 AC_HELP_STRING([--with-dag-libraries=LDIR],[Endace DAG library directory, if not DIR/lib]),
828 # User wants DAG support and has specified a library directory, so use the provided value.
834 if test "$want_dag" != no; then
836 AC_MSG_CHECKING([whether we have DAG API headers])
838 # If necessary, set default paths for DAG API headers and libraries.
839 if test -z "$dag_root"; then
843 if test -z "$dag_include_dir"; then
844 dag_include_dir="$dag_root/include"
847 if test -z "$dag_lib_dir"; then
848 dag_lib_dir="$dag_root/lib"
851 if test -z "$dag_tools_dir"; then
852 dag_tools_dir="$dag_root/tools"
855 if test -r $dag_include_dir/dagapi.h; then
856 ac_cv_lbl_dag_api=yes
859 if test "$ac_cv_lbl_dag_api" = yes; then
860 AC_MSG_RESULT([yes ($dag_include_dir)])
862 V_INCLS="$V_INCLS -I$dag_include_dir"
864 if test $V_PCAP != dag ; then
865 SSRC="$SSRC pcap-dag.c"
868 # Check for various DAG API functions.
869 # Don't need to save and restore LIBS to prevent -ldag being
870 # included if there's a found-action (arg 3).
871 saved_ldflags=$LDFLAGS
872 LDFLAGS="-L$dag_lib_dir"
873 AC_CHECK_LIB([dag], [dag_attach_stream],
875 [AC_MSG_ERROR(DAG library lacks streams support)])
876 AC_CHECK_LIB([dag], [dag_attach_stream64], [dag_large_streams="1"], [dag_large_streams="0"])
877 AC_CHECK_LIB([dag],[dag_get_erf_types], [
878 AC_DEFINE(HAVE_DAG_GET_ERF_TYPES, 1, [define if you have dag_get_erf_types()])])
879 AC_CHECK_LIB([dag],[dag_get_stream_erf_types], [
880 AC_DEFINE(HAVE_DAG_GET_STREAM_ERF_TYPES, 1, [define if you have dag_get_stream_erf_types()])])
882 LDFLAGS=$saved_ldflags
885 LDFLAGS="$LDFLAGS -L$dag_lib_dir"
887 if test "$dag_large_streams" = 1; then
888 AC_DEFINE(HAVE_DAG_LARGE_STREAMS_API, 1, [define if you have large streams capable DAG API])
889 AC_CHECK_LIB([vdag],[vdag_set_device_info], [ac_dag_have_vdag="1"], [ac_dag_have_vdag="0"])
890 if test "$ac_dag_have_vdag" = 1; then
891 AC_DEFINE(HAVE_DAG_VDAG, 1, [define if you have vdag_set_device_info()])
892 AC_LBL_PTHREADS(ac_lbl_have_pthreads_for_dag, LIBS)
893 if test "$ac_lbl_have_pthreads_for_dag" != "found"; then
894 AC_MSG_ERROR([DAG requires pthreads, but we didn't find them])
899 AC_DEFINE(HAVE_DAG_API, 1, [define if you have the DAG API])
903 if test "$V_PCAP" = dag; then
904 # User requested "dag" capture type but we couldn't
905 # find the DAG API support.
906 AC_MSG_ERROR([DAG support requested with --with-pcap=dag, but the DAG headers weren't found at $dag_include_dir: make sure the DAG support is installed, specify a different path or paths if necessary, or don't request DAG support])
909 if test "$want_dag" = yes; then
910 # User wanted DAG support but we couldn't find it.
911 AC_MSG_ERROR([DAG support requested with --with-dag, but the DAG headers weren't found at $dag_include_dir: make sure the DAG support is installed, specify a different path or paths if necessary, or don't request DAG support])
917 AC_HELP_STRING([--with-septel@<:@=DIR@:>@],[include Septel support (located in directory DIR, if supplied). @<:@default=yes, if present@:>@]),
919 if test "$withval" = no
922 elif test "$withval" = yes
931 if test "$V_PCAP" = septel; then
932 # User requested Septel-only libpcap, so we'd better have
935 elif test "xxx_only" = yes; then
936 # User requested something-else-only pcap, so they don't
937 # want Septel support.
941 # Use Septel API if present, otherwise don't
943 want_septel=ifpresent
947 ac_cv_lbl_septel_api=no
948 if test "$with_septel" != no; then
950 AC_MSG_CHECKING([whether we have Septel API headers])
952 # If necessary, set default paths for Septel API headers and libraries.
953 if test -z "$septel_root"; then
954 septel_root=$srcdir/../septel
957 septel_tools_dir="$septel_root"
958 septel_include_dir="$septel_root/INC"
960 if test -r "$septel_include_dir/msg.h"; then
961 ac_cv_lbl_septel_api=yes
964 if test "$ac_cv_lbl_septel_api" = yes; then
965 AC_MSG_RESULT([yes ($septel_include_dir)])
967 V_INCLS="$V_INCLS -I$septel_include_dir"
968 ADDLOBJS="$ADDLOBJS $septel_tools_dir/asciibin.o $septel_tools_dir/bit2byte.o $septel_tools_dir/confirm.o $septel_tools_dir/fmtmsg.o $septel_tools_dir/gct_unix.o $septel_tools_dir/hqueue.o $septel_tools_dir/ident.o $septel_tools_dir/mem.o $septel_tools_dir/pack.o $septel_tools_dir/parse.o $septel_tools_dir/pool.o $septel_tools_dir/sdlsig.o $septel_tools_dir/strtonum.o $septel_tools_dir/timer.o $septel_tools_dir/trace.o"
969 ADDLARCHIVEOBJS="$ADDLARCHIVEOBJS $septel_tools_dir/asciibin.o $septel_tools_dir/bit2byte.o $septel_tools_dir/confirm.o $septel_tools_dir/fmtmsg.o $septel_tools_dir/gct_unix.o $septel_tools_dir/hqueue.o $septel_tools_dir/ident.o $septel_tools_dir/mem.o $septel_tools_dir/pack.o $septel_tools_dir/parse.o $septel_tools_dir/pool.o $septel_tools_dir/sdlsig.o $septel_tools_dir/strtonum.o $septel_tools_dir/timer.o $septel_tools_dir/trace.o"
971 if test "$V_PCAP" != septel ; then
972 SSRC="$SSRC pcap-septel.c"
975 AC_DEFINE(HAVE_SEPTEL_API, 1, [define if you have the Septel API])
979 if test "$V_PCAP" = septel; then
980 # User requested "septel" capture type but
981 # we couldn't find the Septel API support.
982 AC_MSG_ERROR([Septel support requested with --with-pcap=septel, but the Septel headers weren't found at $septel_include_dir: make sure the Septel support is installed, specify a different path or paths if necessary, or don't request Septel support])
985 if test "$want_septel" = yes; then
986 # User wanted Septel support but we couldn't find it.
987 AC_MSG_ERROR([Septel support requested with --with-septel, but the Septel headers weren't found at $septel_include_dir: make sure the Septel support is installed, specify a different path or paths if necessary, or don't request Septel support])
992 # Check for Myricom SNF support.
994 AC_HELP_STRING([--with-snf@<:@=DIR@:>@],[include Myricom SNF support (located in directory DIR, if supplied). @<:@default=yes, if present@:>@]),
996 if test "$withval" = no
998 # User explicitly doesn't want SNF
1000 elif test "$withval" = yes
1002 # User wants SNF support but hasn't specified a directory.
1005 # User wants SNF support with a specified directory.
1010 if test "$V_PCAP" = snf; then
1011 # User requested Sniffer-only libpcap, so we'd better have
1014 elif test "xxx_only" = yes; then
1015 # User requested something-else-only pcap, so they don't
1020 # Use Sniffer API if present, otherwise don't
1026 AC_ARG_WITH([snf-includes],
1027 AC_HELP_STRING([--with-snf-includes=IDIR],[Myricom SNF include directory, if not DIR/include]),
1029 # User wants SNF with specific header directory
1031 snf_include_dir=$withval
1034 AC_ARG_WITH([snf-libraries],
1035 AC_HELP_STRING([--with-snf-libraries=LDIR],[Myricom SNF library directory, if not DIR/lib]),
1037 # User wants SNF with specific lib directory
1039 snf_lib_dir=$withval
1042 ac_cv_lbl_snf_api=no
1043 if test "$with_snf" != no; then
1045 AC_MSG_CHECKING(whether we have Myricom Sniffer API)
1047 # If necessary, set default paths for Sniffer headers and libraries.
1048 if test -z "$snf_root"; then
1052 if test -z "$snf_include_dir"; then
1053 snf_include_dir="$snf_root/include"
1056 if test -z "$snf_lib_dir"; then
1057 snf_lib_dir="$snf_root/lib"
1060 if test -f "$snf_include_dir/snf.h"; then
1061 # We found a header; make sure we can link with the library
1062 saved_ldflags=$LDFLAGS
1063 LDFLAGS="$LDFLAGS -L$snf_lib_dir"
1064 AC_CHECK_LIB([snf], [snf_init], [ac_cv_lbl_snf_api="yes"])
1065 LDFLAGS="$saved_ldflags"
1066 if test "$ac_cv_lbl_snf_api" = no; then
1067 AC_MSG_ERROR(SNF API cannot correctly be linked; check config.log)
1071 if test "$ac_cv_lbl_snf_api" = yes; then
1072 AC_MSG_RESULT([yes ($snf_root)])
1074 V_INCLS="$V_INCLS -I$snf_include_dir"
1076 LDFLAGS="$LDFLAGS -L$snf_lib_dir"
1078 if test "$V_PCAP" != snf ; then
1079 SSRC="$SSRC pcap-snf.c"
1082 AC_DEFINE(HAVE_SNF_API, 1, [define if you have the Myricom SNF API])
1086 if test "$want_snf" = yes; then
1087 # User requested "snf" capture type but
1088 # we couldn't find the Sniffer API support.
1089 AC_MSG_ERROR([Myricom Sniffer support requested with --with-pcap=snf, but the Sniffer headers weren't found at $snf_include_dir: make sure the Sniffer support is installed, specify a different path or paths if necessary, or don't request Sniffer support])
1092 if test "$want_snf" = yes; then
1093 AC_MSG_ERROR([Myricom Sniffer support requested with --with-snf, but the Sniffer headers weren't found at $snf_include_dir: make sure the Sniffer support is installed, specify a different path or paths if necessary, or don't request Sniffer support])
1098 # Check for Riverbed TurboCap support.
1099 AC_ARG_WITH([turbocap],
1100 AC_HELP_STRING([--with-turbocap@<:@=DIR@:>@],[include Riverbed TurboCap support (located in directory DIR, if supplied). @<:@default=yes, if present@:>@]),
1102 if test "$withval" = no
1104 # User explicitly doesn't want TurboCap
1106 elif test "$withval" = yes
1108 # User wants TurboCap support but hasn't specified a directory.
1111 # User wants TurboCap support with a specified directory.
1113 turbocap_root=$withval
1116 if test "xxx_only" = yes; then
1117 # User requested something-else-only pcap, so they don't
1118 # want TurboCap support.
1122 # Use TurboCap API if present, otherwise don't
1124 want_turbocap=ifpresent
1128 ac_cv_lbl_turbocap_api=no
1129 if test "$want_turbocap" != no; then
1131 AC_MSG_CHECKING(whether TurboCap is supported)
1133 save_CFLAGS="$CFLAGS"
1135 if test ! -z "$turbocap_root"; then
1136 TURBOCAP_CFLAGS="-I$turbocap_root/include"
1137 TURBOCAP_LIBS="-L$turbocap_root/lib"
1138 CFLAGS="$CFLAGS $TURBOCAP_CFLAGS"
1146 TC_INSTANCE a; TC_PORT b; TC_BOARD c;
1148 (void)TcInstanceCreateByName("foo", &i);
1150 ac_cv_lbl_turbocap_api=yes)
1152 CFLAGS="$save_CFLAGS"
1153 if test $ac_cv_lbl_turbocap_api = yes; then
1156 SSRC="$SSRC pcap-tc.c"
1157 V_INCLS="$V_INCLS $TURBOCAP_CFLAGS"
1158 LIBS="$LIBS $TURBOCAP_LIBS -lTcApi -lpthread -lstdc++"
1160 AC_DEFINE(HAVE_TC_API, 1, [define if you have the TurboCap API])
1164 if test "$want_turbocap" = yes; then
1165 # User wanted Turbo support but we couldn't find it.
1166 AC_MSG_ERROR([TurboCap support requested with --with-turbocap, but the TurboCap headers weren't found: make sure the TurboCap support is installed or don't request TurboCap support])
1172 dnl Allow the user to enable remote capture.
1173 dnl It's off by default, as that increases the attack surface of
1174 dnl libpcap, exposing it to malicious servers.
1176 AC_MSG_CHECKING([whether to enable remote packet capture])
1177 AC_ARG_ENABLE(remote,
1178 [ --enable-remote enable remote packet capture @<:@default=no@:>@
1179 --disable-remote disable remote packet capture],,
1181 case "$enableval" in
1182 yes) AC_MSG_RESULT(yes)
1183 AC_WARN([Remote packet capture may expose libpcap-based applications])
1184 AC_WARN([to attacks by malicious remote capture servers!])
1186 # rpcapd requires pthreads on UN*X.
1188 AC_LBL_PTHREADS(ac_lbl_have_pthreads_for_rpcapd, RPCAPD_LIBS)
1189 if test "$ac_lbl_have_pthreads_for_rpcapd" != "found"; then
1190 AC_MSG_ERROR([rpcapd requires pthreads, but we didn't find them])
1193 # It also requires crypt().
1194 # Do we have it in the system libraries?
1196 AC_CHECK_FUNC(crypt,,
1199 # No. Do we have it in -lcrypt?
1201 AC_CHECK_LIB(crypt, crypt,
1204 # Yes; add -lcrypt to the libraries for rpcapd.
1206 RPCAPD_LIBS="$RPCAPD_LIBS -lcrypt"
1209 AC_MSG_ERROR([rpcapd requires crypt(), but we didn't find it])
1214 # OK, we have crypt(). Do we have getspnam()?
1216 AC_CHECK_FUNCS(getspnam)
1218 AC_DEFINE(ENABLE_REMOTE,,
1219 [Define to 1 if remote packet capture is to be supported])
1220 SSRC="$SSRC pcap-new.c pcap-rpcap.c rpcap-protocol.c sockutils.c"
1222 INSTALL_RPCAPD=install-rpcapd
1224 *) AC_MSG_RESULT(no)
1228 AC_MSG_CHECKING(whether to build optimizer debugging code)
1229 AC_ARG_ENABLE(optimizer-dbg,
1230 AC_HELP_STRING([--enable-optimizer-dbg],[build optimizer debugging code]))
1231 if test "$enable_optimizer_dbg" = "yes"; then
1232 AC_DEFINE(BDEBUG,1,[Enable optimizer debugging])
1234 AC_MSG_RESULT(${enable_optimizer_dbg-no})
1236 AC_MSG_CHECKING(whether to build parser debugging code)
1237 AC_ARG_ENABLE(yydebug,
1238 AC_HELP_STRING([--enable-yydebug],[build parser debugging code]))
1239 if test "$enable_yydebug" = "yes"; then
1240 AC_DEFINE(YYDEBUG,1,[Enable parser debugging])
1242 AC_MSG_RESULT(${enable_yydebug-no})
1248 if test "$LEX" = ":"; then
1249 AC_MSG_ERROR([Neither flex nor lex was found.])
1253 # Make sure {f}lex supports the -P, --header-file, and --nounput flags
1254 # and supports processing our scanner.l.
1256 AC_CACHE_CHECK([for capable lex], tcpdump_cv_capable_lex,
1257 if $LEX -P pcap_ --header-file=/dev/null --nounput -t $srcdir/scanner.l > /dev/null 2>&1; then
1258 tcpdump_cv_capable_lex=yes
1260 tcpdump_cv_capable_lex=insufficient
1262 if test $tcpdump_cv_capable_lex = insufficient ; then
1263 AC_MSG_ERROR([$LEX is insufficient to compile libpcap.
1264 libpcap requires Flex 2.5.31 or later, or a compatible version of lex.])
1268 # Look for yacc/bison/byacc.
1273 # Make sure it supports the -p flag and supports processing our
1276 AC_CACHE_CHECK([for capable yacc/bison], tcpdump_cv_capable_yacc,
1277 if $YACC -p pcap_ -o /dev/null $srcdir/grammar.y >/dev/null 2>&1; then
1278 tcpdump_cv_capable_yacc=yes
1280 tcpdump_cv_capable_yacc=insufficient
1282 if test $tcpdump_cv_capable_yacc = insufficient ; then
1283 AC_MSG_ERROR([$YACC is insufficient to compile libpcap.
1284 libpcap requires Bison, Berkeley YACC, or another YACC compatible with them.])
1288 # Do various checks for various OSes and versions of those OSes.
1290 # Assume, by default, no support for shared libraries and V7/BSD convention
1291 # for man pages (file formats in section 5, miscellaneous info in section 7).
1292 # Individual cases can override this.
1297 MAN_USERMOD_SECTION=8
1301 dnl Workaround to enable certain features
1302 AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
1305 # AIX makes it fun to build shared and static libraries,
1306 # because they're *both* ".a" archive libraries. We
1307 # build the static library for the benefit of the traditional
1308 # scheme of building libpcap and tcpdump in subdirectories of
1309 # the same directory, with tcpdump statically linked with the
1310 # libpcap in question, but we also build a shared library as
1311 # "libpcap.shareda" and install *it*, rather than the static
1312 # library, as "libpcap.a".
1320 # If we're using DLPI, applications will need to
1321 # use /lib/pse.exp if present, as we use the
1324 pseexe="/lib/pse.exp"
1325 AC_MSG_CHECKING(for $pseexe)
1326 if test -f $pseexe ; then
1334 # If we're using BPF, we need "-lodm" and "-lcfg", as
1335 # we use them to load the BPF module.
1344 V_CCOPT="$V_CCOPT -fno-common"
1345 AC_ARG_ENABLE(universal,
1346 AC_HELP_STRING([--disable-universal],[don't build universal on macOS]))
1347 if test "$enable_universal" != "no"; then
1352 # Pre-Tiger. Build only for 32-bit PowerPC; no
1353 # need for any special compiler or linker flags.
1359 # Tiger, prior to Intel support. Build for 32-bit
1360 # PowerPC and 64-bit PowerPC, with 32-bit PowerPC
1361 # first. (I'm guessing that's what Apple does.)
1363 V_CCOPT="$V_CCOPT -arch ppc -arch ppc64"
1364 LDFLAGS="$LDFLAGS -arch ppc -arch ppc64"
1369 # Tiger, subsequent to Intel support but prior to
1370 # x86-64 support. Build for 32-bit PowerPC, 64-bit
1371 # PowerPC, and x86, with 32-bit PowerPC first.
1372 # (I'm guessing that's what Apple does.)
1374 V_CCOPT="$V_CCOPT -arch ppc -arch ppc64 -arch i386"
1375 LDFLAGS="$LDFLAGS -arch ppc -arch ppc64 -arch i386"
1380 # All other Tiger, so subsequent to x86-64
1381 # support. Build for 32-bit PowerPC, 64-bit
1382 # PowerPC, x86, and x86-64, and with 32-bit PowerPC
1383 # first. (I'm guessing that's what Apple does.)
1385 V_CCOPT="$V_CCOPT -arch ppc -arch ppc64 -arch i386 -arch x86_64"
1386 LDFLAGS="$LDFLAGS -arch ppc -arch ppc64 -arch i386 -arch x86_64"
1391 # Leopard. Build for 32-bit PowerPC, 64-bit
1392 # PowerPC, x86, and x86-64, with 32-bit PowerPC
1393 # first. (That's what Apple does.)
1395 V_CCOPT="$V_CCOPT -arch ppc -arch ppc64 -arch i386 -arch x86_64"
1396 LDFLAGS="$LDFLAGS -arch ppc -arch ppc64 -arch i386 -arch x86_64"
1401 # Snow Leopard. Build for x86-64, x86, and
1402 # 32-bit PowerPC, with x86-64 first. (That's
1403 # what Apple does, even though Snow Leopard
1404 # doesn't run on PPC, so PPC libpcap runs under
1405 # Rosetta, and Rosetta doesn't support BPF
1406 # ioctls, so PPC programs can't do live
1409 V_CCOPT="$V_CCOPT -arch x86_64 -arch i386 -arch ppc"
1410 LDFLAGS="$LDFLAGS -arch x86_64 -arch i386 -arch ppc"
1415 # Post-Snow Leopard. Build for x86-64 and
1416 # x86, with x86-64 first. (That's probably what
1417 # Apple does, given that Rosetta is gone.)
1418 # XXX - update if and when Apple drops support
1419 # for 32-bit x86 code.
1421 V_CCOPT="$V_CCOPT -arch x86_64 -arch i386"
1422 LDFLAGS="$LDFLAGS -arch x86_64 -arch i386"
1429 AC_DEFINE(HAVE_HPUX9,1,[on HP-UX 9.x])
1432 # Use System V conventions for man pages.
1441 # Use System V conventions for man pages.
1450 # Use System V conventions for man pages.
1457 dnl HPUX 10.20 and above is similar to HPUX 9, but
1458 dnl not the same....
1460 dnl XXX - DYEXT should be set to "sl" if this is building
1461 dnl for 32-bit PA-RISC, but should be left as "so" for
1462 dnl 64-bit PA-RISC or, I suspect, IA-64.
1463 AC_DEFINE(HAVE_HPUX10_20_OR_LATER,1,[on HP-UX 10.20 or later])
1464 if test "`uname -m`" = "ia64"; then
1471 # "-b" builds a shared library; "+h" sets the soname.
1477 # Use System V conventions for man pages.
1485 # Use System V conventions for man pages.
1491 linux*|freebsd*|netbsd*|openbsd*|dragonfly*|kfreebsd*|gnu*)
1495 # Compiler assumed to be GCC; run-time linker may require a -R
1498 if test "$libdir" != "/usr/lib"; then
1499 V_RFLAGS=-Wl,-R$libdir
1507 # Use System V conventions for man pages.
1514 AC_MSG_CHECKING(if SINIX compiler defines sinix)
1515 AC_CACHE_VAL(ac_cv_cc_sinix_defined,
1519 ac_cv_cc_sinix_defined=yes,
1520 ac_cv_cc_sinix_defined=no))
1521 AC_MSG_RESULT($ac_cv_cc_sinix_defined)
1522 if test $ac_cv_cc_sinix_defined = no ; then
1523 AC_DEFINE(sinix,1,[on sinix])
1528 AC_DEFINE(HAVE_SOLARIS,1,[On solaris])
1532 case "`uname -r`" in
1539 # Use System V conventions for man pages.
1541 MAN_USERMOD_SECTION=1m
1548 AC_ARG_ENABLE(shared,
1549 AC_HELP_STRING([--enable-shared],[build shared libraries @<:@default=yes, if support available@:>@]))
1550 test "x$enable_shared" = "xno" && DYEXT="none"
1553 AC_CHECK_TOOL([AR], [ar])
1558 AC_LBL_DEVEL(V_CCOPT)
1560 AC_LBL_SOCKADDR_SA_LEN
1562 AC_LBL_SOCKADDR_STORAGE
1564 AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1
1566 AC_LBL_UNALIGNED_ACCESS
1569 ln -s ${srcdir}/bpf/net net
1573 AC_SUBST(V_FINDALLDEVS)
1577 AC_SUBST(V_SHLIB_CMD)
1578 AC_SUBST(V_SHLIB_OPT)
1579 AC_SUBST(V_SONAME_OPT)
1580 AC_SUBST(V_RPATH_OPT)
1583 AC_SUBST(ADDLARCHIVEOBJS)
1586 AC_SUBST(MAN_FILE_FORMATS)
1587 AC_SUBST(MAN_MISC_INFO)
1588 AC_SUBST(MAN_USERMOD_SECTION)
1590 AC_SUBST(INSTALL_RPCAPD)
1591 AC_SUBST(RPCAPD_LIBS)
1593 AC_ARG_ENABLE([usb],
1594 [AC_HELP_STRING([--enable-usb],[enable USB capture support @<:@default=yes, if support available@:>@])],
1598 if test "xxx_only" = yes; then
1599 # User requested something-else-only pcap, so they don't
1604 if test "x$enable_usb" != "xno" ; then
1605 dnl check for USB sniffing support
1606 AC_MSG_CHECKING(for USB sniffing support)
1609 AC_DEFINE(PCAP_SUPPORT_USB, 1, [target host supports USB sniffing])
1610 USB_SRC=pcap-usb-linux.c
1612 ac_usb_dev_name=`udevinfo -q name -p /sys/class/usb_device/usbmon 2>/dev/null`
1613 if test $? -ne 0 ; then
1614 ac_usb_dev_name="usbmon"
1616 AC_DEFINE_UNQUOTED(LINUX_USB_MON_DEV, "/dev/$ac_usb_dev_name", [path for device for USB sniffing])
1617 AC_MSG_NOTICE(Device for USB sniffing is /dev/$ac_usb_dev_name)
1619 # Do we have a version of <linux/compiler.h> available?
1620 # If so, we might need it for <linux/usbdevice_fs.h>.
1622 AC_CHECK_HEADERS(linux/compiler.h)
1623 if test "$ac_cv_header_linux_compiler_h" = yes; then
1625 # Yes - include it when testing for <linux/usbdevice_fs.h>.
1627 AC_CHECK_HEADERS(linux/usbdevice_fs.h,,,[#include <linux/compiler.h>])
1629 AC_CHECK_HEADERS(linux/usbdevice_fs.h)
1631 if test "$ac_cv_header_linux_usbdevice_fs_h" = yes; then
1633 # OK, does it define bRequestType? Older versions of the kernel
1634 # define fields with names like "requesttype, "request", and
1635 # "value", rather than "bRequestType", "bRequest", and
1638 AC_MSG_CHECKING(if usbdevfs_ctrltransfer struct has bRequestType member)
1639 AC_CACHE_VAL(ac_cv_usbdevfs_ctrltransfer_has_bRequestType,
1642 #ifdef HAVE_LINUX_COMPILER_H
1643 #include <linux/compiler.h>
1645 #include <linux/usbdevice_fs.h>],
1646 [u_int i = sizeof(((struct usbdevfs_ctrltransfer *)0)->bRequestType)],
1647 ac_cv_usbdevfs_ctrltransfer_has_bRequestType=yes,
1648 ac_cv_usbdevfs_ctrltransfer_has_bRequestType=no))
1649 AC_MSG_RESULT($ac_cv_usbdevfs_ctrltransfer_has_bRequestType)
1650 if test $ac_cv_usbdevfs_ctrltransfer_has_bRequestType = yes ; then
1651 AC_DEFINE(HAVE_USBDEVFS_CTRLTRANSFER_BREQUESTTYPE,1,
1652 [if struct usbdevfs_ctrltransfer has bRequestType])
1658 # This just uses BPF in FreeBSD 8.4 and later; we don't need
1659 # to check for anything special for capturing.
1661 AC_MSG_RESULT([yes, in FreeBSD 8.4 and later])
1669 AC_SUBST(PCAP_SUPPORT_USB)
1672 dnl check for netfilter sniffing support
1673 if test "xxx_only" != yes; then
1674 AC_MSG_CHECKING(whether the platform could support netfilter sniffing)
1679 # Life's too short to deal with trying to get this to compile
1680 # if you don't get the right types defined with
1681 # __KERNEL_STRICT_NAMES getting defined by some other include.
1683 # Check whether the includes Just Work. If not, don't turn on
1684 # netfilter support.
1686 AC_MSG_CHECKING(whether we can compile the netfilter support)
1687 AC_CACHE_VAL(ac_cv_netfilter_can_compile,
1690 #include <sys/socket.h>
1691 #include <netinet/in.h>
1692 #include <linux/types.h>
1694 #include <linux/netlink.h>
1695 #include <linux/netfilter.h>
1696 #include <linux/netfilter/nfnetlink.h>
1697 #include <linux/netfilter/nfnetlink_log.h>
1698 #include <linux/netfilter/nfnetlink_queue.h>],
1700 ac_cv_netfilter_can_compile=yes,
1701 ac_cv_netfilter_can_compile=no))
1702 AC_MSG_RESULT($ac_cv_netfilter_can_compile)
1703 if test $ac_cv_netfilter_can_compile = yes ; then
1704 AC_DEFINE(PCAP_SUPPORT_NETFILTER, 1,
1705 [target host supports netfilter sniffing])
1706 NETFILTER_SRC=pcap-netfilter-linux.c
1714 AC_SUBST(PCAP_SUPPORT_NETFILTER)
1715 AC_SUBST(NETFILTER_SRC)
1717 AC_ARG_ENABLE([netmap],
1718 [AC_HELP_STRING([--enable-netmap],[enable netmap support @<:@default=yes, if support available@:>@])],
1720 [enable_netmap=yes])
1722 if test "x$enable_netmap" != "xno" ; then
1724 # Check whether net/netmap_user.h is usable if NETMAP_WITH_LIBS is
1725 # defined; it's not usable on DragonFly BSD 4.6 if NETMAP_WITH_LIBS
1726 # is defined, for example, as it includes a non-existent malloc.h
1729 AC_MSG_CHECKING(whether we can compile the netmap support)
1730 AC_CACHE_VAL(ac_cv_net_netmap_user_can_compile,
1733 #define NETMAP_WITH_LIBS
1734 #include <net/netmap_user.h>],
1736 ac_cv_net_netmap_user_can_compile=yes,
1737 ac_cv_net_netmap_user_can_compile=no))
1738 AC_MSG_RESULT($ac_cv_net_netmap_user_can_compile)
1739 if test $ac_cv_net_netmap_user_can_compile = yes ; then
1740 AC_DEFINE(PCAP_SUPPORT_NETMAP, 1,
1741 [target host supports netmap])
1742 NETMAP_SRC=pcap-netmap.c
1744 AC_SUBST(PCAP_SUPPORT_NETMAP)
1745 AC_SUBST(NETMAP_SRC)
1749 AC_ARG_ENABLE([bluetooth],
1750 [AC_HELP_STRING([--enable-bluetooth],[enable Bluetooth support @<:@default=yes, if support available@:>@])],
1752 [enable_bluetooth=ifsupportavailable])
1754 if test "xxx_only" = yes; then
1755 # User requested something-else-only pcap, so they don't
1756 # want Bluetooth support.
1760 if test "x$enable_bluetooth" != "xno" ; then
1761 dnl check for Bluetooth sniffing support
1764 AC_CHECK_HEADER(bluetooth/bluetooth.h,
1766 AC_DEFINE(PCAP_SUPPORT_BT, 1, [target host supports Bluetooth sniffing])
1767 BT_SRC=pcap-bt-linux.c
1768 AC_MSG_NOTICE(Bluetooth sniffing is supported)
1771 # OK, does struct sockaddr_hci have an hci_channel
1774 AC_MSG_CHECKING(if struct sockaddr_hci has hci_channel member)
1775 AC_CACHE_VAL(ac_cv_lbl_sockaddr_hci_has_hci_channel,
1778 #include <bluetooth/bluetooth.h>
1779 #include <bluetooth/hci.h>
1781 [u_int i = sizeof(((struct sockaddr_hci *)0)->hci_channel)],
1782 ac_cv_lbl_sockaddr_hci_has_hci_channel=yes,
1783 ac_cv_lbl_sockaddr_hci_has_hci_channel=no))
1784 AC_MSG_RESULT($ac_cv_lbl_sockaddr_hci_has_hci_channel)
1785 if test $ac_cv_lbl_sockaddr_hci_has_hci_channel = yes ; then
1786 AC_DEFINE(SOCKADDR_HCI_HAS_HCI_CHANNEL,,
1787 [if struct sockaddr_hci has hci_channel member])
1790 # OK, is HCI_CHANNEL_MONITOR defined?
1792 AC_MSG_CHECKING(if HCI_CHANNEL_MONITOR is defined)
1793 AC_CACHE_VAL(ac_cv_lbl_hci_channel_monitor_is_defined,
1796 #include <bluetooth/bluetooth.h>
1797 #include <bluetooth/hci.h>
1799 [u_int i = HCI_CHANNEL_MONITOR],
1800 ac_cv_lbl_hci_channel_monitor_is_defined=yes,
1801 ac_cv_lbl_hci_channel_monitor_is_defined=no))
1802 AC_MSG_RESULT($ac_cv_lbl_hci_channel_monitor_is_defined)
1803 if test $ac_cv_lbl_hci_channel_monitor_is_defined = yes ; then
1804 AC_DEFINE(PCAP_SUPPORT_BT_MONITOR,,
1805 [target host supports Bluetooth Monitor])
1806 BT_MONITOR_SRC=pcap-bt-monitor-linux.c
1809 ac_lbl_bluetooth_available=yes
1811 ac_lbl_bluetooth_available=no
1813 if test "x$ac_lbl_bluetooth_available" == "xno" ; then
1814 if test "x$enable_bluetooth" = "xyes" ; then
1815 AC_MSG_ERROR(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
1817 AC_MSG_NOTICE(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
1822 if test "x$enable_bluetooth" = "xyes" ; then
1823 AC_MSG_ERROR(no Bluetooth sniffing support implemented for $host_os)
1825 AC_MSG_NOTICE(no Bluetooth sniffing support implemented for $host_os)
1829 AC_SUBST(PCAP_SUPPORT_BT)
1831 AC_SUBST(BT_MONITOR_SRC)
1834 AC_ARG_ENABLE([dbus],
1835 [AC_HELP_STRING([--enable-dbus],[enable D-Bus capture support @<:@default=yes, if support available@:>@])],
1837 [enable_dbus=ifavailable])
1839 if test "xxx_only" = yes; then
1840 # User requested something-else-only pcap, so they don't
1841 # want D-Bus support.
1845 if test "x$enable_dbus" != "xno"; then
1846 if test "x$enable_dbus" = "xyes"; then
1851 # We don't support D-Bus sniffing on macOS; see
1853 # https://bugs.freedesktop.org/show_bug.cgi?id=74029
1855 # The user requested it, so fail.
1857 AC_MSG_ERROR([Due to freedesktop.org bug 74029, D-Bus capture support is not available on macOS])
1864 # We don't support D-Bus sniffing on macOS; see
1866 # https://bugs.freedesktop.org/show_bug.cgi?id=74029
1868 # The user dind't explicitly request it, so just
1869 # silently refuse to enable it.
1877 if test "x$enable_dbus" != "xno"; then
1878 AC_CHECK_PROG([PKGCONFIG], [pkg-config], [pkg-config], [no])
1879 if test "x$PKGCONFIG" != "xno"; then
1880 AC_MSG_CHECKING([for D-Bus])
1881 if "$PKGCONFIG" dbus-1; then
1882 AC_MSG_RESULT([yes])
1883 DBUS_CFLAGS=`"$PKGCONFIG" --cflags dbus-1`
1884 DBUS_LIBS=`"$PKGCONFIG" --libs dbus-1`
1885 save_CFLAGS="$CFLAGS"
1887 CFLAGS="$CFLAGS $DBUS_CFLAGS"
1888 LIBS="$LIBS $DBUS_LIBS"
1889 AC_MSG_CHECKING(whether the D-Bus library defines dbus_connection_read_write)
1891 [#include <string.h>
1894 #include <sys/time.h>
1896 #include <dbus/dbus.h>],
1897 [return dbus_connection_read_write(NULL, 0);],
1899 AC_MSG_RESULT([yes])
1900 AC_DEFINE(PCAP_SUPPORT_DBUS, 1, [support D-Bus sniffing])
1901 DBUS_SRC=pcap-dbus.c
1902 V_INCLS="$V_INCLS $DBUS_CFLAGS"
1906 if test "x$enable_dbus" = "xyes"; then
1907 AC_MSG_ERROR([--enable-dbus was given, but the D-Bus library doesn't define dbus_connection_read_write()])
1911 CFLAGS="$save_CFLAGS"
1914 if test "x$enable_dbus" = "xyes"; then
1915 AC_MSG_ERROR([--enable-dbus was given, but the dbus-1 package is not installed])
1919 AC_SUBST(PCAP_SUPPORT_DBUS)
1923 AC_ARG_ENABLE([rdma],
1924 [AC_HELP_STRING([--enable-rdma],[enable RDMA capture support @<:@default=yes, if support available@:>@])],
1926 [enable_rdmasniff=ifavailable])
1928 if test "xxx_only" = yes; then
1929 # User requested something-else-only pcap, so they don't
1930 # want RDMA support.
1934 if test "x$enable_rdmasniff" != "xno"; then
1935 AC_CHECK_LIB(ibverbs, ibv_get_device_list, [
1936 AC_CHECK_HEADER(infiniband/verbs.h, [
1938 # ibv_create_flow may be defined as a static inline
1939 # function in infiniband/verbs.h, so we can't
1942 # Too bad autoconf has no AC_SYMBOL_EXISTS()
1943 # macro that works like CMake's check_symbol_exists()
1944 # function, to check do a compile check like
1945 # this (they do a clever trick to avoid having
1946 # to know the function's signature).
1948 AC_MSG_CHECKING(whether libibverbs defines ibv_create_flow)
1951 #include <infiniband/verbs.h>
1954 (void) ibv_create_flow((struct ibv_qp *) NULL,
1955 (struct ibv_flow_attr *) NULL);
1958 AC_MSG_RESULT([yes])
1959 AC_DEFINE(PCAP_SUPPORT_RDMASNIFF, , [target host supports RDMA sniffing])
1960 RDMA_SRC=pcap-rdmasniff.c
1961 LIBS="-libverbs $LIBS"
1969 AC_SUBST(PCAP_SUPPORT_RDMASNIFF)
1975 AC_CONFIG_HEADER(config.h)
1977 AC_OUTPUT_COMMANDS([if test -f .devel; then
1978 echo timestamp > stamp-h
1979 cat Makefile-devel-adds >> Makefile
1982 AC_OUTPUT(Makefile pcap-filter.manmisc pcap-linktype.manmisc
1983 pcap-tstamp.manmisc pcap-savefile.manfile pcap.3pcap
1984 pcap_compile.3pcap pcap_datalink.3pcap pcap_dump_open.3pcap
1985 pcap_get_tstamp_precision.3pcap pcap_list_datalinks.3pcap
1986 pcap_list_tstamp_types.3pcap pcap_open_dead.3pcap
1987 pcap_open_offline.3pcap pcap_set_tstamp_precision.3pcap
1988 pcap_set_tstamp_type.3pcap rpcapd/Makefile)