Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
WIRELESS_VALID_ENCRYPTION_MODES="WPA2-PSK-SHA256 WPA2-PSK \
WPA-PSK-SHA256 WPA-PSK NONE"
WIRELESS_VALID_ENCRYPTION_MODES="WPA2-PSK-SHA256 WPA2-PSK \
WPA-PSK-SHA256 WPA-PSK NONE"
+declare -A WIRELESS_CHANNEL_BANDWIDTHS=(
+ ["802.11ac"]="20 40 80 160 80+80"
+ ["802.11a/n"]="20 40"
+ ["802.11a"]="20 40"
+ ["802.11g/n"]="20 40"
+ ["802.11g"]="20 40"
+)
+
cli_wireless() {
local action=${1}
shift 1
cli_wireless() {
local action=${1}
shift 1
+wireless_channel_bandwidth_is_valid() {
+ local mode="${1}"
+ assert isset mode
+
+ local bandwidth="${2}"
+ assert isset bandwidth
+
+ local bandwidths="${WIRELESS_CHANNEL_BANDWIDTHS["${mode}"]}"
+
+ list_match "${bandwidth}" ${bandwidths}
+}
+
wireless_channel_is_ht40_plus() {
local channel="${1}"
assert isinteger channel
wireless_channel_is_ht40_plus() {
local channel="${1}"
assert isinteger channel
ADDRESS=$(mac_generate)
BROADCAST_SSID=on
CHANNEL=0
ADDRESS=$(mac_generate)
BROADCAST_SSID=on
CHANNEL=0
ENCRYPTION=""
KEY=""
SSID=
ENCRYPTION=""
KEY=""
SSID=
--channel=*)
CHANNEL=$(cli_get_val "${1}")
;;
--channel=*)
CHANNEL=$(cli_get_val "${1}")
;;
+ --channel-bandwidth=*)
+ CHANNEL_BANDWIDTH="$(cli_get_val "${1}")"
+ ;;
--dfs=*)
DFS="$(cli_get_val "${1}")"
--dfs=*)
DFS="$(cli_get_val "${1}")"
+ # Channel bandwidth must match the mode
+ if isset CHANNEL_BANDWIDTH && ! wireless_channel_bandwidth_is_valid "${MODE}" "${CHANNEL_BANDWIDTH}"; then
+ error "Channel Bandwidth '${CHANNEL_BANDWIDTH}' is not supported"
+ return ${EXIT_ERROR}
+ fi
+
# Save address of phy do identify it again
PHY=$(phy_get ${PHY})
PHY=$(phy_get_address ${PHY})
# Save address of phy do identify it again
PHY=$(phy_get ${PHY})
PHY=$(phy_get_address ${PHY})