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