From aa1ae582cdd96690f509736622f54ea3daea2890 Mon Sep 17 00:00:00 2001 From: pedro Date: Fri, 25 Apr 2025 13:33:44 +0200 Subject: [PATCH] rc: wireguard.c: in case of 'External - VPN Provider' use peer PersistentKeepalive value --- release/src-rt-6.x.4708/router/rc/wireguard.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/release/src-rt-6.x.4708/router/rc/wireguard.c b/release/src-rt-6.x.4708/router/rc/wireguard.c index ea727223b5..b887140720 100644 --- a/release/src-rt-6.x.4708/router/rc/wireguard.c +++ b/release/src-rt-6.x.4708/router/rc/wireguard.c @@ -813,6 +813,7 @@ void start_wireguard(const int unit) char iface[IF_SIZE]; char buffer[BUF_SIZE]; char fwmark[BUF_SIZE_16]; + char peer_ka[BUF_SIZE_16]; /* determine interface */ memset(iface, 0, IF_SIZE); @@ -824,7 +825,7 @@ void start_wireguard(const int unit) /* set up directories for later use */ wg_setup_dirs(); - /* create firewall script */ + /* create firewall script & DNS rules */ wg_build_firewall(unit, port, iface); /* check if file is specified */ @@ -875,6 +876,8 @@ void start_wireguard(const int unit) /* add stored peers */ nvp = nv = strdup(getNVRAMVar("wg%d_peers", unit)); if (nv) { + memset(peer_ka, 0, BUF_SIZE_16); + snprintf(peer_ka, BUF_SIZE_16, "%s_com", iface); logmsg(LOG_DEBUG, "*** %s: adding wg%d_peers ...", __FUNCTION__, unit); @@ -894,13 +897,13 @@ void start_wireguard(const int unit) snprintf(buffer, BUF_SIZE, "%s,%s", ip, aip); /* add peer to interface */ - if (priv[0] == '1') { - logmsg(LOG_DEBUG, "*** %s: running wg_add_peer_privkey(): iface=[%s] key=[%s] buffer=[%s] psk=[%s] rka=[%s] ep=[%s] fwmark=[%s]", __FUNCTION__, iface, key, buffer, psk, rka, ep, fwmark); - wg_add_peer_privkey(iface, key, buffer, psk, rka, ep, fwmark); + if (priv[0] == '1') { /* peer has private key? */ + logmsg(LOG_DEBUG, "*** %s: running wg_add_peer_privkey(): iface=[%s] key=[%s] buffer=[%s] psk=[%s] rka=[%s] ep=[%s] fwmark=[%s]", __FUNCTION__, iface, key, buffer, psk, (nvram_get_int(peer_ka) == 3 ? ka : rka), ep, fwmark); + wg_add_peer_privkey(iface, key, buffer, psk, (nvram_get_int(peer_ka) == 3 ? ka : rka), ep, fwmark); } else { - logmsg(LOG_DEBUG, "*** %s: running wg_add_peer(): iface=[%s] key=[%s] buffer=[%s] psk=[%s] rka=[%s] ep=[%s] fwmark=[%s] port=[%s]", __FUNCTION__, iface, key, buffer, psk, rka, ep, fwmark, port); - wg_add_peer(iface, key, buffer, psk, rka, ep, fwmark, port); + logmsg(LOG_DEBUG, "*** %s: running wg_add_peer(): iface=[%s] key=[%s] buffer=[%s] psk=[%s] rka=[%s] ep=[%s] fwmark=[%s] port=[%s]", __FUNCTION__, iface, key, buffer, psk, (nvram_get_int(peer_ka) == 3 ? ka : rka), ep, fwmark, port); + wg_add_peer(iface, key, buffer, psk, (nvram_get_int(peer_ka) == 3 ? ka : rka), ep, fwmark, port); } } }