#!/bin/bash
#
# contrary to ttcn3-tcpdump-start.sh, this version is dumpcap-only and
# needed when we want to capture from interfaces of different link
# types. It will also store the results as pcap-ng, not plain old pcap.

PIDFILE_PCAP=/tmp/pcap.pid
DUMPCAP=/usr/bin/dumpcap

PIDFILE_NETCAT=/tmp/netcat.pid
NETCAT=/bin/nc
GSMTAP_PORT=4729

TESTCASE=$1

kill_rm_pidfile() {
	if [ -e $1 ]; then
		kill "$(cat "$1")"
		rm $1
	fi
}

echo "------ $TESTCASE ------"
date

if [ "z$TTCN3_PCAP_PATH" = "z" ]; then
	TTCN3_PCAP_PATH=/tmp
fi

kill_rm_pidfile $PIDFILE_NETCAT
kill_rm_pidfile $PIDFILE_PCAP

if [ -x $DUMPCAP ]; then
    CAP_ERR="1"
    if [ -x /sbin/setcap ]; then
	# N. B: this check requires libcap2-bin package
	/sbin/setcap -q -v 'cap_net_admin,cap_net_raw=pie' $DUMPCAP
	CAP_ERR="$?"
    fi
    if [ -u $DUMPCAP -o "$CAP_ERR" = "0" ]; then
	CMD="$DUMPCAP -q"
    else
 	echo "NOTE: unable to use dumpcap due to missing capabilities or suid bit"
	exit 32
    fi
fi

# Create a dummy sink for GSMTAP packets
$NETCAT -l -u -k -p $GSMTAP_PORT >/dev/null 2>$TESTCASE.netcat.stderr &
PID=$!
echo $PID > $PIDFILE_NETCAT

# generate the list of interface arguments.  For capturing from
# interfaces of different link-layer types, we cannot use "-i all"
# but must use dumpcap with each individual interface name.  We also
# must write pcapng files, as only those can record the interface of
# each packet
ADDL_ARGS=""
for f in /sys/class/net/*; do
	DEV=`basename $f`
	if [[ "$DEV" == "hdlcnet"* ]]; then
		# skip these as we only want the hdlcX devices, avoid capturing twice on both sides
		continue
	elif [[ "$DEV" == "hdlc"* ]]; then
		# these are the user-side of the FR links, which is
		# what we interface with from our test suite, emulating
		# a BSS.
		ADDL_ARGS="${ADDL_ARGS} -i ${DEV}"
	elif [[ "$DEV" == "eth"* ]]; then
		# we blindly assume that "normal" docker network devices
		# are called ethXXX
		ADDL_ARGS="${ADDL_ARGS} -i ${DEV}"
	fi
done

$CMD -s 1500 -n ${ADDL_ARGS} -w "$TTCN3_PCAP_PATH/$TESTCASE.pcapng" >$TTCN3_PCAP_PATH/$TESTCASE.pcapng.stdout 2>&1 &
PID=$!
echo $PID > $PIDFILE_PCAP

# Wait until packet dumper creates the pcap file and starts recording.
# We generate some traffic until we see packet dumper catches it.
# Timeout is 10 seconds.
ping 127.0.0.1 >/dev/null 2>&1 &
PID=$!
i=0
while [ ! -f "$TTCN3_PCAP_PATH/$TESTCASE.pcapng" ] ||
      [ "$(stat -c '%s' "$TTCN3_PCAP_PATH/$TESTCASE.pcapng")" -eq 32 ]
do
	echo "Waiting for packet dumper to start... $i"
	sleep 1
	i=$((i+1))
	if [ $i -eq 10 ]; then
		break
	fi
done
kill $PID
