]> git.ipfire.org Git - people/stevee/network.git/blobdiff - src/hooks/ports/wireless-ap
Fix hook settings writing and checking
[people/stevee/network.git] / src / hooks / ports / wireless-ap
index 8a0f81c8a076d819739d3ecafe215130716d2b23..3ff80d06136050d15cd71de1dc50c61d4f5cb470 100644 (file)
@@ -32,7 +32,7 @@ KEY=""
 MODE="g"
 SSID=
 
-function hook_check() {
+function hook_check_settings() {
        assert isset ADDRESS
        assert ismac ADDRESS
        assert isset BROADCAST_SSID
@@ -53,7 +53,7 @@ function hook_check() {
        fi
 }
 
-function hook_create() {
+function hook_new() {
        while [ $# -gt 0 ]; do
                case "${1}" in
                        --broadcast-ssid=*)
@@ -139,10 +139,12 @@ function hook_edit() {
        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.
@@ -152,59 +154,67 @@ function hook_up() {
                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}
 }