blob: 395941d41447d32a8d1fe1c67ac140703ca0d434 [file] [log] [blame]
Harald Weltee0571462018-02-14 15:42:14 +01001#!/bin/sh
2
3PIDFILE=/tmp/tcpdump.pid
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +01004TCPDUMP=/usr/sbin/tcpdump
Harald Weltee0571462018-02-14 15:42:14 +01005TESTCASE=$1
6
7if [ "z$TTCN3_PCAP_PATH" = "z" ]; then
8 TTCN3_PCAP_PATH=/tmp
9fi
10
11if [ -e $PIDFILE ]; then
12 kill "$(cat "$PIDFILE")"
13 rm $PIDFILE
14fi
15
16# NOTE: This requires you to be root or something like
17# "laforge ALL=NOPASSWD: /usr/sbin/tcpdump, /bin/kill" in your sudoers file
18if [ "$(id -u)" = "0" ]; then
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010019 CMD=$TCPDUMP
Harald Weltee0571462018-02-14 15:42:14 +010020else
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010021 CMD="sudo $TCPDUMP"
Harald Weltee0571462018-02-14 15:42:14 +010022fi
Alexander Couzensd1f40952018-05-12 16:52:59 +020023$CMD -U -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 +010024PID=$!
25echo $PID > $PIDFILE
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010026
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010027# Wait until tcpdump creates the pcap file and starts recording.
28# We generate some traffic until we see tcpdump catches it.
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010029# Timeout is 10 seconds.
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010030ping 127.0.0.1 >/dev/null 2>&1 &
31PID=$!
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010032i=0
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010033while [ ! -f "$TTCN3_PCAP_PATH/$TESTCASE.pcap" ] ||
Alexander Couzensd1f40952018-05-12 16:52:59 +020034 [ "$(stat -c '%s' "$TTCN3_PCAP_PATH/$TESTCASE.pcap")" -eq 32 ]
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010035do
36 echo "Waiting for tcpdump to start... $i"
37 sleep 1
38 i=$((i+1))
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010039 if [ $i -eq 10 ]; then
40 break
41 fi
Pau Espin Pedrolb01d3132018-02-15 14:43:58 +010042done
Pau Espin Pedrol8fdd3132018-02-15 16:01:50 +010043kill $PID