]> git.ipfire.org Git - people/ms/network.git/blobdiff - src/header-port
wireless-ap: Allow to disable DFS in configuration
[people/ms/network.git] / src / header-port
index cf4ef0de6113d2cf5c69f4d86cda82b579e5fa3d..ce1c1923945adefd8879303f560944d8d88cddee 100644 (file)
 
 INFO_SETTINGS="HOOK PORT_PARENTS PORT_CHILDREN"
 
+HOOK_PORT_PATTERN="${PORT_PATTERN}"
+
 # This function is called after a device has been plugged
 # into the system and got its correct name.
 # The function is intended to create child ports and things
 # like that.
-function hook_hotplug() {
-       exit ${EXIT_OK}
+hook_hotplug() {
+       # If the hook does not handle the hotplug event, it
+       # must return EXIT_NOT_HANDLED.
+       exit ${EXIT_NOT_HANDLED}
 }
 
 # This function gets called when a device is plugged in
@@ -34,39 +38,133 @@ function hook_hotplug() {
 # The first argument is the port which should be tested
 # against the second argument which is the device that
 # has been plugged in.
-function hook_hotplug_rename() {
+hook_hotplug_rename() {
        exit ${EXIT_FALSE}
 }
 
-function hook_add() {
-       cmd_not_implemented
+hook_default_new() {
+       local ${HOOK_SETTINGS}
+       if ! hook_parse_cmdline "$@"; then
+               return ${EXIT_ERROR}
+       fi
+
+       assert isset HOOK_PORT_PATTERN
+
+       local port=$(port_find_free ${HOOK_PORT_PATTERN})
+       assert isset port
+
+       port_settings_write "${port}" ${HOOK_SETTINGS}
+
+       exit ${EXIT_OK}
 }
 
-function hook_info() {
-       local port="${1}"
+hook_new() {
+       hook_default_new "$@"
+}
+
+hook_default_edit() {
+       local port=${1}
        assert isset port
        shift
 
-       settings_read "$(port_file ${port})"
+       # Read settings
+       if ! port_settings_read "${port}" ${HOOK_SETTINGS}; then
+               error "Could not read settings for port ${port}"
+               return ${EXIT_ERROR}
+       fi
 
-       local key val
-       for key in PORT_PARENTS PORT_CHILDREN; do
-               val="${key}_VAR"
-               val=${!val}
-               eval "${key}=\"${!val}\""
-       done
+       # Parse command line arguments
+       if ! hook_parse_cmdline "$@"; then
+               return ${EXIT_ERROR}
+       fi
 
-       for key in ${INFO_SETTINGS}; do
-               echo "${key}=\"${!key}\""
-       done
+       # Save settings
+       if ! port_settings_write "${port}" ${HOOK_SETTINGS}; then
+               error "Could not write settings for port ${port}"
+               return ${EXIT_ERROR}
+       fi
+
+       # Apply settings
+       port_restart "${port}"
+
+       return ${EXIT_OK}
+}
+
+hook_edit() {
+       hook_default_edit "$@"
+}
+
+# Returns a list of all children of this port
+hook_children() {
+       local port="${1}"
 
-       exit ${ERROR_OK}
+       if ! port_settings_read "${port}" ${HOOK_SETTINGS}; then
+               log ERROR "Could not read port settings: ${port}"
+               return ${EXIT_OK}
+       fi
+
+       print "${SLAVES}"
 }
 
-function hook_status() {
+hook_status() {
        local port="${1}"
        assert isset port
 
        cli_device_headline "${port}" --long
        exit ${EXIT_OK}
 }
+
+# Create any virtual devices, but don't bring them up
+# Must tolerate that the device may already exist
+hook_create() {
+       cmd_not_implemented
+}
+
+# Must tolerate that the device may not exist
+hook_remove() {
+       cmd_not_implemented
+}
+
+# Just bring up the device
+hook_default_up() {
+       local port="${1}"
+       assert isset port
+
+       if ! device_exists "${port}"; then
+               log ERROR "Port '${port}' does not exist and cannot be brought up"
+               exit ${EXIT_ERROR}
+       fi
+
+       # Bring up the port
+       device_set_up "${port}"
+
+       # Bring up all slaves if the port has any
+       local slave
+       for slave in $(port_get_slaves "${port}"); do
+               port_up "${slave}"
+       done
+}
+
+# Depends on the port existing
+hook_up() {
+       hook_default_up "$@"
+}
+
+hook_default_down() {
+       local port="${1}"
+       assert isset port
+
+       if device_exists "${port}"; then
+               device_set_down "${port}"
+       fi
+
+       # Bring down all slaves if the port has any
+       local slave
+       for slave in $(port_get_slaves "${port}"); do
+               port_down "${slave}"
+       done
+}
+
+hook_down() {
+       hook_default_down "$@"
+}