diff --git a/protocols/bgp/server/fsm.go b/protocols/bgp/server/fsm.go index dd1253b2eba7629059d221a9d8d2587ef2c5e1b0..44437ea9ade40a7038f0fa084d5117d3dddecc1d 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 27b55417e006cc8f4e7e3bcbc8cdb97ca3f83c18..b72224a4aa0402f30e0171804801fb8dca2b0740 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 2ffa19415e0d1233b5718b9127b8dbbfaaf9874b..8a090b18afa9fc06064573886677133f56460031 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 8955ad673c8ed36690ab4280067247ce89bc5411..7a0999899a5d0b7089892f1fb169d3a0abdc591f 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 50181d8e3aa66ec34dbc21e7c18827e1b6b3d4c8..2e4b20160b2df9ba15aaf1bf722bd8d6d9491c4c 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 6eda96c2d7f7a1dab28af7a16f405634f27c8ea0..ed63c74dcbc23da9d01b7b131e2325f5278a50f8 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 09a15e82711ddfe703a66caca965081f5c2d15ff..d46297d6effae19b01dab67eb0bbce231916a9ae 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 8b96d6697b7262b53954a12663dff872fd3492b2..19b580d2829b96d8f974311536b299211a98ca95 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 }