blob: 9b7a8b52bead737e48cfd6b4394179747bdf12a6 [file] [log] [blame]
Harald Weltee0571462018-02-14 15:42:14 +01001#!/bin/sh
2
Pau Espin Pedrolad931f22019-10-02 13:00:51 +02003PIDFILE_PCAP=/tmp/pcap.pid
Oliver Smithfbf33452021-12-16 12:44:42 +01004TCPDUMP=$(command -v tcpdump)
5DUMPCAP=$(command -v dumpcap)
Pau Espin Pedrolad931f22019-10-02 13:00:51 +02006
7PIDFILE_NETCAT=/tmp/netcat.pid
Oliver Smithfbf33452021-12-16 12:44:42 +01008NETCAT=$(command -v nc)
Pau Espin Pedrolad931f22019-10-02 13:00:51 +02009GSMTAP_PORT=4729
10
Harald Weltee0571462018-02-14 15:42:14 +010011TESTCASE=$1
12
Pau Espin Pedrolad931f22019-10-02 13:00:51 +020013kill_rm_pidfile() {
14 if [ -e $1 ]; then
15 kill "$(cat "$1")"
16 rm $1
17 fi
18}
19
Neels Hofmeyrced8acf2019-02-26 05:03:22 +010020echo "------ $TESTCASE ------"
21date
22
Harald Weltee0571462018-02-14 15:42:14 +010023if [ "z$TTCN3_PCAP_PATH" = "z" ]; then
24 TTCN3_PCAP_PATH=/tmp
25fi
26
Pau Espin Pedrolad931f22019-10-02 13:00:51 +020027kill_rm_pidfile $PIDFILE_NETCAT
28kill_rm_pidfile $PIDFILE_PCAP
Harald Weltee0571462018-02-14 15:42:14 +010029
Maxe5214452019-03-14 18:15:27 +010030if [ "$(id -u)" = "0" ]; then
31 CMD="$TCPDUMP -U"
32else
Harald Weltee0571462018-02-14 15:42:14 +010033# NOTE: This requires you to be root or something like
34# "laforge ALL=NOPASSWD: /usr/sbin/tcpdump, /bin/kill" in your sudoers file
Maxe5214452019-03-14 18:15:27 +010035 CMD="sudo $TCPDUMP -U"
Harald Weltee0571462018-02-14 15:42:14 +010036fi
Max81487c82019-03-18 14:18:31 +010037
38if [ -x $DUMPCAP ]; then
39 CAP_ERR="1"
40 if [ -x /sbin/setcap ]; then
41 # N. B: this check requires libcap2-bin package
Harald Welte5b11d912020-12-11 15:33:48 +010042 /sbin/setcap -q -v 'cap_net_admin,cap_net_raw=pie' $DUMPCAP
Max81487c82019-03-18 14:18:31 +010043 CAP_ERR="$?"
44 fi
45 if [ -u $DUMPCAP -o "$CAP_ERR" = "0" ]; then
46 CMD="$DUMPCAP -q"
47 else
48 echo "NOTE: unable to use dumpcap due to missing capabilities or suid bit"
49 fi
50fi
51
Pau Espin Pedrolad931f22019-10-02 13:00:51 +020052# Create a dummy sink for GSMTAP packets
53$NETCAT -l -u -k -p $GSMTAP_PORT >/dev/null 2>$TESTCASE.netcat.stderr &
54PID=$!
55echo $PID > $PIDFILE_NETCAT
56
Maxe5214452019-03-14 18:15:27 +010057$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 +010058PID=$!
Pau Espin Pedrolad931f22019-10-02 13:00:51 +020059echo $PID > $PIDFILE_PCAP
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010060
Maxe5214452019-03-14 18:15:27 +010061# Wait until packet dumper creates the pcap file and starts recording.
62# We generate some traffic until we see packet dumper catches it.
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010063# Timeout is 10 seconds.
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010064ping 127.0.0.1 >/dev/null 2>&1 &
65PID=$!
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010066i=0
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010067while [ ! -f "$TTCN3_PCAP_PATH/$TESTCASE.pcap" ] ||
Alexander Couzensd1f40952018-05-12 16:52:59 +020068 [ "$(stat -c '%s' "$TTCN3_PCAP_PATH/$TESTCASE.pcap")" -eq 32 ]
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010069do
Maxe5214452019-03-14 18:15:27 +010070 echo "Waiting for packet dumper to start... $i"
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010071 sleep 1
72 i=$((i+1))
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010073 if [ $i -eq 10 ]; then
74 break
75 fi
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010076done
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010077kill $PID