Hi Iwase,

Thanks. This could be really helpful.
I will let you know if i have any further requirements(need help) while
implementing and using this.

Thanks
Hadem

On Mon, Jan 22, 2018 at 10:00 AM, Iwase Yusuke <iwase.yusu...@gmail.com>
wrote:

> Hi Hadem,
>
> In stead of monitoring the UPDATE message arrivals, how about monitoring
> adj-RIB-in like the attached patch?
>
> With this patch, I could get new (or deleted) paths as "event" like the
> following.
>
> ====
> # my_bgp_app.py
>
> from ryu.base import app_manager
> from ryu.controller.handler import set_ev_cls
> from ryu.services.protocols.bgp import application as bgp_application
>
>
> class MyBGPApp(app_manager.RyuApp):
>     _CONTEXTS = {
>         'ryubgpspeaker': bgp_application.RyuBGPSpeaker,
>     }
>
>     def __init__(self, *args, **kwargs):
>         super(MyBGPApp, self).__init__(*args, **kwargs)
>
>         # Stores "ryu.services.protocols.bgp.application.RyuBGPSpeaker"
>         # instance in order to call the APIs of
>         # "ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker" via
>         # "self.app.speaker".
>         # Please note at this time, "BGPSpeaker" is NOT instantiated yet.
>         self.app = kwargs['ryubgpspeaker']
>
>     @set_ev_cls(bgp_application.EventAdjRibInChanged)
>     def _best_patch_changed_handler(self, ev):
>         self.logger.info(
>             'adj-RIB-in path changed: is_withdraw=%s, path=%s, '
>             'peer_ip=%s, peer_as=%d',
>             ev.is_withdraw, ev.path, ev.peer_ip, ev.peer_as)
> ====
>
> e.g.)
> $ ryu-manager my_bgp_app.py \
>     --bgp-app-config-file ryu/services/protocols/bgp/bgp_sample_conf.py
> ...(snip)...
> adj-RIB-in path changed: is_withdraw=False, path=Path(source: Peer(ip:
> 10.0.0.2, asn: 65002), nlri: BGPNLRI(addr='10.2.1.0',length=24), source
> ver#: 1, path attrs.: {1: 
> BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2),
> 2: BGPPathAttributeAsPath(flags=64,length=6,type=2,value=[[65002]]), 3:
> BGPPathAttributeNextHop(flags=64,length=4,type=3,value='10.0.0.2')},
> nexthop: 10.0.0.2, is_withdraw: False), peer_ip=10.0.0.2, peer_as=65002
> ...(snip)...
>
>
> Thanks,
> Iwase
>
>
> On 2018年01月19日 17:56, Pynbiang Hadem wrote:
>
>> Hi Iwase,
>>
>> Calling "neighbor_get()" function periodically may not suffice some of
>> our requirements.
>> The first method of "Calling it every time the update message arrives" is
>> more realistic.
>> SDN being program driven, I think we need something like
>> "packet_in_handler" for arrival of BGP Update packets so that applications
>> can handle the same.
>>
>> Is the Ryu community working to enable/implement such a capability in the
>> near future?.
>>
>> Thanks
>> Hadem
>>
>>
>>
>> On Fri, Jan 19, 2018 at 6:18 AM, Iwase Yusuke <iwase.yusu...@gmail.com
>> <mailto:iwase.yusu...@gmail.com>> wrote:
>>
>>     Hi Hadem,
>>
>>
>>         *How can i call my "neighbor_get()"function after the update
>> messages are
>>         received from the neighbor?. can we use any event to achieve this
>> or any
>>         other
>>         ways?.*
>>
>>
>>     Originally, when do you need to call "neighbor_get()" function?
>>     Every after the update message received? Periodically per N seconds?
>>
>>     To achieve the former one, unfortunately, now Ryu has no event for
>> such, only
>>     for notifying;
>>     - best patch changed due to new UPDATE received
>>     - peer up or down
>>     https://github.com/osrg/ryu/blob/8287e3513a780c2dbfe3003f6b6
>> 32d819a0e792c/ryu/services/protocols/bgp/application.py#L145-L147
>>     <https://github.com/osrg/ryu/blob/8287e3513a780c2dbfe3003f6b
>> 632d819a0e792c/ryu/services/protocols/bgp/application.py#L145-L147>
>>
>>     For the latter one, how about spawn a new thread which calls
>> "neighbor_get()"
>>     periodically?
>>
>>
>>     FYI, "application.py" can be integrated with your own application
>> without
>>     directly modifying "application.py".
>>     http://ryu-iwase.readthedocs.io/en/doc-services_protocols_bg
>> p_application/app/bgp_application.html#integration-with-
>> other-applications
>>     <http://ryu-iwase.readthedocs.io/en/doc-services_protocols_b
>> gp_application/app/bgp_application.html#integration-with-
>> other-applications>
>>
>>     Please note the above link is temporary, because this document is
>> under
>>     reviewing on Ryu-devel and not yet merged to upstream. When merged,
>> you can read
>>     this document from the "official" Ryu Documentation page.
>>
>>
>>     Thanks,
>>     Iwase
>>
>>
>>     On 2018年01月19日 01:55, Pynbiang Hadem wrote:
>>
>>         *Hi Iwase,*
>>         *
>>         *
>>         *Yes you are right. The update messages from neighbor (10.0.0.2)
>> was
>>         received much later as can be seen in the output log
>> file(BGPTest-h1.py)
>>         attached herewith.*
>>         *The update message received is as below:*
>>         /Received msg from ('10.0.0.2', '55930') <<
>>         BGPUpdate(len=106,nlri=[],path_attributes=[BGPPathAttributeM
>> pReachNLRI(afi=2,flags=128,length=49,next_hop='::ffff:10.
>> 0.0.2',nlri=[LabelledVPNIP6AddrPrefix(addr=([101],
>>         BGPTwoOctetAsRD(admin=65002,assigned=150,type=0),
>>         '2001:db8:2::'),length=152)],safi=128,type=14),
>>         BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2),
>>         BGPPathAttributeAsPath(flags=64,length=6,type=2,value=[[65002]]),
>>         BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,valu
>> e=100),
>>         BGPPathAttributeExtendedCommunities(communities=[BGPTwoOctet
>> AsSpecificExtendedCommunity(as_number=65002,local_
>> administrator=150,subtype=2,type=0)],flags=192,length=8,
>> type=16)],total_path_attribute_len=83,type=2,withdrawn_
>> routes=[],withdrawn_routes_len=0)/
>>         /Received route with RT ['65002:150'] that is of no interest to
>> any VRFs
>>         or Peers set(['65001:200', '65001:350', '65001:150', '65001:300',
>>         '65001:100', '65001:250']). Ignoring paths from this UPDATE:
>>         BGPUpdate(len=106,nlri=[],path_attributes=[BGPPathAttributeM
>> pReachNLRI(afi=2,flags=128,length=49,next_hop='::ffff:10.
>> 0.0.2',nlri=[LabelledVPNIP6AddrPrefix(addr=([101],
>>         BGPTwoOctetAsRD(admin=65002,assigned=150,type=0),
>>         '2001:db8:2::'),length=152)],safi=128,type=14),
>>         BGPPathAttributeOrigin(flags=64,length=1,type=1,value=2),
>>         BGPPathAttributeAsPath(flags=64,length=6,type=2,value=[[65002]]),
>>         BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,valu
>> e=100),
>>         BGPPathAttributeExtendedCommunities(communities=[BGPTwoOctet
>> AsSpecificExtendedCommunity(as_number=65002,local_
>> administrator=150,subtype=2,type=0)],flags=192,length=8,
>> type=16)],total_path_attribute_len=83,type=2,withdrawn_
>> routes=[],withdrawn_routes_len=0)/
>>         /Received msg from ('10.0.0.2', '55930') <<
>>         BGPUpdate(len=76,nlri=[],path_attributes=[BGPPathAttributeMp
>> ReachNLRI(afi=2,flags=128,length=30,next_hop='::ffff:10.
>> 0.0.2',nlri=[IP6AddrPrefix(addr='2001:db8:1::',length=64)
>> ],safi=1,type=14),
>>         BGPPathAttributeOrigin(flags=64,length=1,type=1,value=0),
>>         BGPPathAttributeAsPath(flags=64,length=6,type=2,value=[[65002]]),
>>         BGPPathAttributeMultiExitDisc(flags=128,length=4,type=4,valu
>> e=100)],total_path_attribute_len=53,type=2,withdrawn_
>> routes=[],withdrawn_routes_len=0)
>>         /
>>
>>         *How can i call my "neighbor_get()"function after the update
>> messages
>>         are received from the neighbor?. can we use any event to achieve
>> this or
>>         any other ways?.*
>>
>>         Thanks
>>         Hadem
>>
>>         On Wed, Jan 17, 2018 at 4:57 AM, Iwase Yusuke <
>> iwase.yusu...@gmail.com
>>         <mailto:iwase.yusu...@gmail.com> <mailto:iwase.yusu...@gmail.com
>>         <mailto:iwase.yusu...@gmail.com>>> wrote:
>>
>>              Hi Hadem,
>>
>>              In that case, you need to call "neighbor_get()" after
>> connections
>>         to neighbor(s)
>>              established and received some routes.
>>              It seems that Ryu just returns a empty list because Ryu does
>> not
>>         yet received
>>              any routes from neighbors.
>>
>>              Thanks,
>>              Iwase
>>
>>
>>              On 2018年01月15日 17:48, Pynbiang Hadem wrote:
>>
>>                  Hi Iwase,
>>
>>                  Precisely, i actually wanted to get *adj-RIB-in*
>> information.
>>
>>                  Is there any problem with my code while trying to
>> achieve this?.
>>
>>                  Thanks
>>                  Hadem
>>
>>
>>                  On Mon, Jan 15, 2018 at 5:38 AM, Iwase Yusuke
>>         <iwase.yusu...@gmail.com <mailto:iwase.yusu...@gmail.com>
>>                  <mailto:iwase.yusu...@gmail.com
>>         <mailto:iwase.yusu...@gmail.com>> <mailto:iwase.yusu...@gmail.com
>>         <mailto:iwase.yusu...@gmail.com>
>>                  <mailto:iwase.yusu...@gmail.com
>>         <mailto:iwase.yusu...@gmail.com>>>> wrote:
>>
>>                       Hi Hadem,
>>
>>                       It is depending on what you want to get though, you
>>         attempt to get
>>                  neighbors
>>                       information, right?
>>                       In that case, you should use "neighbors_get()"
>> (plural
>>         form) instead of
>>                       "neighbor_get()".
>>         http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref.
>> html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.neighbors_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.neighbors_get>
>>                         <http://ryu.readthedocs.io/en/
>> latest/library_bgp_speaker_ref.html#ryu.services.protocols.
>> bgp.bgpspeaker.BGPSpeaker.neighbors_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.neighbors_get>>
>>                                     <http://ryu.readthedocs.io/en/
>> latest/library_bgp_speaker_ref.html#ryu.services.protocols.
>> bgp.bgpspeaker.BGPSpeaker.neighbors_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.neighbors_get>
>>                         <http://ryu.readthedocs.io/en/
>> latest/library_bgp_speaker_ref.html#ryu.services.protocols.
>> bgp.bgpspeaker.BGPSpeaker.neighbors_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.neighbors_get>>>
>>
>>                       With "neighbor_get()" with
>> "route_type='received-routes'", Ryu
>>                  should return the
>>                       adj-RIB-in information and I guess it is always an
>> empty
>>         list when
>>                  starting up
>>                       (connections are not established with neighbors).
>>
>>
>>                       Thanks,
>>                       Iwase
>>
>>
>>                       On 2018年01月13日 00:59, Pynbiang Hadem wrote:
>>
>>                           Hi Iwase,
>>
>>                           I've made the modifications accordingly. *Now i
>> am
>>         able to see the
>>                           output for vrfs_get() and rib_get()*. *However
>> there
>>         is still
>>                  no output
>>                           for neighbor_get() . ---output is in
>> **BGPTest-output.py*
>>                           *Pls advice how to get the output for
>> neighbor_get().*
>>                           *Enclosed herewith: (1) modified
>> bgpapplication1.py & (2)
>>                  BGPTest-output.py*
>>
>>                           Thanks
>>                           Hadem
>>
>>
>>
>>
>>
>>                           On Fri, Jan 12, 2018 at 7:36 AM, Iwase Yusuke
>>                  <iwase.yusu...@gmail.com <mailto:iwase.yusu...@gmail.com
>> >
>>         <mailto:iwase.yusu...@gmail.com <mailto:iwase.yusu...@gmail.com>>
>>                           <mailto:iwase.yusu...@gmail.com
>>         <mailto:iwase.yusu...@gmail.com>
>>                  <mailto:iwase.yusu...@gmail.com
>>         <mailto:iwase.yusu...@gmail.com>>> <mailto:iwase.yusu...@gmail.co
>> m
>>
>>         <mailto:iwase.yusu...@gmail.com>
>>
>>                  <mailto:iwase.yusu...@gmail.com <mailto:
>> iwase.yusu...@gmail.com>>
>>
>>                           <mailto:iwase.yusu...@gmail.com
>>         <mailto:iwase.yusu...@gmail.com>
>>                  <mailto:iwase.yusu...@gmail.com
>>         <mailto:iwase.yusu...@gmail.com>>>>> wrote:
>>
>>                                Hi Hadem,
>>
>>                                First, the return value for each
>> BGPSpeaker's API
>>         (with
>>                           format="json") is str
>>                                type value.
>>                                Why you need to split them like;
>>                                     vrf_result =
>> self.speaker.vrfs_get('routes',
>>         None,
>>                  'all', 'json')
>>                                     nowtime = vrf_result[0]  # <--- ?
>>                                     result = vrf_result[1]   # <--- ?
>>
>>                                And, please confirm the meaning of each
>> argument when
>>                  calling         BGPSpeaker's
>>                                APIs.
>>                                For example, to getting all VRF
>> configurations,
>>         you need
>>                  to specify
>>                           "summary"
>>                                instead of "routes".
>>         http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref.
>> html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get>
>>                         <http://ryu.readthedocs.io/en/
>> latest/library_bgp_speaker_ref.html#ryu.services.protocols.
>> bgp.bgpspeaker.BGPSpeaker.vrfs_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get>>
>>                                         <http://ryu.readthedocs.io/en/
>> latest/library_bgp_speaker_ref.html#ryu.services.protocols.
>> bgp.bgpspeaker.BGPSpeaker.vrfs_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get>
>>                         <http://ryu.readthedocs.io/en/
>> latest/library_bgp_speaker_ref.html#ryu.services.protocols.
>> bgp.bgpspeaker.BGPSpeaker.vrfs_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get>>>
>>                                                     <
>> http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get>
>>                         <http://ryu.readthedocs.io/en/
>> latest/library_bgp_speaker_ref.html#ryu.services.protocols.
>> bgp.bgpspeaker.BGPSpeaker.vrfs_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get>>
>>                                         <http://ryu.readthedocs.io/en/
>> latest/library_bgp_speaker_ref.html#ryu.services.protocols.
>> bgp.bgpspeaker.BGPSpeaker.vrfs_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get>
>>                         <http://ryu.readthedocs.io/en/
>> latest/library_bgp_speaker_ref.html#ryu.services.protocols.
>> bgp.bgpspeaker.BGPSpeaker.vrfs_get
>>         <http://ryu.readthedocs.io/en/latest/library_bgp_speaker_ref
>> .html#ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.vrfs_get>>>>
>>
>>                                Thanks,
>>                                Iwase
>>
>>
>>                                On 2018年01月11日 21:55, Pynbiang Hadem wrote:
>>
>>                                    *Hi,*
>>                                    *
>>                                    *
>>                                    *I am getting blank output
>> for BGPSpeaker
>>         show_vrf,
>>                  show_rib,
>>                                    show_neighbor. The partial output is
>> as below:*
>>
>>  ----------------------------------
>>                                    /Sending MED Update Message.../
>>                                    /Send BGP UPDATE Message for changing
>> MED[100]/
>>                                    /API method neighbor.update called
>> with args:
>>                  {'ip_address':
>>                           '10.0.0.2',
>>                                    'changes': {'multi_exit_disc': 100}}/
>>                                    /on_update_med fired/
>>                                    /MED value for neigh: Neighbor:
>> 10.0.0.2
>>         updated to 100/
>>                                    /Calling get VRFs Information .../
>>                                    /Shows BGP VRF information in a json
>> format/
>>                                    /API method operator.show called with
>> args:
>>         {'params':
>>                  ['vrf',
>>                           'routes',
>>                                    'all'], 'format': 'json'}/
>>                                    /+++++++++++++++++++++++++++++++/
>>                                    /{ : Show VRFs /
>>                                    /+++++++++++++++++++++++++++++++/
>>                                    /"/
>>                                    /
>>                                    /
>>                                    /Calling SHOW RIB .../
>>                                    /Shows BGP routing information in a
>> json format/
>>                                    /API method operator.show called with
>> args:
>>         {'params':
>>                  ['rib',
>>                           'all'],
>>                                    'format': 'json'}/
>>                                    /+++++++++++++++++++++++++++++++/
>>                                    /{ : Show rib /
>>                                    /+++++++++++++++++++++++++++++++/
>>                                    /"/
>>                                    /
>>                                    /
>>                                    /Calling SHOW Neighbor.../
>>                                    /Inside Show Neighbor BGP UPDATE
>> Message/
>>                                    /API method operator.show called with
>> args:
>>         {'params':
>>                  ['neighbor',
>>                                    'received-routes', '10.0.0.2', 'all'],
>>         'format': 'json'}/
>>                                    /[]/
>>                                    /+++++++++++++++++++++++++++++++/
>>                                    /[ : Show neighbor /
>>                                    /+++++++++++++++++++++++++++++++/
>>                                    /]/
>>
>> ------------------------------------------
>>
>>                                    *I am attaching herewith my BGP
>> application
>>                           file(bgpapplication1.py). *
>>                                    *Pls let me know what mistake i have
>> done and
>>         how to
>>                  display
>>                           the above
>>                                    details.*
>>                                    *
>>                                    *
>>                                    *Thanks*
>>                                    *Hadem*
>>
>>
>>
>>
>>
>> ------------------------------------------------------------
>> ------------------
>>                                    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 <mailto:Ryu-devel@lists.source
>> forge.net>
>>         <mailto:Ryu-devel@lists.sourceforge.net
>>         <mailto:Ryu-devel@lists.sourceforge.net>>
>>                  <mailto:Ryu-devel@lists.sourceforge.net
>>         <mailto:Ryu-devel@lists.sourceforge.net>
>>                  <mailto:Ryu-devel@lists.sourceforge.net
>>         <mailto:Ryu-devel@lists.sourceforge.net>>>
>>                           <mailto:Ryu-devel@lists.sourceforge.net
>>         <mailto:Ryu-devel@lists.sourceforge.net>
>>                  <mailto:Ryu-devel@lists.sourceforge.net
>>         <mailto:Ryu-devel@lists.sourceforge.net>>
>>                           <mailto: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
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
>>                  <https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
>>                                  <https://lists.sourceforge.ne
>> t/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
>>                  <https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
>>                                                   <
>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
>>                  <https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
>>                                  <https://lists.sourceforge.ne
>> t/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
>>                  <https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
>>
>>
>>
>>
>>                                         ------------------------------
>> ------------------------------------------------
>>                           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 <mailto:Ryu-devel@lists.source
>> forge.net>
>>         <mailto:Ryu-devel@lists.sourceforge.net
>>         <mailto:Ryu-devel@lists.sourceforge.net>>
>>                  <mailto: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
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
>>                  <https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
>>                                  <https://lists.sourceforge.ne
>> t/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
>>                  <https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
>>
>>
>>
>>
>>                         ------------------------------
>> ------------------------------------------------
>>                  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 <mailto:Ryu-devel@lists.source
>> forge.net>
>>         <mailto:Ryu-devel@lists.sourceforge.net
>>         <mailto:Ryu-devel@lists.sourceforge.net>>
>>         https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
>>                  <https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
>>
>>
>>
>>
>>         ------------------------------------------------------------
>> ------------------
>>         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 <mailto:Ryu-devel@lists.source
>> forge.net>
>>         https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>         <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
>>
>>
>>
>>
>> ------------------------------------------------------------
>> ------------------
>> 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
>>
>>
------------------------------------------------------------------------------
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