#!/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" ubus call network reload scan_wifi cmd=up } [ reconf = "$1" ] && { ubus call network reload scan_wifi cmd=reconf } 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() { [ -e /tmp/.config_pending ] && return ucode /usr/share/hostap/wifi-detect.uc [ ! -f /etc/config/wireless ] && touch /etc/config/wireless ucode /lib/wifi/mac80211.uc | uci -q batch 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";; isup) wifi_isup "$2"; exit $?;; 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