pkg/mesh: don't synchronize peer endpoints
Kilo had a routine that synchronized the endpoints of peers back into the API to ensure that endpoints updated by WireGuard for a roaming peer would always positively compare with the endpoints in the API. This is no longer needed as Kilo will now simply ignore changes to endpoints for peers with a non-zero persistent keepalive. Signed-off-by: Lucas Servén Marín <lserven@gmail.com>
This commit is contained in:
parent
0d199db009
commit
515a57a301
@ -355,7 +355,6 @@ func (m *Mesh) Run() error {
|
|||||||
if m.cni {
|
if m.cni {
|
||||||
m.updateCNIConfig()
|
m.updateCNIConfig()
|
||||||
}
|
}
|
||||||
m.syncEndpoints()
|
|
||||||
m.applyTopology()
|
m.applyTopology()
|
||||||
t.Reset(resyncPeriod)
|
t.Reset(resyncPeriod)
|
||||||
case <-m.stop:
|
case <-m.stop:
|
||||||
@ -364,47 +363,6 @@ func (m *Mesh) Run() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WireGuard updates the endpoints of peers to match the
|
|
||||||
// last place a valid packet was received from.
|
|
||||||
// Periodically we need to syncronize the endpoints
|
|
||||||
// of peers in the backend to match the WireGuard configuration.
|
|
||||||
func (m *Mesh) syncEndpoints() {
|
|
||||||
link, err := linkByIndex(m.kiloIface)
|
|
||||||
if err != nil {
|
|
||||||
level.Error(m.logger).Log("error", err)
|
|
||||||
m.errorCounter.WithLabelValues("endpoints").Inc()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
conf, err := wireguard.ShowConf(link.Attrs().Name)
|
|
||||||
if err != nil {
|
|
||||||
level.Error(m.logger).Log("error", err)
|
|
||||||
m.errorCounter.WithLabelValues("endpoints").Inc()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
m.mu.Lock()
|
|
||||||
defer m.mu.Unlock()
|
|
||||||
c := wireguard.Parse(conf)
|
|
||||||
var key string
|
|
||||||
var tmp *Peer
|
|
||||||
for i := range c.Peers {
|
|
||||||
// Peers are indexed by public key.
|
|
||||||
key = string(c.Peers[i].PublicKey)
|
|
||||||
if p, ok := m.peers[key]; ok {
|
|
||||||
tmp = &Peer{
|
|
||||||
Name: p.Name,
|
|
||||||
Peer: *c.Peers[i],
|
|
||||||
}
|
|
||||||
if !peersAreEqual(tmp, p) {
|
|
||||||
p.Endpoint = tmp.Endpoint
|
|
||||||
if err := m.Peers().Set(p.Name, p); err != nil {
|
|
||||||
level.Error(m.logger).Log("error", err)
|
|
||||||
m.errorCounter.WithLabelValues("endpoints").Inc()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Mesh) syncNodes(e *NodeEvent) {
|
func (m *Mesh) syncNodes(e *NodeEvent) {
|
||||||
logger := log.With(m.logger, "event", e.Type)
|
logger := log.With(m.logger, "event", e.Type)
|
||||||
level.Debug(logger).Log("msg", "syncing nodes", "event", e.Type)
|
level.Debug(logger).Log("msg", "syncing nodes", "event", e.Type)
|
||||||
|
Loading…
Reference in New Issue
Block a user