+
+function zone_get_supported_port_hooks() {
+ local zone=${1}
+
+ local hook=$(zone_get_hook ${zone})
+
+ hook_zone_ports_get_all ${hook}
+}
+
+function zone_get_supported_config_hooks() {
+ local zone=${1}
+
+ local hook=$(zone_get_hook ${zone})
+
+ hook_zone_configs_get_all ${hook}
+}
+
+function zone_file() {
+ local zone=${1}
+
+ assert isset zone
+
+ echo "$(zone_dir ${zone})/settings"
+}
+
+function zone_config_read() {
+ local zone=${1}
+
+ assert isset zone
+
+ # Save the HOOK variable.
+ local hook="${HOOK}"
+
+ config_read $(zone_file ${zone})
+
+ # Restore hook.
+ HOOK="${hook}"
+}
+
+function zone_config_write() {
+ local zone=${1}
+
+ assert isset zone
+
+ config_write $(zone_file ${zone}) ${HOOK_SETTINGS}
+}
+
+function zone_config_set() {
+ local zone=${1}
+ shift
+ local args="$@"
+
+ assert isset zone
+
+ (
+ zone_config_read ${zone}
+
+ for arg in ${args}; do
+ eval "${arg}"
+ done
+
+ zone_config_write ${zone}
+ )
+}
+
+function zone_config_get() {
+ local zone=${1}
+ local key=${2}
+
+ assert isset zone
+ assert isset key
+
+ (
+ zone_config_read ${zone}
+
+ echo "${!key}"
+ )
+}