Hi KOBAYASHI-san,

Thanks for the comment.

Yeah, but I can't find where bgp codes touch one socket from multiple threads.
When neighbor is reset, it close the internal socket, then create a new one.
There are no simultaneous read I think.

Thanks

(2014/07/29 18:21), Satoshi KOBAYASHI wrote:
> Hi ISHIDA-san,
>
> FYI. If it is a situation as an error message, the socket is read from 
> multiple green-threads. If that is right, it is not a bug of Eventlet but a 
> issue of a design of multithread.
>
> Thanks,
> Satoshi
>
> 2014-07-29 17:54 GMT+09:00 ISHIDA Wataru <ishida.wat...@lab.ntt.co.jp 
> <mailto:ishida.wat...@lab.ntt.co.jp>>:
>
>     Hi,
>
>     Oh, I'm sorry. I haven't tested through rpc-cli.
>     I sent a patch that fix this problem.
>
>     In spite of applying the patch, you may see a debug message like this.
>
>     DEBUG 2014-07-29 08:40:33,527 speaker 566 Traceback (most recent call 
> last):
>         File "/home/wataru/ryu/ryu/services/protocols/bgp/speaker.py", line 
> 556, in _recv_loop
>           next_bytes = self._socket.recv(required_len)
>         File "/usr/local/lib/python2.7/dist-packages/eventlet/greenio.py", 
> line 264, in recv
>           timeout_exc=socket.timeout("timed out"))
>         File 
> "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/__init__.py", line 151, 
> in trampoline
>           listener = hub.add(hub.READ, fileno, current.switch)
>         File 
> "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/epolls.py", line 48, in 
> add
>           listener = BaseHub.add(self, evtype, fileno, cb)
>         File "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/hub.py", 
> line 126, in add
>           evtype, fileno, evtype))
>     RuntimeError: Second simultaneous read on fileno 13 detected.  Unless you 
> really know what you're doing, make sure that only one greenthread can read 
> any particular socket.  Consider using a pools.Pool. If you do
>     know what you're doing and want to disable this error, call 
> eventlet.debug.hub_prevent_multiple_readers(False)
>
>     This won't stop the bgpspeaker and it seems the connection will be reset 
> eventually, but take a little time.
>     I think this is a bug of eventlet. I'll make further investigation.
>
>     Thanks,
>
>     (2014/07/29 12:42), Toshiki Tsuboi wrote:
>      > HI
>      >
>      > It doesn’t work well in case of another test case .
>      > Additional report  as follows .
>      >
>      > bast regards
>      > Toshiki Tsuboi
>      >
>      > ----
>      > tsubo@RyuBGP:~/ryu/ryu/services/protocols/bgp/sampleApp$ sudo python 
> sampleBGPS.py
>      > INFO:bgpspeaker.api.base:API method core.start called with args: 
> {'router_id': '10.10.0.2', 'waiter': <ryu.lib.hub.Event object at 
> 0x7ffb02a08550>, 'bgp_server_port': 179, 'local_as': 64512, 
> 'refresh_max_eor_time': 0, 'refresh_stalepath_time': 0}
>      > DEBUG:utils.evtlet:Create CustomEvent called
>      > DEBUG:utils.evtlet:Create CustomEvent called
>      > DEBUG:bgpspeaker.processor:Starting new processing run...
>      > DEBUG:bgpspeaker.processor:Processing RT NLRI destination...
>      > DEBUG:bgpspeaker.processor:Processing destination...
>      > INFO:bgpspeaker.api.base:API method neighbor.create called with args: 
> {'remote_as': 64511, 'cap_mbgp_vpnv6': False, 'cap_mbgp_vpnv4': False, 
> 'cap_mbgp_ipv6': False, 'cap_mbgp_ipv4': True, 'next_hop': None, 'password': 
> None, 'ip_address': '192.168.100.100'}
>      > DEBUG:utils.evtlet:Create CustomEvent called
>      > DEBUG:utils.evtlet:Create CustomEvent called
>      > DEBUG:bgpspeaker.peer:Started peer Peer(ip: 192.168.100.100, asn: 
> 64511)
>      > DEBUG:bgpspeaker.peer:Peer 192.168.100.100 BGP FSM went from Idle to 
> Connect
>      > DEBUG:bgpspeaker.peer:Peer(ip: 192.168.100.100, asn: 64511) trying to 
> connect to ('192.168.100.100', 179)
>      > DEBUG:bgpspeaker.base:Connect TCP called for 192.168.100.100:179 
> <http://192.168.100.100:179>
>      > DEBUG:bgpspeaker.speaker:Sent msg to ('192.168.100.100', '179') >> 
> BGPOpen(bgp_identifier='10.10.0.2',hold_time=40,len=41,my_as=64512,opt_param=[BGPOptParamCapabilityMultiprotocol(afi=1,cap_code=1,cap_length=4,length=6,reserved=0,safi=1,type=2),
>  
> BGPOptParamCapabilityRouteRefresh(cap_code=2,cap_length=0,length=2,type=2)],opt_param_len=12,type=1,version=4)
>      > INFO:bgpspeaker.peer:Connection to peer: 192.168.100.100 established
>      > DEBUG:bgpspeaker.speaker:Received msg from ('192.168.100.100', '179') 
> << 
> BGPOpen(bgp_identifier='10.0.0.1',hold_time=180,len=45,my_as=64511,opt_param=[BGPOptParamCapabilityMultiprotocol(afi=1,cap_code=1,cap_length=4,length=6,reserved=0,safi=1,type=2),
>  
> BGPOptParamCapabilityUnknown(cap_code=128,cap_length=0,cap_value='',length=2,type=2),
>  
> BGPOptParamCapabilityRouteRefresh(cap_code=2,cap_length=0,length=2,type=2)],opt_param_len=16,type=1,version=4)
>      > DEBUG:bgpspeaker.peer:Peer 192.168.100.100 BGP FSM went from Connect 
> to OpenConfirm
>      > DEBUG:bgpspeaker.peer:Trying to bind protocol 
> <ryu.services.protocols.bgp.speaker.BgpProtocol object at 0x7ffb02955690> to 
> peer Peer(ip: 192.168.100.100, asn: 64511)
>      > DEBUG:bgpspeaker.peer:Connect retry event for Peer(ip: 
> 192.168.100.100, asn: 64511) is cleared
>      > DEBUG:bgpspeaker.speaker:Started keep-alive and expire timer for 
> negotiated holdtime 40
>      > DEBUG:bgpspeaker.speaker:Sent msg to ('192.168.100.100', '179') >> 
> BGPKeepAlive(len=19,type=4)
>      > DEBUG:bgpspeaker.speaker:Received msg from ('192.168.100.100', '179') 
> << BGPKeepAlive(len=19,type=4)
>      > DEBUG:bgpspeaker.peer:Peer 192.168.100.100 BGP FSM went from 
> OpenConfirm to Established
>      > DEBUG:bgpspeaker.peer:Communicating current best path for all afi/safi 
> except 1/132
>      > DEBUG:bgpspeaker.speaker:Received msg from ('192.168.100.100', '179') 
> << BGPUpdate(len=57,nlri=[BGPNLRI(addr='192.168.100.0',length=24), 
> BGPNLRI(addr='10.0.0.1',length=32)],path_attributes=[BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2),
>  BGPPathAttributeAsPath(flags=64,length=4,type=2,value=[[64511]]), 
> BGPPathAttributeNextHop(flags=64,length=4,type=3,value='192.168.100.100'), 
> BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,value=0)],total_path_attribute_len=25,type=2,withdrawn_routes=[],withdrawn_routes_len=0)
>      > DEBUG:bgpspeaker.peer:NLRI: BGPNLRI(addr='192.168.100.0',length=24)
>      > DEBUG:bgpspeaker.peer:Extracted paths from Update msg.: Path(source: 
> Peer(ip: 192.168.100.100, asn: 64511), nlri: 
> BGPNLRI(addr='192.168.100.0',length=24), source ver#: 1, path attrs.: {1: 
> BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2), 2: 
> BGPPathAttributeAsPath(flags=64,length=4,type=2,value=[[64511]]), 3: 
> BGPPathAttributeNextHop(flags=64,length=4,type=3,value='192.168.100.100'), 4: 
> BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,value=0)}, nexthop: 
> 192.168.100.100, is_withdraw: False)
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'adj', 'rib', 'in', 
> 'changed') emited with data: {'peer': <ryu.services.protocols.bgp.peer.Peer 
> object at 0x7ffb029553d0>, 'received_route': 
> <ryu.services.protocols.bgp.model.ReceivedRoute object at 0x7ffb028fc5d0>}
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'dest', 'changed') 
> emited with data: Destination(table: Ipv4Table(scope_id: None, rf: 
> RouteFamily(afi=1,safi=1)), nlri: BGPNLRI(addr='192.168.100.0',length=24), 
> paths: 0, withdraws: 0, new paths: 1)
>      > DEBUG:bgpspeaker.peer:NLRI: BGPNLRI(addr='10.0.0.1',length=32)
>      > DEBUG:bgpspeaker.peer:Extracted paths from Update msg.: Path(source: 
> Peer(ip: 192.168.100.100, asn: 64511), nlri: 
> BGPNLRI(addr='10.0.0.1',length=32), source ver#: 1, path attrs.: {1: 
> BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2), 2: 
> BGPPathAttributeAsPath(flags=64,length=4,type=2,value=[[64511]]), 3: 
> BGPPathAttributeNextHop(flags=64,length=4,type=3,value='192.168.100.100'), 4: 
> BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,value=0)}, nexthop: 
> 192.168.100.100, is_withdraw: False)
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'adj', 'rib', 'in', 
> 'changed') emited with data: {'peer': <ryu.services.protocols.bgp.peer.Peer 
> object at 0x7ffb029553d0>, 'received_route': 
> <ryu.services.protocols.bgp.model.ReceivedRoute object at 0x7ffb028fc790>}
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'dest', 'changed') 
> emited with data: Destination(table: Ipv4Table(scope_id: None, rf: 
> RouteFamily(afi=1,safi=1)), nlri: BGPNLRI(addr='10.0.0.1',length=32), paths: 
> 0, withdraws: 0, new paths: 1)
>      > DEBUG:bgpspeaker.processor:Starting new processing run...
>      > DEBUG:bgpspeaker.processor:Processing RT NLRI destination...
>      > DEBUG:bgpspeaker.processor:Processing destination...
>      > DEBUG:bgpspeaker.info_base.base:Processing destination: 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: BGPNLRI(addr='192.168.100.0',length=24), paths: 0, withdraws: 0, new 
> paths: 1)
>      > DEBUG:bgpspeaker.info_base.base:Removing 0 withdrawals
>      > DEBUG:bgpspeaker.info_base.base:New best path selected for destination 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: BGPNLRI(addr='192.168.100.0',length=24), paths: 1, withdraws: 0, new 
> paths: 0)
>      > DEBUG:bgpspeaker.peer:Peer Peer(ip: 192.168.100.100, asn: 64511) asked 
> to communicate path
>      > DEBUG:bgpspeaker.peer:Skipping sending path as AS_PATH has peer AS 
> 64511
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'best', 'changed') 
> emited with data: {'path': Path(Peer(ip: 192.168.100.100, asn: 64511), 
> BGPNLRI(addr='192.168.100.0',length=24), 1, {1: 
> BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2), 2: 
> BGPPathAttributeAsPath(flags=64,length=4,type=2,value=[[64511]]), 3: 
> BGPPathAttributeNextHop(flags=64,length=4,type=3,value='192.168.100.100'), 4: 
> BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,value=0)}, 
> 192.168.100.100, False), 'is_withdraw': False}
>      > the best path changed: 64511 192.168.100.0/24 
> <http://192.168.100.0/24> 192.168.100.100 False
>      > DEBUG:bgpspeaker.info_base.base:Processing destination: 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: BGPNLRI(addr='10.0.0.1',length=32), paths: 0, withdraws: 0, new paths: 
> 1)
>      > DEBUG:bgpspeaker.info_base.base:Removing 0 withdrawals
>      > DEBUG:bgpspeaker.info_base.base:New best path selected for destination 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: BGPNLRI(addr='10.0.0.1',length=32), paths: 1, withdraws: 0, new paths: 
> 0)
>      > DEBUG:bgpspeaker.peer:Peer Peer(ip: 192.168.100.100, asn: 64511) asked 
> to communicate path
>      > DEBUG:bgpspeaker.peer:Skipping sending path as AS_PATH has peer AS 
> 64511
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'best', 'changed') 
> emited with data: {'path': Path(Peer(ip: 192.168.100.100, asn: 64511), 
> BGPNLRI(addr='10.0.0.1',length=32), 1, {1: 
> BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2), 2: 
> BGPPathAttributeAsPath(flags=64,length=4,type=2,value=[[64511]]), 3: 
> BGPPathAttributeNextHop(flags=64,length=4,type=3,value='192.168.100.100'), 4: 
> BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,value=0)}, 
> 192.168.100.100, False), 'is_withdraw': False}
>      > the best path changed: 64511 10.0.0.1/32 <http://10.0.0.1/32> 
> 192.168.100.100 False
>      > DEBUG:bgpspeaker.speaker:Received msg from ('192.168.100.100', '179') 
> << BGPKeepAlive(len=19,type=4)
>      > DEBUG:bgpspeaker.speaker:Received msg from ('192.168.100.100', '179') 
> << BGPKeepAlive(len=19,type=4)
>      > add a new prefix 10.20.1.0/24 <http://10.20.1.0/24>
>      > INFO:bgpspeaker.api.base:API method network.add called with args: 
> {'prefix': '10.20.1.0/24 <http://10.20.1.0/24>'}
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'dest', 'changed') 
> emited with data: Destination(table: Ipv4Table(scope_id: None, rf: 
> RouteFamily(afi=1,safi=1)), nlri: IPAddrPrefix(addr='10.20.1.0',length=24), 
> paths: 0, withdraws: 0, new paths: 1)
>      > DEBUG:bgpspeaker.processor:Starting new processing run...
>      > DEBUG:bgpspeaker.processor:Processing RT NLRI destination...
>      > DEBUG:bgpspeaker.processor:Processing destination...
>      > DEBUG:bgpspeaker.info_base.base:Processing destination: 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: IPAddrPrefix(addr='10.20.1.0',length=24), paths: 0, withdraws: 0, new 
> paths: 1)
>      > DEBUG:bgpspeaker.info_base.base:Removing 0 withdrawals
>      > DEBUG:bgpspeaker.info_base.base:New best path selected for destination 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: IPAddrPrefix(addr='10.20.1.0',length=24), paths: 1, withdraws: 0, new 
> paths: 0)
>      > DEBUG:bgpspeaker.peer:Peer Peer(ip: 192.168.100.100, asn: 64511) asked 
> to communicate path
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'best', 'changed') 
> emited with data: {'path': Path(None, 
> IPAddrPrefix(addr='10.20.1.0',length=24), 1, OrderedDict([(1, 
> BGPPathAttributeOrigin(flags=0,length=None,type=1,value=0)), (2, 
> BGPPathAttributeAsPath(flags=0,length=None,type=2,value=[[]]))]), 0.0.0.0, 
> False), 'is_withdraw': False}
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'adj', 'rib', 'out', 
> 'changed') emited with data: {'peer': <ryu.services.protocols.bgp.peer.Peer 
> object at 0x7ffb029553d0>, 'sent_route': 
> <ryu.services.protocols.bgp.model.SentRoute object at 0x7ffb028fcc10>}
>      > DEBUG:bgpspeaker.speaker:Sent msg to ('192.168.100.100', '179') >> 
> BGPUpdate(len=45,nlri=[IPAddrPrefix(addr='10.20.1.0',length=24)],path_attributes=[BGPPathAttributeNextHop(flags=64,length=4,type=3,value='192.168.100.102'),
>  BGPPathAttributeOrigin(flags=64,length=1,type=1,value=0), 
> BGPPathAttributeAsPath(flags=64,length=4,type=2,value=[[64512]])],total_path_attribute_len=18,type=2,withdrawn_routes=[],withdrawn_routes_len=0)
>      > DEBUG:bgpspeaker.speaker:Sent msg to ('192.168.100.100', '179') >> 
> BGPKeepAlive(len=19,type=4)
>      > DEBUG:bgpspeaker.speaker:Received msg from ('192.168.100.100', '179') 
> << BGPKeepAlive(len=19,type=4)
>      > add a new prefix 10.20.2.0/24 <http://10.20.2.0/24>
>      > INFO:bgpspeaker.api.base:API method network.add called with args: 
> {'prefix': '10.20.2.0/24 <http://10.20.2.0/24>'}
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'dest', 'changed') 
> emited with data: Destination(table: Ipv4Table(scope_id: None, rf: 
> RouteFamily(afi=1,safi=1)), nlri: IPAddrPrefix(addr='10.20.2.0',length=24), 
> paths: 0, withdraws: 0, new paths: 1)
>      > INFO:bgpspeaker.api.base:API method core.reset_neighbor called with 
> args: {'ip_address': '192.168.100.100'}
>      > INFO:bgpspeaker.peer:Peer(ip: 192.168.100.100, asn: 64511) disabled
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('error', 'bgp', 
> <ryu.services.protocols.bgp.peer.Peer object at 0x7ffb029553d0>) emited with 
> data: {'peer': <ryu.services.protocols.bgp.peer.Peer object at 
> 0x7ffb029553d0>, 'subcode': 2, 'code': 6, 'reason': 'Cease: Administrative 
> Shutdown'}
>      > ERROR:bgpspeaker.speaker:Sent notification to ('192.168.100.102', 
> '52986') >> 
> BGPNotification(data='',error_code=6,error_subcode=2,len=21,type=3)
>      > DEBUG:bgpspeaker.base:Stopping activity BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '52986').
>      > DEBUG:bgpspeaker.base:BgpProtocol True, ('192.168.100.100', '179'), 
> ('192.168.100.102', '52986'): Stopping timer Holdtime Timer
>      > DEBUG:bgpspeaker.processor:Starting new processing run...
>      > DEBUG:bgpspeaker.processor:Processing RT NLRI destination...
>      > DEBUG:bgpspeaker.processor:Processing destination...
>      > DEBUG:bgpspeaker.info_base.base:Processing destination: 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: IPAddrPrefix(addr='10.20.2.0',length=24), paths: 0, withdraws: 0, new 
> paths: 1)
>      > DEBUG:bgpspeaker.info_base.base:Removing 0 withdrawals
>      > DEBUG:bgpspeaker.info_base.base:New best path selected for destination 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: IPAddrPrefix(addr='10.20.2.0',length=24), paths: 1, withdraws: 0, new 
> paths: 0)
>      > DEBUG:bgpspeaker.peer:Peer Peer(ip: 192.168.100.100, asn: 64511) asked 
> to communicate path
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'best', 'changed') 
> emited with data: {'path': Path(None, 
> IPAddrPrefix(addr='10.20.2.0',length=24), 1, OrderedDict([(1, 
> BGPPathAttributeOrigin(flags=0,length=None,type=1,value=0)), (2, 
> BGPPathAttributeAsPath(flags=0,length=None,type=2,value=[[]]))]), 0.0.0.0, 
> False), 'is_withdraw': False}
>      > DEBUG:bgpspeaker.base:BgpProtocol True, ('192.168.100.100', '179'), 
> ('192.168.100.102', '52986'): Stopping timer Keepalive Timer
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'adj', 'rib', 'out', 
> 'changed') emited with data: {'peer': <ryu.services.protocols.bgp.peer.Peer 
> object at 0x7ffb029553d0>, 'sent_route': 
> <ryu.services.protocols.bgp.model.SentRoute object at 0x7ffb028fcc90>}
>      > INFO:bgpspeaker.peer:Connection to peer 192.168.100.100 lost, reason: 
> failed to write to socket Resetting retry connect loop: False
>      > DEBUG:bgpspeaker.peer:Peer 192.168.100.100 BGP FSM went from 
> Established to Idle
>      > DEBUG:bgpspeaker.base:Stopping activity BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '52986').
>      > DEBUG:bgpspeaker.base:BgpProtocol True, ('192.168.100.100', '179'), 
> ('192.168.100.102', '52986'): Stopping timer Holdtime Timer
>      > DEBUG:bgpspeaker.base:BgpProtocol True, ('192.168.100.100', '179'), 
> ('192.168.100.102', '52986'): Stopping timer Keepalive Timer
>      > DEBUG:bgpspeaker.base:BgpProtocol True, ('192.168.100.100', '179'), 
> ('192.168.100.102', '52986'): Closing socket passive_conn - 
> <eventlet.greenio.GreenSocket object at 0x7ffb02955710>
>      > DEBUG:bgpspeaker.base:Stopping activity BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '52986') finished.
>      > DEBUG:bgpspeaker.peer:Un-scheduling sending of initial Non-RTC UPDATEs 
> (init. UPDATEs already sent: False)
>      > DEBUG:bgpspeaker.core_managers.peer_manager:Cleaning obsolete paths 
> whose source/version: 192.168.100.100/2 <http://192.168.100.100/2>
>      > DEBUG:bgpspeaker.info_base.base:Cleaning paths from table 
> Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)) for peer Peer(ip: 
> 192.168.100.100, asn: 64511)
>      > DEBUG:bgpspeaker.info_base.base:Removed sent route 
> IPAddrPrefix(addr='10.20.1.0',length=24) for Peer(ip: 192.168.100.100, asn: 
> 64511)
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'dest', 'changed') 
> emited with data: Destination(table: Ipv4Table(scope_id: None, rf: 
> RouteFamily(afi=1,safi=1)), nlri: BGPNLRI(addr='192.168.100.0',length=24), 
> paths: 0, withdraws: 0, new paths: 0)
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'dest', 'changed') 
> emited with data: Destination(table: Ipv4Table(scope_id: None, rf: 
> RouteFamily(afi=1,safi=1)), nlri: BGPNLRI(addr='10.0.0.1',length=32), paths: 
> 0, withdraws: 0, new paths: 0)
>      > INFO:bgpspeaker.speaker:failed to write to socket
>      > DEBUG:bgpspeaker.speaker:Sent msg to ('192.168.100.100', '179') >> 
> BGPUpdate(len=45,nlri=[IPAddrPrefix(addr='10.20.2.0',length=24)],path_attributes=[BGPPathAttributeNextHop(flags=64,length=4,type=3,value='192.168.100.102'),
>  BGPPathAttributeOrigin(flags=64,length=1,type=1,value=0), 
> BGPPathAttributeAsPath(flags=64,length=4,type=2,value=[[64512]])],total_path_attribute_len=18,type=2,withdrawn_routes=[],withdrawn_routes_len=0)
>      > DEBUG:bgpspeaker.base:Stopping activity BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '52986') finished.
>      > DEBUG:bgpspeaker.peer:Disabling connect-retry as neighbor was disabled
>      > DEBUG:bgpspeaker.processor:Starting new processing run...
>      > DEBUG:bgpspeaker.processor:Processing RT NLRI destination...
>      > DEBUG:bgpspeaker.processor:Processing destination...
>      > DEBUG:bgpspeaker.info_base.base:Processing destination: 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: BGPNLRI(addr='192.168.100.0',length=24), paths: 0, withdraws: 0, new 
> paths: 0)
>      > DEBUG:bgpspeaker.info_base.base:Removing 0 withdrawals
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'best', 'changed') 
> emited with data: {'path': Path(Peer(ip: 192.168.100.100, asn: 64511), 
> BGPNLRI(addr='192.168.100.0',length=24), 1, {1: 
> BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2), 2: 
> BGPPathAttributeAsPath(flags=64,length=4,type=2,value=[[64511]]), 3: 
> BGPPathAttributeNextHop(flags=64,length=4,type=3,value='192.168.100.100'), 4: 
> BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,value=0)}, 
> 192.168.100.100, False), 'is_withdraw': True}
>      > the best path changed: 64511 192.168.100.0/24 
> <http://192.168.100.0/24> 192.168.100.100 True
>      > DEBUG:bgpspeaker.info_base.base:Processing destination: 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: BGPNLRI(addr='10.0.0.1',length=32), paths: 0, withdraws: 0, new paths: 
> 0)
>      > DEBUG:bgpspeaker.info_base.base:Removing 0 withdrawals
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'best', 'changed') 
> emited with data: {'path': Path(Peer(ip: 192.168.100.100, asn: 64511), 
> BGPNLRI(addr='10.0.0.1',length=32), 1, {1: 
> BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2), 2: 
> BGPPathAttributeAsPath(flags=64,length=4,type=2,value=[[64511]]), 3: 
> BGPPathAttributeNextHop(flags=64,length=4,type=3,value='192.168.100.100'), 4: 
> BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,value=0)}, 
> 192.168.100.100, False), 'is_withdraw': True}
>      > the best path changed: 64511 10.0.0.1/32 <http://10.0.0.1/32> 
> 192.168.100.100 True
>      > INFO:bgpspeaker.peer:Peer(ip: 192.168.100.100, asn: 64511) enabled
>      > DEBUG:bgpspeaker.peer:Peer 192.168.100.100 BGP FSM went from Idle to 
> Connect
>      > DEBUG:bgpspeaker.peer:Starting connect loop as neighbor is enabled.
>      > add a new prefix 10.20.3.0/24 <http://10.20.3.0/24>
>      > INFO:bgpspeaker.api.base:API method network.add called with args: 
> {'prefix': '10.20.3.0/24 <http://10.20.3.0/24>'}
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'dest', 'changed') 
> emited with data: Destination(table: Ipv4Table(scope_id: None, rf: 
> RouteFamily(afi=1,safi=1)), nlri: IPAddrPrefix(addr='10.20.3.0',length=24), 
> paths: 0, withdraws: 0, new paths: 1)
>      > DEBUG:bgpspeaker.processor:Starting new processing run...
>      > DEBUG:bgpspeaker.processor:Processing RT NLRI destination...
>      > DEBUG:bgpspeaker.processor:Processing destination...
>      > DEBUG:bgpspeaker.info_base.base:Processing destination: 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: IPAddrPrefix(addr='10.20.3.0',length=24), paths: 0, withdraws: 0, new 
> paths: 1)
>      > DEBUG:bgpspeaker.info_base.base:Removing 0 withdrawals
>      > DEBUG:bgpspeaker.info_base.base:New best path selected for destination 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: IPAddrPrefix(addr='10.20.3.0',length=24), paths: 1, withdraws: 0, new 
> paths: 0)
>      > DEBUG:bgpspeaker.peer:Peer Peer(ip: 192.168.100.100, asn: 64511) asked 
> to communicate path
>      > DEBUG:bgpspeaker.peer:Skipping sending path as peer is not in 
> ESTABLISHED state Path(source: None, nlri: 
> IPAddrPrefix(addr='10.20.3.0',length=24), source ver#: 1, path attrs.: 
> OrderedDict([(1, BGPPathAttributeOrigin(flags=0,length=None,type=1,value=0)), 
> (2, BGPPathAttributeAsPath(flags=0,length=None,type=2,value=[[]]))]), 
> nexthop: 0.0.0.0, is_withdraw: False)
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'best', 'changed') 
> emited with data: {'path': Path(None, 
> IPAddrPrefix(addr='10.20.3.0',length=24), 1, OrderedDict([(1, 
> BGPPathAttributeOrigin(flags=0,length=None,type=1,value=0)), (2, 
> BGPPathAttributeAsPath(flags=0,length=None,type=2,value=[[]]))]), 0.0.0.0, 
> False), 'is_withdraw': False}
>      > add a new prefix 10.20.4.0/24 <http://10.20.4.0/24>
>      > INFO:bgpspeaker.api.base:API method network.add called with args: 
> {'prefix': '10.20.4.0/24 <http://10.20.4.0/24>'}
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'dest', 'changed') 
> emited with data: Destination(table: Ipv4Table(scope_id: None, rf: 
> RouteFamily(afi=1,safi=1)), nlri: IPAddrPrefix(addr='10.20.4.0',length=24), 
> paths: 0, withdraws: 0, new paths: 1)
>      > INFO:bgpspeaker.api.base:API method core.stop called with args: {}
>      > DEBUG:bgpspeaker.base:Stopping activity UnknownActivity: 1406604748.82.
>      > DEBUG:bgpspeaker.base:UnknownActivity: 1406604748.82: Stopping child 
> activity core_service
>      > DEBUG:bgpspeaker.base:Stopping activity core_service.
>      > DEBUG:bgpspeaker.base:core_service: Stopping child activity Peer: 
> 192.168.100.100
>      > DEBUG:bgpspeaker.base:Stopping activity Peer: 192.168.100.100.
>      > DEBUG:bgpspeaker.base:Peer: 192.168.100.100 <http://192.168.100.100>: 
> Stopping timer Peer State Summary Stats Timer
>      > DEBUG:bgpspeaker.base:Peer: 192.168.100.100 <http://192.168.100.100>: 
> Stopping child thread peer.process_outgoing
>      > DEBUG:bgpspeaker.processor:Starting new processing run...
>      > DEBUG:bgpspeaker.processor:Processing RT NLRI destination...
>      > DEBUG:bgpspeaker.processor:Processing destination...
>      > DEBUG:bgpspeaker.info_base.base:Processing destination: 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: IPAddrPrefix(addr='10.20.4.0',length=24), paths: 0, withdraws: 0, new 
> paths: 1)
>      > DEBUG:bgpspeaker.info_base.base:Removing 0 withdrawals
>      > DEBUG:bgpspeaker.info_base.base:New best path selected for destination 
> Destination(table: Ipv4Table(scope_id: None, rf: RouteFamily(afi=1,safi=1)), 
> nlri: IPAddrPrefix(addr='10.20.4.0',length=24), paths: 1, withdraws: 0, new 
> paths: 0)
>      > DEBUG:bgpspeaker.peer:Peer Peer(ip: 192.168.100.100, asn: 64511) asked 
> to communicate path
>      > DEBUG:bgpspeaker.peer:Skipping sending path as peer is not in 
> ESTABLISHED state Path(source: None, nlri: 
> IPAddrPrefix(addr='10.20.4.0',length=24), source ver#: 1, path attrs.: 
> OrderedDict([(1, BGPPathAttributeOrigin(flags=0,length=None,type=1,value=0)), 
> (2, BGPPathAttributeAsPath(flags=0,length=None,type=2,value=[[]]))]), 
> nexthop: 0.0.0.0, is_withdraw: False)
>      > DEBUG:bgpspeaker.signals.base:SIGNAL: ('core', 'best', 'changed') 
> emited with data: {'path': Path(None, 
> IPAddrPrefix(addr='10.20.4.0',length=24), 1, OrderedDict([(1, 
> BGPPathAttributeOrigin(flags=0,length=None,type=1,value=0)), (2, 
> BGPPathAttributeAsPath(flags=0,length=None,type=2,value=[[]]))]), 0.0.0.0, 
> False), 'is_withdraw': False}
>      > DEBUG:bgpspeaker.base:Peer: 192.168.100.100 <http://192.168.100.100>: 
> Closing socket L: 192.168.100.102, R: 192.168.100.100 - 
> <eventlet.greenio.GreenSocket object at 0x7ffb02955710>
>      > DEBUG:bgpspeaker.base:Stopping activity Peer: 192.168.100.100 finished.
>      > DEBUG:bgpspeaker.base:core_service: Stopping child activity 
> BgpProtocol True, ('192.168.100.100', '179'), ('192.168.100.102', '52986')
>      > DEBUG:bgpspeaker.base:core_service: Stopping child activity 
> UnknownActivity: 1406604748.87
>      > DEBUG:bgpspeaker.base:Stopping activity UnknownActivity: 1406604748.87.
>      > DEBUG:bgpspeaker.base:Stopping activity UnknownActivity: 1406604748.87 
> finished.
>      > DEBUG:bgpspeaker.base:core_service: Stopping child thread 
> core_service_server@0.0.0.0 <mailto:core_service_server@0.0.0.0> 
> <mailto:core_service_server@0.0.0.0 <mailto:core_service_server@0.0.0.0>>
>      > DEBUG:bgpspeaker.base:core_service: Stopping child thread Peer: 
> 192.168.100.100
>      > DEBUG:bgpspeaker.base:core_service: Stopping child thread BgpProtocol 
> True, ('192.168.100.100', '179'), ('192.168.100.102', '52986')
>      > INFO:bgpspeaker.speaker:Connection lost as protocol is no longer active
>      > DEBUG:bgpspeaker.base:core_service: Stopping child thread 
> UnknownActivity: 1406604748.87
>      > DEBUG:bgpspeaker.base:Stopping activity core_service finished.
>      > DEBUG:bgpspeaker.base:UnknownActivity: 1406604748.82: Stopping child 
> thread core_service
>      > DEBUG:bgpspeaker.base:Stopping activity UnknownActivity: 1406604748.82 
> finished.
>      >
>      >
>      >
>      >
>      >
>      >
>      >
>      >
>      >
>      >
>      > 2014/07/29 12:31、Toshiki Tsuboi <t.tsubo2...@gmail.com 
> <mailto:t.tsubo2...@gmail.com> <mailto:t.tsubo2...@gmail.com 
> <mailto:t.tsubo2...@gmail.com>>> のメール:
>      >
>      >> Hi
>      >>
>      >> I’ve tested in latest master branch .
>      >> But, it looks this issue has occurred again .
>      >>
>      >> regards
>      >> Toshiki Tsuboi
>      >>
>      >>
>      >> —---- test result as following ---------
>      >>
>      >> (1) starting My sampleApp ( changes log level from info to debug )
>      >>
>      >> $ sudo ./start_RyuBGPSpeaker.sh
>      >>
>      >> ...(snip)
>      >>
>      >> DEBUG 2014-07-29 12:18:02,525 speaker 447 Received msg from 
> ('192.168.100.100', '179') << BGPKeepAlive(len=19,type=4)
>      >> DEBUG 2014-07-29 12:18:02,526 speaker 447 Received msg from 
> ('192.168.100.100', '179') << BGPKeepAlive(len=19,type=4)
>      >> DEBUG 2014-07-29 12:18:15,495 speaker 401 Sent msg to 
> ('192.168.100.100', '179') >> BGPKeepAlive(len=19,type=4)
>      >> DEBUG 2014-07-29 12:18:16,474 speaker 447 Received msg from 
> ('192.168.100.100', '179') << BGPKeepAlive(len=19,type=4)
>      >> DEBUG 2014-07-29 12:18:28,507 speaker 401 Sent msg to 
> ('192.168.100.100', '179') >> BGPKeepAlive(len=19,type=4)
>      >> DEBUG 2014-07-29 12:18:29,475 speaker 447 Received msg from 
> ('192.168.100.100', '179') << BGPKeepAlive(len=19,type=4)
>      >> DEBUG 2014-07-29 12:18:32,441 base 345 Connect request received from 
> client for port 127.0.0.1:35865 <http://127.0.0.1:35865>
>      >> CRITICAL 2014-07-29 12:18:32,444 net_ctrl 121 RPC Session to 
> ('127.0.0.1', 35865) started
>      >> DEBUG 2014-07-29 12:18:32,445 net_ctrl 199 NetworkController 
> processing outgoing request list.
>      >> DEBUG 2014-07-29 12:18:32,445 net_ctrl 166 NetworkController started 
> processing incoming messages
>      >> DEBUG 2014-07-29 12:18:38,527 net_ctrl 373 Request from 
> NetworkController<<: core.reset_neighbor [{'ip_address': '192.168.100.100'}]
>      >> INFO 2014-07-29 12:18:38,527 base 207 API method core.reset_neighbor 
> called with args: {'ip_address': '192.168.100.100'}
>      >> INFO 2014-07-29 12:18:38,527 peer 459 Peer(ip: 192.168.100.100, asn: 
> 64511) disabled
>      >> DEBUG 2014-07-29 12:18:38,527 base 11 SIGNAL: ('error', 'bgp', 
> <ryu.services.protocols.bgp.peer.Peer object at 0x7ff6fca70f50>) emited with 
> data: {'peer': <ryu.services.protocols.bgp.peer.Peer object at 
> 0x7ff6fca70f50>, 'subcode': 2, 'code': 6, 'reason': 'Cease: Administrative 
> Shutdown'}
>      >> ERROR 2014-07-29 12:18:38,528 speaker 376 Sent notification to 
> ('192.168.100.102', '52938') >> 
> BGPNotification(data='',error_code=6,error_subcode=2,len=21,type=3)
>      >> DEBUG 2014-07-29 12:18:38,528 base 305 Stopping activity BgpProtocol 
> True, ('192.168.100.100', '179'), ('192.168.100.102', '52938').
>      >> DEBUG 2014-07-29 12:18:38,528 base 291 BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '52938'): Stopping timer 
> Holdtime Timer
>      >> DEBUG 2014-07-29 12:18:38,528 base 291 BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '52938'): Stopping timer 
> Keepalive Timer
>      >> DEBUG 2014-07-29 12:18:38,528 base 285 BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '52938'): Closing socket 
> passive_conn - <eventlet.greenio.GreenSocket object at 0x7ff6fca8ed50>
>      >> DEBUG 2014-07-29 12:18:38,528 base 317 Stopping activity BgpProtocol 
> True, ('192.168.100.100', '179'), ('192.168.100.102', '52938') finished.
>      >> DEBUG 2014-07-29 12:18:38,529 peer 209 Peer 192.168.100.100 BGP FSM 
> went from Established to Idle
>      >> DEBUG 2014-07-29 12:18:38,529 peer 475 Disabling connect-retry as 
> neighbor was disabled
>      >> DEBUG 2014-07-29 12:18:39,453 base 345 Connect request received from 
> client for port 127.0.0.1:35866 <http://127.0.0.1:35866>
>      >> DEBUG 2014-07-29 12:18:39,454 base 305 Stopping activity 
> UnknownActivity: 1406603912.44.
>      >> DEBUG 2014-07-29 12:18:39,454 base 276 UnknownActivity: 
> 1406603912.44: Stopping child thread net_ctrl._process_outgoing
>      >> DEBUG 2014-07-29 12:18:39,455 base 276 UnknownActivity: 
> 1406603912.44: Stopping child thread net_ctrl._process_incoming
>      >> DEBUG 2014-07-29 12:18:39,455 base 317 Stopping activity 
> UnknownActivity: 1406603912.44 finished.
>      >> CRITICAL 2014-07-29 12:18:39,456 net_ctrl 109 RPC Session to 
> ('127.0.0.1', 35865) stopped
>      >> CRITICAL 2014-07-29 12:18:39,456 net_ctrl 121 RPC Session to 
> ('127.0.0.1', 35866) started
>      >> DEBUG 2014-07-29 12:18:39,457 net_ctrl 199 NetworkController 
> processing outgoing request list.
>      >> DEBUG 2014-07-29 12:18:39,457 net_ctrl 166 NetworkController started 
> processing incoming messages
>      >> DEBUG 2014-07-29 12:18:39,457 net_ctrl 373 Request from 
> NetworkController<<: core.reset_neighbor [{'ip_address': '192.168.100.100'}]
>      >> INFO 2014-07-29 12:18:39,458 base 207 API method core.reset_neighbor 
> called with args: {'ip_address': '192.168.100.100'}
>      >> ERROR 2014-07-29 12:18:39,461 base 222 Traceback (most recent call 
> last):
>      >>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/api/base.py",
>  line 220, in call
>      >>     return call(**kwargs)
>      >>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/api/core.py",
>  line 78, in reset_neighor
>      >>     ' reset.' % ip_address)
>      >> RuntimeConfigError: 200.1 - Neighbor 192.168.100.100 is not enabled, 
> hence cannot reset.
>      >>
>      >> ERROR 2014-07-29 12:18:39,467 hub 60 hub: uncaught exception: 
> Traceback (most recent call last):
>      >>   File "/usr/local/lib/python2.7/dist-packages/ryu/lib/hub.py", line 
> 52, in _launch
>      >>     func(*args, **kwargs)
>      >>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/net_ctrl.py",
>  line 171, in _process_incoming_msgs
>      >>     msg_buff = self._recv()
>      >>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/net_ctrl.py",
>  line 222, in _recv
>      >>     return self._sock_wrap(self._socket.recv)(RPC_SOCK_BUFF_SIZE)
>      >>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/net_ctrl.py",
>  line 230, in wrapper
>      >>     ret = func(*args, **kwargs)
>      >>   File "/usr/local/lib/python2.7/dist-packages/eventlet/greenio.py", 
> line 264, in recv
>      >>     timeout_exc=socket.timeout("timed out"))
>      >>   File 
> "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/__init__.py", line 151, 
> in trampoline
>      >>     listener = hub.add(hub.READ, fileno, current.switch)
>      >>   File 
> "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/epolls.py", line 48, in 
> add
>      >>     listener = BaseHub.add(self, evtype, fileno, cb)
>      >>   File "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/hub.py", 
> line 126, in add
>      >>     evtype, fileno, evtype))
>      >> RuntimeError: Second simultaneous read on fileno 11 detected.  Unless 
> you really know what you're doing, make sure that only one greenthread can 
> read any particular socket.  Consider using a pools.Pool. If you do know what 
> you're doing and want to disable this error, call 
> eventlet.debug.hub_prevent_multiple_readers(False)
>      >>
>      >>
>      >> (2) neighbor reset through RPC in Ryu-cli
>      >>
>      >> $ ./rpc_cli.py --peers=bgps=localhost:50002
>      >> (Cmd) request bgps core.reset_neighbor [{'ip_address': 
> '192.168.100.100'}]
>      >> NOTIFICATION from bgps ['neighbor.state', {'state': 'Idle', 
> 'ip_address': '192.168.100.100'}]
>      >> NOTIFICATION from bgps ['neighbor.down', {'ip_address': 
> '192.168.100.100'}]
>      >> disconnected.  trying to connect...
>      >> connected.  retrying the request...
>      >> RPC ERROR 200.1 - Neighbor 192.168.100.100 is not enabled, hence 
> cannot reset.
>      >>
>      >>
>      >>
>      >> 2014/07/29 11:32、ISHIDA Wataru <ishida.wat...@lab.ntt.co.jp 
> <mailto:ishida.wat...@lab.ntt.co.jp> <mailto:ishida.wat...@lab.ntt.co.jp 
> <mailto:ishida.wat...@lab.ntt.co.jp>>> のメール:
>      >>
>      >>> Hi,
>      >>>
>      >>> Thanks for the report.
>      >>> I sent the patch to fix reset neighbor and already merged.
>      >>> Please try it out.
>      >>>
>      >>> thanks
>      >>>
>      >>> (2014/07/27 17:31), Toshiki Tsuboi wrote:
>      >>>> Hi
>      >>>>
>      >>>> I’ve tested  again after adapting the following patch code .
>      >>>> But, this issue has not resolved now .
>      >>>> -> I’m not sure why RPC has disconnected between Ryu-cli and 
> NetworkController(net_ctrl) ,after receiving reset_neighbor .
>      >>>>
>      >>>> 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()
>      >>>>
>      >>>>
>      >>>> I hope this report is useful for resolving the issue .
>      >>>> Best regards.
>      >>>>
>      >>>> Toshiki Tsuboi
>      >>>>
>      >>>>
>      >>>> —---- test result as following ---------
>      >>>>
>      >>>> (1) starting My sampleApp ( changes log level from info to debug )
>      >>>>
>      >>>> $ sudo ./start_RyuBGPSpeaker.sh
>      >>>>
>      >>>> …(snip)
>      >>>>
>      >>>> DEBUG 2014-07-27 17:04:10,345 speaker 447 Received msg from 
> ('192.168.100.100', '179') << 
> BGPKeepAlive(len=19,marker='\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',type=4)
>      >>>> DEBUG 2014-07-27 17:04:10,346 speaker 447 Received msg from 
> ('192.168.100.100', '179') << 
> BGPKeepAlive(len=19,marker='\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',type=4)
>      >>>> DEBUG 2014-07-27 17:04:19,174 base 345 Connect request received 
> from client for port 127.0.0.1:42502 <http://127.0.0.1:42502>
>      >>>> CRITICAL 2014-07-27 17:04:19,185 net_ctrl 121 RPC Session to 
> ('127.0.0.1', 42502) started
>      >>>> DEBUG 2014-07-27 17:04:19,185 net_ctrl 199 NetworkController 
> processing outgoing request list.
>      >>>> DEBUG 2014-07-27 17:04:19,186 net_ctrl 166 NetworkController 
> started processing incoming messages
>      >>>> DEBUG 2014-07-27 17:04:19,186 net_ctrl 373 Request from 
> NetworkController<<: core.reset_neighbor [{'ip_address': '192.168.100.100'}]
>      >>>> INFO 2014-07-27 17:04:19,187 base 207 API method 
> core.reset_neighbor called with args: {'ip_address': '192.168.100.100'}
>      >>>> DEBUG 2014-07-27 17:04:19,187 peer 415 Peer Peer(ip: 
> 192.168.100.100, asn: 64511) configuration update event, enabled: False.
>      >>>> DEBUG 2014-07-27 17:04:19,188 base 11 SIGNAL: ('error', 'bgp', 
> <ryu.services.protocols.bgp.peer.Peer object at 0x7fc120a6c750>) emited with 
> data: {'peer': <ryu.services.protocols.bgp.peer.Peer object at 
> 0x7fc120a6c750>, 'subcode': 2, 'code': 6, 'reason': 'Cease: Administrative 
> Shutdown'}
>      >>>> ERROR 2014-07-27 17:04:19,188 speaker 376 Sent notification to 
> ('192.168.100.102', '59501') >> 
> BGPNotification(data='',error_code=6,error_subcode=2,len=21,marker='\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',type=3)
>      >>>> DEBUG 2014-07-27 17:04:19,189 base 305 Stopping activity 
> BgpProtocol True, ('192.168.100.100', '179'), ('192.168.100.102', '59501').
>      >>>> DEBUG 2014-07-27 17:04:19,189 base 291 BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '59501'): Stopping timer 
> Holdtime Timer
>      >>>> DEBUG 2014-07-27 17:04:19,189 base 291 BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '59501'): Stopping timer 
> Keepalive Timer
>      >>>> DEBUG 2014-07-27 17:04:19,190 base 285 BgpProtocol True, 
> ('192.168.100.100', '179'), ('192.168.100.102', '59501'): Closing socket 
> passive_conn - <eventlet.greenio.GreenSocket object at 0x7fc120a8a550>
>      >>>> DEBUG 2014-07-27 17:04:19,190 base 317 Stopping activity 
> BgpProtocol True, ('192.168.100.100', '179'), ('192.168.100.102', '59501') 
> finished.
>      >>>> DEBUG 2014-07-27 17:04:19,191 peer 439 Disabling connect-retry as 
> neighbor was disabled (True)
>      >>>> DEBUG 2014-07-27 17:04:19,774 base 345 Connect request received 
> from client for port 127.0.0.1:42503 <http://127.0.0.1:42503>
>      >>>> DEBUG 2014-07-27 17:04:19,775 base 305 Stopping activity 
> UnknownActivity: 1406448259.17.
>      >>>> DEBUG 2014-07-27 17:04:19,776 base 276 UnknownActivity: 
> 1406448259.17: Stopping child thread net_ctrl._process_outgoing
>      >>>> DEBUG 2014-07-27 17:04:19,776 base 276 UnknownActivity: 
> 1406448259.17: Stopping child thread net_ctrl._process_incoming
>      >>>> DEBUG 2014-07-27 17:04:19,776 base 317 Stopping activity 
> UnknownActivity: 1406448259.17 finished.
>      >>>> CRITICAL 2014-07-27 17:04:19,777 net_ctrl 109 RPC Session to 
> ('127.0.0.1', 42502) stopped
>      >>>> CRITICAL 2014-07-27 17:04:19,777 net_ctrl 121 RPC Session to 
> ('127.0.0.1', 42503) started
>      >>>> DEBUG 2014-07-27 17:04:19,778 net_ctrl 199 NetworkController 
> processing outgoing request list.
>      >>>> DEBUG 2014-07-27 17:04:19,779 net_ctrl 166 NetworkController 
> started processing incoming messages
>      >>>> DEBUG 2014-07-27 17:04:19,779 net_ctrl 373 Request from 
> NetworkController<<: core.reset_neighbor [{'ip_address': '192.168.100.100'}]
>      >>>> INFO 2014-07-27 17:04:19,780 base 207 API method 
> core.reset_neighbor called with args: {'ip_address': '192.168.100.100'}
>      >>>> ERROR 2014-07-27 17:04:19,783 base 222 Traceback (most recent call 
> last):
>      >>>>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/api/base.py",
>  line 220, in call
>      >>>>     return call(**kwargs)
>      >>>>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/api/core.py",
>  line 79, in reset_neighor
>      >>>>     ' reset.' % ip_address)
>      >>>> RuntimeConfigError: 200.1 - Neighbor 192.168.100.100 is not 
> enabled, hence cannot reset.
>      >>>>
>      >>>> ERROR 2014-07-27 17:04:19,790 hub 60 hub: uncaught exception: 
> Traceback (most recent call last):
>      >>>>   File "/usr/local/lib/python2.7/dist-packages/ryu/lib/hub.py", 
> line 52, in _launch
>      >>>>     func(*args, **kwargs)
>      >>>>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/net_ctrl.py",
>  line 171, in _process_incoming_msgs
>      >>>>     msg_buff = self._recv()
>      >>>>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/net_ctrl.py",
>  line 222, in _recv
>      >>>>     return self._sock_wrap(self._socket.recv)(RPC_SOCK_BUFF_SIZE)
>      >>>>   File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/net_ctrl.py",
>  line 230, in wrapper
>      >>>>     ret = func(*args, **kwargs)
>      >>>>   File 
> "/usr/local/lib/python2.7/dist-packages/eventlet/greenio.py", line 264, in 
> recv
>      >>>>     timeout_exc=socket.timeout("timed out"))
>      >>>>   File 
> "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/__init__.py", line 151, 
> in trampoline
>      >>>>     listener = hub.add(hub.READ, fileno, current.switch)
>      >>>>   File 
> "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/epolls.py", line 48, in 
> add
>      >>>>     listener = BaseHub.add(self, evtype, fileno, cb)
>      >>>>   File 
> "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/hub.py", line 126, in 
> add
>      >>>>     evtype, fileno, evtype))
>      >>>> RuntimeError: Second simultaneous read on fileno 11 detected.  
> Unless you really know what you're doing, make sure that only one greenthread 
> can read any particular socket.  Consider using a pools.Pool. If you do know 
> what you're doing and want to disable this error, call 
> eventlet.debug.hub_prevent_multiple_readers(False)
>      >>>>
>      >>>> DEBUG 2014-07-27 17:05:05,569 base 345 Connect request received 
> from client for port 192.168.100.100:31791 <http://192.168.100.100:31791>
>      >>>> DEBUG 2014-07-27 17:05:05,570 core 435 Closed connection to 
> 192.168.100.100:31791 <http://192.168.100.100:31791> as it is not a 
> recognized peer.
>      >>>> DEBUG 2014-07-27 17:05:05,570 base 11 SIGNAL: ('error', 'bgp', 
> None) emited with data: {'peer': None, 'subcode': 5, 'code': 6, 'reason': 
> 'Cease: Connection Rejected'}
>      >>>> ERROR 2014-07-27 17:05:05,570 speaker 376 Sent notification to 
> ('192.168.100.102', '179') >> 
> BGPNotification(data='',error_code=6,error_subcode=5,len=21,marker='\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',type=3)
>      >>>> DEBUG 2014-07-27 17:05:45,523 base 345 Connect request received 
> from client for port 192.168.100.100:16040 <http://192.168.100.100:16040>
>      >>>> DEBUG 2014-07-27 17:05:45,524 core 435 Closed connection to 
> 192.168.100.100:16040 <http://192.168.100.100:16040> as it is not a 
> recognized peer.
>      >>>> DEBUG 2014-07-27 17:05:45,524 base 11 SIGNAL: ('error', 'bgp', 
> None) emited with data: {'peer': None, 'subcode': 5, 'code': 6, 'reason': 
> 'Cease: Connection Rejected'}
>      >>>> ERROR 2014-07-27 17:05:45,524 speaker 376 Sent notification to 
> ('192.168.100.102', '179') >> 
> BGPNotification(data='',error_code=6,error_subcode=5,len=21,marker='\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',type=3)
>      >>>> DEBUG 2014-07-27 17:06:21,000 base 345 Connect request received 
> from client for port 192.168.100.100:33990 <http://192.168.100.100:33990>
>      >>>> DEBUG 2014-07-27 17:06:21,001 core 435 Closed connection to 
> 192.168.100.100:33990 <http://192.168.100.100:33990> as it is not a 
> recognized peer.
>      >>>> DEBUG 2014-07-27 17:06:21,001 base 11 SIGNAL: ('error', 'bgp', 
> None) emited with data: {'peer': None, 'subcode': 5, 'code': 6, 'reason': 
> 'Cease: Connection Rejected'}
>      >>>> ERROR 2014-07-27 17:06:21,001 speaker 376 Sent notification to 
> ('192.168.100.102', '179') >> 
> BGPNotification(data='',error_code=6,error_subcode=5,len=21,marker='\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',type=3)
>      >>>> DEBUG 2014-07-27 17:07:06,263 base 345 Connect request received 
> from client for port 192.168.100.100:11862 <http://192.168.100.100:11862>
>      >>>> DEBUG 2014-07-27 17:07:06,263 core 435 Closed connection to 
> 192.168.100.100:11862 <http://192.168.100.100:11862> as it is not a 
> recognized peer.
>      >>>> DEBUG 2014-07-27 17:07:06,264 base 11 SIGNAL: ('error', 'bgp', 
> None) emited with data: {'peer': None, 'subcode': 5, 'code': 6, 'reason': 
> 'Cease: Connection Rejected'}
>      >>>> ERROR 2014-07-27 17:07:06,264 speaker 376 Sent notification to 
> ('192.168.100.102', '179') >> 
> BGPNotification(data='',error_code=6,error_subcode=5,len=21,marker='\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',type=3)
>      >>>>
>      >>>>
>      >>>> (2) neighbor reset through RPC in Ryu-cli
>      >>>>
>      >>>> $ ./rpc_cli.py --peers=bgps=localhost:50002
>      >>>> (Cmd) request bgps core.reset_neighbor [{'ip_address': 
> '192.168.100.100'}]
>      >>>> disconnected.  trying to connect...
>      >>>> connected.  retrying the request...
>      >>>> RPC ERROR 200.1 - Neighbor 192.168.100.100 is not enabled, hence 
> cannot reset.
>      >>>> (Cmd)
>      >>>>
>      >>>>
>      >>>>
>      >>>>
>      >>>> 2014/07/27 10:10、Toshiki Tsuboi <t.tsubo2...@gmail.com 
> <mailto:t.tsubo2...@gmail.com> <mailto:t.tsubo2...@gmail.com 
> <mailto:t.tsubo2...@gmail.com>><mailto:t.tsubo2...@gmail.com 
> <mailto:t.tsubo2...@gmail.com>>> のメール:
>      >>>>
>      >>>>> Hi Fujita-san
>      >>>>>
>      >>>>> I have tested reset_neighbor after adapting patch/ code ./
>      >>>>> /It looks to me the previous issue/ has r/esolved . /
>      >>>>> / -> BGP peering down properly , because Ryu-BGP sends 
> Notification Message”//administrative //shutdown”  ,/
>      >>>>>
>      >>>>> But, after that, /BGP peering has kept ‘Down ‘,/
>      >>>>> / -> Please check the attach //“/wireshark_keep_peer_down"
>      >>>>>
>      >>>>> Best regards
>      >>>>> Toshiki Tsuboi
>      >>>>>
>      >>>>>
>      >>>>> —---- test result as following ---------
>      >>>>>
>      >>>>> (1) starting My sampleApp
>      >>>>>
>      >>>>> $ sudo ./start_RyuBGPSpeaker.sh
>      >>>>> INFO 2014-07-20 20:31:29,814 base 207 API method core.start called 
> with args: {'router_id': '10.10.0.2', 'label_range': (100, 100000), 'waiter': 
> <ryu.lib.hub.Event object at 0x7fe42269ca90>, 'local_as': 64512, 
> 'bgp_server_port': 179, 'refresh_max_eor_time': 0, 'refresh_stalepath_time': 
> 0}
>      >>>>> INFO 2014-07-20 20:31:29,868 base 207 API method neighbor.create 
> called with args: {'remote_as': 64511, 'ip_address': '192.168.100.100'}
>      >>>>> INFO 2014-07-20 20:31:29,869 base 207 API method network.add 
> called with args: {'prefix': '10.20.0.0/24 <http://10.20.0.0/24>'}
>      >>>>> INFO 2014-07-20 20:31:29,870 base 207 API method network.add 
> called with args: {'prefix': '10.30.0.0/24 <http://10.30.0.0/24>'}
>      >>>>> INFO 2014-07-20 20:31:29,871 base 207 API method network.add 
> called with args: {'prefix': '10.40.0.0/16 <http://10.40.0.0/16>'}
>      >>>>> INFO 2014-07-20 20:31:29,872 base 207 API method network.add 
> called with args: {'prefix': '10.50.0.0/16 <http://10.50.0.0/16>'}
>      >>>>> CRITICAL 2014-07-20 20:31:30,891 peer 1763 Connection to peer: 
> 192.168.100.100 established
>      >>>>> CRITICAL 2014-07-20 20:32:07,426 net_ctrl 121 RPC Session to 
> ('127.0.0.1', 41478) started
>      >>>>> INFO 2014-07-20 20:32:07,427 base 207 API method comm_conf.get 
> called with args: {}
>      >>>>> INFO 2014-07-20 20:32:28,828 base 207 API method 
> core.reset_neighbor called with args: {'ip_address': '192.168.100.100'}
>      >>>>> ERROR 2014-07-20 20:32:28,829 base 225 Traceback (most recent call 
> last):
>      >>>>>  File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/api/base.py",
>  line 220, in call
>      >>>>>    return call(**kwargs)
>      >>>>>  File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/api/core.py",
>  line 71, in reset_neighor
>      >>>>>    neigh_conf.enabled = False
>      >>>>>  File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/rtconf/neighbors.py",
>  line 351, in enabled
>      >>>>>    enable)
>      >>>>>  File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/rtconf/base.py",
>  line 252, in _notify_listeners
>      >>>>>    callback(ConfEvent(self, evt, value))
>      >>>>>  File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/peer.py", 
> line 433, in on_update_enabled
>      >>>>>    BGP_ERROR_SUB_ADMINISTRATIVE_SHUTDOWN
>      >>>>>  File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/speaker.py",
>  line 374, in send_notification
>      >>>>>    if len(self._localname()):
>      >>>>> TypeError: 'tuple' object is not callable
>      >>>>>
>      >>>>> CRITICAL 2014-07-20 20:32:28,942 peer 1777 Connection to peer 
> 192.168.100.100 lost, reason: Peer closed connection Resetting retry connect 
> loop: False
>      >>>>> INFO 2014-07-20 20:32:28,944 speaker 600 Peer closed connection
>      >>>>> INFO 2014-07-20 20:32:57,340 base 207 API method comm_conf.get 
> called with args: {}
>      >>>>> ERROR 2014-07-20 20:33:16,802 hub 60 hub: uncaught exception: 
> Traceback (most recent call last):
>      >>>>>  File "/usr/local/lib/python2.7/dist-packages/ryu/lib/hub.py", 
> line 52, in _launch
>      >>>>>    func(*args, **kwargs)
>      >>>>>  File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/core.py", 
> line 439, in start_protocol
>      >>>>>    bgp_proto.send_notification(code, subcode)
>      >>>>>  File 
> "/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/speaker.py",
>  line 374, in send_notification
>      >>>>>    if len(self._localname()):
>      >>>>> TypeError: 'tuple' object is not callable
>      >>>>>
>      >>>>> (snip)
>      >>>>>
>      >>>>>
>      >>>>> (2) neighbor reset through RPC in Ryu-cli
>      >>>>>
>      >>>>> (Cmd) request bgps comm_conf.get [{}]
>      >>>>> RESULT {'router_id': '10.10.0.2', 'label_range': [100, 100000], 
> 'local_as': 64512, 'bgp_conn_retry_time': 30, 'bgp_server_port': 179, 
> 'tcp_conn_timeout': 30, 'refresh_max_eor_time': 0, 'refresh_stalepath_time': 
> 0, 'maximum_paths_external_rtfilter_all': True}
>      >>>>> (Cmd)
>      >>>>> (Cmd) request bgps core.reset_neighbor [{'ip_address': 
> '192.168.100.100'}]
>      >>>>> RPC ERROR 500.1 - 'tuple' object is not callable
>      >>>>> (Cmd) NOTIFICATION from bgps ['neighbor.state', {'state': 'Idle', 
> 'ip_address': '192.168.100.100'}]
>      >>>>>
>      >>>>> (Cmd) request bgps comm_conf.get [{}]
>      >>>>> NOTIFICATION from bgps ['neighbor.down', {'ip_address': 
> '192.168.100.100'}]
>      >>>>> RESULT {'router_id': '10.10.0.2', 'label_range': [100, 100000], 
> 'local_as': 64512, 'bgp_conn_retry_time': 30, 'bgp_server_port': 179, 
> 'tcp_conn_timeout': 30, 'refresh_max_eor_time': 0, 'refresh_stalepath_time': 
> 0, 'maximum_paths_external_rtfilter_all': True}
>      >>>>> (Cmd)
>      >>>>> (Cmd) request bgps comm_conf.get [{}]
>      >>>>> RESULT {'router_id': '10.10.0.2', 'label_range': [100, 100000], 
> 'local_as': 64512, 'bgp_conn_retry_time': 30, 'bgp_server_port': 179, 
> 'tcp_conn_timeout': 30, 'refresh_max_eor_time': 0, 'refresh_stalepath_time': 
> 0, 'maximum_paths_external_rtfilter_all': True}
>      >>>>>
>      >>>>>
>      >>>>>
>      >>>>>
>      >>>>> <wireshark_keep_peer_down.png>
>      >>>>>
>      >>>>>
>      >>>>>
>      >>>>>
>      >>>>>
>      >>>>> 2014/07/27 8:35、FUJITA Tomonori <fujita.tomon...@lab.ntt.co.jp 
> <mailto:fujita.tomon...@lab.ntt.co.jp> <mailto:fujita.tomon...@lab.ntt.co.jp 
> <mailto:fujita.tomon...@lab.ntt.co.jp>><mailto:fujita.tomon...@lab.ntt.co.jp 
> <mailto:fujita.tomon...@lab.ntt.co.jp>>> のメール:
>      >>>>>
>      >>>>>> Hi,
>      >>>>>>
>      >>>>>> On Sun, 27 Jul 2014 08:00:18 +0900
>      >>>>>> Toshiki Tsuboi <t.tsubo2...@gmail.com 
> <mailto:t.tsubo2...@gmail.com> <mailto:t.tsubo2...@gmail.com 
> <mailto:t.tsubo2...@gmail.com>><mailto:t.tsubo2...@gmail.com 
> <mailto:t.tsubo2...@gmail.com>>> wrote:
>      >>>>>>
>      >>>>>>> I have just found the bug for Ryu-bgp .
>      >>>>>>> Please let me share  a bug report  as follows
>      >>>>>>
>      >>>>>> Thanks for that!
>      >>>>>>
>      >>>>>>> (1) starting My sampleApp
>      >>>>>>> -> neighbor create succeed
>      >>>>>>>
>      >>>>>>>   $ sudo ./start_RyuBGPSpeaker.sh
>      >>>>>>>   INFO 2014-07-20 19:07:29,012 base 207 API method core.start 
> called with args: {'router_id': '10.10.0.2', 'label_range': (100, 100000), 
> 'waiter': <ryu.lib.hub.Event object at
>      >>>>>>>   0x7f8b8d8dba90>, 'local_as': 64512, 'bgp_server_port': 179, 
> 'refresh_max_eor_time': 0, 'refresh_stalepath_time': 0}
>      >>>>>>>   INFO 2014-07-20 19:07:29,059 base 207 API method 
> neighbor.create called with args: {'remote_as': 64511, 'ip_address': 
> '192.168.100.100'}
>      >>>>>>>   INFO 2014-07-20 19:07:29,060 base 207 API method network.add 
> called with args: {'prefix': '10.20.0.0/24 <http://10.20.0.0/24>'}
>      >>>>>>>   INFO 2014-07-20 19:07:29,061 base 207 API method network.add 
> called with args: {'prefix': '10.30.0.0/24 <http://10.30.0.0/24>'}
>      >>>>>>>   INFO 2014-07-20 19:07:29,062 base 207 API method network.add 
> called with args: {'prefix': '10.40.0.0/16 <http://10.40.0.0/16>'}
>      >>>>>>>   INFO 2014-07-20 19:07:29,063 base 207 API method network.add 
> called with args: {'prefix': '10.50.0.0/16 <http://10.50.0.0/16>'}
>      >>>>>>>   CRITICAL 2014-07-20 19:07:30,096 peer 1759 Connection to peer: 
> 192.168.100.100 established
>      >>>>>>>
>      >>>>>>> (2) neighbor reset through RPC in Ryu-cli
>      >>>>>>> -> RPC ERROR has occurred
>      >>>>>>>
>      >>>>>>>   $ ./rpc_cli.py --peers=bgps=localhost:50002
>      >>>>>>>   (Cmd) request bgps core.reset_neighbor [{'ip_address': 
> '192.168.100.100'}]
>      >>>>>>>   RPC ERROR 500.1 - global name 'BGP_ERROR_CEASE' is not defined
>      >>>>>>
>      >>>>>> How about the following (sorry, not tested)?
>      >>>>>>
>      >>>>>> diff --git a/ryu/services/protocols/bgp/peer.py 
> b/ryu/services/protocols/bgp/peer.py
>      >>>>>> index 4b3675a..03533d7 100644
>      >>>>>> --- a/ryu/services/protocols/bgp/peer.py
>      >>>>>> +++ b/ryu/services/protocols/bgp/peer.py
>      >>>>>> @@ -57,6 +57,10 @@ 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
>      >>>>>>
>      >>>>>> +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 BGPPathAttributeNextHop
>      >>>>>> from ryu.lib.packet.bgp import BGPPathAttributeAsPath
>      >>>>>> from ryu.lib.packet.bgp import BGPPathAttributeLocalPref
>      >>>>>
>      >>>>
>      >>>>
>      >>>>
>      >>>> 
> ------------------------------------------------------------------------------
>      >>>> Want fast and easy access to all the code in your enterprise? Index 
> and
>      >>>> search up to 200,000 lines of code with a free copy of Black Duck
>      >>>> Code Sight - the same software that powers the world's largest code
>      >>>> search on Ohloh, the Black Duck Open Hub! Try it now.
>      >>>> http://p.sf.net/sfu/bds
>      >>>>
>      >>>>
>      >>>>
>      >>>> _______________________________________________
>      >>>> Ryu-devel mailing list
>      >>>> Ryu-devel@lists.sourceforge.net 
> <mailto:Ryu-devel@lists.sourceforge.net> 
> <mailto:Ryu-devel@lists.sourceforge.net 
> <mailto:Ryu-devel@lists.sourceforge.net>>
>      >>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>      >>
>      >
>
>     
> ------------------------------------------------------------------------------
>     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 <mailto:Ryu-devel@lists.sourceforge.net>
>     https://lists.sourceforge.net/lists/listinfo/ryu-devel
>
>
>
>
> --
> Satoshi KOBAYASHI <satosh...@stratosphere.co.jp 
> <mailto:satosh...@stratosphere.co.jp>>

------------------------------------------------------------------------------
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