diff --git a/netifd/Makefile b/netifd/Makefile index e70fd183e..808432756 100644 --- a/netifd/Makefile +++ b/netifd/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE:=3 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git -PKG_SOURCE_DATE:=2023-09-15.1 -PKG_SOURCE_VERSION:=afcd3825dad9b6a6712fbf6ed8e4434819a34009 -PKG_MIRROR_HASH:=d389db5dec7140fc12f69e8d679b9242c72d27b35c789b12adc6ebdf16913a85 +PKG_SOURCE_DATE:=2023-08-31 +PKG_SOURCE_VERSION:=1a07f1dff32b3af49e39533e33e8964b59535662 +PKG_MIRROR_HASH:=dc621dd04c3c9631002f929cf10a4620f57af8b0baf614c590bda17957fa6201 PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-2.0 diff --git a/netifd/files/lib/netifd/dhcp.script b/netifd/files/lib/netifd/dhcp.script index 6fcf139be..02a95dd76 100755 --- a/netifd/files/lib/netifd/dhcp.script +++ b/netifd/files/lib/netifd/dhcp.script @@ -13,7 +13,7 @@ set_classless_routes() { done } -setup_interface () { +setup_interface() { proto_init_update "*" 1 proto_add_ipv4_address "$ip" "${subnet:-255.255.255.0}" # TODO: apply $broadcast @@ -27,6 +27,7 @@ setup_interface () { eval "$(ipcalc.sh "$i/$mask")";gw_net="$NETWORK" [ "$ip_net" != "$gw_net" ] && proto_add_ipv4_route "$i" 32 "" "$ip" + #[ "$DEFAULTROUTE" = 0 ] || proto_add_ipv4_route 0.0.0.0 0 "$i" "$ip" proto_add_ipv4_route 0.0.0.0 0 "$i" "$ip" local r diff --git a/netifd/files/sbin/ifup b/netifd/files/sbin/ifup index fbf2fd80c..15be535bb 100755 --- a/netifd/files/sbin/ifup +++ b/netifd/files/sbin/ifup @@ -1,6 +1,7 @@ #!/bin/sh ifup_all= +setup_wifi= if_call() { local interface="$1" @@ -13,6 +14,7 @@ case "$0" in *ifdown) modes=down;; *ifup) modes="down up" + setup_wifi=1 ;; *) echo "Invalid command: $0";; esac @@ -23,6 +25,10 @@ while :; do ifup_all=1 shift ;; + -w) + setup_wifi= + shift + ;; *) break ;; @@ -34,6 +40,7 @@ if [ -n "$ifup_all" ]; then for interface in $(ubus -S list 'network.interface.*'); do if_call "${interface##network.interface.}" done + [ -n "$setup_wifi" ] && /sbin/wifi up exit else ubus -S list "network.interface.$1" > /dev/null || { @@ -42,3 +49,29 @@ else } if_call "$1" fi + +if [ -n "$setup_wifi" ] && grep -sq config /etc/config/wireless; then + . /lib/functions.sh + + find_related_radios() { + local wdev wnet + config_get wdev "$1" device + config_get wnet "$1" network + + if [ -n "$wdev" ]; then + for wnet in $wnet; do + if [ "$wnet" = "$network" ]; then + append radio_devs "$wdev" "$N" + fi + done + fi + } + + network="$1" + config_load wireless + config_foreach find_related_radios wifi-iface + + for dev in $(echo "$radio_devs" | sort -u); do + /sbin/wifi up "$dev" + done +fi