diff options
-rw-r--r-- | config/util.go | 16 | ||||
-rw-r--r-- | server/server.go | 2 |
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 |