Merge pull request #929 from gravitl/bugfix_v0.12.0_keepalive

keepalive handling updates
This commit is contained in:
dcarns 2022-03-21 10:41:01 -04:00 committed by GitHub
commit 9efb15e688
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 1 deletions

View file

@ -283,7 +283,7 @@ func (newNode *Node) Fill(currentNode *Node) {
if newNode.AllowedIPs == nil {
newNode.AllowedIPs = currentNode.AllowedIPs
}
if newNode.PersistentKeepalive == 0 {
if newNode.PersistentKeepalive < 0 {
newNode.PersistentKeepalive = currentNode.PersistentKeepalive
}
if newNode.AccessKey == "" {

View file

@ -59,6 +59,7 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
ifaceDelta := ncutils.IfaceDelta(&nodeCfg.Node, &newNode)
shouldDNSChange := nodeCfg.Node.DNSOn != newNode.DNSOn
hubChange := nodeCfg.Node.IsHub != newNode.IsHub
keepaliveChange := nodeCfg.Node.PersistentKeepalive != newNode.PersistentKeepalive
nodeCfg.Node = newNode
switch newNode.Action {
@ -107,6 +108,9 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
ncutils.Log("error updating wireguard config " + err.Error())
return
}
if keepaliveChange {
wireguard.UpdateKeepAlive(file, newNode.PersistentKeepalive)
}
if ifaceDelta { // if a change caused an ifacedelta we need to notify the server to update the peers
ncutils.Log("applying WG conf to " + file)
if ncutils.IsWindows() {

View file

@ -466,6 +466,30 @@ func UpdatePrivateKey(file, privateKey string) error {
return nil
}
// UpdateKeepAlive - updates the persistentkeepalive of all peers
func UpdateKeepAlive(file string, keepalive int32) error {
options := ini.LoadOptions{
AllowNonUniqueSections: true,
AllowShadows: true,
}
wireguard, err := ini.LoadSources(options, file)
if err != nil {
return err
}
peers, err := wireguard.SectionsByName(section_peers)
if err != nil {
return err
}
newvalue := strconv.Itoa(int(keepalive))
for i := range peers {
wireguard.SectionWithIndex(section_peers, i).Key("PersistentKeepALive").SetValue(newvalue)
}
if err := wireguard.SaveTo(file); err != nil {
return err
}
return nil
}
// RemoveConfGraceful - Run remove conf and wait for it to actually be gone before proceeding
func RemoveConfGraceful(ifacename string) {
// ensure you clear any existing interface first