From 2c04f298888b17808f524f97315475abf673a9ad Mon Sep 17 00:00:00 2001 From: Daniel Czerwonk <daniel@dan-nrw.de> Date: Tue, 17 Jul 2018 08:46:40 +0200 Subject: [PATCH] preperations to split options --- protocols/bgp/server/fsm.go | 15 +++++++++++++++ protocols/bgp/server/fsm_open_sent.go | 13 +++++++++---- protocols/bgp/server/server_test.go | 6 +++--- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/protocols/bgp/server/fsm.go b/protocols/bgp/server/fsm.go index 1e614ab1..dd1253b2 100644 --- a/protocols/bgp/server/fsm.go +++ b/protocols/bgp/server/fsm.go @@ -113,6 +113,21 @@ func newFSM2(peer *peer) *FSM { return f } +func (fsm *FSM) addressFamily(afi uint16, safi uint8) *fsmAddressFamily { + if safi != packet.UnicastSAFI { + return nil + } + + switch afi { + case packet.IPv4AFI: + return fsm.ipv4Unicast + case packet.IPv6AFI: + return fsm.ipv6Unicast + default: + return nil + } +} + func (fsm *FSM) start() { ctx, cancel := context.WithCancel(context.Background()) fsm.connectionCancelFunc = cancel diff --git a/protocols/bgp/server/fsm_open_sent.go b/protocols/bgp/server/fsm_open_sent.go index 5ac4e09a..8955ad67 100644 --- a/protocols/bgp/server/fsm_open_sent.go +++ b/protocols/bgp/server/fsm_open_sent.go @@ -183,20 +183,25 @@ func (s *openSentState) processAddPathCapability(addPathCap packet.AddPathCapabi return } + f := s.fsm.addressFamily(addPathCap.AFI, addPathCap.SAFI) + if f == nil { + return + } + switch addPathCap.SendReceive { case packet.AddPathReceive: - if !s.fsm.peer.addPathSend.BestOnly { + if !f.addPathSend.BestOnly { s.fsm.options.AddPathRX = true } case packet.AddPathSend: - if s.fsm.peer.addPathRecv { + if f.addPathRecv { s.fsm.options.AddPathRX = true } case packet.AddPathSendReceive: - if !s.fsm.peer.addPathSend.BestOnly { + if !f.addPathSend.BestOnly { s.fsm.options.AddPathRX = true } - if s.fsm.peer.addPathRecv { + if f.addPathRecv { s.fsm.options.AddPathRX = true } } diff --git a/protocols/bgp/server/server_test.go b/protocols/bgp/server/server_test.go index 896c3201..10c1266c 100644 --- a/protocols/bgp/server/server_test.go +++ b/protocols/bgp/server/server_test.go @@ -38,13 +38,13 @@ func TestBgpServerPeerSnapshot(t *testing.T) { KeepAlive: time.Second * 30, Passive: true, RouterID: s.RouterID(), - AddPathSend: routingtable.ClientOptions{ - MaxPaths: 10, - }, IPv4: &config.AddressFamilyConfig{ RIB: rib, ImportFilter: filter.NewDrainFilter(), ExportFilter: filter.NewAcceptAllFilter(), + AddPathSend: routingtable.ClientOptions{ + MaxPaths: 10, + }, }, } s.AddPeer(pc) -- GitLab