More missing files.
diff --git a/testsuite/lib/generic.sh b/testsuite/lib/generic.sh
new file mode 100644
index 0000000..cc48947
--- /dev/null
+++ b/testsuite/lib/generic.sh
@@ -0,0 +1,88 @@
+
+export DEST="127.0.0.1"
+
+ts_log()
+{
+ echo "$@"
+}
+
+ts_err()
+{
+ ts_log "$@" | tee >> $ERRF
+}
+
+ts_cat()
+{
+ cat "$@"
+}
+
+ts_err_cat()
+{
+ ts_cat "$@" | tee >> $ERRF
+}
+
+ts_tc()
+{
+ SCRIPT=$1; shift
+ DESC=$1; shift
+ TMP_ERR=`mktemp /tmp/tc_testsuite.XXXXXX` || exit
+ TMP_OUT=`mktemp /tmp/tc_testsuite.XXXXXX` || exit
+
+ $TC $@ 2> $TMP_ERR > $TMP_OUT
+
+ if [ -s $TMP_ERR ]; then
+ ts_err "${SCRIPT}: ${DESC} failed:"
+ ts_err "command: $TC $@"
+ ts_err "stderr output:"
+ ts_err_cat $TMP_ERR
+ if [ -s $TMP_OUT ]; then
+ ts_err "stdout output:"
+ ts_err_cat $TMP_OUT
+ fi
+ elif [ -s $TMP_OUT ]; then
+ echo "${SCRIPT}: ${DESC} succeeded with output:"
+ cat $TMP_OUT
+ else
+ echo "${SCRIPT}: ${DESC} succeeded"
+ fi
+
+ rm $TMP_ERR $TMP_OUT
+}
+
+ts_ip()
+{
+ SCRIPT=$1; shift
+ DESC=$1; shift
+ TMP_ERR=`mktemp /tmp/tc_testsuite.XXXXXX` || exit
+ TMP_OUT=`mktemp /tmp/tc_testsuite.XXXXXX` || exit
+
+ $IP $@ 2> $TMP_ERR > $TMP_OUT
+
+ if [ -s $TMP_ERR ]; then
+ ts_err "${SCRIPT}: ${DESC} failed:"
+ ts_err "command: $IP $@"
+ ts_err "stderr output:"
+ ts_err_cat $TMP_ERR
+ if [ -s $TMP_OUT ]; then
+ ts_err "stdout output:"
+ ts_err_cat $TMP_OUT
+ fi
+ elif [ -s $TMP_OUT ]; then
+ echo "${SCRIPT}: ${DESC} succeeded with output:"
+ cat $TMP_OUT
+ else
+ echo "${SCRIPT}: ${DESC} succeeded"
+ fi
+
+ rm $TMP_ERR $TMP_OUT
+}
+
+ts_qdisc_available()
+{
+ HELPOUT=`$TC qdisc add $1 help 2>&1`
+ if [ "`echo $HELPOUT | grep \"^Unknown qdisc\"`" ]; then
+ return 0;
+ else
+ return 1;
+ fi
+}