X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/2d62fc6dd537fe6c0b7856f239b0294b71c3e970..6262f561d3cbc0d63a39ba8e059ffd38cae20a8e:/package/mac80211/files/lib/wifi/mac80211.sh diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh index 6144ce40a..2721e4d7c 100644 --- a/package/mac80211/files/lib/wifi/mac80211.sh +++ b/package/mac80211/files/lib/wifi/mac80211.sh @@ -13,14 +13,14 @@ scan_mac80211() { config_get mode "$vif" mode case "$mode" in - adhoc|sta|ap|monitor) + adhoc|sta|ap|monitor|mesh) append $mode "$vif" ;; *) echo "$device($vif): Invalid mode, ignored."; continue;; esac done - config_set "$device" vifs "${ap:+$ap }${adhoc:+$adhoc }${ahdemo:+$ahdemo }${sta:+$sta }${wds:+$wds }${monitor:+$monitor}" + config_set "$device" vifs "${ap:+$ap }${adhoc:+$adhoc }${ahdemo:+$ahdemo }${sta:+$sta }${wds:+$wds }${monitor:+$monitor }${mesh:+$mesh}" } @@ -50,8 +50,11 @@ enable_mac80211() { local device="$1" config_get channel "$device" channel config_get vifs "$device" vifs + config_get txpower "$device" txpower local first=1 + local mesh_idx=0 + wifi_fixup_hwmode "$device" "g" for vif in $vifs; do ifconfig "$ifname" down 2>/dev/null config_get ifname "$vif" ifname @@ -74,6 +77,13 @@ enable_mac80211() { sleep 1 iwconfig "$ifname" mode ad-hoc >/dev/null 2>/dev/null fi + # mesh interface should be created only for the first interface + if [ "$mode" = mesh ]; then + config_get mesh_id "$vif" mesh_id + if [ -n "$mesh_id" ]; then + iw dev "$ifname" interface add msh$mesh_idx type mp mesh_id $mesh_id + fi + fi sleep 1 iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null } @@ -112,10 +122,11 @@ enable_mac80211() { esac config_get ssid "$vif" ssid - config_get txpwr "$vif" txpower - if [ -n "$txpwr" ]; then - iwconfig "$ifname" txpower "${txpwr%%.*}" - fi + config_get vif_txpower "$vif" txpower + # use vif_txpower (from wifi-iface) to override txpower (from + # wifi-device) if the latter doesn't exist + txpower="${txpower:-$vif_txpower}" + [ -z "$txpower" ] || iwconfig "$ifname" txpower "${txpower%%.*}" config_get frag "$vif" frag if [ -n "$frag" ]; then @@ -160,8 +171,15 @@ enable_mac80211() { } fi ;; + mesh) + # special case where physical interface should be down for mesh to work + ifconfig "$ifname" down + ifconfig "msh$mesh_idx" up + iwlist msh$mesh_idx scan 2>/dev/null >/dev/null + ;; esac first=0 + mesh_idx=$(expr $mesh_idx + 1) done }