From 6dc881260f39479224865cffaf5a15e65815757c Mon Sep 17 00:00:00 2001 From: Max Ma Date: Tue, 14 May 2024 16:26:24 +0200 Subject: [PATCH] NET-1224:add egressGW ip for setroutes (#2933) * add egressGW ip for setroutes * fix peer endpoint selection --------- Co-authored-by: abhishek9686 --- logic/extpeers.go | 3 +++ logic/peers.go | 23 ++++++++++++----------- models/mqtt.go | 8 +++++--- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/logic/extpeers.go b/logic/extpeers.go index 4827896af..144988080 100644 --- a/logic/extpeers.go +++ b/logic/extpeers.go @@ -475,6 +475,9 @@ func getExtpeersExtraRoutes(network string) (egressRoutes []models.EgressNetwork return } for _, extPeer := range extPeers { + if len(extPeer.ExtraAllowedIPs) == 0 { + continue + } egressRoutes = append(egressRoutes, getExtPeerEgressRoute(extPeer)...) } return diff --git a/logic/peers.go b/logic/peers.go index ac14b0522..dbbd6c3a3 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -173,9 +173,11 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N } if peer.IsEgressGateway { hostPeerUpdate.EgressRoutes = append(hostPeerUpdate.EgressRoutes, models.EgressNetworkRoutes{ - NodeAddr: node.Address, - NodeAddr6: node.Address6, - EgressRanges: peer.EgressGatewayRanges, + EgressGwAddr: peer.Address, + EgressGwAddr6: peer.Address6, + NodeAddr: node.Address, + NodeAddr6: node.Address6, + EgressRanges: peer.EgressGatewayRanges, }) } if peer.IsIngressGateway { @@ -213,16 +215,15 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N } } + //1. check currHost has ipv4 endpoint and peerhost has ipv4 then set ipv4 endpoint for peer + // 2. check currHost has ipv6 endpoint and peerhost has ipv6 then set ipv6 endpoint for peer + //if host is ipv4 only or ipv4+ipv6, set the peer endpoint to ipv4 address, if host is ipv6 only, set the peer endpoint to ipv6 address - peerEndpoint := peerHost.EndpointIP - if ipv4 := host.EndpointIP.To4(); ipv4 != nil { + var peerEndpoint net.IP + if host.EndpointIP != nil && peerHost.EndpointIP != nil { peerEndpoint = peerHost.EndpointIP - } else { - //if peer host's ipv6 address is empty, it means that peer is an IPv4 only host - //IPv4 only host could not communicate with IPv6 only host - if peerHost.EndpointIPv6 != nil && peerHost.EndpointIPv6.String() != "" { - peerEndpoint = peerHost.EndpointIPv6 - } + } else if host.EndpointIPv6 != nil && peerHost.EndpointIPv6 != nil { + peerEndpoint = peerHost.EndpointIPv6 } peerConfig.Endpoint = &net.UDPAddr{ diff --git a/models/mqtt.go b/models/mqtt.go index c62df825e..c0d52d9c2 100644 --- a/models/mqtt.go +++ b/models/mqtt.go @@ -44,9 +44,11 @@ type EgressInfo struct { // EgressNetworkRoutes - struct for egress network routes for adding routes to peer's interface type EgressNetworkRoutes struct { - NodeAddr net.IPNet `json:"node_addr"` - NodeAddr6 net.IPNet `json:"node_addr6"` - EgressRanges []string `json:"egress_ranges"` + EgressGwAddr net.IPNet `json:"egress_gw_addr" yaml:"egress_gw_addr"` + EgressGwAddr6 net.IPNet `json:"egress_gw_addr6" yaml:"egress_gw_addr6"` + NodeAddr net.IPNet `json:"node_addr"` + NodeAddr6 net.IPNet `json:"node_addr6"` + EgressRanges []string `json:"egress_ranges"` } // PeerRouteInfo - struct for peer info for an ext. client