Signed-off-by: ISHIDA Wataru <ishida.wat...@lab.ntt.co.jp>
---
 ryu/services/protocols/bgp/core.py    |    2 +-
 ryu/services/protocols/bgp/peer.py    |   14 ++++++++++++--
 ryu/services/protocols/bgp/speaker.py |    4 ++--
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/ryu/services/protocols/bgp/core.py 
b/ryu/services/protocols/bgp/core.py
index 27eae15..f16f78e 100644
--- a/ryu/services/protocols/bgp/core.py
+++ b/ryu/services/protocols/bgp/core.py
@@ -216,7 +216,7 @@ class CoreService(Factory, Activity):
 
         # Pro-actively try to establish bgp-session with peers.
         for peer in self._peer_manager.iterpeers:
-            self._spawn_activity(peer, self)
+            self._spawn_activity(peer, self.start_protocol)
 
         # Reactively establish bgp-session with peer by listening on
         # server port for connection requests.
diff --git a/ryu/services/protocols/bgp/peer.py 
b/ryu/services/protocols/bgp/peer.py
index 4b3675a..9c511dc 100644
--- a/ryu/services/protocols/bgp/peer.py
+++ b/ryu/services/protocols/bgp/peer.py
@@ -53,6 +53,11 @@ from ryu.lib.packet.bgp import BGPOpen
 from ryu.lib.packet.bgp import BGPUpdate
 from ryu.lib.packet.bgp import BGPRouteRefresh
 
+from ryu.lib.packet.bgp import BGP_ERROR_CEASE
+from ryu.lib.packet.bgp import BGP_ERROR_SUB_ADMINISTRATIVE_SHUTDOWN
+from ryu.lib.packet.bgp import BGP_ERROR_SUB_CONNECTION_COLLISION_RESOLUTION
+
+
 from ryu.lib.packet.bgp import BGP_MSG_UPDATE
 from ryu.lib.packet.bgp import BGP_MSG_KEEPALIVE
 from ryu.lib.packet.bgp import BGP_MSG_ROUTE_REFRESH
@@ -410,9 +415,10 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
         LOG.debug('Peer %s configuration update event, enabled: %s.' %
                   (self, enabled))
         if enabled:
-            if self._protocol:
+            if self._protocol and self._protocol.started:
                 LOG.error('Tried to enable neighbor that is already enabled')
             else:
+                self.state.bgp_state = const.BGP_FSM_CONNECT
                 # Restart connect loop if not already running.
                 if not self._connect_retry_event.is_set():
                     self._connect_retry_event.set()
@@ -429,6 +435,8 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
                     BGP_ERROR_SUB_ADMINISTRATIVE_SHUTDOWN
                 )
                 self._protocol.stop()
+                self._protocol = None
+                self.state.bgp_state = const.BGP_FSM_IDLE
             # If this peer is not enabled any-more we stop trying to make any
             # connection.
             LOG.debug('Disabling connect-retry as neighbor was disabled (%s)' %
@@ -966,7 +974,8 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
             # If existing protocol is already established, we raise exception.
             if self.state.bgp_state != const.BGP_FSM_IDLE:
                 LOG.debug('Currently in %s state, hence will send collision'
-                          ' Notification to close this protocol.')
+                          ' Notification to close this protocol.'
+                          % self.state.bgp_state)
                 self._send_collision_err_and_stop(proto)
                 return
 
@@ -1775,6 +1784,7 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
         )
         self.state.bgp_state = const.BGP_FSM_IDLE
         if self._protocol:
+            self._protocol.stop()
             self._protocol = None
             # Create new collection for initial RT NLRIs
             self._init_rtc_nlri_path = []
diff --git a/ryu/services/protocols/bgp/speaker.py 
b/ryu/services/protocols/bgp/speaker.py
index 2c823f5..cfa8be7 100644
--- a/ryu/services/protocols/bgp/speaker.py
+++ b/ryu/services/protocols/bgp/speaker.py
@@ -371,8 +371,8 @@ class BgpProtocol(Protocol, Activity):
         reason = notification.reason
         self._send_with_lock(notification)
         self._signal_bus.bgp_error(self._peer, code, subcode, reason)
-        if len(self._localname()):
-            LOG.error('Sent notification to %r >> %s' % (self._localname(),
+        if len(self._localname):
+            LOG.error('Sent notification to %r >> %s' % (self._localname,
                                                          notification))
         self._socket.close()
 
-- 
1.7.10.4


------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to