#! /bin/bash
# This is not an autconf generated configure
#
INCLUDE=${1:-"/usr/include"}

echo "# Generated config based on" $INCLUDE >Config

echo -n "TC xfrm	"
XFRM=$INCLUDE/linux/xfrm.h
if [ ! -r $XFRM ];
then
    echo no
else
    echo "IP_CONFIG_XFRM:=y" >>Config
    echo yes
fi

echo "TC schedulers"
PKT_SCHED=$INCLUDE/linux/pkt_sched.h
if [ ! -r $PKT_SCHED ];
then
    echo " can't find file" $PKT_SCHED
    exit 1
fi

echo -n " netem  "
cat >/tmp/netemtest.c <<EOF
#include <asm/types.h>
#include <linux/pkt_sched.h>
int main(int argc, char **argv) {
	static struct tc_netem_qopt qopt;
	exit(qopt.latency | qopt.limit | qopt.loss | qopt.gap | qopt.duplicate | qopt.jitter);
}
EOF
gcc -I$INCLUDE -c /tmp/netemtest.c  >/dev/null 2>&1
if [ $? -eq 0 ]
then 
    echo "TC_CONFIG_NETEM:=y" >>Config
    echo yes
else
    echo no
fi
rm -f /tmp/netemtest.c /tmp/netemtest.o

echo -n " ATM	"
cat >/tmp/atmtest.c <<EOF
#include <atm.h>
int main(int argc, char **argv) {
	struct atm_qos qos;
	(void) text2qos("aal5,ubr:sdu=9180,rx:none",&qos,0);
	return 0;
}
EOF
gcc -I$INCLUDE -o /tmp/atmtest /tmp/atmtest.c -latm >/dev/null 2>&1 
if [ $? -eq 0 ]
then
    echo "TC_CONFIG_ATM:=y" >>Config
    echo yes
else
    echo no
fi
rm -f /tmp/atmtest.c /tmp/atmtest

echo -n " HTB	"
DEF_HTB=`grep '^#define HTB_TC_VER' tc/q_htb.c`
cat >/tmp/htbtest.c <<EOF
#include <stdio.h>
#include <asm/types.h>
#include <linux/pkt_sched.h>
$DEF_HTB
int main(int argc, char **argv) {
	if (HTB_TC_VER >>16 != TC_HTB_PROTOVER) {
		fprintf(stderr, "different kernel and TC HTB versions\n");
		return 1;
	} 
	return 0;
}
EOF
gcc -I$INCLUDE -o /tmp/htbtest /tmp/htbtest.c >/dev/null 2>&1
if [ $? -eq 0 -a /tmp/htbtest ]
then
	echo "TC_CONFIG_HTB:=y" >>Config
	echo yes
else
    echo no
fi
rm -f /tmp/htbtest /tmp/htbtest.c

echo -n " HFSC	"
cat >/tmp/hfsctest.c <<EOF
#include <asm/types.h>
#include <linux/pkt_sched.h>
int main(int argc, char **argv) {
	static struct tc_hfsc_qopt qopt;

	exit(qopt.defcls);
}
EOF
gcc -I$INCLUDE -c /tmp/hfsctest.c  >/dev/null 2>&1
if [ $? -eq 0 ]
then 
    echo "TC_CONFIG_HFSC:=y" >>Config
    echo yes
else
    echo no
fi
rm -f /tmp/hfsctest.c /tmp/hfsctest.o



# See if we know about TCP Vegas
echo "SS"
echo -n " TCP Vegas        "
if grep -q TCPDIAG_VEGASINFO $INCLUDE/linux/tcp_diag.h  >/dev/null 2>&1
then
    echo "SS_CONFIG_VEGAS:=y" >>Config
    echo yes
else
    echo no
fi

echo -n " TCP DRS          "
if grep -q tcpi_rcv_space $INCLUDE/linux/tcp.h
then
    echo "SS_CONFIG_DRS:=y" >>Config
    echo yes
else
    echo no
fi


