X-Git-Url: http://git.ipfire.org/?p=people%2Fms%2Fnetwork.git;a=blobdiff_plain;f=src%2Fhooks%2Fports%2Fwireless-ap;h=6db39b8c99537af98c9a69139b63ae8dcdc28e13;hp=f132be6488d14e1521c15eddb01ef845b7df40f3;hb=7842c2ce43d1f185e65bb9f2beead96376e2bd34;hpb=6c26292250e14cf4efbc9eb8f2ace430677c749d diff --git a/src/hooks/ports/wireless-ap b/src/hooks/ports/wireless-ap index f132be64..6db39b8c 100644 --- a/src/hooks/ports/wireless-ap +++ b/src/hooks/ports/wireless-ap @@ -23,22 +23,29 @@ HOOK_PORT_PATTERN="${PORT_PATTERN_ACCESSPOINT}" -HOOK_SETTINGS="HOOK ADDRESS BROADCAST_SSID CHANNEL MODE PHY SSID" -HOOK_SETTINGS="${HOOK_SETTINGS} ENCRYPTION KEY" +HOOK_SETTINGS="ADDRESS BROADCAST_SSID CHANNEL CHANNEL_BANDWIDTH DFS MODE PHY" +HOOK_SETTINGS="${HOOK_SETTINGS} ENCRYPTION ENVIRONMENT KEY SSID" ADDRESS=$(mac_generate) BROADCAST_SSID=on -CHANNEL=1 +CHANNEL= +CHANNEL_BANDWIDTH= ENCRYPTION="" KEY="" SSID= +# Perform radar detection by default when possible +DFS="on" + +ENVIRONMENT="${WIRELESS_DEFAULT_ENVIRONMENT}" + hook_check_settings() { assert isset ADDRESS assert ismac ADDRESS assert isset BROADCAST_SSID assert isbool BROADCAST_SSID assert isset CHANNEL + assert isbool DFS assert isset MODE assert isoneof MODE ${HOSTAPD_SUPPORTED_MODES} assert isset PHY @@ -52,6 +59,8 @@ hook_check_settings() { assert [ ${#KEY} -ge 8 ] assert [ ${#KEY} -le 63 ] fi + + assert wireless_environment_is_valid "${ENVIRONMENT}" } hook_parse_cmdline() { @@ -63,9 +72,32 @@ hook_parse_cmdline() { --channel=*) CHANNEL=$(cli_get_val "${1}") ;; + --channel-bandwidth=*) + CHANNEL_BANDWIDTH="$(cli_get_val "${1}")" + ;; + --dfs=*) + DFS="$(cli_get_val "${1}")" + + if enabled DFS; then + DFS="on" + elif disabled DFS; then + DFS="off" + else + error "Invalid value for DFS: ${DFS}" + return ${EXIT_ERROR} + fi + ;; --encryption=*) ENCRYPTION=$(cli_get_val "${1}") ;; + --environment=*) + ENVIRONMENT="$(cli_get_val "${1}")" + + if ! wireless_environment_is_valid "${ENVIRONMENT}"; then + error "Invalid wireless environment: ${ENVIRONMENT}" + return ${EXIT_ERROR} + fi + ;; --key=*) KEY=$(cli_get_val "${1}") ;; @@ -94,12 +126,30 @@ hook_parse_cmdline() { shift done + # Generate a random MAC address if none is set + if ! isset ADDRESS; then + ADDRESS="$(mac_generate)" + fi + # MODE must be set if ! isset MODE; then error "--mode is not set" return ${EXIT_ERROR} fi + # Automatically enable ACS if no channel is set and ACS is available + if ! isset CHANNEL && phy_supports_acs "${PHY}"; then + CHANNEL="0" + + log INFO "Automatic Channel Selection (ACS) enabled" + fi + + # 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 for ${MODE}" + return ${EXIT_ERROR} + fi + # Save address of phy do identify it again PHY=$(phy_get ${PHY}) PHY=$(phy_get_address ${PHY})