summaryrefslogtreecommitdiffstats
path: root/ttcn3-tcpdump-start.sh
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2018-02-15 16:01:50 +0100
committerHarald Welte <laforge@gnumonks.org>2018-02-15 17:22:52 +0000
commit8fdd3130fe19d813ca9d5779b91f248d0476efc3 (patch)
treedb4e0105d34159f3d3ee4deb1c1546cb449813f8 /ttcn3-tcpdump-start.sh
parentb01d313b83f2a1b6038e2ab063fe3f157deeaccc (diff)
ttcn3-tcpdump-start.sh: Wait for tcpdump to start recording
We generate some fake transit and we wait until we catch tcpdump already saved some packet into the pcap file, this way making sure it is already recording before starting the test. The -U flag (--packet-buffered) is added to increase the chances to sleep less time waiting for stuff being saved into the pcap file. According to tcpdump manual: """ If the -w option is specified, make the saved raw packet output ``packet-buffered''; i.e., as each packet is saved, it will be written to the output file, rather than being written only when the output buffer fills. """ Change-Id: I91cfd84ff5356857a13af1901abfe2204a93f76d
Diffstat (limited to 'ttcn3-tcpdump-start.sh')
-rwxr-xr-xttcn3-tcpdump-start.sh19
1 files changed, 14 insertions, 5 deletions
diff --git a/ttcn3-tcpdump-start.sh b/ttcn3-tcpdump-start.sh
index 10e8ab4..0ce88e9 100755
--- a/ttcn3-tcpdump-start.sh
+++ b/ttcn3-tcpdump-start.sh
@@ -1,6 +1,7 @@
#!/bin/sh
PIDFILE=/tmp/tcpdump.pid
+TCPDUMP=/usr/sbin/tcpdump
TESTCASE=$1
if [ "z$TTCN3_PCAP_PATH" = "z" ]; then
@@ -15,20 +16,28 @@ fi
# NOTE: This requires you to be root or something like
# "laforge ALL=NOPASSWD: /usr/sbin/tcpdump, /bin/kill" in your sudoers file
if [ "$(id -u)" = "0" ]; then
- CMD=/usr/sbin/tcpdump
+ CMD=$TCPDUMP
else
- CMD="sudo /usr/sbin/tcpdump"
+ CMD="sudo $TCPDUMP"
fi
-$CMD -s 0 -n -i any -w "$TTCN3_PCAP_PATH/$TESTCASE.pcap" >$TTCN3_PCAP_PATH/$TESTCASE.pcap.log 2>&1 &
+$CMD -U -s 0 -n -i any -w "$TTCN3_PCAP_PATH/$TESTCASE.pcap" >$TTCN3_PCAP_PATH/$TESTCASE.pcap.log 2>&1 &
PID=$!
echo $PID > $PIDFILE
-# Wait until tcpdump creates the pcap file to give it some time to start listenting.
+# Wait until tcpdump creates the pcap file and starts recording.
+# We generate some traffic until we see tcpdump catches it.
# Timeout is 10 seconds.
+ping 127.0.0.1 >/dev/null 2>&1 &
+PID=$!
i=0
-while [ ! -f "$TTCN3_PCAP_PATH/$TESTCASE.pcap" ] && [ $i -lt 10 ]
+while [ ! -f "$TTCN3_PCAP_PATH/$TESTCASE.pcap" ] ||
+ [ "$($TCPDUMP -r "$TTCN3_PCAP_PATH/$TESTCASE.pcap" 2>/dev/null | wc -l)" -eq 0 ]
do
echo "Waiting for tcpdump to start... $i"
sleep 1
i=$((i+1))
+ if [ $i -eq 10 ]; then
+ break
+ fi
done
+kill $PID