summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Magnusson <mikma@users.sourceforge.net>2019-04-11 01:25:39 +0200
committerMikael Magnusson <mikma@users.sourceforge.net>2019-11-15 00:11:29 +0100
commitd213b1eb83ef68562a7de6f621a1a396927b5215 (patch)
tree93fa8c2a3689e53f04f3d1137eebcbc1284c5ce4
parentc8f6b79a45bc581c7de3ed3e4094d426c36f834d (diff)
Wireguard: Implement copy_config
-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 35b69c54..bea7e33f 100644
--- a/proto/wireguard/wireguard.c
+++ b/proto/wireguard/wireguard.c
@@ -979,6 +979,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));
@@ -1062,6 +1086,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,