#!/bin/sh # B6N harness: ONE modem start (rmtfs + MSS once, registration <= T_REG), then NB bearer cycles without MSS/rmtfs/MM/radio restart: # cycle 1 = the connect done by 'start'; cycles 2..NB = 'start' (reuses rmtfs/MSS/MM, simple-connect only); each: datatest -> 'disconnect'. # Then full clean shutdown ('stop'). Stops at the first failure (snapshot before any stop). RAM only. NAME=$1; NB=${2:-6}; O=/tmp/$NAME; mkdir -p $O; M="sh /tmp/aurora-modem"; D=/tmp/aurora-modem.d export MODEM_CONF=/tmp/n.conf MODEM_KEEP_ON_FAIL=1 B=/sys/bus/platform/devices/4080000.remoteproc:bam-dmux; RPS=/sys/class/remoteproc/remoteproc0/state mask() { sed -E 's/([0-9]{6,})([0-9]{4})/******\2/g'; } up() { cut -d' ' -f1 /proc/uptime; } mk() { echo "<5>[$NAME] $*" > /dev/kmsg; echo "[$(up)] $*" | tee -a $O/run.log; } nv() { for want in modemst1 modemst2 fsg fsc persist; do for p in /sys/class/block/mmcblk0p*; do [ "$(sed -n 's/^PARTNAME=//p' $p/uevent)" = "$want" ] && echo "$want $(basename $p) $(sha256sum /dev/$(basename $p) | cut -d' ' -f1)"; done; done; } ERR='Failed to resume|-110|[ (=]-22\b|EAGAIN|Resource temporarily|crash detected|fatal error|[Ww]atchdog|wdog|Oops|Kernel panic|Unable to handle|BUG:' nv > $O/nv-before.txt; cat /sys/block/mmcblk0/stat > $O/stat-before.txt; D0=$(dmesg | wc -l); LO=$(wc -l < $D/lifecycle.log 2>/dev/null || echo 0) printf 'cycle\tconnect\tipv4\tdns\tping\thttp\thttps\tdisconnect\tstale_routes\twwan_up\tbam_after\tmss\trmtfs\tmm\tusb\temmc_w\tdmesg_err\n' > $O/n-table.tsv FAIL= for c in $(seq 1 $NB); do X=$O/b$c; mkdir -p $X; mk "BEARER $c begin: mss=$(cat $RPS) rmtfs='$(pidof rmtfs)' mm='$(pidof ModemManager)'" lo=$(wc -l < $D/lifecycle.log 2>/dev/null || echo 0) $M start > $X/start.out 2>&1; SR=$?; mk "BEARER $c start/connect rc=$SR" cp $D/reg-trans.tsv $D/reg-denied-count $D/reg-*.txt $X/ 2>/dev/null; cp $D/ipcfg $X/ 2>/dev/null if [ $SR != 0 ]; then mk "BEARER $c FAILED in $(cat $D/state) - snapshot BEFORE stop"; sh /tmp/j-snap.sh $X/snap > $X/snap.out 2>&1 FAIL="start/connect in $(cat $D/state)"; tail -n +$((lo+1)) $D/lifecycle.log | mask > $X/lifecycle.log; break; fi IP=$(sed -n 's/^A=//p' $X/ipcfg) sh /tmp/aurora-modem-datatest $X/dt > $X/dt.out 2>&1; DR=$?; V=$(cat $X/dt/verdict.txt 2>/dev/null); mk "BEARER $c $V" $M disconnect > $X/disc.out 2>&1; PR=$?; mk "BEARER $c disconnect rc=$PR" ST=$(ip route | grep -c " dev wwan"); WU=$(for d in /sys/class/net/wwan*; do [ $(( $(cat $d/flags) & 1 )) -ne 0 ] && echo ${d##*/}; done | tr '\n' ' ') WA=$(for d in /sys/class/net/wwan*; do ip -4 addr show ${d##*/} | grep -q "inet " && echo ${d##*/}; done | tr '\n' ' ') U=$(ping -c2 -W2 172.16.42.2 >/dev/null 2>&1 && echo ok || echo FAIL); E=$(dmesg | tail -n +$((D0+1)) | grep -cE "$ERR") tail -n +$((lo+1)) $D/lifecycle.log | mask > $X/lifecycle.log printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' $c "rc=$SR" "${IP:--}" "$(echo "$V" | grep -oE 'dns=[0-9]')" "$(echo "$V" | grep -oE 'ping=[0-9+]*')" \ "$(echo "$V" | grep -oE 'http=code=[0-9]*')" "$(echo "$V" | grep -oE 'https=\[[^]]*\]\([^)]*\)')" "rc=$PR" $ST "${WU:-none}${WA:+ addr:$WA}" "$(cat $B/power/runtime_status)" \ "$(cat $RPS)" "$(pidof rmtfs)" "$(pidof ModemManager)" $U "$(awk '{print $5"/"$7}' /sys/block/mmcblk0/stat)" $E >> $O/n-table.tsv F=""; [ $DR = 0 ] || F="$F data"; [ $PR = 0 ] || F="$F disconnect"; [ $ST = 0 ] || F="$F stale-routes"; [ -z "$WU$WA" ] || F="$F wwan" [ $U = ok ] || F="$F usb"; [ $E = 0 ] || F="$F dmesg-errs"; awk '{exit !($5==0 && $7==0)}' /sys/block/mmcblk0/stat || F="$F emmc-writes" [ "$(cat $RPS)" = running ] || F="$F mss-$(cat $RPS)"; [ -n "$(pidof rmtfs)" ] || F="$F rmtfs-gone" mk "BEARER $c RESULT ${F:-PASS}" [ -z "$F" ] || { FAIL="bearer $c:$F"; mk "STOP: bearer $c failure:$F (no shutdown before snapshot)"; sh /tmp/j-snap.sh $X/snap > $X/snap.out 2>&1; break; } sleep 5 done mk "SHUTDOWN (full clean stop): $(cat $D/state)"; $M stop > $O/stop.out 2>&1; SP=$?; sleep 2 dmesg | tail -n +$((D0+1)) > $O/dmesg-delta.txt; grep -E "$ERR" $O/dmesg-delta.txt > $O/dmesg-errs.txt nv > $O/nv-after.txt; cat /sys/block/mmcblk0/stat > $O/stat-after.txt; cmp -s $O/nv-before.txt $O/nv-after.txt && NVR=unchanged || NVR=CHANGED tail -n +$((LO+1)) $D/lifecycle.log | mask > $O/lifecycle.log; cp $D/rmtfs.log $O/rmtfs.log 2>/dev/null for f in $D/mm-*.log; do [ -f $f ] && mask < $f > $O/$(basename $f); done mk "FINAL: ${FAIL:-all bearer cycles PASS}; stop rc=$SP; nv $NVR; emmc $(awk '{print "w="$5" s="$7}' $O/stat-after.txt); mss=$(cat $RPS) rmtfs='$(pidof rmtfs)' mm='$(pidof ModemManager)' bam=$(cat $B/power/runtime_status) wwan-up=$(for d in /sys/class/net/wwan*; do [ $(( $(cat $d/flags) & 1 )) -ne 0 ] && echo ${d##*/}; done | tr '\n' ' ') dmesg-errs=$(wc -l < $O/dmesg-errs.txt) usb=$(ping -c2 -W2 172.16.42.2 >/dev/null 2>&1 && echo ok || echo FAIL)" tar -C /tmp -cf /tmp/$NAME.tar $NAME; mk "$NAME-RUN-END"