Hi Suresh,

Does your patch fix other problem at the following?
https://github.com/sureshkvl/ryu/commit/aebf3974d121134931d79805b35f8f252db9d7a5#diff-161a69adc7e5dd2fb041599033e9089bL1001

FYI, I made a similar patch for this issue.
Please refer to the attached patch.

Thanks,
Iwase

On 2018年06月26日 09:04, knet solutions wrote:
Hi IWAMOTO,

I updated the changes in this commit (on top of your route reflector change)

https://github.com/sureshkvl/ryu/commit/aebf3974d121134931d79805b35f8f252db9d7a5

Could you review?

How to submit this in upstream?.  Is it pull request or some other process?

Thanks
suresh



On Thu, Jun 21, 2018 at 8:18 AM, IWAMOTO Toshihiro <iwam...@valinux.co.jp <mailto:iwam...@valinux.co.jp>> wrote:

    On Thu, 21 Jun 2018 00:39:17 +0900,
    knet solutions wrote:
     >
     > [1  <multipart/alternative (7bit)>]
     > [1.1  <text/plain; UTF-8 (7bit)>]
    > In peer.py file,  PEER port number is hard coded to BGP Port Num.
> >                 peer_address = (self._neigh_conf.ip_address,
    >                                 const.STD_BGP_SERVER_PORT_NUM)
> > I think, it can be configurable parameter from the API.

    It should default to 179 but it's good to be configurable.
    Can you make a patch?

     > On Wed, Jun 20, 2018 at 4:15 PM, knet solutions <knetsolutio...@gmail.com
    <mailto:knetsolutio...@gmail.com>>
     > wrote:
     >
     > > Hi,
     > >
     > > neighbor_add api doesnot have  the "port number" parameter.
     > >
     > >
     > > For examples
     > >
> > Traditional BGP Router <--------------------------------------------------->
     > > RYU BGP Speaker
     > > (BGP runs in port 180)
     > >
     > >
     > >
     > > In the RYU BGP Speaker,
     > > bgp_speaker.neighbor_add(remote_router_id, remote_as)
     > >
     > > no option to specify the remote port number.
     > >
     > > Any suggestions?
     > >
     > > Thanks
     > > suresh
     > >




--
*/Regards,
/*
*/Knet solutions./*

https://github.com/knetsolutions/KNet
http://knet-topology-builder.readthedocs.io/
http://knetsolutions.in/



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot



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

>From 14f48def88012f779ac30d2068e4c7c8b1948233 Mon Sep 17 00:00:00 2001
From: IWASE Yusuke <iwase.yusu...@gmail.com>
Date: Wed, 27 Jun 2018 16:13:25 +0900
Subject: [PATCH] BGPSpeaker: Enable to specify remote port for neighbor

Currently, the remote port of neighbor is the hard-coded value 179.

This patch enables to specify the remote port of neighbor in
"BGPSpeaker.neighbor_add()" API.

Suggested-by: Suresh Kumar <knetsolutio...@gmail.com>
Signed-off-by: IWASE Yusuke <iwase.yusu...@gmail.com>
---
 ryu/services/protocols/bgp/bgpspeaker.py      | 34 +++++++++++--------
 ryu/services/protocols/bgp/peer.py            |  2 +-
 .../protocols/bgp/rtconf/neighbors.py         | 18 +++++++++-
 3 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/ryu/services/protocols/bgp/bgpspeaker.py b/ryu/services/protocols/bgp/bgpspeaker.py
index 46cbcaf1..2f53f636 100644
--- a/ryu/services/protocols/bgp/bgpspeaker.py
+++ b/ryu/services/protocols/bgp/bgpspeaker.py
@@ -112,21 +112,23 @@ from ryu.services.protocols.bgp.rtconf.neighbors import (
     DEFAULT_CAP_MBGP_VPNV4FS,
     DEFAULT_CAP_MBGP_VPNV6FS,
     DEFAULT_CAP_MBGP_L2VPNFS,
+    DEFAULT_CAP_ENHANCED_REFRESH,
+    DEFAULT_CAP_FOUR_OCTET_AS_NUMBER,
+    DEFAULT_CONNECT_MODE,
+    REMOTE_PORT,
+    DEFAULT_BGP_PORT,
+    PEER_NEXT_HOP,
+    PASSWORD,
+    DEFAULT_IS_ROUTE_SERVER_CLIENT,
+    IS_ROUTE_SERVER_CLIENT,
+    DEFAULT_IS_ROUTE_REFLECTOR_CLIENT,
+    IS_ROUTE_REFLECTOR_CLIENT,
+    DEFAULT_IS_NEXT_HOP_SELF,
+    IS_NEXT_HOP_SELF,
+    CONNECT_MODE,
+    LOCAL_ADDRESS,
+    LOCAL_PORT,
 )
-from ryu.services.protocols.bgp.rtconf.neighbors import (
-    DEFAULT_CAP_ENHANCED_REFRESH, DEFAULT_CAP_FOUR_OCTET_AS_NUMBER)
-from ryu.services.protocols.bgp.rtconf.neighbors import DEFAULT_CONNECT_MODE
-from ryu.services.protocols.bgp.rtconf.neighbors import PEER_NEXT_HOP
-from ryu.services.protocols.bgp.rtconf.neighbors import PASSWORD
-from ryu.services.protocols.bgp.rtconf.neighbors import (
-    DEFAULT_IS_ROUTE_SERVER_CLIENT, IS_ROUTE_SERVER_CLIENT)
-from ryu.services.protocols.bgp.rtconf.neighbors import (
-    DEFAULT_IS_ROUTE_REFLECTOR_CLIENT, IS_ROUTE_REFLECTOR_CLIENT)
-from ryu.services.protocols.bgp.rtconf.neighbors import (
-    DEFAULT_IS_NEXT_HOP_SELF, IS_NEXT_HOP_SELF)
-from ryu.services.protocols.bgp.rtconf.neighbors import CONNECT_MODE
-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.rtconf.vrfs import SUPPORTED_VRF_RF
 from ryu.services.protocols.bgp.info_base.base import Filter
 from ryu.services.protocols.bgp.info_base.ipv4 import Ipv4Path
@@ -406,6 +408,7 @@ class BGPSpeaker(object):
         call('core.stop')
 
     def neighbor_add(self, address, remote_as,
+                     remote_port=DEFAULT_BGP_PORT,
                      enable_ipv4=DEFAULT_CAP_MBGP_IPV4,
                      enable_ipv6=DEFAULT_CAP_MBGP_IPV6,
                      enable_vpnv4=DEFAULT_CAP_MBGP_VPNV4,
@@ -437,6 +440,8 @@ class BGPSpeaker(object):
         ``remote_as`` specifies the AS number of the peer. It must be
         an integer between 1 and 65535.
 
+        ``remote_port`` specifies the TCP port number of the peer.
+
         ``enable_ipv4`` enables IPv4 address family for this
         neighbor.
 
@@ -513,6 +518,7 @@ class BGPSpeaker(object):
         bgp_neighbor = {
             neighbors.IP_ADDRESS: address,
             neighbors.REMOTE_AS: remote_as,
+            REMOTE_PORT: remote_port,
             PEER_NEXT_HOP: next_hop,
             PASSWORD: password,
             IS_ROUTE_SERVER_CLIENT: is_route_server_client,
diff --git a/ryu/services/protocols/bgp/peer.py b/ryu/services/protocols/bgp/peer.py
index 2c6e3898..f41715eb 100644
--- a/ryu/services/protocols/bgp/peer.py
+++ b/ryu/services/protocols/bgp/peer.py
@@ -1283,7 +1283,7 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
                 else:
                     bind_addr = None
                 peer_address = (self._neigh_conf.ip_address,
-                                const.STD_BGP_SERVER_PORT_NUM)
+                                self._neigh_conf.port)
 
                 if bind_addr:
                     LOG.debug('%s trying to connect from'
diff --git a/ryu/services/protocols/bgp/rtconf/neighbors.py b/ryu/services/protocols/bgp/rtconf/neighbors.py
index 6c481a49..b0853f10 100644
--- a/ryu/services/protocols/bgp/rtconf/neighbors.py
+++ b/ryu/services/protocols/bgp/rtconf/neighbors.py
@@ -45,6 +45,7 @@ from ryu.lib.packet.bgp import BGP_CAP_MULTIPROTOCOL
 from ryu.lib.packet.bgp import BGP_CAP_ROUTE_REFRESH
 
 from ryu.services.protocols.bgp.base import OrderedDict
+from ryu.services.protocols.bgp.constants import STD_BGP_SERVER_PORT_NUM
 from ryu.services.protocols.bgp.rtconf.base import ADVERTISE_PEER_AS
 from ryu.services.protocols.bgp.rtconf.base import BaseConf
 from ryu.services.protocols.bgp.rtconf.base import BaseConfListener
@@ -88,6 +89,7 @@ LOG = logging.getLogger('bgpspeaker.rtconf.neighbor')
 # Various neighbor settings.
 REMOTE_AS = 'remote_as'
 IP_ADDRESS = 'ip_address'
+REMOTE_PORT = 'remote_port'
 ENABLED = 'enabled'
 CHANGES = 'changes'
 LOCAL_ADDRESS = 'local_address'
@@ -108,6 +110,7 @@ CONNECT_MODE_PASSIVE = 'passive'
 CONNECT_MODE_BOTH = 'both'
 
 # Default value constants.
+DEFAULT_BGP_PORT = STD_BGP_SERVER_PORT_NUM
 DEFAULT_CAP_GR_NULL = True
 DEFAULT_CAP_REFRESH = True
 DEFAULT_CAP_ENHANCED_REFRESH = False
@@ -213,6 +216,13 @@ def validate_remote_as(asn):
     return asn
 
 
+@validate(name=REMOTE_PORT)
+def validate_remote_port(port):
+    if not isinstance(port, numbers.Integral):
+        raise ConfigTypeError(desc='Invalid remote port: %s' % port)
+    return port
+
+
 def valid_prefix_filter(filter_):
     policy = filter_.get('policy', None)
     if policy == 'permit':
@@ -339,7 +349,7 @@ class NeighborConf(ConfWithId, ConfWithStats):
                                    CAP_MBGP_IPV4FS, CAP_MBGP_VPNV4FS,
                                    CAP_MBGP_IPV6FS, CAP_MBGP_VPNV6FS,
                                    CAP_MBGP_L2VPNFS,
-                                   RTC_AS, HOLD_TIME,
+                                   RTC_AS, HOLD_TIME, REMOTE_PORT,
                                    ENABLED, MULTI_EXIT_DISC, MAX_PREFIXES,
                                    ADVERTISE_PEER_AS, SITE_OF_ORIGINS,
                                    LOCAL_ADDRESS, LOCAL_PORT, LOCAL_AS,
@@ -406,6 +416,8 @@ class NeighborConf(ConfWithId, ConfWithStats):
             DEFAULT_IS_NEXT_HOP_SELF, **kwargs)
         self._settings[CONNECT_MODE] = compute_optional_conf(
             CONNECT_MODE, DEFAULT_CONNECT_MODE, **kwargs)
+        self._settings[REMOTE_PORT] = compute_optional_conf(
+            REMOTE_PORT, DEFAULT_BGP_PORT, **kwargs)
 
         # We do not have valid default MED value.
         # If no MED attribute is provided then we do not have to use MED.
@@ -483,6 +495,10 @@ class NeighborConf(ConfWithId, ConfWithStats):
     def ip_address(self):
         return self._settings[IP_ADDRESS]
 
+    @property
+    def port(self):
+        return self._settings[REMOTE_PORT]
+
     @property
     def host_bind_ip(self):
         return self._settings[LOCAL_ADDRESS]
-- 
2.17.1

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to