. /usr/lib/network/functions
-# Read network configuration.
-network_config_read
+# Read network settings
+network_settings_read
-function cli_config() {
+function cli_settings() {
if cli_help_requested $@; then
- cli_show_man network-config
+ cli_show_man network-settings
exit ${EXIT_OK}
fi
if [ -n "${1}" ]; then
- config_set $@
- network_config_write
+ settings_set $@
+ network_settings_write
else
- network_config_print
+ network_settings_print
fi
}
exit ${EXIT_OK}
fi
- local device=${1}
- local action=${2}
- shift 2
-
- if ! isset device; then
- cli_show_man network-device
- return ${EXIT_ERROR}
- fi
-
- assert device_exists ${device}
+ local action="${1}"
+ shift
case "${action}" in
- discover)
- cli_device_discover ${device} $@
- ;;
- status)
- cli_device_status ${device}
- ;;
- unlock)
- cli_device_serial_unlock ${device} $@
- ;;
- ussd)
- cli_device_send_ussd_command "${device}" $@
+ list)
+ cli_device_list $@
;;
*)
- cli_show_man network-device
+ local device="${action}"
+ action="${1}"
+ shift
+
+ if ! isset device; then
+ cli_show_man network-device
+ return ${EXIT_ERROR}
+ fi
+
+ assert device_exists ${device}
+
+ case "${action}" in
+ discover)
+ cli_device_discover ${device} $@
+ ;;
+ monitor)
+ cli_device_monitor "${device}" $@
+ ;;
+ status)
+ cli_device_status ${device}
+ ;;
+ unlock)
+ cli_device_serial_unlock ${device} $@
+ ;;
+ ussd)
+ cli_device_send_ussd_command "${device}" $@
+ ;;
+ *)
+ cli_show_man network-device
+ ;;
+ esac
;;
esac
}
function cli_device_status() {
- local device=${1}
- assert device_exists ${device}
+ local device="${1}"
+ assert isset device
# Disable debugging output here.
local log_disable_stdout=${LOG_DISABLE_STDOUT}
cli_headline 1 "Device status: ${device}"
cli_print_fmt1 1 "Name" "${device}"
- # Handle serial devices.
- if [ "${type}" = "serial" ]; then
- cli_device_status_serial ${device}
- return $?
- fi
+ # Handle special devices
+ case "${type}" in
+ phy)
+ cli_device_status_phy "${device}"
+ return $?
+ ;;
+ serial)
+ cli_device_status_serial "${device}"
+ return $?
+ ;;
+ esac
# Print the device status.
device_is_up ${device} &>/dev/null
cli_print_fmt1 1 "Status" "${status}"
cli_print_fmt1 1 "Type" "${type}"
+
+ # Ethernet-compatible?
+ device_is_ethernet_compatible "${device}" &>/dev/null
+ cli_print_fmt1 1 "Ethernet-compatible" "$(cli_print_bool $?)"
+
cli_print_fmt1 1 "Address" "$(device_get_address ${device})"
cli_space
# Print the link speed for ethernet devices.
if device_is_up ${device} &>/dev/null; then
- case "${type}" in
- ethernet)
- cli_print_fmt1 1 "Link" \
- "$(device_get_speed ${device}) MBit/s $(device_get_duplex ${device}) duplex"
- ;;
- esac
+ local link="$(device_get_link_string "${device}")"
+ if isset link; then
+ cli_print_fmt1 1 "Link" "${link}"
+ fi
fi
cli_print_fmt1 1 "MTU" "$(device_get_mtu ${device})"
cli_space
fi
+ case "${type}" in
+ wireless*)
+ local phy="$(device_get_phy "${device}")"
+ if isset phy; then
+ cli_headline 2 "PHY"
+ cli_print_fmt1 2 "Name" "${phy}"
+ cli_print_fmt1 2 "Address" "$(phy_get_address "${phy}")"
+ cli_space
+ fi
+ ;;
+ esac
+
# Reset the logging level.
LOG_DISABLE_STDOUT=${log_disable_stdout}
}
cli_space
}
+function cli_device_status_phy() {
+ local phy="${1}"
+ assert phy_exists "${phy}"
+
+ local address="$(phy_get_address "${phy}")"
+ cli_print_fmt1 1 "Address" "${address}"
+ cli_space
+
+ local devices="$(phy_get_devices "${phy}")"
+ if isset devices; then
+ cli_headline 2 "Soft interfaces"
+
+ local device
+ for device in ${devices}; do
+ cli_print 2 "* %s" "${device}"
+ done
+ cli_space
+ fi
+
+ return ${EXIT_OK}
+}
+
function cli_device_discover() {
local device=${1}
shift
- local device_type=$(device_get_type ${device})
- if [ "${device_type}" != "real" ]; then
+ # This can only be executed for ethernet (or compatible) devices
+ if ! device_is_ethernet_compatible "${device}"; then
return ${EXIT_OK}
fi
exit $?
}
+function cli_device_monitor() {
+ local device="${1}"
+ assert isset device
+
+ if ! device_is_wireless "${device}"; then
+ error "This action only works with wireless devices. Exiting."
+ exit ${EXIT_ERROR}
+ fi
+
+ wireless_monitor "${device}"
+ exit $?
+}
+
+function cli_device_list() {
+ local device
+ for device in $(device_list); do
+ cli_device_status "${device}"
+ done
+
+ exit ${EXIT_OK}
+}
+
function cli_hostname() {
if cli_help_requested $@; then
cli_show_man network
action=${2}
shift 2
- # Action aliases
case "${action}" in
- start)
- action="up"
- ;;
- stop)
- action="down"
- ;;
- show)
- action="status"
- ;;
- esac
-
- case "${action}" in
- edit|up|down|status)
- port_${action} ${port} $@
+ edit|create|remove|up|down|status)
+ port_${action} "${port}" $@
;;
*)
error "Unrecognized argument: ${action}"
shift
case "${action}" in
- create|destroy)
+ new|destroy)
port_${action} $@
;;
*)
# Action aliases
case "${action}" in
- start)
+ start|reload)
action="up"
;;
stop)
esac
case "${action}" in
- config|disable|down|edit|enable|port|status|up)
+ port)
+ cli_zone_port "${zone}" $@
+ ;;
+ config|disable|down|edit|enable|status|up)
zone_${action} ${zone} $@
;;
*)
shift
case "${action}" in
- create)
- zone_${action} $@
+ new)
+ zone_new $@
;;
- remove)
- cli_zone_remove $@
+ destroy)
+ cli_zone_destroy $@
;;
list-hooks)
cli_list_hooks zone $@
# 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.
-function cli_zone_remove() {
+function cli_zone_destroy() {
if cli_help_requested $@; then
cli_show_man network-zone
exit ${EXIT_OK}
fi
- local zone=${1}
- assert zone_exists ${zone}
+ 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_remove ${zone}
+ zone_destroy "${zone}"
else
echo "Removing zone '${zone}' now..."
- zone_remove_now ${zone}
+ zone_destroy_now "${zone}"
+ fi
+
+ exit ${EXIT_OK}
+}
+
+function cli_zone_port() {
+ if cli_help_requested $@; then
+ cli_show_man network-zone-port
+ exit ${EXIT_OK}
+ fi
+
+ local zone="${1}"
+ assert zone_exists "${zone}"
+
+ if port_exists "${2}"; then
+ local port="${2}"
+ local action="${3}"
+ shift 3
+
+ case "${action}" in
+ edit)
+ zone_port_edit "${zone}" "${port}" $@
+ ;;
+ *)
+ error "Unrecognised argument: ${action}"
+ exit ${EXIT_ERROR}
+ ;;
+ esac
+ else
+ local action="${2}"
+ shift 2
+
+ case "${action}" in
+ attach)
+ zone_port_attach "${zone}" $@
+ ;;
+ detach)
+ zone_port_detach "${zone}" $@
+ ;;
+ *)
+ error "Unrecognised argument: ${action}"
+ exit ${EXIT_ERROR}
+ ;;
+ esac
fi
exit ${EXIT_OK}
cli_headline $(( ${level} + 2 )) "Options"
local option
- for option in $(dhcpd_subnet_options ${proto}); do
+ for option in $(dhcpd_subnet_options_list ${proto}); do
[ -n "${options[${option}]}" ] || continue
cli_print_fmt1 $(( ${level} + 2 )) \
cli_space
}
-function cli_dhcpd_options() {
+function cli_dhcpd_subnet_options() {
local proto=${1}
assert isset proto
shift
assert isset subnet_id
shift
- local valid_options=$(dhcpd_subnet_options ${proto})
-
local key val
while [ $# -gt 0 ]; do
case "${1}" in
local zone
for zone in $(zones_get --all); do
- zone_remove ${zone}
+ zone_destroy_now "${zone}"
done
local port
for port in $(ports_get --all); do
- port_remove ${port}
+ port_destroy "${port}"
done
# Flush all DNS servers.
case "${cmd}" in
list)
- dns_server_list
+ dns_server_show
exit ${EXIT_OK}
;;
add)
exit ${EXIT_OK}
}
+function cli_raw() {
+ local cmd="${1}"
+ assert isset cmd
+ shift
+
+ case "${cmd}" in
+ list-devices)
+ device_list
+ ;;
+ list-dhcpd-ranges-of-subnet)
+ dhcpd_subnet_range_list $@
+ ;;
+ list-dhcpd-settings)
+ dhcpd_global_settings_list $@
+ ;;
+ list-dhcpd-subnets)
+ dhcpd_subnet_list $@
+ ;;
+ list-dhcpd-subnet-options)
+ dhcpd_subnet_options_list $@
+ ;;
+ list-dns-servers)
+ dns_server_list
+ ;;
+ list-free-ports)
+ port_list_free
+ ;;
+ list-hooks)
+ hook_list $@
+ ;;
+ list-ports)
+ port_list
+ ;;
+ list-ports-of-zone)
+ zone_get_ports $@
+ ;;
+ list-settings)
+ network_settings_list
+ ;;
+ list-zones)
+ zones_get_all
+ ;;
+ *)
+ error "No such command: ${cmd}"
+ exit ${EXIT_ERROR}
+ ;;
+ esac
+
+ exit ${EXIT_OK}
+}
+
# Process the given action
case "${action}" in
init)
init_run
;;
- config|hostname|port|device|zone|start|stop|restart|status|reset|route)
+ settings|hostname|port|device|zone|start|stop|restart|status|reset|route)
cli_${action} $@
;;
cli_help $@
;;
+ raw)
+ cli_raw $@
+ ;;
+
*)
error "Invalid command given: ${action}"
cli_usage "network help"