From 3e1c9ceeb0d2383b6110102e37603e09769143ea Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Wed, 18 Dec 2019 22:07:26 +0200 Subject: [PATCH 1/9] busybox: enable ifup/ifdown support --- board/common/busybox.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/board/common/busybox.config b/board/common/busybox.config index 5e4ecca396..d9fbee6fe2 100644 --- a/board/common/busybox.config +++ b/board/common/busybox.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.29.3 -# Thu Oct 31 23:22:38 2019 +# Wed Dec 18 22:06:40 2019 # CONFIG_HAVE_DOT_CONFIG=y @@ -861,11 +861,11 @@ CONFIG_DNSDOMAINNAME=y CONFIG_IFUP=y CONFIG_IFDOWN=y CONFIG_IFUPDOWN_IFSTATE_PATH="" -# CONFIG_FEATURE_IFUPDOWN_IP is not set -# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set +CONFIG_FEATURE_IFUPDOWN_IP=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y # CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y # CONFIG_INETD is not set # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set From 1d06cb9783390a615bd2af9d1da4a0d207ca1d42 Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Wed, 18 Dec 2019 22:22:32 +0200 Subject: [PATCH 2/9] busybox: enable run-parts --- board/common/busybox.config | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/board/common/busybox.config b/board/common/busybox.config index d9fbee6fe2..7710bbb6fd 100644 --- a/board/common/busybox.config +++ b/board/common/busybox.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.29.3 -# Wed Dec 18 22:06:40 2019 +# Wed Dec 18 22:22:12 2019 # CONFIG_HAVE_DOT_CONFIG=y @@ -381,9 +381,9 @@ CONFIG_RESET=y # Debian Utilities # # CONFIG_PIPE_PROGRESS is not set -# CONFIG_RUN_PARTS is not set -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -# CONFIG_FEATURE_RUN_PARTS_FANCY is not set +CONFIG_RUN_PARTS=y +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y +CONFIG_FEATURE_RUN_PARTS_FANCY=y # CONFIG_START_STOP_DAEMON is not set # CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set # CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set From 42317edfa5a72ea9a0a779d26250d22adff21f9c Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Wed, 18 Dec 2019 22:31:08 +0200 Subject: [PATCH 3/9] busybox: set ifstate file path --- board/common/busybox.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/board/common/busybox.config b/board/common/busybox.config index 7710bbb6fd..a667a56b2c 100644 --- a/board/common/busybox.config +++ b/board/common/busybox.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.29.3 -# Wed Dec 18 22:22:12 2019 +# Wed Dec 18 22:30:47 2019 # CONFIG_HAVE_DOT_CONFIG=y @@ -860,7 +860,7 @@ CONFIG_DNSDOMAINNAME=y # CONFIG_IFPLUGD is not set CONFIG_IFUP=y CONFIG_IFDOWN=y -CONFIG_IFUPDOWN_IFSTATE_PATH="" +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" CONFIG_FEATURE_IFUPDOWN_IP=y CONFIG_FEATURE_IFUPDOWN_IPV4=y CONFIG_FEATURE_IFUPDOWN_IPV6=y From 7e37c2ac9236c352b7dab2877e0e85f599a138e4 Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Wed, 18 Dec 2019 22:46:17 +0200 Subject: [PATCH 4/9] busybox: enable ifplugd --- board/common/busybox.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/board/common/busybox.config b/board/common/busybox.config index a667a56b2c..6cdd1becd1 100644 --- a/board/common/busybox.config +++ b/board/common/busybox.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.29.3 -# Wed Dec 18 22:30:47 2019 +# Wed Dec 18 22:45:43 2019 # CONFIG_HAVE_DOT_CONFIG=y @@ -857,7 +857,7 @@ CONFIG_DNSDOMAINNAME=y # CONFIG_FEATURE_IFCONFIG_HW is not set # CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set # CONFIG_IFENSLAVE is not set -# CONFIG_IFPLUGD is not set +CONFIG_IFPLUGD=y CONFIG_IFUP=y CONFIG_IFDOWN=y CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" From fb6cf2524165421ca17c2b5d8312a65ae84ae760 Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Wed, 18 Dec 2019 23:18:18 +0200 Subject: [PATCH 5/9] /etc/init.d/base: ensure target directory exists --- board/common/overlay/etc/init.d/base | 1 + 1 file changed, 1 insertion(+) diff --git a/board/common/overlay/etc/init.d/base b/board/common/overlay/etc/init.d/base index 5119498a04..4c8ebe670b 100644 --- a/board/common/overlay/etc/init.d/base +++ b/board/common/overlay/etc/init.d/base @@ -55,6 +55,7 @@ prepare_conf() { fi if [[ ! -e "${actual_conf}" && -e "${system_conf}" ]]; then + mkdir -p $(dirname "${actual_conf}") cp "${system_conf}" "${actual_conf}" fi } From 15c07e362e9233df7f93002a6e2cc92630dc603b Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Wed, 18 Dec 2019 23:48:46 +0200 Subject: [PATCH 6/9] Add experimental support for /etc/network/interfaces --- board/common/overlay/etc/init.d/S40network | 94 ++++++++++++++-------- 1 file changed, 59 insertions(+), 35 deletions(-) diff --git a/board/common/overlay/etc/init.d/S40network b/board/common/overlay/etc/init.d/S40network index b2ce067576..a5ca41e9e0 100755 --- a/board/common/overlay/etc/init.d/S40network +++ b/board/common/overlay/etc/init.d/S40network @@ -1,12 +1,15 @@ #!/bin/bash DH_CONF="/var/cache/dhclient.conf" +WATCH_CONF="/data/etc/watch.conf" + SYS_STATIC_CONF="/etc/static_ip.conf" BOOT_STATIC_CONF="/boot/static_ip.conf" STATIC_CONF="/data/etc/static_ip.conf" -WATCH_CONF="/data/etc/watch.conf" -LINK_NEGO_TIMEOUT=10 +SYS_INTERFACES_CONF="/etc/network/interfaces" +BOOT_INTERFACES_CONF="/boot/network/interfaces" +INTERFACES_CONF="/data/etc/network/interfaces" test -n "${OS_VERSION}" || source /etc/init.d/base @@ -16,6 +19,8 @@ source ${WATCH_CONF} prepare_conf ${STATIC_CONF} ${SYS_STATIC_CONF} ${BOOT_STATIC_CONF} test -r ${STATIC_CONF} && source ${STATIC_CONF} +prepare_conf ${INTERFACES_CONF} ${SYS_INTERFACES_CONF} ${BOOT_INTERFACES_CONF} + mkdir -p /var/lib/dhcp @@ -57,7 +62,11 @@ watch_ip() { } start_lo() { - ifconfig lo up + if [[ -r ${INTERFACES_CONF} ]] && grep -q "^iface lo" ${INTERFACES_CONF}; then + ifup lo 2>&1 | logger -t network + else + ifconfig lo up + fi } start_wlan() { @@ -76,13 +85,18 @@ start_wlan() { ip link set mtu ${mtu} dev ${OS_WLAN} fi - if [[ -n "${STATIC_IP}" ]]; then - msg_done ${STATIC_IP} - ifconfig ${OS_WLAN} ${STATIC_IP} up - STATIC_IP="" # won't be used again + if [[ -r ${INTERFACES_CONF} ]] && grep -q "^iface ${OS_WLAN}" ${INTERFACES_CONF}; then + ifup ${OS_WLAN} 2>&1 | logger -t network + test ${PIPESTATUS[0]} == 0 && msg_done || msg_fail else - msg_done dhcp - dhclient -cf "${DH_CONF}" ${OS_WLAN} + if [[ -n "${STATIC_IP}" ]]; then + msg_done ${STATIC_IP} + ifconfig ${OS_WLAN} ${STATIC_IP} up + STATIC_IP="" # won't be used again + else + msg_done dhcp + dhclient -cf "${DH_CONF}" ${OS_WLAN} + fi fi if [[ "${IP_WATCH}" == "true" ]] && ip addr show dev ${OS_WLAN} | grep inet &>/dev/null; then @@ -121,12 +135,11 @@ start_eth() { done # wait for link - test "${LINK_WATCH}" == "true" || LINK_NEGO_TIMEOUT=5 count=0 while [[ "$(cat /sys/class/net/${OS_ETH}/carrier 2>&1)" != "1" ]]; do sleep 1 count=$((${count} + 1)) - if [[ ${count} -ge ${LINK_NEGO_TIMEOUT} ]]; then + if [[ ${count} -ge 1 ]]; then msg_done "no link" return 1 fi @@ -136,13 +149,18 @@ start_eth() { ip link set mtu ${mtu} dev ${OS_ETH} fi - if [[ -n "${STATIC_IP}" ]]; then - msg_done ${STATIC_IP} - ifconfig ${OS_ETH} ${STATIC_IP} up - STATIC_IP="" # won't be used again + if [[ -r ${INTERFACES_CONF} ]] && grep -q "^iface ${OS_ETH}" ${INTERFACES_CONF}; then + ifup ${OS_ETH} 2>&1 | logger -t network + test ${PIPESTATUS[0]} == 0 && msg_done || msg_fail else - msg_done dhcp - dhclient -cf "${DH_CONF}" ${OS_ETH} + if [[ -n "${STATIC_IP}" ]]; then + msg_done ${STATIC_IP} + ifconfig ${OS_ETH} ${STATIC_IP} up + STATIC_IP="" # won't be used again + else + msg_done dhcp + dhclient -cf "${DH_CONF}" ${OS_ETH} + fi fi if [[ "${LINK_WATCH}" == "true" ]]; then @@ -163,16 +181,11 @@ start() { test "${OS_NETWORKLESS}" == "true" && return 0 ssid=$(cat /data/etc/wpa_supplicant.conf 2>&1 | grep ssid | grep -v scan_ssid | cut -d '"' -f 2) - test -n "${ssid}" && start_wlan && wlan_ok="ok" + test -n "${OS_WLAN}" -a -n "${ssid}" && start_wlan && wlan_ok="ok" - test -r /data/etc/ppp/modem && ifconfig | grep ${OS_PPP} &>/dev/null && ppp_ok="ok" + test -n "${OS_PPP}" -a -r /data/etc/ppp/modem && ifconfig | grep ${OS_PPP} &>/dev/null && ppp_ok="ok" - # if wifi or ppp link ok, start eth in background - if [[ "${wlan_ok}" == "ok" ]] || [[ "${ppp_ok}" == "ok" ]]; then - start_eth &>/dev/null & - else - start_eth && eth_ok="ok" - fi + test -n "${OS_ETH}" && start_eth && eth_ok="ok" if [[ "${eth_ok}" != "ok" ]] && [[ "${wlan_ok}" != "ok" ]] && [[ "${ppp_ok}" != "ok" ]]; then if [[ "${LINK_WATCH}" == "true" ]]; then @@ -185,23 +198,34 @@ start() { fi fi - if [[ -n "${STATIC_GW}" ]]; then - msg_begin "Setting static gateway to ${STATIC_GW}" - ip route add default via ${STATIC_GW} - test $? == 0 && msg_done || msg_fail - fi + if [[ -r ${INTERFACES_CONF} ]]; then + # ifup doesn't set the DNS server, so we have to set it manually + STATIC_DNS=$(cat /etc/network/interfaces | grep dns-nameserver | tr -s ' ' | cut -d ' ' -f 3 | head -n 11) + if [[ -n "${STATIC_DNS}" ]]; then + msg_begin "Setting static DNS server to ${STATIC_DNS}" + echo "nameserver ${STATIC_DNS}" > /etc/resolv.conf + test $? == 0 && msg_done || msg_fail + fi + else + if [[ -n "${STATIC_GW}" ]]; then + msg_begin "Setting static gateway to ${STATIC_GW}" + ip route add default via ${STATIC_GW} + test $? == 0 && msg_done || msg_fail + fi - if [[ -n "${STATIC_DNS}" ]]; then - msg_begin "Setting static DNS server to ${STATIC_DNS}" - echo "nameserver ${STATIC_DNS}" > /etc/resolv.conf - test $? == 0 && msg_done || msg_fail + if [[ -n "${STATIC_DNS}" ]]; then + msg_begin "Setting static DNS server to ${STATIC_DNS}" + echo "nameserver ${STATIC_DNS}" > /etc/resolv.conf + test $? == 0 && msg_done || msg_fail + fi fi } stop() { msg_begin "Stopping network" - killall dhclient &>/dev/null + ifdown -a 2>&1 | logger -t network ps | grep S40network | grep -v $$ | grep -v grep | tr -s ' ' | sed -e 's/^\s//' | cut -d ' ' -f 1 | xargs -r kill + killall dhclient &>/dev/null msg_done } From 65eca2e487f822e039172a4b85ca43835af612d2 Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Wed, 18 Dec 2019 23:58:09 +0200 Subject: [PATCH 7/9] S40network: fix /etc/network/interfaces location --- board/common/overlay/etc/init.d/S40network | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/board/common/overlay/etc/init.d/S40network b/board/common/overlay/etc/init.d/S40network index a5ca41e9e0..f66d4e9c0e 100755 --- a/board/common/overlay/etc/init.d/S40network +++ b/board/common/overlay/etc/init.d/S40network @@ -63,7 +63,7 @@ watch_ip() { start_lo() { if [[ -r ${INTERFACES_CONF} ]] && grep -q "^iface lo" ${INTERFACES_CONF}; then - ifup lo 2>&1 | logger -t network + ifup -i ${INTERFACES_CONF} lo 2>&1 | logger -t network else ifconfig lo up fi @@ -86,7 +86,7 @@ start_wlan() { fi if [[ -r ${INTERFACES_CONF} ]] && grep -q "^iface ${OS_WLAN}" ${INTERFACES_CONF}; then - ifup ${OS_WLAN} 2>&1 | logger -t network + ifup -i ${INTERFACES_CONF} ${OS_WLAN} 2>&1 | logger -t network test ${PIPESTATUS[0]} == 0 && msg_done || msg_fail else if [[ -n "${STATIC_IP}" ]]; then @@ -150,7 +150,7 @@ start_eth() { fi if [[ -r ${INTERFACES_CONF} ]] && grep -q "^iface ${OS_ETH}" ${INTERFACES_CONF}; then - ifup ${OS_ETH} 2>&1 | logger -t network + ifup -i ${INTERFACES_CONF} ${OS_ETH} 2>&1 | logger -t network test ${PIPESTATUS[0]} == 0 && msg_done || msg_fail else if [[ -n "${STATIC_IP}" ]]; then @@ -200,7 +200,7 @@ start() { if [[ -r ${INTERFACES_CONF} ]]; then # ifup doesn't set the DNS server, so we have to set it manually - STATIC_DNS=$(cat /etc/network/interfaces | grep dns-nameserver | tr -s ' ' | cut -d ' ' -f 3 | head -n 11) + STATIC_DNS=$(cat ${INTERFACES_CONF} | grep dns-nameserver | tr -s ' ' | cut -d ' ' -f 3 | head -n 11) if [[ -n "${STATIC_DNS}" ]]; then msg_begin "Setting static DNS server to ${STATIC_DNS}" echo "nameserver ${STATIC_DNS}" > /etc/resolv.conf @@ -223,7 +223,9 @@ start() { stop() { msg_begin "Stopping network" - ifdown -a 2>&1 | logger -t network + if [[ -r ${INTERFACES_CONF} ]]; then + ifdown -i ${INTERFACES_CONF} -a 2>&1 | logger -t network + fi ps | grep S40network | grep -v $$ | grep -v grep | tr -s ' ' | sed -e 's/^\s//' | cut -d ' ' -f 1 | xargs -r kill killall dhclient &>/dev/null msg_done From 95b0ec47784dfed712d1680bd3979c378ba92826 Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Thu, 19 Dec 2019 00:52:30 +0200 Subject: [PATCH 8/9] S40network: bring up all auto interfaces --- board/common/overlay/etc/init.d/S40network | 3 +++ 1 file changed, 3 insertions(+) diff --git a/board/common/overlay/etc/init.d/S40network b/board/common/overlay/etc/init.d/S40network index f66d4e9c0e..0ecb82fa1d 100755 --- a/board/common/overlay/etc/init.d/S40network +++ b/board/common/overlay/etc/init.d/S40network @@ -206,6 +206,9 @@ start() { echo "nameserver ${STATIC_DNS}" > /etc/resolv.conf test $? == 0 && msg_done || msg_fail fi + + # Make sure all auto interfaces are brought up + ifup -i ${INTERFACES_CONF} -a >/dev/null else if [[ -n "${STATIC_GW}" ]]; then msg_begin "Setting static gateway to ${STATIC_GW}" From 5bee97e17f71956a24e4cc1022ba9e7f9a2bc88c Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Thu, 19 Dec 2019 22:51:13 +0200 Subject: [PATCH 9/9] S40network: restore eth background start --- board/common/overlay/etc/init.d/S40network | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/board/common/overlay/etc/init.d/S40network b/board/common/overlay/etc/init.d/S40network index 0ecb82fa1d..ded2816e0a 100755 --- a/board/common/overlay/etc/init.d/S40network +++ b/board/common/overlay/etc/init.d/S40network @@ -11,6 +11,8 @@ SYS_INTERFACES_CONF="/etc/network/interfaces" BOOT_INTERFACES_CONF="/boot/network/interfaces" INTERFACES_CONF="/data/etc/network/interfaces" +LINK_NEGO_TIMEOUT=10 + test -n "${OS_VERSION}" || source /etc/init.d/base @@ -135,11 +137,12 @@ start_eth() { done # wait for link + test "${LINK_WATCH}" == "true" || LINK_NEGO_TIMEOUT=5 count=0 while [[ "$(cat /sys/class/net/${OS_ETH}/carrier 2>&1)" != "1" ]]; do sleep 1 count=$((${count} + 1)) - if [[ ${count} -ge 1 ]]; then + if [[ ${count} -ge ${LINK_NEGO_TIMEOUT} ]]; then msg_done "no link" return 1 fi @@ -185,7 +188,14 @@ start() { test -n "${OS_PPP}" -a -r /data/etc/ppp/modem && ifconfig | grep ${OS_PPP} &>/dev/null && ppp_ok="ok" - test -n "${OS_ETH}" && start_eth && eth_ok="ok" + if [[ -n "${OS_ETH}" ]]; then + # if wifi or ppp link ok, start eth in background + if [[ "${wlan_ok}" == "ok" ]] || [[ "${ppp_ok}" == "ok" ]]; then + start_eth &>/dev/null & + else + start_eth && eth_ok="ok" + fi + fi if [[ "${eth_ok}" != "ok" ]] && [[ "${wlan_ok}" != "ok" ]] && [[ "${ppp_ok}" != "ok" ]]; then if [[ "${LINK_WATCH}" == "true" ]]; then