diff --git a/package/istoreos-files/files/etc/uci-defaults/09_istoreos b/package/istoreos-files/files/etc/uci-defaults/09_istoreos index dbc0f6ab4c..f2357edb44 100644 --- a/package/istoreos-files/files/etc/uci-defaults/09_istoreos +++ b/package/istoreos-files/files/etc/uci-defaults/09_istoreos @@ -11,7 +11,7 @@ uci -q batch <<-EOF >/dev/null EOF uci set dockerd.globals.data_root=/overlay/upper/opt/docker - +WAN_ZONE= if grep -qFw nas /proc/device-tree/chosen/default-firewall; then WAN_ZONE=`uci show firewall | grep -E '^firewall\.@zone\[[0-9]+\]\.name='"'wan'" | head -n1 | head -c -12` uci -q batch <<-EOF >/dev/null @@ -42,6 +42,22 @@ EOF fi fi +WWAN_PROTO=`uci -q get network.wwan.proto` +if [ "none" = "$WWAN_PROTO" ]; then + uci -q batch <<-EOF >/dev/null + set network.wwan.proto='dhcp' + commit network +EOF +fi + +if [ -n "$WWAN_PROTO" ]; then + [ -n "$WAN_ZONE" ] || WAN_ZONE=`uci show firewall | grep -E '^firewall\.@zone\[[0-9]+\]\.name='"'wan'" | head -n1 | head -c -12` + uci -q batch <<-EOF >/dev/null + add_list ${WAN_ZONE}.network='wwan' + commit firewall +EOF +fi + if ! grep -qFw router /proc/device-tree/chosen/default-firewall; then WAN_IF=`jsonfilter -i /etc/board.json -e '@.network.wan.device'` diff --git a/target/linux/rockchip/armv8/base-files/etc/board.d/02_network b/target/linux/rockchip/armv8/base-files/etc/board.d/02_network index fda565a275..756e97fd1d 100644 --- a/target/linux/rockchip/armv8/base-files/etc/board.d/02_network +++ b/target/linux/rockchip/armv8/base-files/etc/board.d/02_network @@ -50,7 +50,6 @@ rockchip_setup_interfaces() friendlyarm,nanopi-r6s) ucidef_set_interfaces_lan_wan 'eth0 eth2' 'eth1' ;; - linkease,easepi-r2|\ hinlink,opc-h68k|\ lunzn,fastrhino-r68s|\ lyt,t68m|\ @@ -69,6 +68,10 @@ rockchip_setup_interfaces() sinovoip,rk3568-bpi-r2pro) ucidef_set_interfaces_lan_wan 'lan0 lan1 lan2 lan3' 'eth0' ;; + linkease,easepi-r2) + ucidef_set_interfaces_lan_wan 'eth1 eth2 eth3' 'eth0' + ucidef_set_interface "wwan" device "usb4g" metric "100" protocol "none" + ;; radxa,e24c) ucidef_add_switch "switch0" \ "0:wan" "1:lan" "2:lan" "3:lan" "6t@eth0" diff --git a/target/linux/rockchip/armv8/base-files/etc/hotplug.d/usb/24-ml307r-dialup b/target/linux/rockchip/armv8/base-files/etc/hotplug.d/usb/24-ml307r-dialup new file mode 100644 index 0000000000..23d5376586 --- /dev/null +++ b/target/linux/rockchip/armv8/base-files/etc/hotplug.d/usb/24-ml307r-dialup @@ -0,0 +1,99 @@ +#!/bin/sh +# Copyright (C) 2026 jjm2473@gmail.com + +[[ "$ACTION" = bind ]] || exit +[[ "$PRODUCT" = "2ecc/3012/*" ]] || exit + +TTYNAME= +if [[ $(cat "/sys${DEVPATH}/bInterfaceNumber") = "02" ]]; then + TTYNAME=$(cat /sys${DEVPATH}/tty*/tty/tty*/uevent | grep '^DEVNAME=' | head -1 | cut -d= -f2) +fi + +LOG=/tmp/log/ml307r-at-$TTYNAME.log + +send_cmd() { + echo -ne "$2"'\r\n' >"$1" +} + +# dev, cmd, result, timeout +send_and_wait() { + send_cmd "$1" "$2" + local seconds + for seconds in $(seq 1 ${4:-1}); do + grep -qF "$3" "$LOG" && return 0 + sleep 1 + done + return 1 +} + +ping_at() { + local seconds + for seconds in $(seq 1 ${2:-1}); do + send_and_wait "$1" "AT" "OK" 1 && return 0 + sleep 1 + done + return 1 +} + +LOGPID= +clean_and_exit() { + if [[ -n "$LOGPID" ]]; then + kill "$LOGPID" 2>/dev/null + wait "$LOGPID" 2>/dev/null + fi + exit $1 +} + +# RNDIS: AT+MDIALUPCFG="mode",0 +# ECM: AT+MDIALUPCFG="mode",1 +# Dialup: AT+MDIALUP=1,1 +# Auto dialup: AT+MDIALUPCFG="auto",1 +# SIM card status: AT+CPIN? +# SIM card ICCID: AT+MCCID +# SIM card IMSI: AT+CIMI +# Modem IMEI: AT+CGSN=1 +# Network status: AT+CEREG? +# IP address: AT+MDIALUP? +# Signal quality: AT+CSQ +# Reboot: AT+MREBOOT=0 + +if [[ -n "$TTYNAME" && -e "/dev/$TTYNAME" ]]; then + # rename /dev/$TTYNAME to avoid conflict with other process + TTYNAMEEX="tmp-ml307r-$TTYNAME" + while [ -e "/dev/$TTYNAME" ]; do + rm -f "/dev/$TTYNAMEEX" + mv "/dev/$TTYNAME" "/dev/$TTYNAMEEX" + done + sleep 1 + cat "/dev/$TTYNAMEEX" >"$LOG" 2>/dev/null & + LOGPID=$! + ping_at "/dev/$TTYNAMEEX" 4 || { clean_and_exit 1; } + >"$LOG" + + if ! send_and_wait "/dev/$TTYNAMEEX" 'AT+MDIALUPCFG="auto"' '+MDIALUPCFG: "auto",' 1 || grep -qF '+MDIALUPCFG: "auto",1' "$LOG"; then + logger -t "ml307r" "send AT+MDIALUP=1,1 to $TTYNAME" + send_cmd "/dev/$TTYNAMEEX" 'AT+MDIALUP=1,1' + sleep 5 + mv "/dev/$TTYNAMEEX" "/dev/$TTYNAME" + else + logger -t "ml307r" "set auto dialup to $TTYNAME" + + SUCCESS=false + for i in $(seq 1 3); do + send_and_wait "/dev/$TTYNAMEEX" 'AT+MDIALUPCFG="auto",1' "OK" 1 || continue + send_and_wait "/dev/$TTYNAMEEX" 'AT+MDIALUPCFG="auto"' '+MDIALUPCFG: "auto",1' 1 && { SUCCESS=true; break; } + logger -t "ml307r" "failed to set auto dialup to $TTYNAME, retry $i" + done + if $SUCCESS; then + sleep 2 + logger -t "ml307r" "reboot $TTYNAME to apply auto dialup" + send_cmd "/dev/$TTYNAMEEX" 'AT+MREBOOT=0' + sleep 1 + else + logger -t "ml307r" "failed to set auto dialup to $TTYNAME" + mv "/dev/$TTYNAMEEX" "/dev/$TTYNAME" + clean_and_exit 1 + fi + fi + clean_and_exit 0 +fi diff --git a/target/linux/rockchip/armv8/base-files/lib/board/init.sh b/target/linux/rockchip/armv8/base-files/lib/board/init.sh index b5719a740c..cf60426703 100755 --- a/target/linux/rockchip/armv8/base-files/lib/board/init.sh +++ b/target/linux/rockchip/armv8/base-files/lib/board/init.sh @@ -424,6 +424,13 @@ board_set_iface_smp_affinity() { esac } +serial_option_new_id() { + # ASR Microelectronics ML307R + echo 2ecc 3012 ff > /sys/bus/usb-serial/drivers/option1/new_id + # Quectel EC801E + echo 2c7c 0903 ff > /sys/bus/usb-serial/drivers/option1/new_id +} + board_wait_wifi() { local seconds [[ -f "/etc/uci-defaults/01-rk35xx-wifi" ]] || return 0 @@ -445,4 +452,6 @@ board_fixup_iface_name board_set_iface_smp_affinity +serial_option_new_id + board_wait_wifi