blob: 9bf3c0aa46754dfc0bd2fa6ede26d5953fd28a39 [file] [log] [blame]
Harald Weltee0571462018-02-14 15:42:14 +01001#!/bin/sh
2
Maxe5214452019-03-14 18:15:27 +01003PIDFILE=/tmp/dumper.pid
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +01004TCPDUMP=/usr/sbin/tcpdump
Max81487c82019-03-18 14:18:31 +01005DUMPCAP=/usr/bin/dumpcap
Harald Weltee0571462018-02-14 15:42:14 +01006TESTCASE=$1
7
Neels Hofmeyrced8acf2019-02-26 05:03:22 +01008echo "------ $TESTCASE ------"
9date
10
Harald Weltee0571462018-02-14 15:42:14 +010011if [ "z$TTCN3_PCAP_PATH" = "z" ]; then
12 TTCN3_PCAP_PATH=/tmp
13fi
14
15if [ -e $PIDFILE ]; then
16 kill "$(cat "$PIDFILE")"
17 rm $PIDFILE
18fi
19
Maxe5214452019-03-14 18:15:27 +010020if [ "$(id -u)" = "0" ]; then
21 CMD="$TCPDUMP -U"
22else
Harald Weltee0571462018-02-14 15:42:14 +010023# NOTE: This requires you to be root or something like
24# "laforge ALL=NOPASSWD: /usr/sbin/tcpdump, /bin/kill" in your sudoers file
Maxe5214452019-03-14 18:15:27 +010025 CMD="sudo $TCPDUMP -U"
Harald Weltee0571462018-02-14 15:42:14 +010026fi
Max81487c82019-03-18 14:18:31 +010027
28if [ -x $DUMPCAP ]; then
29 CAP_ERR="1"
30 if [ -x /sbin/setcap ]; then
31 # N. B: this check requires libcap2-bin package
32 setcap -q -v 'cap_net_admin,cap_net_raw=pie' $DUMPCAP
33 CAP_ERR="$?"
34 fi
35 if [ -u $DUMPCAP -o "$CAP_ERR" = "0" ]; then
36 CMD="$DUMPCAP -q"
37 else
38 echo "NOTE: unable to use dumpcap due to missing capabilities or suid bit"
39 fi
40fi
41
Maxe5214452019-03-14 18:15:27 +010042$CMD -s 1500 -n -i any -w "$TTCN3_PCAP_PATH/$TESTCASE.pcap" >$TTCN3_PCAP_PATH/$TESTCASE.pcap.stdout 2>&1 &
Harald Weltee0571462018-02-14 15:42:14 +010043PID=$!
44echo $PID > $PIDFILE
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010045
Maxe5214452019-03-14 18:15:27 +010046# Wait until packet dumper creates the pcap file and starts recording.
47# We generate some traffic until we see packet dumper catches it.
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010048# Timeout is 10 seconds.
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010049ping 127.0.0.1 >/dev/null 2>&1 &
50PID=$!
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010051i=0
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010052while [ ! -f "$TTCN3_PCAP_PATH/$TESTCASE.pcap" ] ||
Alexander Couzensd1f40952018-05-12 16:52:59 +020053 [ "$(stat -c '%s' "$TTCN3_PCAP_PATH/$TESTCASE.pcap")" -eq 32 ]
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010054do
Maxe5214452019-03-14 18:15:27 +010055 echo "Waiting for packet dumper to start... $i"
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010056 sleep 1
57 i=$((i+1))
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010058 if [ $i -eq 10 ]; then
59 break
60 fi
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010061done
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010062kill $PID