mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-09 13:26:52 +08:00
Merge pull request #1203 from gravitl/bugfix_v0.14.3_relay
update relay when relayed address updated
This commit is contained in:
commit
63a8abf5cc
2 changed files with 53 additions and 1 deletions
|
@ -635,6 +635,10 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
relayedUpdate := false
|
||||||
|
if node.IsRelayed == "yes" && (node.Address != newNode.Address || node.Address6 != newNode.Address6) {
|
||||||
|
relayedUpdate = true
|
||||||
|
}
|
||||||
|
|
||||||
if !servercfg.GetRce() {
|
if !servercfg.GetRce() {
|
||||||
newNode.PostDown = node.PostDown
|
newNode.PostDown = node.PostDown
|
||||||
|
@ -659,7 +663,9 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if relayedUpdate {
|
||||||
|
updateRelay(&node, &newNode)
|
||||||
|
}
|
||||||
if servercfg.IsDNSMode() {
|
if servercfg.IsDNSMode() {
|
||||||
logic.SetDNS()
|
logic.SetDNS()
|
||||||
}
|
}
|
||||||
|
@ -758,3 +764,27 @@ func runForceServerUpdate(node *models.Node) {
|
||||||
func isServer(node *models.Node) bool {
|
func isServer(node *models.Node) bool {
|
||||||
return node.IsServer == "yes"
|
return node.IsServer == "yes"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func updateRelay(oldnode, newnode *models.Node) {
|
||||||
|
relay := logic.FindRelay(oldnode)
|
||||||
|
newrelay := relay
|
||||||
|
//check if node's address has been updated and if so, update the relayAddrs of the relay node with the updated address of the relayed node
|
||||||
|
if oldnode.Address != newnode.Address {
|
||||||
|
for i, ip := range newrelay.RelayAddrs {
|
||||||
|
if ip == oldnode.Address {
|
||||||
|
newrelay.RelayAddrs = append(newrelay.RelayAddrs[:i], relay.RelayAddrs[i+1:]...)
|
||||||
|
newrelay.RelayAddrs = append(newrelay.RelayAddrs, newnode.Address)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//check if node's address(v6) has been updated and if so, update the relayAddrs of the relay node with the updated address(v6) of the relayed node
|
||||||
|
if oldnode.Address6 != newnode.Address6 {
|
||||||
|
for i, ip := range newrelay.RelayAddrs {
|
||||||
|
if ip == oldnode.Address {
|
||||||
|
newrelay.RelayAddrs = append(newrelay.RelayAddrs[:i], newrelay.RelayAddrs[i+1:]...)
|
||||||
|
newrelay.RelayAddrs = append(newrelay.RelayAddrs, newnode.Address6)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logic.UpdateNode(relay, newrelay)
|
||||||
|
}
|
||||||
|
|
|
@ -681,3 +681,25 @@ func unsetHub(networkName string) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FindRelay - returns the node that is the relay for a relayed node
|
||||||
|
func FindRelay(node *models.Node) *models.Node {
|
||||||
|
if node.IsRelayed == "no" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
peers, err := GetNetworkNodes(node.Network)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
for _, peer := range peers {
|
||||||
|
if peer.IsRelay == "no" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for _, ip := range peer.RelayAddrs {
|
||||||
|
if ip == node.Address || ip == node.Address6 {
|
||||||
|
return &peer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue