second try
[vsorcdistro/.git] / ryu / doc / source / library_bgp_speaker.rst
1 *******************
2 BGP speaker library
3 *******************
4
5 Introduction
6 ============
7
8 Ryu BGP speaker library helps you to enable your code to speak BGP
9 protocol. The library supports IPv4, IPv4 MPLS-labeled VPN, IPv6
10 MPLS-labeled VPN and L2VPN EVPN address families.
11
12 Example
13 =======
14
15 The following simple code creates a BGP instance with AS number 64512
16 and Router ID 10.0.0.1. It tries to establish a bgp session with a
17 peer (its IP is 192.168.177.32 and the AS number is 64513). The
18 instance advertizes some prefixes.
19
20 .. code-block:: python
21
22     import eventlet
23
24     # BGPSpeaker needs sockets patched
25     eventlet.monkey_patch()
26
27     # initialize a log handler
28     # this is not strictly necessary but useful if you get messages like:
29     #    No handlers could be found for logger "ryu.lib.hub"
30     import logging
31     import sys
32     log = logging.getLogger()
33     log.addHandler(logging.StreamHandler(sys.stderr))
34
35     from ryu.services.protocols.bgp.bgpspeaker import BGPSpeaker
36
37     def dump_remote_best_path_change(event):
38         print 'the best path changed:', event.remote_as, event.prefix,\
39             event.nexthop, event.is_withdraw
40
41     def detect_peer_down(remote_ip, remote_as):
42         print 'Peer down:', remote_ip, remote_as
43
44     if __name__ == "__main__":
45         speaker = BGPSpeaker(as_number=64512, router_id='10.0.0.1',
46                              best_path_change_handler=dump_remote_best_path_change,
47                              peer_down_handler=detect_peer_down)
48
49         speaker.neighbor_add('192.168.177.32', 64513)
50         # uncomment the below line if the speaker needs to talk with a bmp server.
51         # speaker.bmp_server_add('192.168.177.2', 11019)
52         count = 1
53         while True:
54             eventlet.sleep(30)
55             prefix = '10.20.' + str(count) + '.0/24'
56             print "add a new prefix", prefix
57             speaker.prefix_add(prefix)
58             count += 1
59             if count == 4:
60                 speaker.shutdown()
61                 break