MODE="g"
SSID=
-function hook_check() {
+function hook_check_settings() {
assert isset ADDRESS
assert ismac ADDRESS
assert isset BROADCAST_SSID
fi
}
-function hook_create() {
+function hook_new() {
while [ $# -gt 0 ]; do
case "${1}" in
--broadcast-ssid=*)
exit ${EXIT_OK}
}
-function hook_up() {
- local port=${1}
+function hook_create() {
+ local port="${1}"
assert isset port
+ device_exists "${port}" && exit ${EXIT_OK}
+
port_settings_read "${port}" ${HOOK_SETTINGS}
# Check if the PHY is present.
exit ${EXIT_ERROR}
fi
- # Create the wireless device, if it does not exist, yet.
- if ! device_exists ${port}; then
- wireless_create ${port} --phy="${phy}" --type="ap" \
- --address="${ADDRESS}"
- fi
-
- # Start the hostapd service.
- hostapd_start ${port}
- local ret=$?
-
- if [ ${ret} -ne ${EXIT_OK} ]; then
- log ERROR "Could not start hostapd on port '${port}': ${ret}"
- exit ${EXIT_ERROR}
- fi
+ # Create the wireless device
+ wireless_create "${port}" \
+ --phy="${phy}" \
+ --type="ap" \
+ --address="${ADDRESS}"
exit ${EXIT_OK}
}
-function hook_down() {
- local port=${1}
+function hook_remove() {
+ local port="${1}"
assert isset port
- # Stop the hostapd daemon.
- hostapd_stop ${port}
-
- # Remove the device if it is still present.
- if device_exists ${port}; then
- wireless_remove ${port}
+ # Remove the device if present
+ if device_exists "${port}"; then
+ wireless_remove "${port}"
fi
exit ${EXIT_OK}
}
-function hook_hotplug() {
- local port=${1}
+function hook_up() {
+ local port="${1}"
assert isset port
- local phy=${2}
- assert isset phy
+ # The port must already exist before
+ # hostapd is started. Otherwise it will
+ # fail horribly over and over again.
+ assert device_exists "${port}"
- assert port_exists ${port}
+ hostapd_start "${port}"
+}
- # Read configuration of port.
- port_settings_read "${port}" ${HOOK_SETTINGS}
+function hook_down() {
+ local port="${1}"
+ assert isset port
- # Get the address of the phy.
- local phy_address=$(phy_get_address ${phy})
+ hostapd_stop "${port}"
+}
- # Check if the phy is the same we have
- # read from the configuration file.
- if [ "${PHY}" = "${phy_address}" ]; then
- hook_up "${port}"
- fi
+function hook_hotplug() {
+ local port="${1}"
+ assert isset port
+
+ case "$(hotplug_action)" in
+ add)
+ # Create the port when the phy is plugged in
+ if hotplug_event_port_uses_phy "${port}"; then
+ hook_create "${port}"
+ fi
+ ;;
+
+ remove)
+ # Stop hostapd
+ if hotplug_event_port_is_interface "${port}"; then
+ hostapd_stop "${port}"
+
+ exit ${EXIT_OK}
+ fi
+ ;;
+ esac
exit ${EXIT_NOT_HANDLED}
}