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}"
}
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
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
}
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
}
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
}