]> 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 52a3da3080cf7c5c52b2867a3f51d81dcc50164e..553d9171e21d48f2579eed00459413e639614b77 100644 (file)
 
 . /usr/lib/network/header-zone
 
-HOOK_SETTINGS="HOOK PHY MAC MTU SSID KEY ENCRYPTION"
+HOOK_SETTINGS="HOOK ADDRESS PHY"
 
-# Default values
-ADDRESS=$(mac_generate)
-PHY=
-MTU=1500
-SSID=
-KEY=
-ENCRYPTION_MODE=
-
-function hook_check_settings() {
-       assert isset SSID
-
-       if isset ADDRESS; then
-               assert ismac ADDRESS
-       fi
-
-       assert isinteger MTU
+hook_check_settings() {
+       assert ismac ADDRESS
        assert ismac PHY
-
-       if [ -n "${ENCRYPTION_MODE}" ]; then
-               assert isset KEY
-       fi
 }
 
-function hook_parse_cmdline() {
+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})
+                               ADDRESS=$(cli_get_val "${1}")
                                ;;
-                       --key=*)
-                               KEY=$(cli_get_val ${1})
+                       --phy=*)
+                               PHY=$(cli_get_val "${1}")
                                ;;
                        *)
                                warning "Unrecognized option: ${1}"
@@ -74,22 +47,33 @@ function 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
 }
 
-function hook_up() {
+hook_up() {
        local zone=${1}
        assert isset zone
 
        # 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
+       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.
@@ -97,10 +81,10 @@ function hook_up() {
 
        zone_configs_up ${zone}
 
-       exit ${EXIT_OK}
+       return ${EXIT_OK}
 }
 
-function hook_down() {
+hook_down() {
        local zone=${1}
        shift
 
@@ -113,12 +97,15 @@ function hook_down() {
 
        wpa_supplicant_stop ${zone}
 
+       # Remove WPA supplicant configuration
+       wpa_supplicant_config_destroy "${zone}"
+
        wireless_remove ${zone}
 
        exit ${EXIT_OK}
 }
 
-function hook_status() {
+hook_status() {
        local zone=${1}
        assert isset zone
 
@@ -131,33 +118,35 @@ function 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
-
-       cli_print_fmt1 3 "BSSID" "${bssid}"
-       cli_print_fmt1 3 "Frequency" \
-               "$(wpa_cli_bss_get_frequency ${zone} ${bssid}) MHz"
-       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}