]> git.ipfire.org Git - people/ms/network.git/blobdiff - src/hooks/ports/wireless-ap
wireless-ap: Add support for WPA3 and rewrite WPA2
[people/ms/network.git] / src / hooks / ports / wireless-ap
index e393f5f763959f256ad5d985a033ad841b790f01..7176ee58dfe54768e151a30ed7697c24568d1f24 100644 (file)
@@ -29,15 +29,20 @@ HOOK_SETTINGS=(
        "CHANNEL"
        "CHANNEL_BANDWIDTH"
        "DFS"
-       "ENCRYPTION"
        "ENVIRONMENT"
-       "KEY"
        "MFP"
        "MODE"
        "PHY"
+       "SECRET"
        "SSID"
+       "WPA3_PERSONAL"
+       "WPA2_PERSONAL"
 )
 
+# Disable WPA3+2 by default
+DEFAULT_WPA3_PERSONAL="off"
+DEFAULT_WPA2_PERSONAL="off"
+
 # Broadcast SSID by default
 DEFAULT_BROADCAST_SSID="on"
 
@@ -64,14 +69,6 @@ hook_check_settings() {
        assert ismac PHY
        assert isset SSID
 
-       if isset ENCRYPTION; then
-               assert isoneof ENCRYPTION WPA WPA2 WPA/WPA2
-
-               assert isset KEY
-               assert [ ${#KEY} -ge 8 ]
-               assert [ ${#KEY} -le 63 ]
-       fi
-
        assert wireless_environment_is_valid "${ENVIRONMENT}"
 }
 
@@ -99,9 +96,6 @@ hook_parse_cmdline() {
                                        return ${EXIT_ERROR}
                                fi
                                ;;
-                       --encryption=*)
-                               ENCRYPTION=$(cli_get_val "${1}")
-                               ;;
                        --environment=*)
                                ENVIRONMENT="$(cli_get_val "${1}")"
 
@@ -110,9 +104,6 @@ hook_parse_cmdline() {
                                        return ${EXIT_ERROR}
                                fi
                                ;;
-                       --key=*)
-                               KEY=$(cli_get_val "${1}")
-                               ;;
                        --mac=*)
                                ADDRESS=$(cli_get_val "${1}")
                                ;;
@@ -140,9 +131,18 @@ hook_parse_cmdline() {
                        --phy=*)
                                PHY=$(cli_get_val "${1}")
                                ;;
+                       --secret=*)
+                               SECRET="$(cli_get_val "${1}")"
+                               ;;
                        --ssid=*)
                                SSID=$(cli_get_val "${1}")
                                ;;
+                       --wpa2-personal=*)
+                               WPA2_PERSONAL="$(cli_get_bool "${1}")"
+                               ;;
+                       --wpa3-personal=*)
+                               WPA3_PERSONAL="$(cli_get_bool "${1}")"
+                               ;;
                        *)
                                warning "Ignoring unknown argument '${1}'"
                                ;;
@@ -174,6 +174,12 @@ hook_parse_cmdline() {
                return ${EXIT_ERROR}
        fi
 
+       # Check if SECRET is set when WPA* is enabled
+       if ! isset SECRET && (enabled WPA3_PERSONAL || enabled WPA2_PERSONAL); then
+               error "Secret is not set when PSK authentication is enabled"
+               return ${EXIT_ERROR}
+       fi
+
        # Save address of phy do identify it again
        PHY=$(phy_get ${PHY})
        PHY=$(phy_get_address ${PHY})