diff --git a/protocols/bgp/server/fsm_address_family.go b/protocols/bgp/server/fsm_address_family.go index 891e91281385785f3ae3f6a965f01eb8606cbbee..092572c50463ff4109efa669f798e484d218e5ee 100644 --- a/protocols/bgp/server/fsm_address_family.go +++ b/protocols/bgp/server/fsm_address_family.go @@ -30,24 +30,24 @@ type fsmAddressFamily struct { updateSender *UpdateSender addPathSend routingtable.ClientOptions - addPathRXConfigured bool - addPathRX bool + addPathTXConfigured bool + addPathTX bool multiProtocol bool initialized bool } -func newFSMAddressFamily(afi uint16, safi uint8, params *familyParameters, fsm *FSM) *fsmAddressFamily { +func newFSMAddressFamily(afi uint16, safi uint8, family *peerAddressFamily, fsm *FSM) *fsmAddressFamily { return &fsmAddressFamily{ afi: afi, safi: safi, fsm: fsm, - rib: params.rib, - importFilter: params.importFilter, - exportFilter: params.exportFilter, - addPathRXConfigured: params.addPathRXConfigured, - addPathSend: params.addPathSend, + rib: family.rib, + importFilter: family.importFilter, + exportFilter: family.exportFilter, + addPathTXConfigured: family.addPathReceive, // at this point we switch from peers view to our view + addPathSend: family.addPathSend, } } @@ -58,7 +58,7 @@ func (f *fsmAddressFamily) init(n *routingtable.Neighbor) { contributingASNs.Add(f.fsm.peer.localASN) f.adjRIBIn.Register(f.rib) - f.adjRIBOut = adjRIBOut.New(n, f.exportFilter, f.addPathRX) + f.adjRIBOut = adjRIBOut.New(n, f.exportFilter, f.addPathTX) f.updateSender = newUpdateSender(f.fsm, f.afi, f.safi) f.updateSender.Start(time.Millisecond * 5) @@ -68,7 +68,7 @@ func (f *fsmAddressFamily) init(n *routingtable.Neighbor) { clientOptions := routingtable.ClientOptions{ BestOnly: true, } - if f.addPathRX { + if f.addPathTX { clientOptions = f.addPathSend } f.rib.RegisterWithOptions(f.adjRIBOut, clientOptions) diff --git a/protocols/bgp/server/fsm_open_sent.go b/protocols/bgp/server/fsm_open_sent.go index c40318a1f08731b520d2a3d97b45168524c09a75..664e0d19399efd933fef5ee42330c7b5f2016a48 100644 --- a/protocols/bgp/server/fsm_open_sent.go +++ b/protocols/bgp/server/fsm_open_sent.go @@ -201,18 +201,18 @@ func (s *openSentState) processAddPathCapability(addPathCap packet.AddPathCapabi switch addPathCap.SendReceive { case packet.AddPathReceive: if !f.addPathSend.BestOnly { - f.addPathRX = true + f.addPathTX = true } case packet.AddPathSend: - if f.addPathRXConfigured { - f.addPathRX = true + if f.addPathTXConfigured { + f.addPathTX = true } case packet.AddPathSendReceive: if !f.addPathSend.BestOnly { - f.addPathRX = true + f.addPathTX = true } - if f.addPathRXConfigured { - f.addPathRX = true + if f.addPathTXConfigured { + f.addPathTX = true } } } diff --git a/protocols/bgp/server/fsm_test.go b/protocols/bgp/server/fsm_test.go index 69ead1ff5b129e2d187c89b661bd9d0ac3cd8338..ba0e1429e41d4ccd4d65837142a8a7d456d6df6a 100644 --- a/protocols/bgp/server/fsm_test.go +++ b/protocols/bgp/server/fsm_test.go @@ -18,7 +18,7 @@ func TestFSM255UpdatesIPv4(t *testing.T) { fsmA := newFSM(&peer{ addr: bnet.IPv4FromOctets(169, 254, 100, 100), routerID: bnet.IPv4FromOctets(1, 1, 1, 1).ToUint32(), - ipv4: &familyParameters{ + ipv4: &peerAddressFamily{ rib: locRIB.New(), importFilter: filter.NewAcceptAllFilter(), exportFilter: filter.NewAcceptAllFilter(), @@ -132,7 +132,7 @@ func TestFSM255UpdatesIPv6(t *testing.T) { fsmA := newFSM(&peer{ addr: bnet.IPv6FromBlocks(0x2001, 0x678, 0x1e0, 0xffff, 0, 0, 0, 1), routerID: bnet.IPv4FromOctets(1, 1, 1, 1).ToUint32(), - ipv6: &familyParameters{ + ipv6: &peerAddressFamily{ rib: locRIB.New(), importFilter: filter.NewAcceptAllFilter(), exportFilter: filter.NewAcceptAllFilter(), diff --git a/protocols/bgp/server/peer.go b/protocols/bgp/server/peer.go index a83e3be683c108b57c44caa4077a81ea6b212866..dd877d77f4eee02eb6a21578b9dbaf54a58336a9 100644 --- a/protocols/bgp/server/peer.go +++ b/protocols/bgp/server/peer.go @@ -38,18 +38,18 @@ type peer struct { routeReflectorClient bool clusterID uint32 - ipv4 *familyParameters - ipv6 *familyParameters + ipv4 *peerAddressFamily + ipv6 *peerAddressFamily } -type familyParameters struct { +type peerAddressFamily struct { rib *locRIB.LocRIB importFilter *filter.Filter exportFilter *filter.Filter - addPathSend routingtable.ClientOptions - addPathRXConfigured bool + addPathSend routingtable.ClientOptions + addPathReceive bool } func (p *peer) snapshot() PeerInfo { @@ -142,12 +142,12 @@ func newPeer(c config.Peer, server *bgpServer) (*peer, error) { } if c.IPv4 != nil { - p.ipv4 = &familyParameters{ - rib: c.IPv4.RIB, - importFilter: filterOrDefault(c.IPv4.ImportFilter), - exportFilter: filterOrDefault(c.IPv4.ExportFilter), - addPathRXConfigured: c.IPv4.AddPathRecv, - addPathSend: c.IPv4.AddPathSend, + p.ipv4 = &peerAddressFamily{ + rib: c.IPv4.RIB, + importFilter: filterOrDefault(c.IPv4.ImportFilter), + exportFilter: filterOrDefault(c.IPv4.ExportFilter), + addPathReceive: c.IPv4.AddPathRecv, + addPathSend: c.IPv4.AddPathSend, } } @@ -163,12 +163,12 @@ func newPeer(c config.Peer, server *bgpServer) (*peer, error) { caps = append(caps, asn4Capability(c)) if c.IPv6 != nil { - p.ipv6 = &familyParameters{ - rib: c.IPv6.RIB, - importFilter: filterOrDefault(c.IPv6.ImportFilter), - exportFilter: filterOrDefault(c.IPv6.ExportFilter), - addPathRXConfigured: c.IPv6.AddPathRecv, - addPathSend: c.IPv6.AddPathSend, + p.ipv6 = &peerAddressFamily{ + rib: c.IPv6.RIB, + importFilter: filterOrDefault(c.IPv6.ImportFilter), + exportFilter: filterOrDefault(c.IPv6.ExportFilter), + addPathReceive: c.IPv6.AddPathRecv, + addPathSend: c.IPv6.AddPathSend, } caps = append(caps, multiProtocolCapability(packet.IPv6AFI)) } diff --git a/protocols/bgp/server/update_sender.go b/protocols/bgp/server/update_sender.go index cca63244557ed3514ea200c6378321775f56a6b0..5d5804acb6f940c686bfed578ab1edbd5c125129 100644 --- a/protocols/bgp/server/update_sender.go +++ b/protocols/bgp/server/update_sender.go @@ -45,7 +45,7 @@ func newUpdateSender(fsm *FSM, afi uint16, safi uint8) *UpdateSender { toSend: make(map[string]*pathPfxs), options: &packet.EncodeOptions{ Use32BitASN: fsm.supports4OctetASN, - UseAddPath: f.addPathRX, + UseAddPath: f.addPathTX, }, } } diff --git a/protocols/bgp/server/update_sender_test.go b/protocols/bgp/server/update_sender_test.go index c611c6ef80dc24ace20449ab66b9cb64579c4575..359e2da3148fcd6a449be2ffc2c929a8e22c9f29 100644 --- a/protocols/bgp/server/update_sender_test.go +++ b/protocols/bgp/server/update_sender_test.go @@ -874,20 +874,20 @@ func TestSender(t *testing.T) { rib := locRIB.New() if test.afi == packet.IPv6AFI { - fsmA.ipv6Unicast = newFSMAddressFamily(packet.IPv6AFI, packet.UnicastSAFI, &familyParameters{ + fsmA.ipv6Unicast = newFSMAddressFamily(packet.IPv6AFI, packet.UnicastSAFI, &peerAddressFamily{ rib: rib, importFilter: filter.NewAcceptAllFilter(), exportFilter: filter.NewAcceptAllFilter(), }, fsmA) fsmA.ipv6Unicast.multiProtocol = true - fsmA.ipv6Unicast.addPathRX = test.addPath + fsmA.ipv6Unicast.addPathTX = test.addPath } else { - fsmA.ipv4Unicast = newFSMAddressFamily(packet.IPv4AFI, packet.UnicastSAFI, &familyParameters{ + fsmA.ipv4Unicast = newFSMAddressFamily(packet.IPv4AFI, packet.UnicastSAFI, &peerAddressFamily{ rib: rib, importFilter: filter.NewAcceptAllFilter(), exportFilter: filter.NewAcceptAllFilter(), }, fsmA) - fsmA.ipv4Unicast.addPathRX = test.addPath + fsmA.ipv4Unicast.addPathTX = test.addPath } fsmA.holdTimer = time.NewTimer(time.Second * 90) diff --git a/routingtable/adjRIBOut/adj_rib_out.go b/routingtable/adjRIBOut/adj_rib_out.go index 50c717d04512c084eac04bfd953d6e9b9341c98f..a93a5cfe44ab570ce41873b7b6ad416dbd9fb8c3 100644 --- a/routingtable/adjRIBOut/adj_rib_out.go +++ b/routingtable/adjRIBOut/adj_rib_out.go @@ -17,20 +17,20 @@ type AdjRIBOut struct { routingtable.ClientManager rt *routingtable.RoutingTable neighbor *routingtable.Neighbor - addPathRX bool + addPathTX bool pathIDManager *pathIDManager exportFilter *filter.Filter mu sync.RWMutex } // New creates a new Adjacency RIB Out with BGP add path -func New(neighbor *routingtable.Neighbor, exportFilter *filter.Filter, addPathRX bool) *AdjRIBOut { +func New(neighbor *routingtable.Neighbor, exportFilter *filter.Filter, addPathTX bool) *AdjRIBOut { a := &AdjRIBOut{ rt: routingtable.NewRoutingTable(), neighbor: neighbor, pathIDManager: newPathIDManager(), exportFilter: exportFilter, - addPathRX: addPathRX, + addPathTX: addPathTX, } a.ClientManager = routingtable.NewClientManager(a) return a @@ -49,7 +49,7 @@ func (a *AdjRIBOut) RouteCount() int64 { // AddPath adds path p to prefix `pfx` func (a *AdjRIBOut) AddPath(pfx bnet.Prefix, p *route.Path) error { if !routingtable.ShouldPropagateUpdate(pfx, p, a.neighbor) { - if a.addPathRX { + if a.addPathTX { a.removePathsForPrefix(pfx) } return nil @@ -96,7 +96,7 @@ func (a *AdjRIBOut) AddPath(pfx bnet.Prefix, p *route.Path) error { a.mu.Lock() defer a.mu.Unlock() - if a.addPathRX { + if a.addPathTX { pathID, err := a.pathIDManager.addPath(p) if err != nil { return fmt.Errorf("Unable to get path ID: %v", err) @@ -141,7 +141,7 @@ func (a *AdjRIBOut) RemovePath(pfx bnet.Prefix, p *route.Path) bool { a.rt.RemovePath(pfx, p) // If the neighbar has AddPath capabilities, try to find the PathID - if a.addPathRX { + if a.addPathTX { pathID, err := a.pathIDManager.releasePath(p) if err != nil { log.Warningf("Unable to release path for prefix %s: %v", pfx.String(), err)