#!/bin/bash

# Kernel configration options.
OPTIONS=" IPV6 IPV6_ROUTER_PREF IPV6_MULTIPLE_TABLES IPV6_ROUTE_INFO"
OPTIONS="$OPTIONS TUN SYN_COOKIES IP_ADVANCED_ROUTER IP_MULTIPLE_TABLES"
OPTIONS="$OPTIONS NETFILTER NETFILTER_ADVANCED NETFILTER_XTABLES"
OPTIONS="$OPTIONS NETFILTER_XT_MARK NETFILTER_XT_TARGET_MARK"
OPTIONS="$OPTIONS IP_NF_IPTABLES IP_NF_MANGLE"
OPTIONS="$OPTIONS IP6_NF_IPTABLES IP6_NF_MANGLE"

# How many tap interfaces to create.
NUMTAPINTERFACES=2

# The root filesystem disk image we'll use.
ROOTFS=$(dirname $0)/net_test.rootfs

# Figure out which test to run.
if [ -z "$1" ]; then
  echo "Usage: $0 <test>" >&2
  exit 1
fi
test=$1

set -e

# Check if we need to uncompress the disk image.
# We use xz because it compresses better: to 42M vs 72M (gzip) / 62M (bzip2).
if [ $ROOTFS.xz -nt $ROOTFS ]; then
  echo "Uncompressing $ROOTFS.xz" >&2
  unxz --keep $ROOTFS.xz
fi


# Create NUMTAPINTERFACES tap interfaces on the host, and prepare UML command
# line params to use them. The interfaces are called <user>TAP0, <user>TAP1,
# ..., on the host, and eth0, eth1, ..., in the VM.
user=${USER:0:10}
tapinterfaces=
netconfig=
for id in $(seq 0 $(( NUMTAPINTERFACES - 1 )) ); do
  tap=${user}TAP$id
  tapinterfaces="$tapinterfaces $tap"
  mac=$(printf fe:fd:00:00:00:%02x $id)
  netconfig="$netconfig eth$id=tuntap,$tap,$mac"
done

for tap in $tapinterfaces; do
  if ! ip link list $tap > /dev/null; then
    echo "Creating tap interface $tap" >&2
    sudo tunctl -u $USER -t $tap
    sudo ip link set $tap up
  fi
done

# Exporting ARCH=um SUBARCH=x86_64 doesn't seem to work, as it "sometimes" (?)
# results in a 32-bit kernel.

# If there's no kernel config at all, create one or UML won't work.
[ -f .config ] || make defconfig ARCH=um SUBARCH=x86_64

# Enable the kernel config options listed in $OPTIONS.
cmdline=${OPTIONS// / -e }
./scripts/config $cmdline
make olddefconfig ARCH=um SUBARCH=x86_64

# Compile the kernel.
make -j12 linux ARCH=um SUBARCH=x86_64

# Get the absolute path to the test file that's being run.
dir=/host$(dirname $(readlink -f $0))

# Start the VM.
exec ./linux umid=net_test ubda=$(dirname $0)/net_test.rootfs \
    mem=512M init=/sbin/net_test.sh net_test=$dir/$test \
    $netconfig
