- README §12.7 — журнал этапа (расчёт 16+2, таблица прогонов, находка overrun) - README §10 — перенумерация: п.6=group-FEC, ARQ/FDD→п.7, туннель→п.8, видео→п.9 - README §9 — техдолг #6 обновлён (group-FEC закрывает симплекс-потери) - docs/BENCHMARK.md, CLAUDE.md, test_file_link.sh — соук-точка -p 4000 - transmitter.c — снят -Wdiscarded-qualifiers на crc_generate_key (const-каст)
79 lines
4.2 KiB
Bash
Executable File
79 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# test_file_link.sh — e2e-тест: файл → Pluto A → эфир → Pluto B → md5
|
||
# Использование: scripts/test_file_link.sh [ipA] [ipB] [размер_КБ]
|
||
# По умолчанию: адреса из toolchain.env, файл 1024 КБ, симплекс 915 МГц.
|
||
#
|
||
# ВНИМАНИЕ: сначала кабель + аттенюатор 30–40 дБ (TX gain −40)!
|
||
set -euo pipefail
|
||
source "$(dirname "$0")/../toolchain.env"
|
||
|
||
A="${1:-$PLUTO_A}" # передатчик
|
||
B="${2:-$PLUTO_B}" # приёмник
|
||
SIZE_KB="${3:-1024}"
|
||
|
||
FREQ=915000000
|
||
RATE=1920000 # НЕ поднимать: бюджет CPU, docs/BENCHMARK.md
|
||
BW=1500000
|
||
TXGAIN="${TXGAIN:--30}" # OTA: переопредели, напр. TXGAIN=-20 scripts/test_file_link.sh
|
||
FEC="${FEC:-rs8}" # rs8 | none — фаза 3.2 гоняет сначала none, потом rs8
|
||
PAUSE="${PAUSE:-3000}" # пауза TX между кадрами, мкс. §12.6: `-p 3000` чист на
|
||
# коротких (≤1 МБ). §12.7: на 10 МБ-соуке ядро 0 срывается
|
||
# (~60 Overrun) — для длинных/group-FEC ставь PAUSE=4000.
|
||
# Ниже ~2500 — Overrun на ядре 0 сразу
|
||
GROUPFEC="${GROUPFEC:-1}" # 1 = групповой стирающий FEC 16+2 (§12.7): TX шлёт -G,
|
||
# RX автодетектит по hdr[11]. 0 = legacy (потери = дыры)
|
||
[ "$GROUPFEC" = 1 ] && GFLAG="-G" || GFLAG=""
|
||
# Group-FEC: +12.5% overhead → ~107 КБ/с (SIZE_KB/85); legacy — ~120 (SIZE_KB/95)
|
||
if [ "$GROUPFEC" = 1 ]; then TIMEOUT=$(( SIZE_KB / 85 + 20 )); else TIMEOUT=$(( SIZE_KB / 95 + 20 )); fi
|
||
|
||
if command -v sshpass >/dev/null; then
|
||
SSH=(sshpass -p "$PLUTO_PASS" ssh -o StrictHostKeyChecking=no)
|
||
SCP=(sshpass -p "$PLUTO_PASS" scp -O -o StrictHostKeyChecking=no)
|
||
else
|
||
SSH=(ssh); SCP=(scp -O)
|
||
echo "подсказка: apt install sshpass — и пароль вводить не придётся"
|
||
fi
|
||
|
||
echo "=== [1/5] Тестовый файл ${SIZE_KB} КБ ==="
|
||
dd if=/dev/urandom of=/tmp/link_test.bin bs=1024 count="$SIZE_KB" status=none
|
||
MD5_SRC=$(md5sum /tmp/link_test.bin | cut -d' ' -f1)
|
||
echo "md5: $MD5_SRC"
|
||
|
||
echo "=== [2/5] Заливка файла на Pluto A ($A) ==="
|
||
"${SCP[@]}" /tmp/link_test.bin "root@$A:/tmp/"
|
||
|
||
echo "=== [3/5] Старт приёмника на Pluto B ($B), таймаут ${TIMEOUT}с ==="
|
||
# busybox прошивки v0.38 без `timeout` → сторожевой sleep+kill на самой плате
|
||
"${SSH[@]}" "root@$B" \
|
||
"rm -f /tmp/out.bin; /tmp/receiver -f $FREQ -r $RATE \
|
||
-b $BW -c $FEC -u local: > /tmp/out.bin 2>/tmp/rx.log & \
|
||
RXP=\$!; (sleep $TIMEOUT; kill \$RXP 2>/dev/null) & wait \$RXP" &
|
||
RX_PID=$!
|
||
sleep 3 # дать RX прогреться до старта TX
|
||
|
||
echo "=== [4/5] Передача с Pluto A ==="
|
||
"${SSH[@]}" "root@$A" \
|
||
"cat /tmp/link_test.bin | /tmp/transmitter -f $FREQ -r $RATE -b $BW \
|
||
-g $TXGAIN -p $PAUSE -c $FEC $GFLAG -u local: 2>/tmp/tx.log"
|
||
sleep 3 # дохлебать хвост эфира
|
||
"${SSH[@]}" "root@$B" "killall receiver 2>/dev/null || true"
|
||
wait "$RX_PID" 2>/dev/null || true
|
||
|
||
echo "=== [5/5] Сверка ==="
|
||
MD5_DST=$("${SSH[@]}" "root@$B" "md5sum /tmp/out.bin 2>/dev/null | cut -d' ' -f1" || echo "нет_файла")
|
||
SIZE_DST=$("${SSH[@]}" "root@$B" "wc -c < /tmp/out.bin 2>/dev/null" || echo 0)
|
||
|
||
echo "источник: $MD5_SRC ($((SIZE_KB*1024)) байт)"
|
||
echo "приёмник: $MD5_DST ($SIZE_DST байт)"
|
||
|
||
if [ "$MD5_SRC" = "$MD5_DST" ]; then
|
||
echo "РЕЗУЛЬТАТ: OK — файл передан без искажений"
|
||
else
|
||
echo "РЕЗУЛЬТАТ: FAIL"
|
||
echo "Диагностика (README §11):"
|
||
echo " - размер меньше исходного → потерянные кадры (нет ARQ, техдолг #6):"
|
||
echo " смотри лог RX и разрывы seq"
|
||
echo " - размер равен, md5 нет → техдолг #1 (header_len=12?) или #3"
|
||
echo " - размер 0 → RX не поймал ничего: частота/усиление/кабель"
|
||
"${SSH[@]}" "root@$B" "tail -5 /tmp/rx.log" || true
|
||
fi |