From 1849a099f1043789c0b8609582860070a2653559 Mon Sep 17 00:00:00 2001 From: Jianhui Zhao Date: Fri, 23 Dec 2022 11:11:16 +0800 Subject: [PATCH] wifi: reuse netifd Signed-off-by: Jianhui Zhao --- package/base-files/files/sbin/wifi | 254 ++++++++++++++++++ .../config/netifd/files/etc/init.d/network | 13 +- 2 files changed, 256 insertions(+), 11 deletions(-) create mode 100755 package/base-files/files/sbin/wifi diff --git a/package/base-files/files/sbin/wifi b/package/base-files/files/sbin/wifi new file mode 100755 index 0000000000..6b9662fe93 --- /dev/null +++ b/package/base-files/files/sbin/wifi @@ -0,0 +1,254 @@ +#!/bin/sh +# Copyright (C) 2006 OpenWrt.org + +. /lib/functions.sh +. /usr/share/libubox/jshn.sh + +usage() { + cat </dev/null >/dev/null; then + eval "scan_$iftype '$device'" + eval "${1}_$iftype '$device'" || echo "$device($iftype): ${1} failed" + elif [ ! -f /lib/netifd/wireless/$iftype.sh ]; then + echo "$device($iftype): Interface type not supported" + fi + ); done +} + +wifi_updown() { + cmd=down + [ enable = "$1" ] && { + _wifi_updown disable "$2" + ubus_wifi_cmd "$cmd" "$2" + scan_wifi + cmd=up + ubus call network reload + } + [ reconf = "$1" ] && { + scan_wifi + cmd=reconf + ubus call network reload + } + ubus_wifi_cmd "$cmd" "$2" + _wifi_updown "$@" +} + +wifi_reload_legacy() { + _wifi_updown "disable" "$1" + scan_wifi + _wifi_updown "enable" "$1" +} + +wifi_reload() { + ubus call network reload + wifi_reload_legacy +} + +wifi_detect_notice() { + >&2 echo "WARNING: Wifi detect is deprecated. Use wifi config instead" + >&2 echo "For more information, see commit 5f8f8a366136a07df661e31decce2458357c167a" + exit 1 +} + +wifi_config() { + [ ! -f /etc/config/wireless ] && touch /etc/config/wireless + + for driver in $DRIVERS; do ( + if eval "type detect_$driver" 2>/dev/null >/dev/null; then + eval "detect_$driver" || echo "$driver: Detect failed" >&2 + else + echo "$driver: Hardware detection not supported" >&2 + fi + ); done +} + +start_net() {( + local iface="$1" + local config="$2" + local vifmac="$3" + + [ -f "/var/run/$iface.pid" ] && kill "$(cat /var/run/${iface}.pid)" 2>/dev/null + [ -z "$config" ] || { + include /lib/network + scan_interfaces + for config in $config; do + setup_interface "$iface" "$config" "" "$vifmac" + done + } +)} + +set_wifi_up() { + local cfg="$1" + local ifname="$2" + uci_set_state wireless "$cfg" up 1 + uci_set_state wireless "$cfg" ifname "$ifname" +} + +set_wifi_down() { + local cfg="$1" + local vifs vif vifstr + + [ -f "/var/run/wifi-${cfg}.pid" ] && + kill "$(cat "/var/run/wifi-${cfg}.pid")" 2>/dev/null + uci_revert_state wireless "$cfg" + config_get vifs "$cfg" vifs + for vif in $vifs; do + uci_revert_state wireless "$vif" + done +} + +scan_wifi() { + local cfgfile="$1" + DEVICES= + config_cb() { + local type="$1" + local section="$2" + + # section start + case "$type" in + wifi-device) + append DEVICES "$section" + config_set "$section" vifs "" + config_set "$section" ht_capab "" + ;; + esac + + # section end + config_get TYPE "$CONFIG_SECTION" TYPE + case "$TYPE" in + wifi-iface) + config_get device "$CONFIG_SECTION" device + config_get vifs "$device" vifs + append vifs "$CONFIG_SECTION" + config_set "$device" vifs "$vifs" + ;; + esac + } + config_load "${cfgfile:-wireless}" +} + +DEVICES= +DRIVERS= +include /lib/wifi +scan_wifi + +case "$1" in + down) wifi_updown "disable" "$2";; + detect) wifi_detect_notice ;; + config) wifi_config ;; + status) ubus_wifi_cmd "status" "$2";; + reload) wifi_reload "$2";; + reload_legacy) wifi_reload_legacy "$2";; + --help|help) usage;; + reconf) wifi_updown "reconf" "$2";; + ''|up) wifi_updown "enable" "$2";; + *) usage; exit 1;; +esac diff --git a/package/network/config/netifd/files/etc/init.d/network b/package/network/config/netifd/files/etc/init.d/network index e76678cfd8..dc208c4ce0 100755 --- a/package/network/config/netifd/files/etc/init.d/network +++ b/package/network/config/netifd/files/etc/init.d/network @@ -40,14 +40,6 @@ stop_service() { sleep 1 } - - - -service_running() { - ubus -t 120 wait_for network.interface - /sbin/wifi up -} - validate_atm_bridge_section() { uci_validate_section network "atm-bridge" "${1}" \ @@ -147,7 +139,6 @@ service_triggers() } shutdown() { - /sbin/wifi down - ifdown -a - sleep 1 + ifdown -a + sleep 1 } -- 2.34.1