]> git.ipfire.org Git - people/ms/network.git/blobdiff - src/hooks/ports/wireless-ap
wireless-ap: Allow setting the wireless environment (indoor/outdoor)
[people/ms/network.git] / src / hooks / ports / wireless-ap
index 49c0a84396dfe8252a4c72fdc4e4b626ee24bdb6..6db39b8c99537af98c9a69139b63ae8dcdc28e13 100644 (file)
 
 HOOK_PORT_PATTERN="${PORT_PATTERN_ACCESSPOINT}"
 
-HOOK_SETTINGS="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=0
+CHANNEL=
+CHANNEL_BANDWIDTH=
 ENCRYPTION=""
 KEY=""
 SSID=
@@ -36,6 +37,8 @@ SSID=
 # Perform radar detection by default when possible
 DFS="on"
 
+ENVIRONMENT="${WIRELESS_DEFAULT_ENVIRONMENT}"
+
 hook_check_settings() {
        assert isset ADDRESS
        assert ismac ADDRESS
@@ -56,6 +59,8 @@ hook_check_settings() {
                assert [ ${#KEY} -ge 8 ]
                assert [ ${#KEY} -le 63 ]
        fi
+
+       assert wireless_environment_is_valid "${ENVIRONMENT}"
 }
 
 hook_parse_cmdline() {
@@ -67,6 +72,9 @@ hook_parse_cmdline() {
                        --channel=*)
                                CHANNEL=$(cli_get_val "${1}")
                                ;;
+                       --channel-bandwidth=*)
+                               CHANNEL_BANDWIDTH="$(cli_get_val "${1}")"
+                               ;;
                        --dfs=*)
                                DFS="$(cli_get_val "${1}")"
 
@@ -82,6 +90,14 @@ hook_parse_cmdline() {
                        --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}")
                                ;;
@@ -121,6 +137,19 @@ hook_parse_cmdline() {
                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})