From 1f3d43687ecdd14b73b0a14e32af95f0d099b88c Mon Sep 17 00:00:00 2001 From: Daniel Czerwonk <czerwonk@users.noreply.github.com> Date: Thu, 14 Feb 2019 17:44:57 +0100 Subject: [PATCH] sane default for ClientOptions (#195) * sane default for ClientOptions, otherwise max paths for non add path is 0 * applied new default to BMP test * added regression test --- protocols/bgp/server/bmp_router_test.go | 2 + protocols/bgp/server/fsm_address_family.go | 3 + protocols/bgp/server/fsm_open_sent_test.go | 80 ++++++++++++++++++++++ 3 files changed, 85 insertions(+) diff --git a/protocols/bgp/server/bmp_router_test.go b/protocols/bgp/server/bmp_router_test.go index aa17d74e..3ced25bf 100644 --- a/protocols/bgp/server/bmp_router_test.go +++ b/protocols/bgp/server/bmp_router_test.go @@ -330,12 +330,14 @@ func TestProcessPeerUpNotification(t *testing.T) { safi: 1, adjRIBIn: adjRIBIn.New(filter.NewAcceptAllFilter(), &routingtable.ContributingASNs{}, 169090600, 0, false), importFilter: filter.NewAcceptAllFilter(), + addPathTX: routingtable.ClientOptions{BestOnly: true}, }, ipv6Unicast: &fsmAddressFamily{ afi: 2, safi: 1, adjRIBIn: adjRIBIn.New(filter.NewAcceptAllFilter(), &routingtable.ContributingASNs{}, 169090600, 0, false), importFilter: filter.NewAcceptAllFilter(), + addPathTX: routingtable.ClientOptions{BestOnly: true}, }, }, }, diff --git a/protocols/bgp/server/fsm_address_family.go b/protocols/bgp/server/fsm_address_family.go index 04234c3d..f59d4103 100644 --- a/protocols/bgp/server/fsm_address_family.go +++ b/protocols/bgp/server/fsm_address_family.go @@ -45,6 +45,9 @@ func newFSMAddressFamily(afi uint16, safi uint8, family *peerAddressFamily, fsm rib: family.rib, importFilter: family.importFilter, exportFilter: family.exportFilter, + addPathTX: routingtable.ClientOptions{ + BestOnly: true, + }, } } diff --git a/protocols/bgp/server/fsm_open_sent_test.go b/protocols/bgp/server/fsm_open_sent_test.go index 5b699bb1..31b33dc7 100644 --- a/protocols/bgp/server/fsm_open_sent_test.go +++ b/protocols/bgp/server/fsm_open_sent_test.go @@ -1,6 +1,7 @@ package server import ( + "github.com/bio-routing/bio-rd/routingtable" "net" "testing" @@ -211,3 +212,82 @@ func TestProcessMultiProtocolCapability(t *testing.T) { }) } } + +func TestProcessAddPathCapabilityTX(t *testing.T) { + tests := []struct { + name string + peer *peer + caps []packet.AddPathCapability + expected routingtable.ClientOptions + }{ + { + name: "Add-Path enabled and cap received", + peer: &peer{ + ipv4: &peerAddressFamily{ + addPathSend: routingtable.ClientOptions{MaxPaths: 3}, + }, + }, + caps: []packet.AddPathCapability{ + { + AFI: packet.IPv4AFI, + SAFI: packet.UnicastSAFI, + SendReceive: packet.AddPathReceive, + }, + }, + expected: routingtable.ClientOptions{MaxPaths: 3}, + }, + { + name: "Add-Path enabled and cap not received", + peer: &peer{ + ipv4: &peerAddressFamily{ + addPathSend: routingtable.ClientOptions{MaxPaths: 3}, + }, + }, + caps: []packet.AddPathCapability{}, + expected: routingtable.ClientOptions{BestOnly: true}, + }, + { + name: "Add-Path disabled and cap received", + peer: &peer{ + ipv4: &peerAddressFamily{ + addPathSend: routingtable.ClientOptions{BestOnly: true}, + }, + }, + caps: []packet.AddPathCapability{ + { + AFI: packet.IPv4AFI, + SAFI: packet.UnicastSAFI, + SendReceive: packet.AddPathReceive, + }, + }, + expected: routingtable.ClientOptions{BestOnly: true}, + }, + { + name: "Add-Path disabled and cap not received", + peer: &peer{ + ipv4: &peerAddressFamily{ + addPathSend: routingtable.ClientOptions{BestOnly: true}, + }, + }, + caps: []packet.AddPathCapability{}, + expected: routingtable.ClientOptions{BestOnly: true}, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + fsm := newFSM(test.peer) + fsm.con = &btesting.MockConn{} + + s := &openSentState{ + fsm: fsm, + } + + for _, cap := range test.caps { + s.processAddPathCapability(cap) + } + + assert.Equal(t, test.expected, fsm.ipv4Unicast.addPathTX) + }) + } +} -- GitLab