mirror of
https://github.com/systemd/systemd.git
synced 2026-08-10 17:14:31 +00:00
Add a new --no-reconfigure flag to 'networkctl reload' that reloads .network and .netdev files from disk without reconfiguring any network interfaces. This may be useful to avoid reconfiguring multiple interfaces simultaneously when multiple .network files are updated, or when an updated .network file is applied to multiple interfaces. On the networkd side, manager_reload() gains a reconfigure_links parameter that gates the per-link reconfiguration loop. A new io.systemd.Network.Reload varlink method is added that exposes this as an optional reconfigureLinks boolean (defaults to true). Both plain 'networkctl reload' and '--no-reconfigure' now unconditionally call this method first. If an older networkd returns MethodNotFound, plain reload falls back to io.systemd.service.Reload for backward compatibility; '--no-reconfigure' fails with a clear error in that case.
64 lines
2.6 KiB
Plaintext
64 lines
2.6 KiB
Plaintext
#compdef networkctl
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
(( $+functions[_networkctl_commands] )) ||
|
|
_networkctl_commands() {
|
|
local -a _networkctl_cmds
|
|
_networkctl_cmds=(
|
|
'list:List existing links'
|
|
'status:Show information about the specified links'
|
|
'dhcp-lease:Show DHCP lease'
|
|
'lldp:Show Link Layer Discovery Protocol status'
|
|
'label:Show address labels'
|
|
'delete:Delete virtual netdevs'
|
|
'edit:Edit network configurations'
|
|
'cat:Cat network configurations'
|
|
'up:Bring devices up'
|
|
'down:Bring devices down'
|
|
'renew:Renew dynamic configurations'
|
|
'forcerenew:Trigger DHCP reconfiguration of all connected clients'
|
|
'reconfigure:Reconfigure interfaces'
|
|
'reload:Reload .network and .netdev files'
|
|
)
|
|
if (( CURRENT == 1 )); then
|
|
_describe -t commands 'networkctl command' _networkctl_cmds
|
|
else
|
|
local curcontext="$curcontext"
|
|
local -a _links
|
|
cmd="${${_networkctl_cmds[(r)$words[1]:*]%%:*}}"
|
|
case $cmd in
|
|
(list|status|dhcp-lease|up|down|cat|edit|lldp|delete|renew|forcerenew|reconfigure)
|
|
for link in ${(f)"$(_call_program links networkctl list --no-legend)"}; do _links+=($link[(w)2]:$link); done
|
|
if [[ -n "$_links" ]]; then
|
|
_describe -t links 'links' _links $( [[ $cmd == (edit|cat) ]] && print -- -P@ )
|
|
else
|
|
_message "no links"
|
|
fi
|
|
;;
|
|
*)
|
|
_message "no more options"
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_networkctl_get_json] )) || _networkctl_get_json()
|
|
{
|
|
local -a _json_forms
|
|
_json_forms=( $(networkctl --json=help 2>/dev/null) )
|
|
_values 'format' $_json_forms
|
|
}
|
|
|
|
_arguments \
|
|
'(-a --all)'{-a,--all}'[Show all links with status]' \
|
|
'--no-pager[Do not pipe output into a pager]' \
|
|
'--no-legend[Do not print the column headers]' \
|
|
'--no-ask-password[Do not prompt for password]' \
|
|
'(- *)'{-h,--help}'[Show this help]' \
|
|
'(- *)--version[Show package version]' \
|
|
'--drop-in=[Use the given drop-in file name]:NAME' \
|
|
'--no-reload[Do not reload the network manager state when editing]' \
|
|
'--no-reconfigure[Reload config files without reconfiguring network interfaces]' \
|
|
'--json=[Shows output formatted as JSON]:format:_networkctl_get_json' \
|
|
'*::networkctl commands:_networkctl_commands'
|