From bf6ede928af321f19b98d47677334997e18c3543 Mon Sep 17 00:00:00 2001 From: Ing Date: Sun, 23 Apr 2023 05:03:09 +0800 Subject: [PATCH] add DiskIdxMap recommended, fix multiple network cards --- files/board/arpl/overlayfs/opt/arpl/boot.sh | 8 ++++---- files/board/arpl/overlayfs/opt/arpl/init.sh | 4 ++-- files/board/arpl/overlayfs/opt/arpl/menu.sh | 12 +++++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/files/board/arpl/overlayfs/opt/arpl/boot.sh b/files/board/arpl/overlayfs/opt/arpl/boot.sh index 7a2eacb5..0b38c79b 100755 --- a/files/board/arpl/overlayfs/opt/arpl/boot.sh +++ b/files/board/arpl/overlayfs/opt/arpl/boot.sh @@ -91,7 +91,7 @@ NETIF_NUM=${CMDLINE["netif_num"]} NETRL_NUM=`ip link show | grep ether | wc -l` if [ ${NETIF_NUM} -ne ${NETRL_NUM} ]; then echo -e "\033[1;33m*** `printf "$(TEXT "netif_num is not equal to real network card amount, set netif_num to %s")" "${NETRL_NUM}"` ***\033[0m" - CMDLINE["netif_num"]=${MACS} + CMDLINE["netif_num"]=${NETRL_NUM} fi # Prepare command line @@ -117,12 +117,12 @@ echo -e "$(TEXT "Cmdline:\n")\033[1;36m${CMDLINE_LINE}\033[0m" COUNT=0 echo -n "$(TEXT "IP")" while true; do - IP=`ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'` + IP=`ip route 2>/dev/null | sed -n 's/.* via .* dev \(.*\) src \(.*\) metric .*/\1: \2 /p'` # `ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'` if [ -n "${IP}" ]; then - echo -e ": \033[1;32m${IP}\033[0m" + echo -e ": \033[1;32m\n${IP}\033[0m" break elif [ ${COUNT} -eq 30 ]; then - echo -e ": \033[1;31mERROR\033[0m" + echo -e ": \033[1;31m\nERROR\033[0m" break fi COUNT=$((${COUNT}+1)) diff --git a/files/board/arpl/overlayfs/opt/arpl/init.sh b/files/board/arpl/overlayfs/opt/arpl/init.sh index 02c474b7..c9818236 100755 --- a/files/board/arpl/overlayfs/opt/arpl/init.sh +++ b/files/board/arpl/overlayfs/opt/arpl/init.sh @@ -70,7 +70,7 @@ fi # Get first MAC address MACS=`ip link show | awk '/ether/{print$2}'` -MACFS=(`echo ${MACS} | sed 's/://g'`) +MACFS=(`echo ${MACS} | sed 's/://g'`) # MACFS=(`cat /sys/class/net/eth*/address | sed 's/://g'`) # ? # If user config file not exists, initialize it if [ ! -f "${USER_CONFIG_FILE}" ]; then @@ -183,7 +183,7 @@ while true; do break fi COUNT=$((${COUNT}+1)) - IP=`ip route 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1` # IP=`ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'` + IP=`ip route 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1` # IP=`ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'` if [ -n "${IP}" ]; then echo -en "`printf "$(TEXT "OK\nAccess \033[1;34mhttp://%s:7681\033[0m to configure the loader via web terminal")" "${IP}"`" break diff --git a/files/board/arpl/overlayfs/opt/arpl/menu.sh b/files/board/arpl/overlayfs/opt/arpl/menu.sh index 22243612..eb0a9137 100755 --- a/files/board/arpl/overlayfs/opt/arpl/menu.sh +++ b/files/board/arpl/overlayfs/opt/arpl/menu.sh @@ -13,7 +13,7 @@ if [ `cat /sys/block/${LOADER_DEVICE_NAME}/${LOADER_DEVICE_NAME}3/size` -lt 4194 fi # Get actual IP -IP=`ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'` +IP=`ip route 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1` # `ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'` # Dirty flag DIRTY=0 @@ -417,7 +417,7 @@ function cmdlineMenu() { --title "$(TEXT "User cmdline")" --progressbox "$(TEXT "Changing MAC")" 20 70 /etc/init.d/S41dhcpcd restart 2>&1 | dialog --backtitle "`backtitle`" \ --title "$(TEXT "User cmdline")" --progressbox "$(TEXT "Renewing IP")" 20 70 - IP=`ip route 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1` # IP=`ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'` + IP=`ip route 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1` # IP=`ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'` fi done ;; @@ -771,13 +771,14 @@ function advancedMenu() { t) tryRecoveryDSM ;; s) MSG="" NUMPORTS=0 - ATTACHTPORTS=0 + ATTACHTNUM=0 DiskIdxMap="" for PCI in `lspci -d ::106 | awk '{print$1}'`; do NAME=`lspci -s "${PCI}" | sed "s/\ .*://"` MSG+="\Zb${NAME}\Zn\nPorts: " unset HOSTPORTS declare -A HOSTPORTS + ATTACHTIDX=0 while read LINE; do ATAPORT="`echo ${LINE} | grep -o 'ata[0-9]*'`" PORT=`echo ${ATAPORT} | sed 's/ata//'` @@ -787,13 +788,14 @@ function advancedMenu() { ls -l /sys/block | fgrep -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0 PCMD=`cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd` [ "${PCMD}" = "0" ] && DUMMY=1 || DUMMY=0 - [ ${ATTACH} -eq 1 ] && MSG+="\Z2\Zb" && ATTACHTPORTS=$((${ATTACHTPORTS}+1)) + [ ${ATTACH} -eq 1 ] && MSG+="\Z2\Zb" && ATTACHTIDX=$((${ATTACHTIDX}+1)) [ ${DUMMY} -eq 1 ] && MSG+="\Z1" MSG+="${PORT}\Zn " NUMPORTS=$((${NUMPORTS}+1)) done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n) MSG+="\n" - DiskIdxMap+=`printf '%02x' ${ATTACHTPORTS}` + [ ${ATTACHTIDX} -gt 0 ] && DiskIdxMap+=`printf '%02x' ${ATTACHTNUM}` || DiskIdxMap+="ff" + ATTACHTNUM=$((${ATTACHTNUM}+${ATTACHTIDX})) done MSG+="`printf "$(TEXT "\nTotal of ports: %s\n")" "${NUMPORTS}"`" MSG+="$(TEXT "\nPorts with color \Z1red\Zn as DUMMY, color \Z2\Zbgreen\Zn has drive connected.")"