Compare commits

..

2 Commits

Author SHA1 Message Date
Robert McMahon b80a9d818b Fix test_monitor_tshark.sh to always show counters
- Add message that capture may take time
- Always display packet and PLCP counts
- Better parsing of tshark output
- Separate warnings/errors from packet data
- Show note if packets captured but no PLCP headers

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 13:52:07 -08:00
Robert McMahon cc180b7868 Improve test_monitor_tshark.sh output and error handling
- Add progress messages and debug output
- Show tshark warnings/errors
- Always display counters even if no packets captured
- Better handling of empty output
- Show sample packets when available
- Add DLT check before capture

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 13:51:54 -08:00
1 changed files with 46 additions and 13 deletions

View File

@ -80,15 +80,35 @@ iw dev "$INTERFACE" info | grep -E "(type|channel)" || echo "Could not verify"
# Check DLT with tshark (capture for 1 second) # Check DLT with tshark (capture for 1 second)
echo "" echo ""
echo "Checking Data Link Type (1 second test capture)..." echo "Checking Data Link Type (1 second test capture)..."
TEST_OUTPUT=$(timeout 1 tshark -i "$INTERFACE" -T fields -e frame.number -e radiotap.present 2>&1) echo "(This may take up to 2 seconds if no packets are present)"
PACKET_COUNT=$(echo "$TEST_OUTPUT" | grep -E '^[0-9]+' | wc -l || echo "0")
PLCP_COUNT=$(echo "$TEST_OUTPUT" | grep -E '^[0-9]+.*[0-9]' | wc -l || echo "0") # Use timeout with -c to limit packets and avoid hanging
echo "$TEST_OUTPUT" | tail -5 || true # Capture both stdout and stderr
echo "Captured $PACKET_COUNT packet(s) in 1 second" TEST_OUTPUT=$(timeout 2 tshark -i "$INTERFACE" -c 100 -T fields -e frame.number -e radiotap.present 2>&1 || true)
if [ "$PLCP_COUNT" -gt 0 ]; then TEST_EXIT_CODE=${PIPESTATUS[0]}
echo "PLCP headers: $PLCP_COUNT (radiotap present)"
else # Show any warnings/errors from tshark (but not packet data)
echo "PLCP headers: 0 (no radiotap headers detected)" echo "$TEST_OUTPUT" | grep -E "(Running as|tshark:|Warning|Error|Capturing)" || true
# Count packets (lines starting with a number, excluding error messages)
PACKET_LINES=$(echo "$TEST_OUTPUT" | grep -E '^[0-9]+' || true)
PACKET_COUNT=$(echo "$PACKET_LINES" | wc -l || echo "0")
# Count lines with both frame.number and radiotap.present (non-empty second field)
PLCP_COUNT=$(echo "$PACKET_LINES" | awk -F'\t' 'NF >= 2 && $1 != "" && $2 != "" && $2 != "0" && $2 != "-" {count++} END {print count+0}' || echo "0")
# Show sample output
if [ "$PACKET_COUNT" -gt 0 ]; then
echo "Sample packets:"
echo "$PACKET_LINES" | head -3
fi
echo ""
echo "Test capture results:"
echo " Packets captured: $PACKET_COUNT"
echo " PLCP headers: $PLCP_COUNT"
if [ "$PLCP_COUNT" -eq 0 ] && [ "$PACKET_COUNT" -gt 0 ]; then
echo " Note: Packets captured but no radiotap headers (may be using DLT_IEEE802_11 instead of DLT_IEEE802_11_RADIO)"
fi fi
echo "" echo ""
@ -97,6 +117,7 @@ echo "Press Ctrl+C to stop early"
echo "" echo ""
# Capture for specified duration and count packets # Capture for specified duration and count packets
echo "Capturing packets for $DURATION seconds..."
CAPTURE_OUTPUT=$(timeout "$DURATION" tshark -i "$INTERFACE" -n -T fields \ CAPTURE_OUTPUT=$(timeout "$DURATION" tshark -i "$INTERFACE" -n -T fields \
-e frame.number \ -e frame.number \
-e frame.time \ -e frame.time \
@ -107,16 +128,28 @@ CAPTURE_OUTPUT=$(timeout "$DURATION" tshark -i "$INTERFACE" -n -T fields \
-e wlan.fc.type_subtype \ -e wlan.fc.type_subtype \
-e radiotap.present \ -e radiotap.present \
2>&1) 2>&1)
CAPTURE_EXIT_CODE=$?
# Display first 50 lines of output # Show any warnings/errors
echo "$CAPTURE_OUTPUT" | head -50 echo "$CAPTURE_OUTPUT" | grep -E "(tshark:|Warning|Error)" | head -5 || true
# Count total packets captured # Display first 50 lines of packet output
PACKET_LINES=$(echo "$CAPTURE_OUTPUT" | grep -E '^[0-9]+' || true)
if [ -n "$PACKET_LINES" ]; then
echo ""
echo "Sample packets (first 20):"
echo "$PACKET_LINES" | head -20
else
echo ""
echo "(No packets captured)"
fi
# Count total packets captured (lines starting with a number)
FINAL_COUNT=$(echo "$CAPTURE_OUTPUT" | grep -E '^[0-9]+' | wc -l || echo "0") FINAL_COUNT=$(echo "$CAPTURE_OUTPUT" | grep -E '^[0-9]+' | wc -l || echo "0")
# Count packets with PLCP headers (radiotap present) # Count packets with PLCP headers (radiotap present)
# radiotap.present field is the 8th field (after frame.number, frame.time, wlan.sa, wlan.da, wlan.fc.type, wlan.fc.subtype, wlan.fc.type_subtype) # radiotap.present field is the 8th field (after frame.number, frame.time, wlan.sa, wlan.da, wlan.fc.type, wlan.fc.subtype, wlan.fc.type_subtype)
PLCP_COUNT=$(echo "$CAPTURE_OUTPUT" | awk -F'\t' 'NF >= 8 && $8 != "" && $8 != "0" && $8 != "-" {count++} END {print count+0}' || echo "0") PLCP_COUNT=$(echo "$CAPTURE_OUTPUT" | awk -F'\t' 'NF >= 8 && $1 != "" && $8 != "" && $8 != "0" && $8 != "-" {count++} END {print count+0}' || echo "0")
echo "" echo ""
echo "=== Capture complete ===" echo "=== Capture complete ==="