From 67abc4b80e1acf219bdedac890892c7d427ad338 Mon Sep 17 00:00:00 2001 From: Aaron U'Ren Date: Sun, 1 Jan 2023 16:40:07 -0600 Subject: [PATCH] fix(bgp_peers): adv. AfiSafi based on capabability Advertise IPv4 / IPv6 AfiSafi capability based upon node's capabilities rather than limiting to the node's configured protocol. --- pkg/controllers/routing/bgp_peers.go | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/pkg/controllers/routing/bgp_peers.go b/pkg/controllers/routing/bgp_peers.go index bc578ec5a..672b64d7d 100644 --- a/pkg/controllers/routing/bgp_peers.go +++ b/pkg/controllers/routing/bgp_peers.go @@ -239,7 +239,7 @@ func (nrc *NetworkRoutingController) connectToExternalBGPPeers(server *gobgp.Bgp LocalRestarting: true, } - if neighborIsIPv4 { + if nrc.isIPv4Capable { n.AfiSafis = []*gobgpapi.AfiSafi{ { Config: &gobgpapi.AfiSafiConfig{ @@ -253,20 +253,20 @@ func (nrc *NetworkRoutingController) connectToExternalBGPPeers(server *gobgp.Bgp }, }, } - } else { - n.AfiSafis = []*gobgpapi.AfiSafi{ - { - Config: &gobgpapi.AfiSafiConfig{ - Family: &gobgpapi.Family{Afi: gobgpapi.Family_AFI_IP6, Safi: gobgpapi.Family_SAFI_UNICAST}, + } + if nrc.isIPv6Capable { + afiSafi := gobgpapi.AfiSafi{ + Config: &gobgpapi.AfiSafiConfig{ + Family: &gobgpapi.Family{Afi: gobgpapi.Family_AFI_IP6, Safi: gobgpapi.Family_SAFI_UNICAST}, + Enabled: true, + }, + MpGracefulRestart: &gobgpapi.MpGracefulRestart{ + Config: &gobgpapi.MpGracefulRestartConfig{ Enabled: true, }, - MpGracefulRestart: &gobgpapi.MpGracefulRestart{ - Config: &gobgpapi.MpGracefulRestartConfig{ - Enabled: true, - }, - }, }, } + n.AfiSafis = append(n.AfiSafis, &afiSafi) } } if peerMultihopTTL > 1 { @@ -335,6 +335,8 @@ func newGlobalPeers(ips []net.IP, ports []uint32, asns []uint32, passwords []str }, Timers: &gobgpapi.Timers{Config: &gobgpapi.TimersConfig{HoldTime: uint64(holdtime)}}, Transport: &gobgpapi.Transport{ + // localAddress defaults to the node's primary IP, but can be overridden below on a peer-by-peer basis + // below via the kube-router.io/peer.localips annotation LocalAddress: localAddress, RemotePort: options.DefaultBgpPort, },