diff --git a/protocols/bgp/server/fsm.go b/protocols/bgp/server/fsm.go
index 1e614ab1a45315f7ba13df63a18531c5937a92e8..dd1253b2eba7629059d221a9d8d2587ef2c5e1b0 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 5ac4e09aa72251641c3e6268badabf90ddcf7792..8955ad673c8ed36690ab4280067247ce89bc5411 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 896c3201b01799c3317a5f1e4e1ad1eed194f2bd..10c1266cf65e557e1df27c02808e30d4bd74f310 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)