# #
###############################################################################
-port_dir() {
- echo "${NETWORK_CONFIG_DIR}/ports"
-}
-
-port_list() {
+ports_get_all() {
local port
- for port in $(port_dir)/*; do
- port="$(basename "${port}")"
+ for port in $(list_directory "${NETWORK_PORTS_DIR}"); do
if port_exists "${port}"; then
print "${port}"
fi
done
}
+# XXX TO BE REMOVED
+port_list() {
+ ports_get_all "$@"
+}
+
port_list_in_use() {
local ports_in_use
# Save the HOOK variable.
local hook="${HOOK}"
- settings_read "$(port_file "${port}")" ${HOOK_SETTINGS}
+ settings_read "$(port_file "${port}")" ${HOOK_SETTINGS[*]}
# Restore hook.
HOOK="${hook}"
if function_exists "hook_check_settings"; then
list_append args "--check=\"hook_check_settings\""
fi
- list_append args ${HOOK_SETTINGS}
+ list_append args HOOK ${HOOK_SETTINGS[*]}
settings_write "$(port_file "${port}")" ${args}
}
-ports_get_all() {
- port_list
-}
-
port_file() {
local port="${1}"
assert isset port
- echo "$(port_dir)/${port}"
+ echo "${NETWORK_PORTS_DIR}/${port}/settings"
}
port_exists() {
local port=${1}
- [ -f "${NETWORK_CONFIG_DIR}/ports/${port}" ]
+ [ -d "${NETWORK_CONFIG_DIR}/ports/${port}" ]
}
port_get_hook() {
local zone
for zone in $(zones_get_all); do
-
- assert isset zone
- assert zone_exists ${zone}
-
- if listmatch ${port} $(zone_get_ports ${zone}); then
+ if list_match ${port} $(zone_get_ports ${zone}); then
echo "${zone}"
return ${EXIT_OK}
fi
}
port_is_up() {
- device_is_up $@
+ device_is_up "$@"
}
port_new() {
return ${EXIT_ERROR}
fi
- hook_exec port "${hook}" new $@
+ hook_exec port "${hook}" new "$@"
}
port_destroy() {
local port=${1}
-
assert isset port
- port_exists ${port} || return ${EXIT_OK}
-
- # Check if the port is attached to any zone and don't delete it.
- local ok=${EXIT_OK}
+ # Cannot delete a port that does not exist
+ if ! port_exists ${port}; then
+ error "No such port: ${port}"
+ return ${EXIT_ERROR}
+ fi
local attached_zone=$(port_is_attached ${port})
if [ -n "${attached_zone}" ]; then
- error_log "Cannot destroy port '${port}' which is attached to zone '${attached_zone}'."
- ok=${EXIT_ERROR}
+ if ! zone_port_detach "${attached_zone}" "${port}"; then
+ error "Could not remove port ${port} from zone ${zone}"
+ return ${EXIT_ERROR}
+ fi
fi
# Check if the port is linked to any other port and don't allow the user
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}
+ if list_match ${port} $(port_get_children ${other_port}); then
+ log ERROR "Cannot destroy port '${port}' which is child of port '${other_port}'."
+ return ${EXIT_ERROR}
fi
done
- # If ok says we are not okay --> exit
- if [ ${ok} -ne ${EXIT_OK} ]; then
+ # Shut down the port before destroying it
+ if ! port_remove "${port}"; then
return ${EXIT_ERROR}
fi
- port_remove "${port}"
+ if ! rm -rf "${NETWORK_PORTS_DIR}/${port}"; then
+ log ERROR "Could not destroy port ${port}"
+ return ${EXIT_ERROR}
+ fi
- rm -f $(port_file ${port})
+ log INFO "Destroyed port ${port}"
+ return ${EXIT_OK}
}
port_create() {
- port_cmd "create" $@
+ port_cmd "create" "$@"
}
port_remove() {
local port="${1}"
assert isset port
+ if ! port_exists "${port}"; then
+ log ERROR "Port ${port} does not exist"
+ return ${EXIT_ERROR}
+ fi
+
# If the device is still up, we need to bring it down first.
if device_is_up "${port}"; then
port_down "${port}"
port_cmd "remove" "${port}"
}
+# Restarts the port by removing it and then re-creating it
+port_restart() {
+ local port="${1}"
+ assert isset port
+
+ port_remove "${port}"
+
+ port_create "${port}"
+}
+
port_edit() {
- port_cmd edit $@
+ port_cmd edit "$@"
}
port_up() {
- port_cmd up $@
+ assert [ $# -eq 1 ]
+
+ local port="${1}"
+
+ # Check if the port exists
+ if ! device_exists "${port}"; then
+ log ERROR "Could not bring up port ${port} which has not been created"
+ return ${EXIT_ERROR}
+ fi
+
+ port_cmd up "${port}"
}
port_down() {
- port_cmd down $@
+ port_cmd down "$@"
}
port_status() {
- port_cmd status $@
-}
-
-port_info() {
- port_cmd info $@
+ port_cmd status "$@"
}
port_cmd() {
local hook=$(port_get_hook ${port})
- assert isset hook
+ # Abort if we could not find a hook
+ if ! isset hook; then
+ log CRITICAL "Port ${port} does not have a hook associated with it"
+ return ${EXIT_ERROR}
+ fi
- hook_exec port ${hook} ${cmd} ${port} $@
+ hook_exec port ${hook} ${cmd} ${port} "$@"
}
ports_get() {
local port
- for port in $(port_dir)/*; do
- port=$(basename ${port})
+ for port in $(list_directory "${NETWORK_PORTS_DIR}"); do
if port_exists ${port}; then
echo "${port}"
fi
return ${EXIT_ERROR}
}
-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}"
- )
-}
-
-port_get_parents() {
- local port=${1}
-
- port_get_info ${port} PORT_PARENTS
-}
-
port_get_children() {
local port=${1}
- port_get_info ${port} PORT_CHILDREN
+ assert port_exists "${port}"
+
+ port_cmd "children" "${port}"
}
port_zone() {
# Get the first element which is the lowest MAC address
list_head ${addresses}
}
+
+port_identify() {
+ device_identify "$@"
+}
+
+port_get_color() {
+ # This function return the color of a port
+ assert [ $# -eq 1 ]
+
+ local name=${1}
+ color_read "port" ${name}
+}
+
+port_get_description_title() {
+ assert [ $# -eq 1 ]
+
+ local name=${1}
+ description_title_read $(description_format_filename "port" "${name}")
+}