Browse Source

add egress routes info to peer update (#2452)

Abhishek K 2 years ago
parent
commit
e6c6ec3b45
2 changed files with 13 additions and 0 deletions
  1. 6 0
      logic/peers.go
  2. 7 0
      models/mqtt.go

+ 6 - 0
logic/peers.go

@@ -191,6 +191,12 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 				PersistentKeepaliveInterval: &peer.PersistentKeepalive,
 				PersistentKeepaliveInterval: &peer.PersistentKeepalive,
 				ReplaceAllowedIPs:           true,
 				ReplaceAllowedIPs:           true,
 			}
 			}
+			if peer.IsEgressGateway {
+				hostPeerUpdate.EgressRoutes = append(hostPeerUpdate.EgressRoutes, models.EgressNetworkRoutes{
+					NodeAddr:     node.PrimaryAddressIPNet(),
+					EgressRanges: peer.EgressGatewayRanges,
+				})
+			}
 			if node.IsIngressGateway || node.IsEgressGateway {
 			if node.IsIngressGateway || node.IsEgressGateway {
 				if peer.IsIngressGateway {
 				if peer.IsIngressGateway {
 					_, extPeerIDAndAddrs, err := getExtPeers(&peer)
 					_, extPeerIDAndAddrs, err := getExtPeers(&peer)

+ 7 - 0
models/mqtt.go

@@ -22,6 +22,7 @@ type HostPeerUpdate struct {
 	PeerIDs           PeerMap               `json:"peerids" bson:"peerids" yaml:"peerids"`
 	PeerIDs           PeerMap               `json:"peerids" bson:"peerids" yaml:"peerids"`
 	EndpointDetection bool                  `json:"endpointdetection" yaml:"endpointdetection"`
 	EndpointDetection bool                  `json:"endpointdetection" yaml:"endpointdetection"`
 	HostNetworkInfo   HostInfoMap           `json:"host_network_info,omitempty" bson:"host_network_info,omitempty" yaml:"host_network_info,omitempty"`
 	HostNetworkInfo   HostInfoMap           `json:"host_network_info,omitempty" bson:"host_network_info,omitempty" yaml:"host_network_info,omitempty"`
+	EgressRoutes      []EgressNetworkRoutes `json:"egress_network_routes"`
 }
 }
 
 
 // IngressInfo - struct for ingress info
 // IngressInfo - struct for ingress info
@@ -39,6 +40,12 @@ type EgressInfo struct {
 	EgressGWCfg  EgressGatewayRequest     `json:"egress_gateway_cfg" yaml:"egress_gateway_cfg"`
 	EgressGWCfg  EgressGatewayRequest     `json:"egress_gateway_cfg" yaml:"egress_gateway_cfg"`
 }
 }
 
 
+// EgressNetworkRoutes - struct for egress network routes for adding routes to peer's interface
+type EgressNetworkRoutes struct {
+	NodeAddr     net.IPNet `json:"node_addr"`
+	EgressRanges []string  `json:"egress_ranges"`
+}
+
 // PeerRouteInfo - struct for peer info for an ext. client
 // PeerRouteInfo - struct for peer info for an ext. client
 type PeerRouteInfo struct {
 type PeerRouteInfo struct {
 	PeerAddr net.IPNet `json:"peer_addr" yaml:"peer_addr"`
 	PeerAddr net.IPNet `json:"peer_addr" yaml:"peer_addr"`