Hi I’ve modified the patch based on the origin patch to care
the regular eBGP behaviour.

Could you check it?

> On Aug 15, 2015, at 8:22 AM, Toshiki Tsuboi <t.tsubo2...@gmail.com> wrote:
> 
> This issue looks complicated to me.
> I guess this patch for “BGP Next Hop Unchanged” works properly. 
> 
>                 eBGP                 eBGP
>    ------- R1 -----------> RyuBGP ---------> R2
>           y.y.y.y            z.z.z.z       => UPDATE(Nexthop: y.y.y.y)
> 
> 
> But,  in case of “Regular eBGP session”, I’m not sure this patch works 
> properly as well.
> (maybe, RyuBGP can not change the next hop attribute of R1, when RyuBGP sends 
> out R2)
> 
>                 eBGP                 eBGP
>    ------- R1 -----------> RyuBGP ---------> R2
>           y.y.y.y            z.z.z.z       => UPDATE(Nexthop: y.y.y.y)
> 
> Needs for Code refactoring for issue of changing nexthop attribute.
> best regards.
> 
> 
> 
>> 2015/08/14 4:13、Alan Quillin <alanquil...@gmail.com 
>> <mailto:alanquil...@gmail.com>> のメール:
>> 
>> From: Alan Quillin <alanquil...@gmail.com <mailto:alanquil...@gmail.com>>
>> 
>> If the path has a next hop value set, it should be used in the BGP
>> Update message first.  This changes to logic to use the check for the
>> next hop in the order prefix/path->peer config->speaker config.  This
>> will allow for sending the nexthop as part of the add_prefix message and
>> allow for overiding the nexthop of the peer if one is set.
>> 
>> Signed-off-by: Alan Quillin <alanquil...@gmail.com 
>> <mailto:alanquil...@gmail.com>>
>> ---
>>  ryu/services/protocols/bgp/info_base/base.py | 4 ++++
>>  ryu/services/protocols/bgp/peer.py           | 2 ++
>>  2 files changed, 6 insertions(+)
>> 
>> diff --git a/ryu/services/protocols/bgp/info_base/base.py 
>> b/ryu/services/protocols/bgp/info_base/base.py
>> index 3546c92..3065cb8 100644
>> --- a/ryu/services/protocols/bgp/info_base/base.py
>> +++ b/ryu/services/protocols/bgp/info_base/base.py
>> @@ -809,6 +809,10 @@ class Path(object):
>> 
>>          return not interested_rts.isdisjoint(curr_rts)
>> 
>> +    def has_nexthop(self):
>> +        return not (not self._nexthop or self._nexthop == '0.0.0.0' or
>> +                    self._nexthop == '::')
>> +
>>      def __str__(self):
>>          return (
>>              'Path(source: %s, nlri: %s, source ver#: %s, '
>> diff --git a/ryu/services/protocols/bgp/peer.py 
>> b/ryu/services/protocols/bgp/peer.py
>> index f08ac1e..308cdc2 100644
>> --- a/ryu/services/protocols/bgp/peer.py
>> +++ b/ryu/services/protocols/bgp/peer.py
>> @@ -803,6 +803,8 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
>>          # By default we use BGPS's interface IP with this peer as next_hop.
>>          if self._neigh_conf.next_hop:
>>              next_hop = self._neigh_conf.next_hop
>> +        elif path.has_nexthop():
>> +            next_hop = path.nexthop
>>          else:
>>              next_hop = self.host_bind_ip
>>          if route_family == RF_IPv6_VPN:
>> -- 
>> 2.1.4
>> 
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> Ryu-devel mailing list
>> Ryu-devel@lists.sourceforge.net <mailto:Ryu-devel@lists.sourceforge.net>
>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> Ryu-devel mailing list
> Ryu-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ryu-devel

------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to