blob: ea1038df53ffe5eb5454c3d56f97a44288a7eb57 [file] [log] [blame]
osdl.net!shemminger449bf1f2004-06-25 21:14:22 +00001#! /bin/bash
2# This is not an autconf generated configure
3#
osdl.net!shemminger4b1bbd92004-08-09 16:35:28 +00004INCLUDE=${1:-"$PWD/include"}
osdl.net!shemminger449bf1f2004-06-25 21:14:22 +00005
Stephen Hemmingere557d1a2012-02-15 10:03:39 -08006# Make a temp directory in build tree.
7TMPDIR=$(mktemp -d config.XXXXXX)
Mathias Krausec2f7d6c2012-09-01 20:55:29 +02008trap 'status=$?; rm -rf $TMPDIR; exit $status' EXIT HUP INT QUIT TERM
Stephen Hemmingere557d1a2012-02-15 10:03:39 -08009
Mike Frysinger601f60e2012-12-16 17:09:15 -050010check_toolchain()
11{
12: ${PKG_CONFIG:=pkg-config}
13: ${CC=gcc}
14echo "CC:=${CC}" >>Config
15echo "PKG_CONFIG:=${PKG_CONFIG}" >>Config
16}
17
Andreas Henriksson14743a72010-01-01 23:20:30 +010018check_atm()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000019{
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080020cat >$TMPDIR/atmtest.c <<EOF
osdl.net!shemmingerc830d772004-07-02 17:47:53 +000021#include <atm.h>
22int main(int argc, char **argv) {
23 struct atm_qos qos;
24 (void) text2qos("aal5,ubr:sdu=9180,rx:none",&qos,0);
25 return 0;
26}
27EOF
Wookey35122a72012-11-16 08:06:19 -080028$CC -I$INCLUDE -o $TMPDIR/atmtest $TMPDIR/atmtest.c -latm >/dev/null 2>&1
osdl.net!shemmingerc830d772004-07-02 17:47:53 +000029if [ $? -eq 0 ]
osdl.net!shemminger449bf1f2004-06-25 21:14:22 +000030then
osdl.net!shemmingerc830d772004-07-02 17:47:53 +000031 echo "TC_CONFIG_ATM:=y" >>Config
osdl.net!shemmingerb9cb1c92004-07-30 22:27:50 +000032 echo yes
osdl.net!shemminger449bf1f2004-06-25 21:14:22 +000033else
osdl.net!shemmingerb9cb1c92004-07-30 22:27:50 +000034 echo no
osdl.net!shemminger449bf1f2004-06-25 21:14:22 +000035fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080036rm -f $TMPDIR/atmtest.c $TMPDIR/atmtest
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000037}
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -050038
Andreas Henriksson14743a72010-01-01 23:20:30 +010039check_xt()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000040{
Andreas Henrikssona36ceb82009-12-02 16:11:50 +010041#check if we have xtables from iptables >= 1.4.5.
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080042cat >$TMPDIR/ipttest.c <<EOF
Andreas Henrikssona36ceb82009-12-02 16:11:50 +010043#include <xtables.h>
44#include <linux/netfilter.h>
45static struct xtables_globals test_globals = {
46 .option_offset = 0,
47 .program_name = "tc-ipt",
48 .program_version = XTABLES_VERSION,
49 .orig_opts = NULL,
50 .opts = NULL,
51 .exit_err = NULL,
52};
53
54int main(int argc, char **argv)
55{
56 xtables_init_all(&test_globals, NFPROTO_IPV4);
57 return 0;
58}
59
60EOF
61
Wookey35122a72012-11-16 08:06:19 -080062if $CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL $(${PKG_CONFIG} xtables --cflags --libs) -ldl >/dev/null 2>&1
Andreas Henrikssona36ceb82009-12-02 16:11:50 +010063then
64 echo "TC_CONFIG_XT:=y" >>Config
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000065 echo "using xtables"
66fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080067rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000068}
69
Andreas Henriksson14743a72010-01-01 23:20:30 +010070check_xt_old()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000071{
72# bail if previous XT checks has already succeded.
73if grep TC_CONFIG_XT Config > /dev/null
74then
75 return
Andreas Henrikssona36ceb82009-12-02 16:11:50 +010076fi
77
Gilles Espinasse4f69c632011-07-10 05:45:37 +000078#check if we dont need our internal header ..
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080079cat >$TMPDIR/ipttest.c <<EOF
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -050080#include <xtables.h>
81char *lib_dir;
82unsigned int global_option_offset = 0;
83const char *program_version = XTABLES_VERSION;
84const char *program_name = "tc-ipt";
85struct afinfo afinfo = {
86 .libprefix = "libxt_",
87};
88
89void exit_error(enum exittype status, const char *msg, ...)
90{
91}
92
93int main(int argc, char **argv) {
94
95 return 0;
96}
97
98EOF
Wookey35122a72012-11-16 08:06:19 -080099$CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500100
101if [ $? -eq 0 ]
102then
Andreas Henriksson80d689d2009-12-02 16:11:21 +0100103 echo "TC_CONFIG_XT_OLD:=y" >>Config
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000104 echo "using old xtables (no need for xt-internal.h)"
105fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800106rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000107}
108
Andreas Henriksson14743a72010-01-01 23:20:30 +0100109check_xt_old_internal_h()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000110{
111# bail if previous XT checks has already succeded.
112if grep TC_CONFIG_XT Config > /dev/null
113then
114 return
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500115fi
116
117#check if we need our own internal.h
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800118cat >$TMPDIR/ipttest.c <<EOF
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500119#include <xtables.h>
120#include "xt-internal.h"
121char *lib_dir;
122unsigned int global_option_offset = 0;
123const char *program_version = XTABLES_VERSION;
124const char *program_name = "tc-ipt";
125struct afinfo afinfo = {
126 .libprefix = "libxt_",
127};
128
129void exit_error(enum exittype status, const char *msg, ...)
130{
131}
132
133int main(int argc, char **argv) {
134
135 return 0;
136}
137
138EOF
Wookey35122a72012-11-16 08:06:19 -0800139$CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500140
141if [ $? -eq 0 ]
142then
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000143 echo "using old xtables with xt-internal.h"
Andreas Henriksson80d689d2009-12-02 16:11:21 +0100144 echo "TC_CONFIG_XT_OLD_H:=y" >>Config
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500145fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800146rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000147}
148
Andreas Henriksson14743a72010-01-01 23:20:30 +0100149check_ipt()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000150{
151 if ! grep TC_CONFIG_XT Config > /dev/null
152 then
153 echo "using iptables"
154 fi
155}
156
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000157check_ipt_lib_dir()
158{
Mike Frysingere4fc4ad2012-11-08 11:41:17 -0500159 IPT_LIB_DIR=$(${PKG_CONFIG} --variable=xtlibdir xtables)
Li Weida7fbb22012-08-20 09:41:47 +0800160 if [ -n "$IPT_LIB_DIR" ]; then
161 echo $IPT_LIB_DIR
162 echo "IPT_LIB_DIR:=$IPT_LIB_DIR" >> Config
163 return
164 fi
165
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000166 for dir in /lib /usr/lib /usr/local/lib
167 do
Dan McGee44e743e2011-07-15 08:52:24 +0000168 for file in $dir/{xtables,iptables}/lib*t_*so ; do
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000169 if [ -f $file ]; then
Dan McGee44e743e2011-07-15 08:52:24 +0000170 echo ${file%/*}
171 echo "IPT_LIB_DIR:=${file%/*}" >> Config
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000172 return
173 fi
174 done
175 done
176 echo "not found!"
177}
178
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000179check_setns()
180{
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800181cat >$TMPDIR/setnstest.c <<EOF
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000182#include <sched.h>
183int main(int argc, char **argv)
184{
185 (void)setns(0,0);
186 return 0;
187}
188EOF
Wookey35122a72012-11-16 08:06:19 -0800189$CC -I$INCLUDE -o $TMPDIR/setnstest $TMPDIR/setnstest.c >/dev/null 2>&1
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000190if [ $? -eq 0 ]
191then
192 echo "IP_CONFIG_SETNS:=y" >>Config
193 echo "yes"
194else
195 echo "no"
196fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800197rm -f $TMPDIR/setnstest.c $TMPDIR/setnstest
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000198}
199
Florian Westphal81944112012-08-09 09:18:50 +0000200check_ipset()
201{
202cat >$TMPDIR/ipsettest.c <<EOF
203#include <linux/netfilter/ipset/ip_set.h>
204#ifndef IP_SET_INVALID
205#define IPSET_DIM_MAX 3
206typedef unsigned short ip_set_id_t;
207#endif
208#include <linux/netfilter/xt_set.h>
209
210struct xt_set_info info;
211#if IPSET_PROTOCOL == 6
212int main(void)
213{
214 return IPSET_MAXNAMELEN;
215}
216#else
217#error unknown ipset version
218#endif
219EOF
220
Wookey35122a72012-11-16 08:06:19 -0800221if $CC -I$INCLUDE -o $TMPDIR/ipsettest $TMPDIR/ipsettest.c >/dev/null 2>&1
Florian Westphal81944112012-08-09 09:18:50 +0000222then
223 echo "TC_CONFIG_IPSET:=y" >>Config
224 echo "yes"
225else
226 echo "no"
227fi
228rm -f $TMPDIR/ipsettest.c $TMPDIR/ipsettest
229}
230
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000231echo "# Generated config based on" $INCLUDE >Config
Mike Frysinger601f60e2012-12-16 17:09:15 -0500232check_toolchain
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000233
234echo "TC schedulers"
235
236echo -n " ATM "
237check_atm
238
239echo -n " IPT "
240check_xt
241check_xt_old
242check_xt_old_internal_h
243check_ipt
244
Florian Westphal81944112012-08-09 09:18:50 +0000245echo -n " IPSET "
246check_ipset
247
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000248echo -n "iptables modules directory: "
249check_ipt_lib_dir
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000250
251echo -n "libc has setns: "
252check_setns