diff options
author | Mikael Magnusson <mikma@users.sourceforge.net> | 2019-04-11 01:25:39 +0200 |
---|---|---|
committer | Mikael Magnusson <mikma@users.sourceforge.net> | 2020-09-13 18:05:34 +0200 |
commit | c1a3b147131d6c26000bebf87674c8368b6abc1e (patch) | |
tree | c7e2ff30d2e2fe10e47d828a6e6640fa5a63283d /proto/wireguard/wireguard.c | |
parent | b8419c4ad1920c3267cf1ef7d52886a0d43ed9e1 (diff) |
Wireguard: Implement copy_config
Diffstat (limited to 'proto/wireguard/wireguard.c')
-rw-r--r-- | proto/wireguard/wireguard.c | 25 |
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, |