# into the system and got its correct name.
# The function is intended to create child ports and things
# like that.
-function hook_hotplug() {
+hook_hotplug() {
# If the hook does not handle the hotplug event, it
# must return EXIT_NOT_HANDLED.
exit ${EXIT_NOT_HANDLED}
# 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() {
+ 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})"
+ port_settings_read "${port}" ${HOOK_SETTINGS}
- local key val
- for key in PORT_PARENTS PORT_CHILDREN; do
- val="${key}_VAR"
- val=${!val}
- eval "${key}=\"${!val}\""
- done
+ if ! hook_parse_cmdline "$@"; then
+ return ${EXIT_ERROR}
+ fi
- for key in ${INFO_SETTINGS}; do
- echo "${key}=\"${!key}\""
- done
+ port_settings_write "${port}" ${HOOK_SETTINGS}
+
+ return ${EXIT_OK}
+}
- exit ${ERROR_OK}
+hook_edit() {
+ hook_default_edit "$@"
}
-function hook_status() {
+# 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
+
+ print "${SLAVES}"
+}
+
+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 "$@"
+}