blob: f0540c3cc584c2e44e19dd600bfc3535ad5c1f0b [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}
Mike Frysinger95d9d662012-12-16 17:09:17 -050013: ${AR=ar}
Mike Frysinger601f60e2012-12-16 17:09:15 -050014: ${CC=gcc}
Mike Frysinger95d9d662012-12-16 17:09:17 -050015echo "AR:=${AR}" >>Config
Mike Frysinger601f60e2012-12-16 17:09:15 -050016echo "CC:=${CC}" >>Config
Mike Frysinger601f60e2012-12-16 17:09:15 -050017}
18
Andreas Henriksson14743a72010-01-01 23:20:30 +010019check_atm()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000020{
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080021cat >$TMPDIR/atmtest.c <<EOF
osdl.net!shemmingerc830d772004-07-02 17:47:53 +000022#include <atm.h>
23int main(int argc, char **argv) {
24 struct atm_qos qos;
25 (void) text2qos("aal5,ubr:sdu=9180,rx:none",&qos,0);
26 return 0;
27}
28EOF
Wookey35122a72012-11-16 08:06:19 -080029$CC -I$INCLUDE -o $TMPDIR/atmtest $TMPDIR/atmtest.c -latm >/dev/null 2>&1
osdl.net!shemmingerc830d772004-07-02 17:47:53 +000030if [ $? -eq 0 ]
osdl.net!shemminger449bf1f2004-06-25 21:14:22 +000031then
osdl.net!shemmingerc830d772004-07-02 17:47:53 +000032 echo "TC_CONFIG_ATM:=y" >>Config
osdl.net!shemmingerb9cb1c92004-07-30 22:27:50 +000033 echo yes
osdl.net!shemminger449bf1f2004-06-25 21:14:22 +000034else
osdl.net!shemmingerb9cb1c92004-07-30 22:27:50 +000035 echo no
osdl.net!shemminger449bf1f2004-06-25 21:14:22 +000036fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080037rm -f $TMPDIR/atmtest.c $TMPDIR/atmtest
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000038}
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -050039
Andreas Henriksson14743a72010-01-01 23:20:30 +010040check_xt()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000041{
Andreas Henrikssona36ceb82009-12-02 16:11:50 +010042#check if we have xtables from iptables >= 1.4.5.
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080043cat >$TMPDIR/ipttest.c <<EOF
Andreas Henrikssona36ceb82009-12-02 16:11:50 +010044#include <xtables.h>
45#include <linux/netfilter.h>
46static struct xtables_globals test_globals = {
47 .option_offset = 0,
48 .program_name = "tc-ipt",
49 .program_version = XTABLES_VERSION,
50 .orig_opts = NULL,
51 .opts = NULL,
52 .exit_err = NULL,
53};
54
55int main(int argc, char **argv)
56{
57 xtables_init_all(&test_globals, NFPROTO_IPV4);
58 return 0;
59}
60
61EOF
62
Wookey35122a72012-11-16 08:06:19 -080063if $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 +010064then
65 echo "TC_CONFIG_XT:=y" >>Config
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000066 echo "using xtables"
67fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080068rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000069}
70
Andreas Henriksson14743a72010-01-01 23:20:30 +010071check_xt_old()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +000072{
73# bail if previous XT checks has already succeded.
74if grep TC_CONFIG_XT Config > /dev/null
75then
76 return
Andreas Henrikssona36ceb82009-12-02 16:11:50 +010077fi
78
Gilles Espinasse4f69c632011-07-10 05:45:37 +000079#check if we dont need our internal header ..
Stephen Hemmingere557d1a2012-02-15 10:03:39 -080080cat >$TMPDIR/ipttest.c <<EOF
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -050081#include <xtables.h>
82char *lib_dir;
83unsigned int global_option_offset = 0;
84const char *program_version = XTABLES_VERSION;
85const char *program_name = "tc-ipt";
86struct afinfo afinfo = {
87 .libprefix = "libxt_",
88};
89
90void exit_error(enum exittype status, const char *msg, ...)
91{
92}
93
94int main(int argc, char **argv) {
95
96 return 0;
97}
98
99EOF
Wookey35122a72012-11-16 08:06:19 -0800100$CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500101
102if [ $? -eq 0 ]
103then
Andreas Henriksson80d689d2009-12-02 16:11:21 +0100104 echo "TC_CONFIG_XT_OLD:=y" >>Config
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000105 echo "using old xtables (no need for xt-internal.h)"
106fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800107rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000108}
109
Andreas Henriksson14743a72010-01-01 23:20:30 +0100110check_xt_old_internal_h()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000111{
112# bail if previous XT checks has already succeded.
113if grep TC_CONFIG_XT Config > /dev/null
114then
115 return
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500116fi
117
118#check if we need our own internal.h
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800119cat >$TMPDIR/ipttest.c <<EOF
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500120#include <xtables.h>
121#include "xt-internal.h"
122char *lib_dir;
123unsigned int global_option_offset = 0;
124const char *program_version = XTABLES_VERSION;
125const char *program_name = "tc-ipt";
126struct afinfo afinfo = {
127 .libprefix = "libxt_",
128};
129
130void exit_error(enum exittype status, const char *msg, ...)
131{
132}
133
134int main(int argc, char **argv) {
135
136 return 0;
137}
138
139EOF
Wookey35122a72012-11-16 08:06:19 -0800140$CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500141
142if [ $? -eq 0 ]
143then
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000144 echo "using old xtables with xt-internal.h"
Andreas Henriksson80d689d2009-12-02 16:11:21 +0100145 echo "TC_CONFIG_XT_OLD_H:=y" >>Config
Jamal Hadi Salim63c7d262009-02-07 08:19:20 -0500146fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800147rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000148}
149
Andreas Henriksson14743a72010-01-01 23:20:30 +0100150check_ipt()
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000151{
152 if ! grep TC_CONFIG_XT Config > /dev/null
153 then
154 echo "using iptables"
155 fi
156}
157
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000158check_ipt_lib_dir()
159{
Mike Frysingere4fc4ad2012-11-08 11:41:17 -0500160 IPT_LIB_DIR=$(${PKG_CONFIG} --variable=xtlibdir xtables)
Li Weida7fbb22012-08-20 09:41:47 +0800161 if [ -n "$IPT_LIB_DIR" ]; then
162 echo $IPT_LIB_DIR
163 echo "IPT_LIB_DIR:=$IPT_LIB_DIR" >> Config
164 return
165 fi
166
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000167 for dir in /lib /usr/lib /usr/local/lib
168 do
Dan McGee44e743e2011-07-15 08:52:24 +0000169 for file in $dir/{xtables,iptables}/lib*t_*so ; do
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000170 if [ -f $file ]; then
Dan McGee44e743e2011-07-15 08:52:24 +0000171 echo ${file%/*}
172 echo "IPT_LIB_DIR:=${file%/*}" >> Config
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000173 return
174 fi
175 done
176 done
177 echo "not found!"
178}
179
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000180check_setns()
181{
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800182cat >$TMPDIR/setnstest.c <<EOF
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000183#include <sched.h>
184int main(int argc, char **argv)
185{
186 (void)setns(0,0);
187 return 0;
188}
189EOF
Wookey35122a72012-11-16 08:06:19 -0800190$CC -I$INCLUDE -o $TMPDIR/setnstest $TMPDIR/setnstest.c >/dev/null 2>&1
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000191if [ $? -eq 0 ]
192then
193 echo "IP_CONFIG_SETNS:=y" >>Config
194 echo "yes"
195else
196 echo "no"
197fi
Stephen Hemmingere557d1a2012-02-15 10:03:39 -0800198rm -f $TMPDIR/setnstest.c $TMPDIR/setnstest
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000199}
200
Florian Westphal81944112012-08-09 09:18:50 +0000201check_ipset()
202{
203cat >$TMPDIR/ipsettest.c <<EOF
204#include <linux/netfilter/ipset/ip_set.h>
205#ifndef IP_SET_INVALID
206#define IPSET_DIM_MAX 3
207typedef unsigned short ip_set_id_t;
208#endif
209#include <linux/netfilter/xt_set.h>
210
211struct xt_set_info info;
212#if IPSET_PROTOCOL == 6
213int main(void)
214{
215 return IPSET_MAXNAMELEN;
216}
217#else
218#error unknown ipset version
219#endif
220EOF
221
Wookey35122a72012-11-16 08:06:19 -0800222if $CC -I$INCLUDE -o $TMPDIR/ipsettest $TMPDIR/ipsettest.c >/dev/null 2>&1
Florian Westphal81944112012-08-09 09:18:50 +0000223then
224 echo "TC_CONFIG_IPSET:=y" >>Config
225 echo "yes"
226else
227 echo "no"
228fi
229rm -f $TMPDIR/ipsettest.c $TMPDIR/ipsettest
230}
231
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000232echo "# Generated config based on" $INCLUDE >Config
Jan Engelhardtd29feaa2012-12-18 09:18:45 -0800233echo "PKG_CONFIG:=${PKG_CONFIG}" >>Config
Mike Frysinger601f60e2012-12-16 17:09:15 -0500234check_toolchain
Andreas Henrikssonf1a01252009-12-02 05:12:30 +0000235
236echo "TC schedulers"
237
238echo -n " ATM "
239check_atm
240
241echo -n " IPT "
242check_xt
243check_xt_old
244check_xt_old_internal_h
245check_ipt
246
Florian Westphal81944112012-08-09 09:18:50 +0000247echo -n " IPSET "
248check_ipset
249
Andreas Henriksson12ddfff2010-03-11 10:54:31 +0000250echo -n "iptables modules directory: "
251check_ipt_lib_dir
Eric W. Biederman2e8a07f2011-07-15 14:26:59 +0000252
253echo -n "libc has setns: "
254check_setns