From 9b14373482510e0a41a8b7de63b6d956e6d56fa8 Mon Sep 17 00:00:00 2001
From: Daniel Czerwonk <daniel@dan-nrw.de>
Date: Wed, 18 Jul 2018 08:37:31 +0200
Subject: [PATCH] moved supportsMultiProtocol to FSM because it is internal
 state of FSM and only used in server package

---
 protocols/bgp/server/fsm.go                | 2 ++
 protocols/bgp/server/fsm_address_family.go | 4 ++--
 protocols/bgp/server/fsm_established.go    | 2 +-
 protocols/bgp/server/fsm_open_sent.go      | 2 +-
 protocols/bgp/server/fsm_test.go           | 2 +-
 protocols/bgp/server/update_sender.go      | 6 +++---
 protocols/bgp/server/update_sender_test.go | 6 +++---
 protocols/bgp/types/options.go             | 5 ++---
 8 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/protocols/bgp/server/fsm.go b/protocols/bgp/server/fsm.go
index dd1253b2..44437ea9 100644
--- a/protocols/bgp/server/fsm.go
+++ b/protocols/bgp/server/fsm.go
@@ -63,6 +63,8 @@ type FSM struct {
 	ipv4Unicast     *fsmAddressFamily
 	ipv6Unicast     *fsmAddressFamily
 
+	supportsMultiProtocol bool
+
 	neighborID uint32
 	state      state
 	stateMu    sync.RWMutex
diff --git a/protocols/bgp/server/fsm_address_family.go b/protocols/bgp/server/fsm_address_family.go
index 27b55417..b72224a4 100644
--- a/protocols/bgp/server/fsm_address_family.go
+++ b/protocols/bgp/server/fsm_address_family.go
@@ -94,7 +94,7 @@ func (f *fsmAddressFamily) processUpdate(u *packet.BGPUpdate) {
 		f.updates(u)
 	}
 
-	if f.fsm.options.SupportsMultiProtocol {
+	if f.fsm.supportsMultiProtocol {
 		f.multiProtocolUpdates(u)
 	}
 }
@@ -118,7 +118,7 @@ func (f *fsmAddressFamily) updates(u *packet.BGPUpdate) {
 }
 
 func (f *fsmAddressFamily) multiProtocolUpdates(u *packet.BGPUpdate) {
-	if !f.fsm.options.SupportsMultiProtocol {
+	if !f.fsm.supportsMultiProtocol {
 		return
 	}
 
diff --git a/protocols/bgp/server/fsm_established.go b/protocols/bgp/server/fsm_established.go
index 2ffa1941..8a090b18 100644
--- a/protocols/bgp/server/fsm_established.go
+++ b/protocols/bgp/server/fsm_established.go
@@ -211,7 +211,7 @@ func (s *establishedState) update(msg *packet.BGPMessage) (state, string) {
 }
 
 func (s *establishedState) addressFamilyForUpdate(u *packet.BGPUpdate) (afi uint16, safi uint8) {
-	if !s.fsm.options.SupportsMultiProtocol || u.NLRI != nil || u.WithdrawnRoutes != nil {
+	if !s.fsm.supportsMultiProtocol || u.NLRI != nil || u.WithdrawnRoutes != nil {
 		return packet.IPv4AFI, packet.UnicastSAFI
 	}
 
diff --git a/protocols/bgp/server/fsm_open_sent.go b/protocols/bgp/server/fsm_open_sent.go
index 8955ad67..7a099989 100644
--- a/protocols/bgp/server/fsm_open_sent.go
+++ b/protocols/bgp/server/fsm_open_sent.go
@@ -175,7 +175,7 @@ func (s *openSentState) processCapability(cap packet.Capability) {
 }
 
 func (s *openSentState) processMultiProtocolCapability(cap packet.MultiProtocolCapability) {
-	s.fsm.options.SupportsMultiProtocol = true
+	s.fsm.supportsMultiProtocol = true
 }
 
 func (s *openSentState) processAddPathCapability(addPathCap packet.AddPathCapability) {
diff --git a/protocols/bgp/server/fsm_test.go b/protocols/bgp/server/fsm_test.go
index 50181d8e..2e4b2016 100644
--- a/protocols/bgp/server/fsm_test.go
+++ b/protocols/bgp/server/fsm_test.go
@@ -138,7 +138,7 @@ func TestFSM255UpdatesIPv6(t *testing.T) {
 			exportFilter: filter.NewAcceptAllFilter(),
 		},
 	})
-	fsmA.options.SupportsMultiProtocol = true
+	fsmA.supportsMultiProtocol = true
 
 	fsmA.holdTimer = time.NewTimer(time.Second * 90)
 	fsmA.keepaliveTimer = time.NewTimer(time.Second * 30)
diff --git a/protocols/bgp/server/update_sender.go b/protocols/bgp/server/update_sender.go
index 6eda96c2..ed63c74d 100644
--- a/protocols/bgp/server/update_sender.go
+++ b/protocols/bgp/server/update_sender.go
@@ -135,7 +135,7 @@ func (u *UpdateSender) sender(aggrTime time.Duration) {
 }
 
 func (u *UpdateSender) updateOverhead() int {
-	if !u.fsm.options.SupportsMultiProtocol {
+	if !u.fsm.supportsMultiProtocol {
 		return 0
 	}
 
@@ -169,7 +169,7 @@ func (u *UpdateSender) updateMessageForPrefixes(pfxs []bnet.Prefix, pa *packet.P
 		return u.bgpUpdate(pfxs, pa, pathID)
 	}
 
-	if u.fsm.options.SupportsMultiProtocol {
+	if u.fsm.supportsMultiProtocol {
 		return u.bgpUpdateMultiProtocol(pfxs, pa, pathID)
 	}
 
@@ -246,7 +246,7 @@ func (u *UpdateSender) RemovePath(pfx bnet.Prefix, p *route.Path) bool {
 }
 
 func (u *UpdateSender) withdrawPrefix(pfx bnet.Prefix, p *route.Path) error {
-	if u.fsm.options.SupportsMultiProtocol {
+	if u.fsm.supportsMultiProtocol {
 		return u.withDrawPrefixesMultiProtocol(u.fsm.con, pfx, p)
 	}
 
diff --git a/protocols/bgp/server/update_sender_test.go b/protocols/bgp/server/update_sender_test.go
index 09a15e82..d46297d6 100644
--- a/protocols/bgp/server/update_sender_test.go
+++ b/protocols/bgp/server/update_sender_test.go
@@ -875,7 +875,7 @@ func TestSender(t *testing.T) {
 
 		rib := locRIB.New()
 		if test.afi == packet.IPv6AFI {
-			fsmA.options.SupportsMultiProtocol = true
+			fsmA.supportsMultiProtocol = true
 			fsmA.ipv6Unicast = newFSMAddressFamily(packet.IPv6AFI, packet.UnicastSAFI, &familyParameters{
 				rib:          rib,
 				importFilter: filter.NewAcceptAllFilter(),
@@ -1034,9 +1034,9 @@ func TestWithDrawPrefixesMultiProtocol(t *testing.T) {
 			u := &UpdateSender{
 				fsm: &FSM{
 					options: &types.Options{
-						AddPathRX:             false,
-						SupportsMultiProtocol: true,
+						AddPathRX: false,
 					},
+					supportsMultiProtocol: true,
 				},
 				afi:  packet.IPv6AFI,
 				safi: packet.UnicastSAFI,
diff --git a/protocols/bgp/types/options.go b/protocols/bgp/types/options.go
index 8b96d669..19b580d2 100644
--- a/protocols/bgp/types/options.go
+++ b/protocols/bgp/types/options.go
@@ -2,7 +2,6 @@ package types
 
 // Options represents options to the update sender, decoder and encoder
 type Options struct {
-	Supports4OctetASN     bool
-	SupportsMultiProtocol bool
-	AddPathRX             bool
+	Supports4OctetASN bool
+	AddPathRX         bool
 }
-- 
GitLab