diff --git a/netifd/Makefile b/netifd/Makefile index 2e70994e5..826889aca 100644 --- a/netifd/Makefile +++ b/netifd/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git -PKG_SOURCE_DATE:=2023-11-14 -PKG_SOURCE_VERSION:=8587c074f1eb2064c42adb0a6aa5073f695ab89d -PKG_MIRROR_HASH:=f5ceb771badd7a23cceb53537299580d4b483e2b3ec5de09b9c3c54692893dd9 +PKG_SOURCE_DATE:=2023-11-10 +PKG_SOURCE_VERSION:=35facc8306f590a7330789ab6d5785c0d43073ef +PKG_MIRROR_HASH:=4f73591ae1873e18df235349e478f2196ca0d3123c313a04149dc9d5e2bfb403 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 db8deac9e..053dd75b6 100755 --- a/netifd/files/lib/netifd/dhcp.script +++ b/netifd/files/lib/netifd/dhcp.script @@ -13,11 +13,12 @@ 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 + local ip_net local ip_net IP PREFIX NETWORK NETMASK BROADCAST ipcalc "$ip/$mask" && ip_net="$NETWORK" @@ -27,6 +28,7 @@ setup_interface () { ipcalc "$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