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 {
|
||||
m.updateCNIConfig()
|
||||
}
|
||||
m.syncEndpoints()
|
||||
m.applyTopology()
|
||||
t.Reset(resyncPeriod)
|
||||
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) {
|
||||
logger := log.With(m.logger, "event", e.Type)
|
||||
level.Debug(logger).Log("msg", "syncing nodes", "event", e.Type)
|
||||
|
Loading…
Reference in New Issue
Block a user