summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--config/util.go16
-rw-r--r--server/server.go2
2 files changed, 17 insertions, 1 deletions
diff --git a/config/util.go b/config/util.go
index 15a68305..d1696eb0 100644
--- a/config/util.go
+++ b/config/util.go
@@ -66,3 +66,19 @@ func GetAfiSafi(p *Neighbor, family bgp.RouteFamily) *AfiSafi {
}
return nil
}
+
+func CheckAfiSafisChange(x, y []AfiSafi) bool {
+ if len(x) != len(y) {
+ return true
+ }
+ m := make(map[string]bool)
+ for _, e := range x {
+ m[string(e.Config.AfiSafiName)] = true
+ }
+ for _, e := range y {
+ if !m[string(e.Config.AfiSafiName)] {
+ return true
+ }
+ }
+ return false
+}
diff --git a/server/server.go b/server/server.go
index 44831e3d..4c192a0c 100644
--- a/server/server.go
+++ b/server/server.go
@@ -2383,7 +2383,7 @@ func (server *BgpServer) handleUpdateNeighbor(c *config.Neighbor) ([]*SenderMsg,
}
original := peer.fsm.pConf
- if !original.Config.Equal(&c.Config) || !original.Transport.Config.Equal(&c.Transport.Config) {
+ if !original.Config.Equal(&c.Config) || !original.Transport.Config.Equal(&c.Transport.Config) || config.CheckAfiSafisChange(original.AfiSafis, c.AfiSafis) {
sub := uint8(bgp.BGP_ERROR_SUB_OTHER_CONFIGURATION_CHANGE)
if original.Config.AdminDown != c.Config.AdminDown {
sub = bgp.BGP_ERROR_SUB_ADMINISTRATIVE_SHUTDOWN