]> git.ipfire.org Git - network.git/blobdiff - src/header-port
Makefile: Fix typo in localstatedir
[network.git] / src / header-port
index 0a9dc08385deecf1e9d0a4c051d87c580458b613..7d0b2722cbb2ef4bbd7a2b94123cc6bf989ee0d9 100644 (file)
@@ -21,6 +21,8 @@
 
 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
@@ -40,29 +42,106 @@ hook_hotplug_rename() {
        exit ${EXIT_FALSE}
 }
 
-hook_add() {
-       cmd_not_implemented
+hook_hotplug_rename_by_address() {
+       local port="${1}"
+       assert isset port
+
+       local device="${2}"
+       assert isset device
+
+       # Read in the conifguration file.
+       if ! port_settings_read "${port}"; then
+               return ${EXIT_ERROR}
+       fi
+
+       # Get the current MAC address of the device.
+       local address="$(device_get_address "${device}")"
+       assert isset address
+
+       # Check if the address matches with the configuration.
+       if list_match "${address}" "${ADDRESS}" "${DEVICE}"; then
+               log DEBUG "Device '${device}' is port '${port}'"
+               return ${EXIT_OK}
+       fi
+
+       log DEBUG "Device '${device}' is not port '${port}'"
+       return ${EXIT_ERROR}
 }
 
-hook_info() {
-       local port="${1}"
+# Returns the suggested name of the port
+hook_find_port_name() {
+       assert isset HOOK_PORT_PATTERN
+       port_find_free "${HOOK_PORT_PATTERN}"
+}
+
+hook_default_new() {
+       local ${HOOK_SETTINGS[*]}
+
+       # Import all default variables
+       hook_set_defaults
+
+       if ! hook_parse_cmdline "$@"; then
+               return ${EXIT_ERROR}
+       fi
+
+       # Determine a name for this port
+       local port="$(hook_find_port_name)"
+       assert isset port
+
+       # Save settings
+       if ! port_settings_write "${port}" ${HOOK_SETTINGS[*]}; then
+               return ${EXIT_ERROR}
+       fi
+
+       return ${EXIT_OK}
+}
+
+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}"
+
+       if ! port_settings_read "${port}" ${HOOK_SETTINGS[*]}; then
+               log ERROR "Could not read port settings: ${port}"
+               return ${EXIT_OK}
+       fi
 
-       exit ${ERROR_OK}
+       print "${SLAVES}"
 }
 
 hook_status() {
@@ -104,8 +183,9 @@ hook_default_up() {
        done
 }
 
+# Depends on the port existing
 hook_up() {
-       hook_default_up $@
+       hook_default_up "$@"
 }
 
 hook_default_down() {
@@ -124,5 +204,5 @@ hook_default_down() {
 }
 
 hook_down() {
-       hook_default_down $@
+       hook_default_down "$@"
 }