#!/bin/sh # B4b2 re-test for a Yandex-only T2 SIM: ONE MM simple-connect; host routes (main table, /32 only) to Yandex + T2 DNS via wwan0; # ping 77.88.8.8, DNS via T2 DNS, HTTP/HTTPS ya.ru, tcpdump on wwan0; clean disconnect. No default route, usb0 untouched. O=/tmp/b4b2mm2; mkdir -p $O; t() { cut -d' ' -f1 /proc/uptime; } mask() { sed -E 's/([0-9]{6,})([0-9]{4})/******\2/g'; } B=/sys/bus/platform/devices/4080000.remoteproc:bam-dmux pm() { echo "### $(t) PM=$(cat $B/power/runtime_status) active_ms=$(cat $B/power/runtime_active_time) rproc=$(cat /sys/class/remoteproc/remoteproc0/state)"; } 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 $(sha256sum /dev/$(basename $p) | cut -d' ' -f1)"; done; done; } TD="env LD_LIBRARY_PATH=/tmp/td/usr/lib /tmp/td/usr/bin/tcpdump" nv > $O/nv-before.txt; cat /sys/block/mmcblk0/stat > $O/stat-before.txt; wc -l < /tmp/rmtfs.log > $O/rmtfs-offset.txt { mmcli -m 0; pm; ip link show wwan0; ip route; ip rule; } 2>&1 | mask > $O/pre.txt timeout 30 qmicli -p -d /dev/wwan0qmi0 --nas-get-serving-system > $O/pre-qmi.txt 2>&1 grep -q "plugin: qcom-soc" $O/pre.txt && grep -q "Registration state: 'registered'" $O/pre-qmi.txt && grep -q "PS: 'attached'" $O/pre-qmi.txt \ && ! for b in $(mmcli -m 0 --list-bearers 2>/dev/null | grep -oE "Bearer/[0-9]+" | cut -d/ -f2); do mmcli -b $b | grep -q "connected: yes" && echo y; done | grep -q y \ || { echo "PRECHECK FAILED"; echo B4B2MM2-STOPPED; exit 1; } { pm; echo "### $(t) mmcli -m 0 --simple-connect=apn=internet,ip-type=ipv4"; timeout 150 mmcli -m 0 --simple-connect="apn=internet,ip-type=ipv4" 2>&1; echo "### rc=$?"; pm; } > $O/connect.txt BR=$(grep -oE "at bearer /org/freedesktop/ModemManager1/Bearer/[0-9]+" $O/connect.txt | grep -oE "[0-9]+$") { [ -n "$BR" ] && mmcli -b $BR; } 2>&1 | mask > $O/bearer.txt grep -q "^### rc=0" $O/connect.txt && [ -n "$BR" ] && mmcli -b $BR | grep -q "connected: yes" || { echo "CONNECT FAILED"; echo B4B2MM2-STOPPED; exit 1; } T=$(mmcli -b $BR); f() { echo "$T" | awk -F": " "/ $1:/{print \$2; exit}" | tr -d " "; } IF=$(f interface); A=$(f address); PF=$(f prefix); GW=$(f gateway); DNS=$(f dns); MTU=$(f mtu); D1=${DNS%%,*}; D2=${DNS#*,}; [ "$D2" = "$DNS" ] && D2= echo "BR=$BR IF=$IF A=$A PF=$PF GW=$GW DNS=$DNS MTU=$MTU" > $O/bearer-ip.txt [ "$IF" = wwan0 ] || { echo "UNEXPECTED IF $IF"; } RT="77.88.8.8 77.88.8.1 $D1 $D2" { ip addr add $A/$PF dev wwan0; [ -n "$MTU" ] && ip link set wwan0 mtu $MTU; ip link set wwan0 up; echo "up rc=$?"; sleep 2 for h in $RT; do ip route add $h/32 dev wwan0 src $A; done; ip addr show wwan0; echo "--- main:"; ip route for h in 77.88.8.8 $D1 172.16.42.2; do echo "--- ip route get $h"; ip route get $h; done; } > $O/cfg.txt 2>&1 $TD -i wwan0 -n -s 128 -w $O/wwan0.pcap > $O/tcpdump.log 2>&1 & TDP=$!; sleep 2 { echo "### $(t) ping 77.88.8.8"; ping -c 5 -W 3 77.88.8.8 2>&1; pm; } > $O/ping.txt 2>&1 { for s in $D1 $D2; do echo "### $(t) nslookup ya.ru $s"; nslookup ya.ru $s 2>&1; done; } > $O/dns.txt 2>&1 YA=$(sed -n '/^Name:/,$ s/^Address[^:]*: *\([0-9.]*\)$/\1/p' $O/dns.txt | sort -u | head -4) { echo "resolved ya.ru: $YA"; for y in $YA; do ip route add $y/32 dev wwan0 src $A; echo "rt $y rc=$?"; done printf 'nameserver %s\n' $D1 > /etc/resolv.conf; [ -n "$D2" ] && printf 'nameserver %s\n' $D2 >> /etc/resolv.conf echo "### $(t) wget http://ya.ru"; timeout 30 wget -S -O /dev/null http://ya.ru/ 2>&1 | head -15 echo "### $(t) wget https://ya.ru"; timeout 30 wget -S -O /dev/null https://ya.ru/ 2>&1 | head -15; pm; } > $O/http.txt 2>&1 sleep 2; kill $TDP; sleep 1 { $TD -r $O/wwan0.pcap -n 2>&1 | head -60; echo "--- totals"; echo "all=$($TD -r $O/wwan0.pcap -n 2>/dev/null | wc -l) tx(src $A)=$($TD -r $O/wwan0.pcap -n src host $A 2>/dev/null | wc -l) rx(dst $A)=$($TD -r $O/wwan0.pcap -n dst host $A 2>/dev/null | wc -l)"; } > $O/tcpdump-summary.txt 2>&1 { echo "### $(t) mmcli -m 0 --simple-disconnect"; timeout 60 mmcli -m 0 --simple-disconnect 2>&1; echo "### rc=$?"; mmcli -b $BR 2>&1 | grep -E "connected" for h in $RT $YA; do ip route del $h/32 dev wwan0 2>/dev/null; done; ip addr flush dev wwan0; ip link set wwan0 down; echo "down rc=$?" ip link show wwan0; ip route; sleep 10; pm; } > $O/disconnect.txt 2>&1 { mmcli -m 0; pm; timeout 30 qmicli -p -d /dev/wwan0qmi0 --nas-get-serving-system; } 2>&1 | mask > $O/post.txt nv > $O/nv-after.txt; cat /sys/block/mmcblk0/stat > $O/stat-after.txt tail -n +$(( $(cat $O/rmtfs-offset.txt) + 1 )) /tmp/rmtfs.log > $O/rmtfs-delta.log dmesg | grep -iE "bam|dmux|resume|-110|-22|Resource temporarily|Oops|panic|fatal|watchdog" > $O/dmesg.txt cmp -s $O/nv-before.txt $O/nv-after.txt && echo "NV BEFORE==AFTER" > $O/nv-result.txt || echo "NV DIFFERENT" > $O/nv-result.txt tar -C /tmp -cf /tmp/b4b2mm2.tar b4b2mm2; echo B4B2MM2-DONE