On Mon, 27 Oct 2014 19:41:05 +0900 Toshiki Tsuboi <[email protected]> wrote:
> BGPSpeaker is aware of "best_path_change_handler" in MPLS-VPN topology. > This feature is available in calculating Best Path Selection of VPNv4/6 > prefixes. > > Signed-off-by: Toshiki Tsuboi <[email protected]> > --- > ryu/services/protocols/bgp/bgpspeaker.py | 34 > +++++++++++++++++++++++------ > ryu/services/protocols/bgp/info_base/vpn.py | 2 ++ > 2 files changed, 29 insertions(+), 7 deletions(-) Great! I have one comment. > diff --git a/ryu/services/protocols/bgp/bgpspeaker.py > b/ryu/services/protocols/bgp/bgpspeaker.py > index d727c72..fbb601b 100644 > --- a/ryu/services/protocols/bgp/bgpspeaker.py > +++ b/ryu/services/protocols/bgp/bgpspeaker.py > @@ -61,6 +61,9 @@ from ryu.services.protocols.bgp.rtconf.neighbors import > IS_NEXT_HOP_SELF > from ryu.services.protocols.bgp.rtconf.neighbors import LOCAL_ADDRESS > from ryu.services.protocols.bgp.rtconf.neighbors import LOCAL_PORT > from ryu.services.protocols.bgp.info_base.base import Filter > +from ryu.services.protocols.bgp.info_base.ipv4 import Ipv4Path > +from ryu.services.protocols.bgp.info_base.vpnv4 import Vpnv4Path > +from ryu.services.protocols.bgp.info_base.vpnv6 import Vpnv6Path > > > NEIGHBOR_CONF_MED = 'multi_exit_disc' > @@ -80,16 +83,19 @@ class EventPrefix(object): > route_dist None in the case of ipv4 or ipv6 family > prefix A prefix was changed > nexthop The nexthop of the changed prefix > + label mpls label for vpnv4 prefix > is_withdraw True if this prefix has gone otherwise False > ================ ====================================================== > > """ > > - def __init__(self, remote_as, route_dist, prefix, nexthop, is_withdraw): > + def __init__(self, remote_as, route_dist, prefix, nexthop, label, > + is_withdraw): > self.remote_as = remote_as > self.route_dist = route_dist > self.prefix = prefix > self.nexthop = nexthop > + self.label = label > self.is_withdraw = is_withdraw > > > @@ -145,13 +151,27 @@ class BGPSpeaker(object): > hub.spawn(ssh.SSH_CLI_CONTROLLER.start) > > def _notify_best_path_changed(self, path, is_withdraw): > - if not path.source: > - # ours > + if path.source: > + nexthop = path.nexthop > + is_withdraw = is_withdraw > + remote_as = path.source.remote_as > + else: > + return > + > + if isinstance(path, Ipv4Path): > + prefix = path.nlri.addr + '/' + str(path.nlri.length) > + route_dist = None > + label = None Can the above code handle Ipv6Path? > + elif isinstance(path, Vpnv4Path) or isinstance(path, Vpnv6Path): > + prefix = path.nlri.prefix > + route_dist = path.nlri.route_dist > + label = path.nlri.label_list > + else: > return > - ev = EventPrefix(remote_as=path.source.remote_as, > - route_dist=None, > - prefix=path.nlri.addr + '/' + str(path.nlri.length), > - nexthop=path.nexthop, is_withdraw=is_withdraw) > + > + ev = EventPrefix(remote_as, route_dist, prefix, nexthop, label, > + is_withdraw) > + > if self._best_path_change_handler: > self._best_path_change_handler(ev) > > diff --git a/ryu/services/protocols/bgp/info_base/vpn.py > b/ryu/services/protocols/bgp/info_base/vpn.py > index ece8e2c..e5cdef4 100644 > --- a/ryu/services/protocols/bgp/info_base/vpn.py > +++ b/ryu/services/protocols/bgp/info_base/vpn.py > @@ -90,6 +90,7 @@ class VpnDest(Destination, NonVrfPathProcessingMixin): > def _best_path_lost(self): > old_best_path = self._best_path > NonVrfPathProcessingMixin._best_path_lost(self) > + self._core_service._signal_bus.best_path_changed(old_best_path, True) > > # Best-path might have been imported into VRF tables, we have to > # withdraw from them, if the source is a peer. > @@ -102,6 +103,7 @@ class VpnDest(Destination, NonVrfPathProcessingMixin): > > def _new_best_path(self, best_path): > NonVrfPathProcessingMixin._new_best_path(self, best_path) > + self._core_service._signal_bus.best_path_changed(best_path, False) > > # Extranet feature requires that we import new best path into VRFs. > tm = self._core_service.table_manager > -- > 1.9.1 > > > > ------------------------------------------------------------------------------ > _______________________________________________ > Ryu-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/ryu-devel ------------------------------------------------------------------------------ _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
