port_exists ${port} || return ${EXIT_OK}
- local attached_zone=$(port_is_attached ${port})
+ # Check if the port is attached to any zone and don't delete it.
+ local ok=${EXIT_OK}
+ local attached_zone=$(port_is_attached ${port})
if [ -n "${attached_zone}" ]; then
- error "Cannot destroy port '${port}' which is attached to zone '${attached_zone}'."
+ error_log "Cannot destroy port '${port}' which is attached to zone '${attached_zone}'."
+ ok=${EXIT_ERROR}
+ fi
+
+ # Check if the port is linked to any other port and don't allow the user
+ # to delete it.
+ local other_port
+ for other_port in $(ports_get); do
+ [ "${other_port}" = "${port}" ] && continue
+
+ if listmatch ${port} $(port_get_parents ${other_port}); then
+ error_log "Cannot destroy port '${port}' which is a parent port to '${other_port}'."
+ ok=${EXIT_ERROR}
+ fi
+
+ if listmatch ${port} $(port_get_children ${other_port}); then
+ error_log "Cannot destroy port '${port}' which is child of port '${other_port}'."
+ ok=${EXIT_ERROR}
+ fi
+ done
+
+ # If ok says we are not okay --> exit
+ if [ ${ok} -ne ${EXIT_OK} ]; then
return ${EXIT_ERROR}
fi
port_cmd status $@
}
+function port_info() {
+ port_cmd info $@
+}
+
function port_cmd() {
local cmd=${1}
local port=${2}
i=$(( ${i} + 1 ))
done
}
+
+function port_get_info() {
+ local port=${1}
+ local key=${2}
+
+ assert isset port
+ assert port_exists ${port}
+ assert isset key
+
+ (
+ eval $(port_info ${port})
+ echo "${!key}"
+ )
+}
+
+function port_get_parents() {
+ local port=${1}
+
+ port_get_info ${port} PORT_PARENTS
+}
+
+function port_get_children() {
+ local port=${1}
+
+ port_get_info ${port} PORT_CHILDREN
+}
. /lib/network/functions
HOOK=$(basename ${0})
+INFO_SETTINGS="HOOK PORT_PARENTS PORT_CHILDREN"
while [ $# -gt 0 ]; do
case "${1}" in
function run() {
case "${action}" in
- edit|add|create|rem|up|down|status)
+ edit|add|create|rem|up|down|status|info)
_${action} $@
;;
esac
error "Port hook '${HOOK}' didn't exit properly."
exit ${EXIT_ERROR}
}
+
+function _info() {
+ local port=${1}
+ shift
+
+ assert isset port
+
+ config_read $(port_file ${port})
+
+ local key
+ local val
+ for key in PORT_PARENTS PORT_CHILDREN; do
+ val="${key}_VAR"
+ val=${!val}
+ eval "${key}=\"${!val}\""
+ done
+
+ for key in ${INFO_SETTINGS}; do
+ echo "${key}=\"${!key}\""
+ done
+
+ exit ${ERROR_OK}
+}