backend: fix Peer persistent keepalive

Right now, the persistent keepalive field of the Peer CRD is always
interpretted as nanoseconds and not seconds. This causes a mismatch
between Kilo's expected behavior and the actual interval that is given
to Peers. Because the interval is interpretted as nanoseconds the value
rounds down to 0 seconds.

Signed-off-by: Lucas Servén Marín <lserven@gmail.com>
This commit is contained in:
Lucas Servén Marín 2022-03-31 21:13:32 +02:00
parent 5de689ea1f
commit 38a5dd22e9
No known key found for this signature in database
GPG Key ID: 586FEAF680DA74AD
2 changed files with 4 additions and 4 deletions

View File

@ -298,7 +298,7 @@ func translateNode(node *v1.Node, topologyLabel string) *mesh.Node {
internalIP = nil
}
// Set Wireguard PersistentKeepalive setting for the node.
var persistentKeepalive = time.Duration(0)
var persistentKeepalive time.Duration
if keepAlive, ok := node.ObjectMeta.Annotations[persistentKeepaliveKey]; ok {
// We can ignore the error, because p will be set to 0 if an error occures.
p, _ := strconv.ParseInt(keepAlive, 10, 64)
@ -414,7 +414,7 @@ func translatePeer(peer *v1alpha1.Peer) *mesh.Peer {
}
var pka time.Duration
if peer.Spec.PersistentKeepalive > 0 {
pka = time.Duration(peer.Spec.PersistentKeepalive)
pka = time.Duration(peer.Spec.PersistentKeepalive) * time.Second
}
return &mesh.Peer{
Name: peer.Name,
@ -534,7 +534,7 @@ func (pb *peerBackend) Set(name string, peer *mesh.Peer) error {
if peer.PersistentKeepaliveInterval == nil {
p.Spec.PersistentKeepalive = 0
} else {
p.Spec.PersistentKeepalive = int(*peer.PersistentKeepaliveInterval)
p.Spec.PersistentKeepalive = int(*peer.PersistentKeepaliveInterval / time.Second)
}
if peer.PresharedKey == nil {
p.Spec.PresharedKey = ""

View File

@ -511,7 +511,7 @@ func TestTranslatePeer(t *testing.T) {
{
name: "valid keepalive",
spec: v1alpha1.PeerSpec{
PersistentKeepalive: 1 * int(time.Second),
PersistentKeepalive: 1,
},
out: &mesh.Peer{
Peer: wireguard.Peer{