2 # This isn't a configure generated by autoconf!
3 # netsniff-ng build system
4 # Copyright 2013-2015 Tobias Klauser <tklauser@distanz.ch>
5 # Copyright 2013 Daniel Borkmann <borkmann@gnumaniacs.org>
6 # Subject to the GNU GPL, version 2.
12 TOOLS
="netsniff-ng trafgen astraceroute flowtop ifpps bpfc curvetun mausezahn"
21 # use "CROSS_COMPILE=<prefix> SYSROOT=<path> ./configure && make" for cross compilation
23 [ -z "$CC" ] && CC
="${CROSS_COMPILE}gcc"
24 [ -z "$LD" ] && LD
="${CROSS_COMPILE}gcc"
25 if [ "x$SYSROOT" != "x" ] ; then
26 PKG_CONFIG_PATH
="$SYSROOT/usr/lib/pkgconfig:$PKG_CONFIG_PATH"
28 [ -z $PKG_CONFIG ] && PKG_CONFIG
="${CROSS_COMPILE}pkg-config"
30 TMPDIR
=$
(mktemp
-d config.XXXXXX
)
31 trap 'status=$?; rm -rf $TMPDIR; exit $status' EXIT HUP INT QUIT TERM
38 for tool
in $_tools ; do
43 *) TOOLS_NOBUILD
="$TOOLS_NOBUILD $tool" ;;
45 *) TOOLS
="$TOOLS $tool" ;;
50 TOOLS_NOBUILD
=${TOOLS_NOBUILD# }
55 if [ "x$CROSS_COMPILE" != "x" ] ; then
56 echo "[*] Cross-compiling for $($CC -print-multiarch)"
57 echo "CROSS_COMPILE=$CROSS_COMPILE" >> Config
60 echo -n "[*] Checking compiler $CC ... "
61 if [ "x$(which $CC 2>> config.log)" == "x" ] ; then
66 echo "CC=$CC" >> Config
69 echo -n "[*] Checking linker $LD ... "
70 if [ "x$(which $LD 2>> config.log)" == "x" ] ; then
75 echo "LD=$LD" >> Config
78 echo -n "[*] Checking $PKG_CONFIG ... "
79 if [ "x$(which $PKG_CONFIG 2>> config.log)" == "x" ] ; then
84 echo "PKG_CONFIG=$PKG_CONFIG" >> Config
85 echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH" >> Config
91 echo -n "[*] Checking flex ... "
93 if [ "x$(which flex 2>> config.log)" == "x" ] ; then
96 tools_remove
"trafgen"
105 echo -n "[*] Checking bison ... "
107 if [ "x$(which bison 2>> config.log)" == "x" ] ; then
110 tools_remove
"trafgen"
119 echo -n "[*] Checking nacl ... "
121 cat > $TMPDIR/nacltest.c
<< EOF
122 #include "crypto_hash_sha512.h"
123 #include "crypto_verify_32.h"
124 #include "crypto_hash_sha512.h"
125 #include "crypto_box_curve25519xsalsa20poly1305.h"
126 #include "crypto_scalarmult_curve25519.h"
127 #include "crypto_auth_hmacsha512256.h"
132 if [ -z $NACL_INC_DIR ] ; then
133 NACL_INC_DIR
="$SYSROOT/usr/include/nacl"
136 if [ -z $NACL_LIB_DIR ] ; then
137 NACL_LIB_DIR
="$SYSROOT/usr/lib"
140 if [ -z $NACL_LIB ] ; then
144 LDFLAGS
="-L $NACL_LIB_DIR"
145 CFLAGS
="-I $NACL_INC_DIR"
147 $CC $CFLAGS $LDFLAGS -o $TMPDIR/nacltest
$TMPDIR/nacltest.c
>> config.log
2>&1
148 if [ ! -x $TMPDIR/nacltest
] ; then
151 tools_remove
"curvetun"
154 echo "CONFIG_NACL_INC_DIR:=$NACL_INC_DIR" >> Config
155 echo "CONFIG_NACL_LIB_DIR:=$NACL_LIB_DIR" >> Config
156 echo "CONFIG_NACL_LIB:=$NACL_LIB" >> Config
162 echo -n "[*] Checking libnl ... "
164 cat > $TMPDIR/libnltest.c
<< EOF
165 #include <netlink/genl/genl.h>
166 #include <netlink/genl/family.h>
167 #include <netlink/genl/ctrl.h>
168 #include <netlink/msg.h>
169 #include <netlink/attr.h>
170 #include <netlink/version.h>
172 #if LIBNL_VER_NUM < LIBNL_VER(3,0)
173 # error incompatible libnl version
178 struct nl_sock *sock = nl_socket_alloc();
179 struct nl_cache *nl_cache;
180 int ret = genl_connect(sock);
182 ret = genl_ctrl_alloc_cache(sock, &nl_cache);
187 $
($PKG_CONFIG --cflags libnl-3.0
2>> config.log
) \
188 $
($PKG_CONFIG --cflags libnl-genl-3.0
2>> config.log
) \
189 -o $TMPDIR/libnltest \
190 $TMPDIR/libnltest.c \
191 $
($PKG_CONFIG --libs libnl-3.0
2>> config.log
) \
192 $
($PKG_CONFIG --libs libnl-genl-3.0
2>> config.log
) \
194 if [ ! -x $TMPDIR/libnltest
] ; then
197 tools_remove
"trafgen"
198 tools_remove
"netsniff-ng"
206 echo -n "[*] Checking tpacket_v3 ... "
208 cat > $TMPDIR/tpacketv3test.c
<< EOF
210 #include <linux/if_packet.h>
214 struct tpacket3_hdr *hdr;
219 printf("%d\n", hdr->tp_status);
223 $CC -o $TMPDIR/tpacketv3test
$TMPDIR/tpacketv3test.c
>> config.log
2>&1
224 if [ ! -x $TMPDIR/tpacketv3test
] ; then
235 echo -n "[*] Checking tpacket_v2 ... "
237 cat > $TMPDIR/tpacketv2test.c
<< EOF
239 #include <linux/if_packet.h>
243 struct tpacket2_hdr *hdr;
246 TP_STATUS_SEND_REQUEST,
252 printf("%d\n", hdr->tp_status);
256 $CC -o $TMPDIR/tpacketv2test
$TMPDIR/tpacketv2test.c
>> config.log
2>&1
257 if [ ! -x $TMPDIR/tpacketv2test
] ; then
260 tools_remove
"netsniff-ng"
261 tools_remove
"trafgen"
270 echo -n "[*] Checking ncurses ... "
272 cat > $TMPDIR/ncursestest.c
<< EOF
277 WINDOW *screen = initscr();
282 $
($PKG_CONFIG --cflags ncurses
2>> config.log
) \
283 -o $TMPDIR/ncursestest
$TMPDIR/ncursestest.c \
284 $
($PKG_CONFIG --libs ncurses
2>> config.log \
285 ||
echo '-lncurses' ) \
287 if [ ! -x $TMPDIR/ncursestest
] ; then
290 tools_remove
"flowtop"
299 echo -n "[*] Checking libGeoIP ... "
301 cat > $TMPDIR/geoiptest.c
<< EOF
303 #include <GeoIPCity.h>
308 GEOIP_CITY_EDITION_REV1,
309 GEOIP_CITY_EDITION_REV1_V6,
310 GEOIP_COUNTRY_EDITION,
311 GEOIP_COUNTRY_EDITION_V6,
313 GEOIP_ASNUM_EDITION_V6,
315 GeoIP *geoip = GeoIP_new(0);
319 $CC -o $TMPDIR/geoiptest
$TMPDIR/geoiptest.c
-lGeoIP >> config.log
2>&1
320 if [ ! -x $TMPDIR/geoiptest
] ; then
331 echo -n "[*] Checking libnetfilter-conntrack ... "
333 cat > $TMPDIR/nfcttest.c
<< EOF
334 #include <libnetfilter_conntrack/libnetfilter_conntrack.h>
335 #include <libnetfilter_conntrack/libnetfilter_conntrack_tcp.h>
336 #include <libnetfilter_conntrack/libnetfilter_conntrack_dccp.h>
337 #include <libnetfilter_conntrack/libnetfilter_conntrack_sctp.h>
341 struct nf_conntrack *ct;
342 const uint32_t id = nfct_get_attr_u32(ct, ATTR_ID);
346 $CC -o $TMPDIR/nfcttest
$TMPDIR/nfcttest.c
-lnetfilter_conntrack >> config.log
2>&1
347 if [ ! -x $TMPDIR/nfcttest
] ; then
350 tools_remove
"flowtop"
358 echo -n "[*] Checking libz ... "
360 cat > $TMPDIR/ztest.c
<< EOF
365 gzFile fp = gzopen("foo.gz", "rb");
369 $CC -o $TMPDIR/ztest
$TMPDIR/ztest.c
-lz >> config.log
2>&1
370 if [ ! -x $TMPDIR/ztest
] ; then
372 echo "CONFIG_LIBZ=0" >> Config
374 tools_remove
"astraceroute"
375 tools_remove
"flowtop"
378 echo "CONFIG_LIBZ=1" >> Config
385 echo -n "[*] Checking liburcu ... "
387 cat > $TMPDIR/urcutest.c
<< EOF
397 $CC -o $TMPDIR/urcutest
$TMPDIR/urcutest.c
-lurcu >> config.log
2>&1
398 if [ ! -x $TMPDIR/urcutest
] ; then
401 tools_remove
"flowtop"
409 echo -n "[*] Checking libpcap ... "
411 cat > $TMPDIR/pcaptest.c
<< EOF
416 struct bpf_program bpf;
417 int ret = pcap_compile_nopcap(65535, 1, &bpf, "foo.bpf", 1, 0xffffffff);
421 $CC -o $TMPDIR/pcaptest
$TMPDIR/pcaptest.c
-lpcap >> config.log
2>&1
422 if [ ! -x $TMPDIR/pcaptest
] ; then
424 echo "CONFIG_LIBPCAP=0" >> Config
426 tools_remove
"mausezahn"
429 echo "CONFIG_LIBPCAP=1" >> Config
436 echo -n "[*] Checking hw timestamping ... "
438 cat > $TMPDIR/hwtstest.c
<< EOF
440 #include <arpa/inet.h>
441 #include <sys/ioctl.h>
442 #include <sys/types.h>
443 #include <sys/socket.h>
444 #include <linux/sockios.h>
445 #include <linux/net_tstamp.h>
446 #include <linux/if_packet.h>
447 #include <linux/if_ether.h>
448 #include <linux/if.h>
452 int timesource = SOF_TIMESTAMPING_RAW_HARDWARE, ret;
453 int sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
454 struct hwtstamp_config hwconfig;
457 memset(&hwconfig, 0, sizeof(hwconfig));
458 hwconfig.tx_type = HWTSTAMP_TX_OFF;
459 hwconfig.rx_filter = HWTSTAMP_FILTER_ALL;
461 memset(&ifr, 0, sizeof(ifr));
462 strncpy(ifr.ifr_name, "lo", sizeof(ifr.ifr_name));
463 ifr.ifr_data = &hwconfig;
465 ioctl(sock, SIOCSHWTSTAMP, &ifr);
466 setsockopt(sock, SOL_PACKET, PACKET_TIMESTAMP, ×ource,
471 $CC -o $TMPDIR/hwtstest
$TMPDIR/hwtstest.c
>> config.log
2>&1
472 if [ ! -x $TMPDIR/hwtstest
] ; then
474 echo "CONFIG_HWTSTAMP=0" >> Config
477 echo "CONFIG_HWTSTAMP=1" >> Config
484 echo -n "[*] Checking libcli ... "
486 cat > $TMPDIR/clitest.c
<< EOF
487 #include <sys/time.h>
492 struct cli_def *cli = cli_init();
496 $CC -o $TMPDIR/clitest
$TMPDIR/clitest.c
-lcli >> config.log
2>&1
497 if [ ! -x $TMPDIR/clitest
] ; then
500 tools_remove
"mausezahn"
508 echo -n "[*] Checking libnet ... "
510 cat > $TMPDIR/nettest.c
<< EOF
515 char err_buf[LIBNET_ERRBUF_SIZE];
516 libnet_t *l = libnet_init(LIBNET_LINK_ADV, "ethX", err_buf);
520 $CC -o $TMPDIR/nettest
$TMPDIR/nettest.c
-lnet >> config.log
2>&1
521 if [ ! -x $TMPDIR/nettest
] ; then
524 tools_remove
"mausezahn"
530 gen_version_appendix
()
534 git rev-parse
> /dev
/null
2>&1
535 if [ "$?" == "0" ] ; then
536 if [ ! "`git describe --always`" == \
537 "`git describe --abbrev=0 --tags`" ] ; then
542 echo "CONFIG_RC=\"$_appendix\"" >> Config
548 local _have_libpcap
=""
549 local _have_libgeoip
=""
554 echo "[*] Generating config.h ..."
556 git rev-parse
> /dev
/null
2>&1
557 if [ "$?" == "0" ] ; then
558 _version
="`git describe --always`"
563 if [ "$HAVE_LIBPCAP" == "1" ] ; then
564 _have_libpcap
="#define HAVE_TCPDUMP_LIKE_FILTER 1"
567 if [ "$HAVE_HWTSTAMP" == "1" ] ; then
568 _have_hwts
="#define HAVE_HARDWARE_TIMESTAMPING 1"
571 if [ "$HAVE_LIBGEOIP" == "1" ] ; then
572 _have_libgeoip
="#define HAVE_GEOIP 1"
575 if [ "$HAVE_LIBZ" == "1" ] ; then
576 _have_libz
="#define HAVE_LIBZ 1"
579 if [ "$HAVE_TPACKET3" == "1" ] ; then
580 _have_tp3
="#define HAVE_TPACKET3 1"
583 cat > config.h
<< EOF
586 #define FILE_CLIENTS ".curvetun/clients"
587 #define FILE_SERVERS ".curvetun/servers"
588 #define FILE_PRIVKEY ".curvetun/priv.key"
589 #define FILE_PUBKEY ".curvetun/pub.key"
590 #define FILE_USERNAM ".curvetun/username"
591 #define GITVERSION "$_version"
597 #endif /* CONFIG_H */
603 echo "# This file is autogenerated by the configure script" > Config
606 if [ "$MISSING_TOOLCHAIN" == "1" ] ; then
607 echo "[!] One or more of the toolchain tools couldn't be found in your"
608 echo " \$PATH. Please check the file config.log for details."
631 if [ "$MISSING_DEFS" == "1" ] ; then
632 echo "[!] Some libraries or header definitions are missing or too old. Thus"
633 echo " certain tools will not be built (see below). Please refer to the"
634 echo " INSTALL file for the libraries needed to build the complete"
635 echo " netsniff-ng toolkit."
638 if [ "$MISSING_NACL" == "1" ] ; then
639 echo "[!] The NaCl crypto library is currently not present on your system or"
640 echo " could not be found. Either install it from your distro or build it"
641 echo " manually using 'make nacl' and make sure that the NACL_INC_DIR and"
642 echo " NACL_LIB_DIR environment variables are set appropriately."
645 if [ "x$TOOLS_NOBUILD" != "x" ] ; then
646 echo "[!] The following tools will *not* be built: $TOOLS_NOBUILD"
647 echo "[*] The following tools will be built: $TOOLS"
649 echo "[*] Looks good! All tools will be built!"
652 if [ -s config.log
] ; then
653 echo "[!] There were errors in the configure script. Please check the file"
654 echo " config.log for details."
657 if [ "$HAVE_LIBGEOIP" == "1" -a "$HAVE_LIBZ" == "1" ] ; then
658 echo "CONFIG_GEOIP=1" >> Config
660 echo "CONFIG_GEOIP=0" >> Config
663 echo "CONFIG_TOOLS=$TOOLS" >> Config
664 echo "CONFIG_OK=1" >> Config