~brightbox/brightbox/exabgp-1.3.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
This program is a BGP route injector. It can be used to announce routes in your network.

The route injector can connect using either IPv4 or IPv6 BGP and announce both IPv4 and IPv6 routes through IPv4 or IPv6 TCP connections.

Potential use are :
 - Injection of service IPs (my use of it) like AS112 announcement
 - Temporary route redirection (adding more specific route with different next-hop)
 - Injection of flow routes
 - ...

The code is deployed in at least one production network to inject some /32 but should be considered beta quality.
I will gladly fix bugs if any are found, just contact me: thomas . mangin AT exa - networks . co . uk

As the program is not intended to receive routing information and perform FIB manipulation it only partially implements:
 - RFC 1997 - BGP Communities Attribute
 - RFC 2545 - Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
 - RFC 4724 - Graceful Restart Mechanism for BGP
 - RFC 4760 - Multiprotocol Extensions for BGP-4, Obsoletes: 2858
 - RFC 4271 - A Border Gateway Protocol 4 (BGP-4), Obsoletes: 1771
 - RFC 5492 - Capabilities Advertisement with BGP-4, Obsoletes 3392,2842
 - RFC 4360 - BGP Extended Communities Attribute
 - RFC 5575 - Dissemination of Flow Specification Rules
 - RFC 4893 - BGP Support for Four-octet AS Number Space

Some speakers may use RFC 2385 (Protection of BGP Sessions via the TCP MD5 Signature) to allow the BGP connection to be established. To the best of my knowledge, there is no way this can be done in python and as a result the feature will/can not be implemented (The Python socket module exports IPPROTO_TCP but not TCP_MD5_AUTH).

The following BG4 related RFC are not supported but would be on the roadmap if there was one:
 - RFC 3107 (Carrying Label Information in BGP-4)
Adding the feature should be trivial.

There is no support for:
  - RFC 2796 (BGP Route Reflection - An Alternative to Full Mesh IB).
  - the ORIGINATOR_ID and CLUSTER_LIST attributes.
However, as the injector does not re-announce routes, nothing prevent its use with a Route Reflector.

I have no interrest in implementing:
 - RFC 2918 (Route Refresh Capability for BGP-4)
 - RFC 3065 (Autonomous System Confederations for BGP)
 - RFC 5549 (Advertising IPv4 Network Layer Reachability Information with an IPv6 Next Hop)

Development is done on python 2.6, the code was made compatible with python 2.4, previous versions can not be supported due to their lack of support for coroutine (the yield feature).

This programs does not have any dependences on any third party libraries.

A copy of the documentation on our wiki: http://bgp.exa.org.uk/ was added to the source code (wiki.txt)