summaryrefslogtreecommitdiffhomepage
path: root/server/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/server.go')
-rw-r--r--server/server.go16
1 files changed, 10 insertions, 6 deletions
diff --git a/server/server.go b/server/server.go
index c86b2af2..263bc00c 100644
--- a/server/server.go
+++ b/server/server.go
@@ -427,6 +427,9 @@ func (server *BgpServer) notifyBestWatcher(best map[string][]*table.Path, multip
}
func (server *BgpServer) dropPeerAllRoutes(peer *Peer, families []bgp.RouteFamily) {
+
+ families = peer.toGlobalFamilies(families)
+
ids := make([]string, 0, len(server.neighborMap))
if peer.isRouteServerClient() {
for _, targetPeer := range server.neighborMap {
@@ -512,6 +515,13 @@ func (server *BgpServer) propagateUpdate(peer *Peer, pathList []*table.Path) []*
var alteredPathList, withdrawn []*table.Path
var best map[string][]*table.Path
+ if peer != nil && peer.fsm.pConf.Config.Vrf != "" {
+ vrf := server.globalRib.Vrfs[peer.fsm.pConf.Config.Vrf]
+ for idx, path := range pathList {
+ pathList[idx] = path.ToGlobal(vrf)
+ }
+ }
+
if peer != nil && peer.isRouteServerClient() {
for _, path := range pathList {
path.Filter(peer.ID(), table.POLICY_DIRECTION_IMPORT)
@@ -816,12 +826,6 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) {
}
if len(pathList) > 0 {
- if v := peer.fsm.pConf.Config.Vrf; v != "" {
- vrf := server.globalRib.Vrfs[v]
- for idx, path := range pathList {
- pathList[idx] = path.ToGlobal(vrf)
- }
- }
altered := server.propagateUpdate(peer, pathList)
if server.isWatched(WATCH_EVENT_TYPE_POST_UPDATE) {
_, y := peer.fsm.capMap[bgp.BGP_CAP_FOUR_OCTET_AS_NUMBER]