network_settings_read
cli_settings() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-settings
exit ${EXIT_OK}
fi
if [ -n "${1}" ]; then
- network_settings_set $@
+ network_settings_set "$@"
network_settings_write
else
network_settings_print
}
cli_device() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-device
exit ${EXIT_OK}
fi
case "${action}" in
list)
- cli_device_list $@
+ cli_device_list "$@"
;;
*)
local device="${action}"
case "${action}" in
discover)
- cli_device_discover ${device} $@
+ cli_device_discover ${device} "$@"
;;
identify)
- device_identify "${device}" $@
+ device_identify "${device}" "$@"
;;
monitor)
- cli_device_monitor "${device}" $@
+ cli_device_monitor "${device}" "$@"
;;
status)
cli_device_status ${device}
;;
unlock)
- cli_device_serial_unlock ${device} $@
+ cli_device_serial_unlock ${device} "$@"
;;
ussd)
- cli_device_send_ussd_command "${device}" $@
+ cli_device_send_ussd_command "${device}" "$@"
;;
*)
cli_show_man network-device
cli_print_fmt1 1 "Status" "${status}"
cli_print_fmt1 1 "Type" "${type}"
+ # Print the driver name
+ local driver="$(device_get_driver "${device}")"
+ if isset driver; then
+ cli_print_fmt1 1 "Driver" "${driver}"
+ fi
+
# Ethernet-compatible?
device_is_ethernet_compatible "${device}" &>/dev/null
cli_print_fmt1 1 "Ethernet-compatible" "$(cli_print_bool $?)"
# Supports multiqueue?
if device_supports_multiqueue ${device}; then
- cli_print_fmt 1 "Multiqueue" "Supported"
+ cli_print_fmt1 1 "Multiqueue" "Supported"
fi
cli_space
local address="$(phy_get_address "${phy}")"
cli_print_fmt1 1 "Address" "${address}"
+
+ # Show kernel module
+ local driver="$(phy_get_driver "${phy}")"
+ if isset driver; then
+ cli_print_fmt1 1 "Driver" "${driver}"
+ fi
+
cli_space
local devices="$(phy_get_devices "${phy}")"
}
cli_device_serial_unlock() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-device
exit ${EXIT_OK}
fi
}
cli_hostname() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network
exit ${EXIT_OK}
fi
}
cli_port() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-port
exit ${EXIT_OK}
fi
case "${action}" in
edit|create|remove|up|down|status|identify)
- port_${action} "${port}" $@
+ port_${action} "${port}" "$@"
;;
color)
- color_cli "port" "${port}" $@
+ color_cli "port" "${port}" "$@"
;;
description)
- description_cli "port" "${port}" $@
+ description_cli "port" "${port}" "$@"
;;
*)
error "Unrecognized argument: ${action}"
case "${action}" in
new|destroy)
- port_${action} $@
+ port_${action} "$@"
;;
*)
error "Unrecognized argument: ${action}"
}
cli_zone() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-zone
exit ${EXIT_OK}
fi
case "${action}" in
port)
- cli_zone_port "${zone}" $@
+ cli_zone_port "${zone}" "$@"
;;
rename)
- cli_zone_rename "${zone}" $@
+ cli_zone_rename "${zone}" "$@"
;;
config|disable|down|edit|enable|identify|status|up)
- zone_${action} ${zone} $@
+ zone_${action} ${zone} "$@"
;;
color)
- color_cli "zone" "${zone}" $@
+ color_cli "zone" "${zone}" "$@"
;;
description)
- description_cli "zone" ${zone} $@
+ description_cli "zone" ${zone} "$@"
;;
*)
error "Unrecognized argument: ${action}"
case "${action}" in
new)
- cli_zone_new $@
+ cli_zone_new "$@"
;;
destroy)
- cli_zone_destroy $@
+ cli_zone_destroy "$@"
;;
""|*)
if [ -n "${action}" ]; then
}
cli_zone_new() {
- if cli_help_requested $@ || [ $# -lt 2 ]; then
+ if cli_help_requested "$@" || [ $# -lt 2 ]; then
cli_show_man network-zone-new
exit ${EXIT_OK}
fi
- zone_new $@
+ zone_new "$@"
}
# Removes a zone either immediately, if it is currently down,
# or adds a tag that the removal will be done when the zone
# is brought down the next time.
cli_zone_destroy() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-zone
exit ${EXIT_OK}
fi
local zone="${1}"
- assert zone_exists "${zone}"
- if zone_is_up ${zone}; then
- echo "Zone '${zone}' is up and will be removed when it goes down the next time."
- zone_destroy "${zone}"
- else
- echo "Removing zone '${zone}' now..."
- zone_destroy_now "${zone}"
+ # Check if the zone exists
+ if ! zone_exists "${zone}"; then
+ error "Zone '${zone}' does not exist"
+ return ${EXIT_ERROR}
fi
- exit ${EXIT_OK}
+ echo "Removing zone '${zone}'..."
+ zone_destroy "${zone}" || exit $?
}
cli_zone_port() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-zone-port
exit ${EXIT_OK}
fi
case "${action}" in
edit)
- zone_port_edit "${zone}" "${port}" $@
+ zone_port_edit "${zone}" "${port}" "$@"
;;
*)
error "Unrecognised argument: ${action}"
case "${action}" in
attach)
- zone_port_attach "${zone}" $@
+ zone_port_attach "${zone}" "$@"
;;
detach)
- zone_port_detach "${zone}" $@
+ zone_port_detach "${zone}" "$@"
;;
*)
error "Unrecognised argument: ${action}"
}
cli_zone_rename() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-zone
exit ${EXIT_OK}
fi
exit ${EXIT_ERROR}
fi
- # Destroyed zones cannot be renamed
- if zone_has_destroy_tag "${zone}"; then
- error "Zone ${zone} is about to be destroyed and cannot be renamed"
- exit ${EXIT_ERROR}
- fi
-
# Check if a zone with the new name already exists
if zone_exists "${name}"; then
error "Zone ${name} already exists"
local type=${1}
shift
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-zone
exit ${EXIT_OK}
fi
done | sort -u
}
-cli_route() {
- if cli_help_requested $@; then
- cli_show_man network-route
- exit ${EXIT_OK}
- fi
-
- local action=${1}
- shift
-
- case "${action}" in
- static)
- cli_route_static $@
- ;;
- *)
- error "Unrecognized action: ${action}"
- cli_run_help network route
-
- exit ${EXIT_ERROR}
- ;;
- esac
-
- exit ${EXIT_OK}
-
-
-}
-
-cli_route_static() {
- if cli_help_requested $@; then
- cli_show_man network-route-static
- exit ${EXIT_OK}
- fi
-
- local action=${1}
- shift
-
- case "${action}" in
- # Add a new route.
- add)
- route_add $@
- ;;
- # Remove an existing route.
- remove)
- route_remove $@
- ;;
- # List all routes.
- list)
- route_list $@
- return ${EXIT_OK}
- ;;
- # Reload all routes.
- reload)
- route_apply $@
- ;;
- *)
- error "Unrecognized action: ${action}"
- cli_run_help network route
-
- exit ${EXIT_ERROR}
- ;;
- esac
-
- # Applying all routes.
- route_apply
-
- exit ${EXIT_OK}
-}
-
cli_dhcpd() {
local proto=${1}
shift
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-dhcp
exit ${EXIT_OK}
fi
case "${action}" in
edit)
- dhcpd_edit ${proto} $@
+ dhcpd_edit ${proto} "$@"
;;
start)
dhcpd_start ${proto}
dhcpd_reload ${proto}
;;
subnet)
- cli_dhcpd_subnet ${proto} $@
+ cli_dhcpd_subnet ${proto} "$@"
;;
show|"")
- cli_dhcpd_show ${proto} $@
+ cli_dhcpd_show ${proto} "$@"
;;
*)
error "Unrecognized action: ${action}"
local proto=${1}
shift
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-dhcp-subnet
exit ${EXIT_OK}
fi
case "${action}" in
new)
- dhcpd_subnet_new ${proto} $@
+ dhcpd_subnet_new ${proto} "$@"
;;
remove)
- dhcpd_subnet_remove ${proto} $@
+ dhcpd_subnet_remove ${proto} "$@"
;;
*:*/*|*.*.*.*/*)
local subnet=${action}
case "${action}" in
edit)
- dhcpd_subnet_edit ${proto} ${subnet} $@
+ dhcpd_subnet_edit ${proto} ${subnet} "$@"
local ret=$?
if [ ${ret} -eq ${EXIT_OK} ]; then
exit ${ret}
;;
range)
- cli_dhcpd_subnet_range ${proto} ${subnet} $@
+ cli_dhcpd_subnet_range ${proto} ${subnet} "$@"
exit $?
;;
show)
- cli_dhcpd_subnet_show ${proto} ${subnet} $@
+ cli_dhcpd_subnet_show ${proto} ${subnet} "$@"
exit $?
;;
options)
- cli_dhcpd_subnet_options ${proto} ${subnet} $@
+ cli_dhcpd_subnet_options ${proto} ${subnet} "$@"
exit $?
;;
*)
case "${action}" in
new)
- dhcpd_subnet_range_new ${proto} ${subnet} $@ || exit ${EXIT_ERROR}
+ dhcpd_subnet_range_new ${proto} ${subnet} "$@" || exit ${EXIT_ERROR}
;;
remove)
- dhcpd_subnet_range_remove ${proto} ${subnet} $@ || exit ${EXIT_ERROR}
+ dhcpd_subnet_range_remove ${proto} ${subnet} "$@" || exit ${EXIT_ERROR}
;;
*)
error "Unrecognized action: ${action}"
}
cli_dhcpd_subnet_options() {
- assert [ $# -eq 2 ]
+ assert [ $# -ge 2 ]
local proto=${1}
local subnet=${2}
case "${1}" in
*=*)
key=$(cli_get_key ${1})
- val=$(cli_get_val ${1})
+ val=$(cli_get_val "${1}")
dhcpd_subnet_option_set ${proto} ${subnet} ${key} ${val}
esac
+ shift
done
}
cli_start() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network
exit ${EXIT_OK}
fi
- local zones=$(zones_get $@)
+ local zones=$(zones_get "$@")
local zone
for zone in ${zones}; do
}
cli_stop() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network
exit ${EXIT_OK}
fi
- local zones=$(zones_get $@)
+ local zones=$(zones_get "$@")
local zone
for zone in ${zones}; do
}
cli_restart() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network
exit ${EXIT_OK}
fi
- cli_stop $@
+ cli_stop "$@"
# Give the system some time to calm down
sleep ${TIMEOUT_RESTART}
- cli_start $@
+ cli_start "$@"
}
cli_status() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network
exit ${EXIT_OK}
fi
local log_disable_stdout=${LOG_DISABLE_STDOUT}
LOG_DISABLE_STDOUT="true"
- local zones=$(zones_get $@)
+ local arguments=( $@ )
- local zone
- for zone in ${zones}; do
- zone_status ${zone}
+ # Show all zones when no arguments are given
+ if ! isset arguments; then
+ local zone
+ for zone in $(zones_get_all); do
+ zone_status "${zone}"
+ done
+
+ return ${EXIT_OK}
+ fi
+
+ local arg
+ for arg in ${arguments[@]}; do
+ # Is this a zone?
+ if zone_exists "${arg}"; then
+ zone_status "${arg}"
+
+ # Is this a port?
+ elif port_exists "${arg}"; then
+ port_status "${arg}"
+
+ # Is this a PHY?
+ elif phy_exists "${arg}"; then
+ cli_device_status "${arg}"
+
+ # Is this a device?
+ elif device_exists "${arg}"; then
+ cli_device_status "${arg}"
+
+ # Unknown argument
+ else
+ error "Unknown argument: ${arg}"
+ fi
done
# Reset logging.
}
cli_reset() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network
exit ${EXIT_OK}
fi
fi
fi
+ # Destroy all IPsec VPN connections
+ local connection
+ for connection in $(ipsec_list_connections); do
+ ipsec_connection_destroy "${connection}"
+ done
+
+ local pool
+ for pool in $(ipsec_list_pools); do
+ ipsec_pool_destroy "${pool}"
+ done
+
+ # Stop strongswan
+ ipsec_strongswan_autostart
+
+ # Destroy all user-defined security policies
+ local secpol
+ for secpol in $(vpn_security_policies_list_user); do
+ vpn_security_policies_destroy "${secpol}"
+ done
+
local zone
- for zone in $(zones_get --all); do
- zone_destroy_now "${zone}"
+ for zone in $(zones_get_all); do
+ zone_destroy "${zone}"
done
local port
- for port in $(ports_get --all); do
+ for port in $(ports_get_all); do
port_destroy "${port}"
done
# Flush all DNS servers.
dns_server_flush
- # Re-run the initialization functions
- init_run
+ # Trigger udev to re-add all physical network devices
+ cmd_quiet udevadm trigger --action=add --subsystem-match=net
exit ${EXIT_OK}
}
}
cli_dns_server() {
- if cli_help_requested $@; then
+ if cli_help_requested "$@"; then
cli_show_man network-dns-server
exit ${EXIT_OK}
fi
db-dump)
db_dump
;;
+ device-get-by-mac-address)
+ device_get_by_mac_address "$@"
+ ;;
+ ipsec-connection-exists)
+ ipsec_connection_exists "$@"
+ ;;
list-devices)
device_list
;;
list-dhcpd-ranges-of-subnet)
- dhcpd_subnet_range_list $@
+ dhcpd_subnet_range_list "$@"
;;
list-dhcpd-settings)
- dhcpd_global_settings_list $@
+ dhcpd_global_settings_list "$@"
;;
list-dhcpd-subnets)
- dhcpd_subnet_list $@
+ dhcpd_subnet_list "$@"
;;
list-dhcpd-subnet-options)
- dhcpd_subnet_options_list $@
+ dhcpd_subnet_options_list "$@"
;;
list-dns-servers)
dns_server_list
port_list_free
;;
list-hooks)
- hook_list $@
+ hook_list "$@"
+ ;;
+ list-ipsec-connections)
+ ipsec_list_connections
;;
list-ports)
port_list
;;
list-ports-of-zone)
- zone_get_ports $@
+ zone_get_ports "$@"
+ ;;
+ list-vpn-security-policies-all)
+ vpn_security_policies_list_all
;;
list-settings)
network_settings_list
list-next-free-zones)
zones_get_next_free
;;
+ list-zone-config-ids)
+ zone_config_list_ids "$@"
+ ;;
+ list-zone-config-hids)
+ zone_config_list_hids "$@"
+ ;;
+ vpn-security-policy-exists)
+ vpn_security_policy_exists "$@"
+ ;;
zone-name-is-valid)
- zone_name_is_valid $@
+ zone_name_is_valid "$@"
;;
- *)
- error "No such command: ${cmd}"
- exit ${EXIT_ERROR}
+ zone-config-id-is-valid)
+ zone_config_id_is_valid "$@"
;;
- esac
-
- exit ${EXIT_OK}
-}
-
-cli_vpn() {
- local action=${1}
- shift 1
-
- case "${action}" in
- security-policies)
- cli_vpn_security_policies $@
+ zone-config-hid-is-valid)
+ zone_config_hid_is_valid "$@"
;;
*)
- error "Unrecognized argument: ${action}"
+ error "No such command: ${cmd}"
exit ${EXIT_ERROR}
;;
esac
-}
-
-cli_vpn_security_policies() {
-
- local action
- local security_policy
-
- if vpn_security_policy_exists ${1}; then
- security_policy=${1}
- key=${2}
- shift 2
-
- case "${key}" in
- cipher|compression|integrity|lifetime|pfs|show)
- vpn_security_policies_${key} ${security_policy} $@
- ;;
- group-type)
- vpn_security_policies_group_type ${security_policy} $@
- ;;
- key-exchange)
- vpn_security_policies_key_exchange ${security_policy} $@
- ;;
- *)
- error "Unrecognized argument: ${key}"
- exit ${EXIT_ERROR}
- ;;
- esac
- else
- action=${1}
- shift
-
- case "${action}" in
- new)
- vpn_security_policies_new $@
- ;;
- destroy)
- vpn_security_policies_destroy $@
- ;;
- ""|*)
- if [ -n "${action}" ]; then
- error "Unrecognized argument: '${action}'"
- fi
- exit ${EXIT_ERROR}
- ;;
- esac
- fi
+ exit ${EXIT_OK}
}
# Process the given action
case "${action}" in
init)
- init_run
+ # Update resolv.conf(5) when initializing the network
+ dns_generate_resolvconf
+
+ # Also execute all triggers
+ triggers_execute_all "init"
;;
- settings|hostname|port|device|zone|start|stop|restart|status|reset|route|vpn)
- cli_${action} $@
+ settings|hostname|port|device|zone|start|stop|restart|status|reset|route|vpn|wireless)
+ cli_${action} "$@"
;;
# DHCP server configuration (automatically detects which protocol to use).
dhcpv6|dhcpv4)
- cli_dhcpd ${action/dhcp/ip} $@
+ cli_dhcpd ${action/dhcp/ip} "$@"
;;
# DNS server configuration.
dns-server)
- cli_dns_server $@
+ cli_dns_server "$@"
;;
""|help|--help|-h)
- cli_help $@
+ cli_help "$@"
;;
raw)
- cli_raw $@
+ cli_raw "$@"
;;
*)