. /usr/lib/network/header-zone
-HOOK_SETTINGS="HOOK PHY MAC MTU SSID KEY ENCRYPTION"
-
-# Default values
-ADDRESS=$(mac_generate)
-PHY=
-MTU=1500
-SSID=
-KEY=
-ENCRYPTION_MODE=
+HOOK_SETTINGS="HOOK ADDRESS PHY"
hook_check_settings() {
- assert isset SSID
-
- if isset ADDRESS; then
- assert ismac ADDRESS
- fi
-
- assert isinteger MTU
+ 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})
+ ADDRESS=$(cli_get_val "${1}")
;;
- --key=*)
- KEY=$(cli_get_val ${1})
+ --phy=*)
+ PHY=$(cli_get_val "${1}")
;;
*)
warning "Unrecognized option: ${1}"
# 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() {
# 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.
zone_configs_up ${zone}
- exit ${EXIT_OK}
+ return ${EXIT_OK}
}
hook_down() {
wpa_supplicant_stop ${zone}
+ # Remove WPA supplicant configuration
+ wpa_supplicant_config_destroy "${zone}"
+
wireless_remove ${zone}
exit ${EXIT_OK}
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}