# #
###############################################################################
-function hook_info() {
+hook_info() {
echo "HOOK=\"${HOOK}\""
}
-function hook_hotplug() {
+hook_hotplug() {
# If the hook does not handle the hotplug event, it
# must return EXIT_NOT_HANDLED.
exit ${EXIT_NOT_HANDLED}
}
-function hook_create() {
+hook_new() {
local zone="${1}"
assert isset zone
shift
- settings_read $(zone_dir ${zone})/settings
-
- hook_parse_cmdline $@
+ if ! hook_parse_cmdline "$@"; then
+ return ${EXIT_ERROR}
+ fi
- settings_write $(zone_dir ${zone})/settings ${HOOK_SETTINGS}
+ if ! zone_settings_write "${zone}"; then
+ log ERROR "Could not write settings for zone ${zone}"
+ return ${EXIT_ERROR}
+ fi
exit ${EXIT_OK}
}
-function hook_edit() {
- hook_create $@
+hook_edit() {
+ local zone="${1}"
+ assert isset zone
+ shift
+
+ if ! zone_settings_read "${zone}"; then
+ log ERROR "Could not read settings for zone ${zone}"
+ return ${EXIT_ERROR}
+ fi
+
+ if ! hook_parse_cmdline "$@"; then
+ return ${EXIT_ERROR}
+ fi
+
+ if ! zone_settings_write "${zone}"; then
+ log ERROR "Could not write settings for zone ${zone}"
+ return ${EXIT_ERROR}
+ fi
+
+ exit ${EXIT_OK}
+
}
-function hook_remove() {
+hook_remove() {
cmd_not_implemented
}
-function hook_status() {
+hook_status() {
local zone="${1}"
assert isset zone
exit ${STATUS_DOWN}
}
-function hook_up() {
+hook_up() {
cmd_not_implemented
}
-function hook_down() {
+hook_down() {
cmd_not_implemented
}
-function hook_discover() {
+hook_discover() {
# This hook does not support a discovery
exit ${DISCOVER_NOT_SUPPORTED}
}
# Do nothing
-function hook_parse_cmdline() {
+hook_parse_cmdline() {
return ${EXIT_OK}
}
-function hook_port() {
+hook_port() {
local zone="${1}"
assert isset zone
local ret
case "${action}" in
add|create|edit|rem|show)
- hook_port_${action} "${zone}" $@
+ hook_port_${action} "${zone}" "$@"
ret=$?
;;
*)
exit ${ret}
}
-function hook_port_add() {
+hook_port_attach() {
return ${EXIT_NOT_SUPPORTED}
}
-function hook_port_edit() {
+hook_port_detach() {
return ${EXIT_NOT_SUPPORTED}
}
-function hook_port_remove() {
+hook_port_edit() {
return ${EXIT_NOT_SUPPORTED}
}
-function hook_port_show() {
- cmd_not_implemented
+hook_port_status() {
+ return ${EXIT_NOT_SUPPORTED}
}
-function hook_port_status() {
- return ${EXIT_NOT_SUPPORTED}
+hook_default_port_create() {
+ assert [ $# -ge 2 ]
+
+ local zone="${1}"
+ local port="${2}"
+
+ port_create "${port}"
+}
+
+hook_port_create() {
+ hook_default_port_create "$@"
}
-function hook_port_up() {
+hook_default_port_remove() {
+ assert [ $# -ge 2 ]
+
+ local zone="${1}"
+ local port="${2}"
+
+ port_remove "${port}"
+}
+
+hook_port_remove() {
+ hook_default_port_remove "$@"
+}
+
+hook_port_up() {
cmd_not_implemented
}
-function hook_port_down() {
+hook_port_down() {
cmd_not_implemented
}
-function hook_config() {
+hook_config() {
local zone="${1}"
assert isset zone
local ret
case "${action}" in
- create|edit|rem|show)
+ new|destroy|edit|show)
hook_config_${action} "${zone}" "$@"
exit $?
;;
esac
}
-function hook_config_cmd() {
+hook_config_cmd() {
local cmd="${1}"
assert isset cmd
hook_config_exec "${hook_config}" "${cmd}" "${zone}" "$@"
}
-function hook_config_create() {
- assert [ $# -gt 2 ]
+hook_config_new() {
+ assert [ $# -ge 2 ]
- hook_config_cmd "create" "$@"
+ hook_config_cmd "new" "$@"
}
-function hook_config_edit() {
- hook_config_cmd "edit" "$@"
+hook_config_destroy() {
+ assert [ $# -eq 2 ]
+ local zone=${1}
+ # The id must be the id and not the hid.
+ local id=${2}
+
+ shift 2
+
+ # Check if we get a valid id
+ if ! zone_config_id_is_valid ${zone} ${id}; then
+ log ERROR "ID: ${id} is not a valid id for zone ${zone}"
+ fi
+
+ local hook=$(zone_config_get_hook_from_id ${zone} ${id})
+ assert isset hook
+
+ # First we bring the hook down
+ hook_config_cmd "down" "${zone}" "${hook}" "${hook}.${id}"
+
+ # If a hook_destroy function is implemented in the hook this function will be executed.
+ # If not a empty defined in header-config is executed.
+ if ! hook_config_cmd "destroy" "${zone}" "${hook}" "${hook}.${id}" "$@"; then
+
+ # A better error message should printed inside the hook.
+ # We will not bring the config up because we do not know if it is safe or if some parts are already destroyed.
+ log ERROR "Could not destroy config with the follwoing id: ${id}"
+ return ${EXIT_ERROR}
+ fi
+
+ # Now we delete the config of the zone
+ zone_config_settings_destroy "${zone}" "${hook}.${id}"
}
-function hook_config_remove() {
- hook_config_cmd "remove" "$@"
+hook_config_edit() {
+ assert [ $# -ge 2 ]
+ local zone=${1}
+ # The id must be the id and not the hid.
+ local id=${2}
+
+ shift 2
+
+ # Check if we get a valid id
+ if ! zone_config_id_is_valid ${zone} ${id}; then
+ log ERROR "ID: ${id} is not a valid id for zone ${zone}"
+ fi
+
+ local hook=$(zone_config_get_hook_from_id ${zone} ${id})
+ assert isset hook
+
+ hook_config_cmd "edit" "${zone}" "${hook}" "${hook}.${id}" "$@"
}
-function hook_config_show() {
+hook_config_show() {
cmd_not_implemented
}
-function hook_ppp_write_config() {
+hook_ppp_write_config() {
cmd_not_implemented
# Arguments: <zone> <filename>
}
-function hook_ppp_ip_pre_up() {
+hook_ppp_ip_pre_up() {
local zone="${1}"
assert isset zone
shift
exit $?
}
-function hook_ppp_ipv4_up() {
+hook_ppp_ipv4_up() {
local zone="${1}"
assert isset zone
shift
exit $?
}
-function hook_ppp_ipv4_down() {
+hook_ppp_ipv4_down() {
local zone="${1}"
assert isset zone
shift
exit $?
}
-function hook_ppp_ipv6_up() {
+hook_ppp_ipv6_up() {
local zone="${1}"
assert isset zone
shift
exit $?
}
-function hook_ppp_ipv6_down() {
+hook_ppp_ipv6_down() {
local zone="${1}"
assert isset zone
shift