1449bf1f339f77ab40c49f56acd5f0e12cefdeab5osdl.net!shemminger#! /bin/bash
2449bf1f339f77ab40c49f56acd5f0e12cefdeab5osdl.net!shemminger# This is not an autconf generated configure
3449bf1f339f77ab40c49f56acd5f0e12cefdeab5osdl.net!shemminger#
44b1bbd9c18641ba497d97822408f9a3f4550e871osdl.net!shemmingerINCLUDE=${1:-"$PWD/include"}
5449bf1f339f77ab40c49f56acd5f0e12cefdeab5osdl.net!shemminger
6e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemminger# Make a temp directory in build tree.
7e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen HemmingerTMPDIR=$(mktemp -d config.XXXXXX)
8e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingertrap 'status=$?; rm -rf $TMPDIRa; exit $status' EXIT HUP INT QUIT TERM
9e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemminger
1014743a78eb774d61fd952c4a4856346ced79b9fbAndreas Henrikssoncheck_atm()
11f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson{
12e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingercat >$TMPDIR/atmtest.c <<EOF
13c830d77b8fdc506751c8c80972613c886a7d0e58osdl.net!shemminger#include <atm.h>
14c830d77b8fdc506751c8c80972613c886a7d0e58osdl.net!shemmingerint main(int argc, char **argv) {
15c830d77b8fdc506751c8c80972613c886a7d0e58osdl.net!shemminger	struct atm_qos qos;
16c830d77b8fdc506751c8c80972613c886a7d0e58osdl.net!shemminger	(void) text2qos("aal5,ubr:sdu=9180,rx:none",&qos,0);
17c830d77b8fdc506751c8c80972613c886a7d0e58osdl.net!shemminger	return 0;
18c830d77b8fdc506751c8c80972613c886a7d0e58osdl.net!shemminger}
19c830d77b8fdc506751c8c80972613c886a7d0e58osdl.net!shemmingerEOF
20e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingergcc -I$INCLUDE -o $TMPDIR/atmtest $TMPDIR/atmtest.c -latm >/dev/null 2>&1 
21c830d77b8fdc506751c8c80972613c886a7d0e58osdl.net!shemmingerif [ $? -eq 0 ]
22449bf1f339f77ab40c49f56acd5f0e12cefdeab5osdl.net!shemmingerthen
23c830d77b8fdc506751c8c80972613c886a7d0e58osdl.net!shemminger    echo "TC_CONFIG_ATM:=y" >>Config
24b9cb1c9a4bcfb3308721b53e85ff2867622ef43fosdl.net!shemminger    echo yes
25449bf1f339f77ab40c49f56acd5f0e12cefdeab5osdl.net!shemmingerelse
26b9cb1c9a4bcfb3308721b53e85ff2867622ef43fosdl.net!shemminger    echo no
27449bf1f339f77ab40c49f56acd5f0e12cefdeab5osdl.net!shemmingerfi
28e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingerrm -f $TMPDIR/atmtest.c $TMPDIR/atmtest
29f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson}
3063c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
3114743a78eb774d61fd952c4a4856346ced79b9fbAndreas Henrikssoncheck_xt()
32f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson{
33a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson#check if we have xtables from iptables >= 1.4.5.
34e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingercat >$TMPDIR/ipttest.c <<EOF
35a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson#include <xtables.h>
36a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson#include <linux/netfilter.h>
37a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henrikssonstatic struct xtables_globals test_globals = {
38a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson	.option_offset = 0,
39a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson	.program_name = "tc-ipt",
40a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson	.program_version = XTABLES_VERSION,
41a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson	.orig_opts = NULL,
42a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson	.opts = NULL,
43a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson	.exit_err = NULL,
44a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson};
45a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson
46a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henrikssonint main(int argc, char **argv)
47a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson{
48a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson	xtables_init_all(&test_globals, NFPROTO_IPV4);
49a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson	return 0;
50a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson}
51a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson
52a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas HenrikssonEOF
53a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson
54e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingerif gcc -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL $(pkg-config xtables --cflags --libs) -ldl >/dev/null 2>&1
55a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henrikssonthen
56a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson	echo "TC_CONFIG_XT:=y" >>Config
57f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson	echo "using xtables"
58f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonfi
59e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingerrm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
60f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson}
61f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson
6214743a78eb774d61fd952c4a4856346ced79b9fbAndreas Henrikssoncheck_xt_old()
63f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson{
64f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson# bail if previous XT checks has already succeded.
65f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonif grep TC_CONFIG_XT Config > /dev/null
66f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonthen
67f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson	return
68a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henrikssonfi
69a36ceb85d7ae6a9742c35417e80ae837ce9f146dAndreas Henriksson
704f69c63a4b85745898c54f5aee624774f28ca0a2Gilles Espinasse#check if we dont need our internal header ..
71e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingercat >$TMPDIR/ipttest.c <<EOF
7263c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim#include <xtables.h>
7363c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimchar *lib_dir;
7463c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimunsigned int global_option_offset = 0;
7563c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimconst char *program_version = XTABLES_VERSION;
7663c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimconst char *program_name = "tc-ipt";
7763c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimstruct afinfo afinfo = {
7863c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim	.libprefix      = "libxt_",
7963c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim};
8063c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
8163c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimvoid exit_error(enum exittype status, const char *msg, ...)
8263c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim{
8363c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim}
8463c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
8563c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimint main(int argc, char **argv) {
8663c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
8763c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim	return 0;
8863c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim}
8963c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
9063c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi SalimEOF
91e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingergcc -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1
9263c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
9363c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimif [ $? -eq 0 ]
9463c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimthen
9580d689d055b2169b390a7cd4ca2c01ba871d02a2Andreas Henriksson	echo "TC_CONFIG_XT_OLD:=y" >>Config
96f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson	echo "using old xtables (no need for xt-internal.h)"
97f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonfi
98e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingerrm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
99f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson}
100f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson
10114743a78eb774d61fd952c4a4856346ced79b9fbAndreas Henrikssoncheck_xt_old_internal_h()
102f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson{
103f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson# bail if previous XT checks has already succeded.
104f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonif grep TC_CONFIG_XT Config > /dev/null
105f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonthen
106f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson	return
10763c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimfi
10863c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
10963c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim#check if we need our own internal.h
110e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingercat >$TMPDIR/ipttest.c <<EOF
11163c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim#include <xtables.h>
11263c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim#include "xt-internal.h"
11363c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimchar *lib_dir;
11463c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimunsigned int global_option_offset = 0;
11563c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimconst char *program_version = XTABLES_VERSION;
11663c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimconst char *program_name = "tc-ipt";
11763c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimstruct afinfo afinfo = {
11863c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim	.libprefix      = "libxt_",
11963c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim};
12063c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
12163c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimvoid exit_error(enum exittype status, const char *msg, ...)
12263c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim{
12363c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim}
12463c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
12563c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimint main(int argc, char **argv) {
12663c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
12763c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim	return 0;
12863c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim}
12963c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
13063c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi SalimEOF
131e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingergcc -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1
13263c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salim
13363c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimif [ $? -eq 0 ]
13463c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimthen
135f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson	echo "using old xtables with xt-internal.h"
13680d689d055b2169b390a7cd4ca2c01ba871d02a2Andreas Henriksson	echo "TC_CONFIG_XT_OLD_H:=y" >>Config
13763c7d26f941df1c7aa4a18bac5b3a777bc66216aJamal Hadi Salimfi
138e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingerrm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
139f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson}
140f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson
14114743a78eb774d61fd952c4a4856346ced79b9fbAndreas Henrikssoncheck_ipt()
142f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson{
143f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson	if ! grep TC_CONFIG_XT Config > /dev/null
144f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson	then
145f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson		echo "using iptables"
146f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson	fi
147f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson}
148f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson
14912ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henrikssoncheck_ipt_lib_dir()
15012ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson{
15112ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson	IPT_LIB_DIR=""
15212ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson	for dir in /lib /usr/lib /usr/local/lib
15312ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson	do
15444e743e588bcc737b7a2a5891f90279c58934ad7Dan McGee		for file in $dir/{xtables,iptables}/lib*t_*so ; do
15512ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson			if [ -f $file ]; then
15644e743e588bcc737b7a2a5891f90279c58934ad7Dan McGee				echo ${file%/*}
15744e743e588bcc737b7a2a5891f90279c58934ad7Dan McGee				echo "IPT_LIB_DIR:=${file%/*}" >> Config
15812ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson				return
15912ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson			fi
16012ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson		done
16112ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson	done
16212ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson	echo "not found!"
16312ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson}
16412ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henriksson
1652e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biedermancheck_setns()
1662e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman{
167e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingercat >$TMPDIR/setnstest.c <<EOF
1682e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman#include <sched.h>
1692e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biedermanint main(int argc, char **argv) 
1702e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman{
1712e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman	(void)setns(0,0);
1722e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman	return 0;
1732e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman}
1742e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. BiedermanEOF
175e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingergcc -I$INCLUDE -o $TMPDIR/setnstest $TMPDIR/setnstest.c >/dev/null 2>&1
1762e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biedermanif [ $? -eq 0 ]
1772e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biedermanthen
1782e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman	echo "IP_CONFIG_SETNS:=y" >>Config
1792e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman	echo "yes"
1802e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biedermanelse
1812e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman	echo "no"
1822e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biedermanfi
183e557d1ac3a156ba7521ba44b0b412af4542f83f8Stephen Hemmingerrm -f $TMPDIR/setnstest.c $TMPDIR/setnstest
1842e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman}
1852e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman
186f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonecho "# Generated config based on" $INCLUDE >Config
187f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson
188f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonecho "TC schedulers"
189f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson
190f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonecho -n " ATM	"
191f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssoncheck_atm
192f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson
193f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssonecho -n " IPT	"
194f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssoncheck_xt
195f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssoncheck_xt_old
196f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssoncheck_xt_old_internal_h
197f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henrikssoncheck_ipt
198f1a0125bc090a9310a2a86adc9acf59fc417d44aAndreas Henriksson
19912ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henrikssonecho -n "iptables modules directory: "
20012ddfff76ca4a373d50fd2ac7fff2bd4e0883955Andreas Henrikssoncheck_ipt_lib_dir
2012e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biederman
2022e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biedermanecho -n "libc has setns: "
2032e8a07f543e6f48f0d0479e3dd4796c18f733e12Eric W. Biedermancheck_setns
204