From c484d73bfbdb5b46bbb08f462bb57e65bdf09e0e Mon Sep 17 00:00:00 2001 From: Toshiki Tsuboi Date: Wed, 17 Dec 2014 13:25:48 +0900 Subject: [PATCH] bgp: support New best path selecting In case of selecting new best path, Ryu BGPSpeaker send withdraw messages. Signed-off-by: Toshiki Tsuboi Signed-off-by: FUJITA Tomonori --- ryu/services/protocols/bgp/info_base/base.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ryu/services/protocols/bgp/info_base/base.py b/ryu/services/protocols/bgp/info_base/base.py index d3bc445c..8ddbb0a1 100644 --- a/ryu/services/protocols/bgp/info_base/base.py +++ b/ryu/services/protocols/bgp/info_base/base.py @@ -257,6 +257,16 @@ class NonVrfPathProcessingMixin(object): pm = self._core_service.peer_manager pm.comm_new_best_to_bgp_peers(new_best_path) + # withdraw old best path + if old_best_path and self._sent_routes: + for sent_route in self._sent_routes.values(): + sent_path = sent_route.path + withdraw_clone = sent_path.clone(for_withdrawal=True) + outgoing_route = OutgoingRoute(withdraw_clone) + sent_route.sent_peer.enque_outgoing_msg(outgoing_route) + LOG.debug('Sending withdrawal to %s for %s' % + (sent_route.sent_peer, outgoing_route)) + class Destination(object): """State about a particular destination.