uzbek-plus/logs/beeline1/bee-data.sh
q 105bef466a Project Aurora: mainline ARM64 Linux on JZ08AU (MSM8916) LTE modem
Sanitized research log, build/reproducibility docs, DTS, kernel configs,
patches, initramfs sources, bootchain migration plans and test logs.
B5 direct boot PASS; B6 modem lifecycle in progress.
No dumps, NV/EFS, vendor firmware or device identifiers included.
2026-09-30 17:23:18 +03:00

72 lines
7.8 KiB
Bash

#!/bin/sh
# Beeline P4-P9: ONE MM simple-connect (internet.beeline.ru, beeline/beeline PAP, IPv4); /32 host routes via wwan0 in main only
# (no default route, kernel has no policy routing), DNS via Beeline DNS, ping, curl HTTP/HTTPS, tcpdump on wwan0,
# BAM-DMUX/MPSS monitoring, clean disconnect, NV/eMMC check. usb0 untouched.
O=/tmp/beedata; 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"
CU="env LD_LIBRARY_PATH=/tmp/cu/usr/lib /tmp/cu/usr/bin/curl --cacert /tmp/cu/etc/ssl/certs/ca-certificates.crt"
W='code=%{http_code} remote=%{remote_ip}:%{remote_port} local=%{local_ip} ssl_verify=%{ssl_verify_result} t_connect=%{time_connect} t_total=%{time_total} size=%{size_download}\n'
APNARG="apn=internet.beeline.ru,user=beeline,password=beeline,allowed-auth=pap,ip-type=ipv4"
nv > $O/nv-before.txt; cat /sys/block/mmcblk0/stat > $O/stat-before.txt; wc -l < /tmp/rmtfs.log > $O/rmtfs-offset.txt
dmesg | wc -l > $O/dmesg-offset.txt
{ mmcli -m 0; mmcli -m 0 --list-bearers; pm; ip link show wwan0; ip route; } 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 \
&& grep -q "MNC: '99'" $O/pre-qmi.txt || { echo "PRECHECK FAILED"; tar -C /tmp -cf /tmp/beedata.tar beedata; echo BEEDATA-STOPPED; exit 1; }
# --- P4: single connect
{ pm; echo "### $(t) mmcli -m 0 --simple-connect=\"$APNARG\""; timeout 150 mmcli -m 0 --simple-connect="$APNARG" 2>&1; echo "### rc=$?"; pm; } > $O/connect.txt
BR=$(grep -oE "Bearer/[0-9]+" $O/connect.txt | tail -1 | cut -d/ -f2)
{ [ -n "$BR" ] && mmcli -b $BR; mmcli -m 0; } 2>&1 | mask > $O/bearer.txt
grep -A40 -iE "simple connect|connecting|start network|wds" /tmp/mm.log | grep -iE "apn|auth|ip.?type|raw-ip|a2-mux|call end|error|verbose|reason|profile" | tail -60 | mask > $O/mm-connect.txt
grep -q "^### rc=0" $O/connect.txt && [ -n "$BR" ] && mmcli -b $BR | grep -q "connected: yes" \
|| { echo "CONNECT FAILED"; tail -150 /tmp/mm.log | mask > $O/mm-tail.txt; nv > $O/nv-after.txt; cat /sys/block/mmcblk0/stat > $O/stat-after.txt
tar -C /tmp -cf /tmp/beedata.tar beedata; echo BEEDATA-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 - STOP"; mmcli -m 0 --simple-disconnect; tar -C /tmp -cf /tmp/beedata.tar beedata; echo BEEDATA-STOPPED; exit 1; }
RT="77.88.8.8 1.1.1.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; pm
for h in $RT; do ip route add $h/32 dev wwan0 src $A; echo "rt $h rc=$?"; done; ip addr show wwan0; echo "--- main:"; ip route
for h in 77.88.8.8 1.1.1.1 $D1 172.16.42.2 8.8.4.4; do echo "--- ip route get $h"; ip route get $h 2>&1; done; } > $O/cfg.txt 2>&1
$TD -i wwan0 -n -s 160 -w $O/wwan0.pcap > $O/tcpdump.log 2>&1 &
TDP=$!; sleep 2
# --- P6.1 DNS via Beeline DNS
{ for s in $D1 $D2; do for n in ya.ru www.google.com; do echo "### $(t) nslookup $n $s"; nslookup $n $s 2>&1; done; done; pm; } > $O/dns.txt 2>&1
ips() { awk -v n="$1" '/^### .*nslookup/{c=($4==n)} c && /^Address[^:]*: *[0-9.]+$/{print $NF}' $O/dns.txt | sort -u | head -4; }
YA=$(ips ya.ru); GO=$(ips www.google.com); YA1=$(echo $YA | cut -d' ' -f1); GO1=$(echo $GO | cut -d' ' -f1)
{ echo "ya.ru: $YA"; echo "www.google.com: $GO"; for y in $YA $GO; do ip route add $y/32 dev wwan0 src $A; echo "rt $y rc=$?"; done
for y in $YA1 $GO1; do echo "--- ip route get $y"; ip route get $y; done; } > $O/routes2.txt 2>&1
printf 'nameserver %s\n' $D1 > /etc/resolv.conf; [ -n "$D2" ] && printf 'nameserver %s\n' $D2 >> /etc/resolv.conf
# --- P6.2 ICMP
{ for h in 77.88.8.8 1.1.1.1; do echo "### $(t) ping $h"; ping -c 5 -W 3 $h 2>&1; done; pm; } > $O/ping.txt 2>&1
# --- P6.3 HTTP/HTTPS
{ echo "### $(t) curl https://ya.ru/ (resolve $YA1)"; timeout 40 $CU --interface wwan0 -4 --connect-timeout 10 -sS --resolve ya.ru:443:$YA1 -D - -o /dev/null -w "$W" https://ya.ru/ 2>&1; echo "rc=$?"
echo "### $(t) curl http://ya.ru/"; timeout 40 $CU --interface wwan0 -4 --connect-timeout 10 -sS --resolve ya.ru:80:$YA1 -D - -o /dev/null -w "$W" http://ya.ru/ 2>&1; echo "rc=$?"
echo "### $(t) curl https://www.google.com/generate_204 (resolve $GO1)"; timeout 40 $CU --interface wwan0 -4 --connect-timeout 10 -sS --resolve www.google.com:443:$GO1 -D - -o /dev/null -w "$W" https://www.google.com/generate_204 2>&1; echo "rc=$?"
echo "### $(t) curl https://1.1.1.1/cdn-cgi/trace"; timeout 40 $CU --interface wwan0 -4 --connect-timeout 10 -sS -w "$W" https://1.1.1.1/cdn-cgi/trace 2>&1 | grep -vE "^(uag|visit_scheme|sliver|kex)="; echo "rc=$?"
pm; } > $O/http.txt 2>&1
{ mmcli -b $BR; mmcli -m 0 --signal-get; timeout 20 qmicli -p -d /dev/wwan0qmi0 --nas-get-signal-info; timeout 20 qmicli -p -d /dev/wwan0qmi0 --nas-get-rf-band-info; timeout 20 qmicli -p -d /dev/wwan0qmi0 --nas-get-cell-location-info; } 2>&1 | mask > $O/during.txt
sleep 2; kill $TDP; sleep 1
{ $TD -r $O/wwan0.pcap -n 2>&1 | head -80; 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)"
echo "dns(udp53)=$($TD -r $O/wwan0.pcap -n udp port 53 2>/dev/null | wc -l) icmp=$($TD -r $O/wwan0.pcap -n icmp 2>/dev/null | wc -l) tcp443=$($TD -r $O/wwan0.pcap -n tcp port 443 2>/dev/null | wc -l) tcp80=$($TD -r $O/wwan0.pcap -n tcp port 80 2>/dev/null | wc -l)"
echo "syn=$($TD -r $O/wwan0.pcap -n 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn' 2>/dev/null | wc -l) synack=$($TD -r $O/wwan0.pcap -n 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)' 2>/dev/null | wc -l)"
echo "tls_handshake_records=$($TD -r $O/wwan0.pcap -n 'tcp port 443 and (tcp[((tcp[12:1] & 0xf0) >> 2):1] = 0x16)' 2>/dev/null | wc -l)"; } > $O/tcpdump-summary.txt 2>&1
# --- P9 clean disconnect
{ 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 $GO; 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=$?"
: > /etc/resolv.conf; 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 | tail -n +$(( $(cat $O/dmesg-offset.txt) + 1 )) > $O/dmesg-delta.txt
dmesg | grep -iE "Failed to resume|-110|-22|Resource temporarily|Oops|panic|fatal|watchdog|crash|ssr" > $O/dmesg-errs.txt; echo "errs=$(wc -l < $O/dmesg-errs.txt)" >> $O/dmesg-errs.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
awk '{print "writes_completed="$5" sectors_written="$7}' $O/stat-after.txt >> $O/nv-result.txt
tar -C /tmp -cf /tmp/beedata.tar beedata; echo BEEDATA-DONE