NET-1224:add egressGW ip for setroutes (#2933)

* add egressGW ip for setroutes

* fix peer endpoint selection

---------

Co-authored-by: abhishek9686 <abhi281342@gmail.com>
This commit is contained in:
Max Ma
2024-05-14 16:26:24 +02:00
committed by GitHub
parent faf50c8c3d
commit 6dc881260f
3 changed files with 20 additions and 14 deletions

View File

@@ -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

View File

@@ -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{

View File

@@ -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