Hi

It’s working fine in case of iBGP peering

                 (static)                iBGP
     ------- R1 ----------- RyuBGP ---------> R2
x.x.x.x/x  y.y.y.y          z.z.z.z        => UPDATE(Nexthop: z.z.z.z)


Thanks


> 2015/09/08 21:19、ISHIDA Wataru <[email protected]> のメール:
> 
> Hi tsuboi-san,
> 
> Could you try the patch I've sent now ?
> 
> Note: please specify is_next_hop_self=True when adding iBGP neighbor.
> 
> Thanks,
> 
>> -----Original Message-----
>> From: ISHIDA Wataru [mailto:[email protected]]
>> Sent: Tuesday, September 08, 2015 9:13 PM
>> To: [email protected]
>> Cc: ISHIDA Wataru
>> Subject: [PATCH] bgp: enable nexthop_self for locally generated routes
>> 
>> Signed-off-by: ISHIDA Wataru <[email protected]>
>> ---
>> ryu/services/protocols/bgp/peer.py | 20 +++++++-------------
>> 1 file changed, 7 insertions(+), 13 deletions(-)
>> 
>> diff --git a/ryu/services/protocols/bgp/peer.py
>> b/ryu/services/protocols/bgp/peer.py
>> index 67ba85c..c8eae4b 100644
>> --- a/ryu/services/protocols/bgp/peer.py
>> +++ b/ryu/services/protocols/bgp/peer.py
>> @@ -851,24 +851,18 @@ class Peer(Source, Sink, NeighborConfListener,
>> Activity):
>>             nlri_list = [path.nlri]
>> 
>>             # By default we use BGPS's interface IP with this peer as
>> next_hop.
>> -            next_hop = self._session_next_hop(path)
>> -            if path.is_local() and path.has_nexthop():
>> +            if self.is_ebgp_peer():
>> +                next_hop = self._session_next_hop(path)
>> +                if path.is_local() and path.has_nexthop():
>> +                    next_hop = path.nexthop
>> +            else:
>>                 next_hop = path.nexthop
>> -
>> -            # If this is a iBGP peer.
>> -            if not self.is_ebgp_peer() and not path.is_local():
>> -                # If the path came from a bgp peer and not from NC,
>> according
>> -                # to RFC 4271 we should not modify next_hop.
>> -                # However RFC 4271 allows us to change next_hop
>> +                # RFC 4271 allows us to change next_hop
>>                 # if configured to announce its own ip address.
>>                 if self._neigh_conf.is_next_hop_self:
>> -                    next_hop = self.host_bind_ip
>> -                    if path.route_family == RF_IPv6_VPN:
>> -                        next_hop = self._ipv4_mapped_ipv6(next_hop)
>> +                    next_hop = self._session_next_hop(path)
>>                     LOG.debug('using %s as a next_hop address instead'
>>                               ' of path.nexthop %s', next_hop,
>> path.nexthop)
>> -                else:
>> -                    next_hop = path.nexthop
>> 
>>             nexthop_attr = BGPPathAttributeNextHop(next_hop)
>>             assert nexthop_attr, 'Missing NEXTHOP mandatory attribute.'
>> --
>> 1.9.1
> 
> 
> 


------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to