summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--proto/wireguard/wireguard.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/proto/wireguard/wireguard.c b/proto/wireguard/wireguard.c
index bdc76590..e4efdd66 100644
--- a/proto/wireguard/wireguard.c
+++ b/proto/wireguard/wireguard.c
@@ -978,6 +978,30 @@ wg_dump(struct proto *P)
}
}
+static void
+wg_copy_config(struct proto_config *DEST, struct proto_config *SRC)
+{
+ struct wg_config *dest = (struct wg_config *)DEST;
+ struct wg_config *src = (struct wg_config *)SRC;
+
+ dest->ifname = src->ifname;
+ dest->socket_path = src->socket_path;
+ dest->private_key = src->private_key;
+ dest->listen_port = src->listen_port;
+
+ struct peer_config *spc = NULL;
+ WALK_LIST(spc,src->peers)
+ {
+ struct peer_config *dpc = cfg_allocz(sizeof(struct peer_config));
+ dpc->public_key = spc->public_key;
+ dpc->listen_port = spc->listen_port;
+ dpc->endpoint = spc->endpoint;
+ dpc->remote_port = spc->remote_port;
+ dpc->allowedip = spc->allowedip;
+ add_tail(&dest->peers, (node*)spc);
+ }
+}
+
struct peer_config *peer_new(struct wg_config *c)
{
struct peer_config *pc = cfg_allocz(sizeof(struct peer_config));
@@ -1061,6 +1085,7 @@ struct protocol proto_wireguard = {
.start = wg_start,
.shutdown = wg_shutdown,
.dump = wg_dump,
+ .copy_config = wg_copy_config,
/* .multitable = 1,
.preference = DEF_PREF_PIPE,
.cleanup = wg_cleanup,