]> git.ipfire.org Git - people/stevee/network.git/blobdiff - src/hooks/zones/wireless
wireless: Fix crash of status if not connected
[people/stevee/network.git] / src / hooks / zones / wireless
index 593b37c45166c757af871bdbe0b494727d035ad8..553d9171e21d48f2579eed00459413e639614b77 100644 (file)
 
 . /usr/lib/network/header-zone
 
-HOOK_SETTINGS="HOOK PHY MAC SSID KEY ENCRYPTION_MODE"
-
-# Default values
-ADDRESS=$(mac_generate)
-PHY=
-SSID=
-KEY=
-ENCRYPTION_MODE=
+HOOK_SETTINGS="HOOK ADDRESS PHY"
 
 hook_check_settings() {
-       assert isset SSID
-
-       if isset ADDRESS; then
-               assert ismac ADDRESS
-       fi
-
+       assert ismac ADDRESS
        assert ismac PHY
-
-       if [ -n "${ENCRYPTION_MODE}" ]; then
-               assert isset KEY
-       fi
 }
 
 hook_parse_cmdline() {
        while [ $# -gt 0 ]; do
                case "${1}" in
-                       --phy=*|--parent-device=*)
-                               PHY=$(cli_get_val "${1}")
-                               ;;
-                       --encryption-mode=*)
-                               ENCRYPTION_MODE=$(cli_get_val "${1}")
-                               ;;
                        --address=*)
                                ADDRESS=$(cli_get_val "${1}")
                                ;;
-                       --ssid=*)
-                               SSID=$(cli_get_val "${1}")
-                               ;;
-                       --key=*)
-                               KEY=$(cli_get_val "${1}")
+                       --phy=*)
+                               PHY=$(cli_get_val "${1}")
                                ;;
                        *)
                                warning "Unrecognized option: ${1}"
@@ -72,6 +47,11 @@ hook_parse_cmdline() {
        # Just save the MAC address of the phy.
        PHY=$(phy_get ${PHY})
        PHY=$(phy_get_address ${PHY})
+
+       # Generate a random MAC address if none given
+       if ! isset ADDRESS; then
+               ADDRESS="$(mac_generate)"
+       fi
 }
 
 hook_up() {
@@ -81,27 +61,27 @@ hook_up() {
        # Read zone configuration.
        zone_settings_read "${zone}"
 
-       if ! device_exists ${zone}; then
-               #  Create the wireless interface.
-               wireless_create ${zone} \
+       #  Create the wireless interface
+       if ! device_exists "${zone}"; then
+               wireless_create "${zone}" \
                        --phy=${PHY} \
                        --type="managed" \
                        --address="${ADDRESS}" \
-               || exit $?
+               || return $?
        fi
 
        # Write WPA supplicant configuration
-       wpa_supplicant_config_write "${zone}" \
-               --mode="${ENCRYPTION_MODE}" \
-               --ssid="${SSID}" \
-               --key="${KEY}" || return $?
+       if ! wireless_networks_write_wpa_supplicant_configuration "${zone}"; then
+               log ERROR "Could not write WPA supplicant configuration for ${zone}"
+               return ${EXIT_ERROR}
+       fi
 
        # Start the WPA supplicant daemon.
        wpa_supplicant_start ${zone}
 
        zone_configs_up ${zone}
 
-       exit ${EXIT_OK}
+       return ${EXIT_OK}
 }
 
 hook_down() {
@@ -138,33 +118,35 @@ hook_status() {
                exit ${EXIT_ERROR}
        fi
 
-       cli_headline 2 "Wireless network information"
-       cli_print_fmt1 2 "SSID" "$(wpa_cli_status_get ${zone} ssid)"
-       cli_space
-
-       cli_headline 3 "Access Point"
-       local bssid=$(wpa_cli_status_get ${zone} bssid)
-       assert isset bssid
-
-       local frequency=$(wpa_cli_bss_get_frequency "${zone}" "${bssid}")
-       cli_print_fmt1 3 "Channel" "$(wireless_frequency_to_channel ${frequency}) (${frequency} MHz)"
-       cli_print_fmt1 3 "BSSID" "${bssid}"
-       cli_print_fmt1 3 "Noise" \
-               "$(wpa_cli_bss_get_noise ${zone} ${bssid})"
-       cli_print_fmt1 3 "Quality" \
-               "$(wpa_cli_bss_get_quality ${zone} ${bssid})%%"
-       cli_print_fmt1 3 "Flags" \
-               "$(wpa_cli_bss_get_flags ${zone} ${bssid})"
-       cli_space
-
-       cli_headline 3 "Encryption"
-       cli_print_fmt1 3 "Mode" \
-               "$(wpa_cli_status_get ${zone} key_mgmt)"
-       cli_print_fmt1 3 "Pairwise cipher" \
-               "$(wpa_cli_status_get ${zone} pairwise_cipher)"
-       cli_print_fmt1 3 "Group cipher" \
-               "$(wpa_cli_status_get ${zone} group_cipher)"
-       cli_space
+       if wireless_client_is_connected "${zone}"; then
+               cli_headline 2 "Wireless network information"
+               cli_print_fmt1 2 "SSID" "$(wpa_cli_status_get ${zone} ssid)"
+               cli_space
+
+               cli_headline 3 "Access Point"
+               local bssid=$(wpa_cli_status_get ${zone} bssid)
+               assert isset bssid
+
+               local frequency=$(wpa_cli_bss_get_frequency "${zone}" "${bssid}")
+               cli_print_fmt1 3 "Channel" "$(wireless_frequency_to_channel ${frequency}) (${frequency} MHz)"
+               cli_print_fmt1 3 "BSSID" "${bssid}"
+               cli_print_fmt1 3 "Noise" \
+                       "$(wpa_cli_bss_get_noise ${zone} ${bssid})"
+               cli_print_fmt1 3 "Quality" \
+                       "$(wpa_cli_bss_get_quality ${zone} ${bssid})%%"
+               cli_print_fmt1 3 "Flags" \
+                       "$(wpa_cli_bss_get_flags ${zone} ${bssid})"
+               cli_space
+
+               cli_headline 3 "Encryption"
+               cli_print_fmt1 3 "Mode" \
+                       "$(wpa_cli_status_get ${zone} key_mgmt)"
+               cli_print_fmt1 3 "Pairwise cipher" \
+                       "$(wpa_cli_status_get ${zone} pairwise_cipher)"
+               cli_print_fmt1 3 "Group cipher" \
+                       "$(wpa_cli_status_get ${zone} group_cipher)"
+               cli_space
+       fi
 
        cli_headline 2 "Configurations"
        zone_configs_cmd status ${zone}