From eb181e811c674080a6cf54bd8ab260dd65ce0b3f Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 31 Oct 2017 17:51:38 +0100 Subject: [PATCH] wg-quick: allow for saving existing interface Signed-off-by: Jason A. Donenfeld --- src/wg-quick.8 | 5 ++++- src/wg-quick.bash | 11 ++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/wg-quick.8 b/src/wg-quick.8 index 2839cc9..053d3e1 100644 --- a/src/wg-quick.8 +++ b/src/wg-quick.8 @@ -9,6 +9,8 @@ wg-quick - set up a WireGuard interface simply .I up | .I down +| +.I save ] [ .I CONFIG_FILE | @@ -24,7 +26,8 @@ Use \fIup\fP to add and set up an interface, and use \fIdown\fP to tear down and an interface. Running \fIup\fP adds a WireGuard interface, brings up the interface with the supplied IP addresses, sets up mtu and routes, and optionally runs pre/post up scripts. Running \fIdown\fP optionally saves the current configuration, removes the WireGuard interface, and optionally -runs pre/post down scripts. +runs pre/post down scripts. Running \fIsave\fP saves the configuration of an existing +interface without bringing the interface down. \fICONFIG_FILE\fP is a configuration file, whose filename is the interface name followed by `.conf'. Otherwise, \fIINTERFACE\fP is an interface name, with configuration diff --git a/src/wg-quick.bash b/src/wg-quick.bash index 17fe672..da4c0d4 100755 --- a/src/wg-quick.bash +++ b/src/wg-quick.bash @@ -213,7 +213,7 @@ execute_hooks() { cmd_usage() { cat >&2 <<-_EOF - Usage: $PROGRAM [ up | down ] [ CONFIG_FILE | INTERFACE ] + Usage: $PROGRAM [ up | down | save ] [ CONFIG_FILE | INTERFACE ] CONFIG_FILE is a configuration file, whose filename is the interface name followed by \`.conf'. Otherwise, INTERFACE is an interface name, with @@ -264,6 +264,11 @@ cmd_down() { execute_hooks "${POST_DOWN[@]}" } +cmd_save() { + [[ " $(wg show interfaces) " == *" $INTERFACE "* ]] || die "\`$INTERFACE' is not a WireGuard interface" + save_config +} + # ~~ function override insertion point ~~ if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then @@ -276,6 +281,10 @@ elif [[ $# -eq 2 && $1 == down ]]; then auto_su parse_options "$2" cmd_down +elif [[ $# -eq 2 && $1 == save ]]; then + auto_su + parse_options "$2" + cmd_save else cmd_usage exit 1