Version explained:
 major : codebase increase on incompatible changes
 minor : increase on risk of code breakage during a major release
 bug   : increase on bug or incremental changes

Version 3.1.9 - 27th of March 2013
 * Fix: bug in logging
 * Fix: typo in neighbor printing

Version 3.1.8 - 22nd of March 2013
 * Fix: bad encoding of extended community for FlowSpec redirect
    reported by: Ozgur Karaman
 * Feature: unsupported before the next configuration format 'next-hop self', the neighbor MUST be defined first
    requested by: Federic Gabut-Deloraine

Version 3.1.7 - 18th of March 2013
 * Fix: api only get bgp session negotiation messages if neighbor-changes is set
    reported by: Lorenzo Murillo
 * Fix: json quoted integer and long by mistake
    reported by: Lorenzo Murillo
 * Fix: json used comma with no data to separate
    reported by: Lorenzo Murillo

Version 3.1.6 - 8th of March 2013
 * Fix: unclear log entry when removing route using API
    reported by: Lorenzo Murillo
 * Fix: withdrawn routes were always prepended with add-path information
 * Fix: bad withdrawal of routes (issue 11)
 * Fix: more sanity checking when parsing flow routes
 * Change: split configuration code to not be exabgp only
 * Feature: add a very simple BMP deamon (version 1 of the draft)

Version 3.1.5 - 18th of Febuary 2013
 * Fix: function name broking some features (issue 23)
    reported by: Lorenzo Murillo

Version 3.1.4 - 18th of Febuary 2013
 * Fix: Learn to spell negotiated (issue 21)
    reported by: Ian Wells
 * Feature: option to only attempt one TCP connection per peer (required by unittesting code)
 * Fix: a bug in code in charge of parsing legacy API names
 * Fix: fix relative path from exabgp
 * Fix: bug in api code causing crash
 * Fix: did not cleanup routes from the api before tokenisation (issue 22)
    reported by: Lorenzo Murillo
 * Fix: did not split routes from the api (issue 22)
    reported by: Lorenzo Murillo
 * Fix: when the api program was sending message too fast, some were missed (issue 22)
    reported by: Lorenzo Murillo
 * Fix: make peer name more unique (adding asn, and router-id) to prevent to router configuration to merge
 * Feature: restart the API program if we lost its file descriptor

Version 3.1.3 - 4th of Febuary 2013
 * Fix: JSON bugs (encoding for cluster-list, withdrawn routes)
    patch by: Vincent Bernat

Version 3.1.2 - 10th of January 2013
 * Copyright: updated all copyright notice (welcome to 2013)
 * Change: tidy process command name (keeping compatibility)
 * Improvement: pass raw update message to the API
 * Improvement: better control of the API message passed
 * Improvement: allow/make work a global process for multiples peers (partial compatibility kept)

Version 3.1.1 - 6th of January 2013
 * Complete Fix: watchdog feature (issue 13)
 * Improvement: JSON API 1.0, flowspec untested (issue 17)
 * Improvement: allow to remove routes by only providing the nlri and next hop (issue 16)

Version 3.1.0 - 2nd of January 2013
 * Partial Fix: watchdog feature
    reported by: Ryan Steinmetz
 * Fix: problem with SIGHUP when deleting peer
    patch by: Justin Azoff (thank you)
 * Fix: cluster-list attribute was not passed to api correctly
 * Improvement: MD5 support on FreeBSD (issue 14)
    patch by: Ryan Steinmetz (thank you)
 * Improvement: caching of Community and Next-Hop
    requested by: Justin Azoff (with benchmarking gains report,thank you)
 * Improvement: Store routes in neighbor as set and not list, so removal are O(1)
    patch by: Justin Azoff (thank you)
 * Improvement: (experimental) Limit the memory used for parsed route caching
 * Improvement: (experimental) json encoding on the API (issue 17) not tested with flow routes or complex routes

Version 3.0.11 - 21st of November 2012
 * Fix: add support for IPv6 MD5SUM
    reported by: Eiichiro Watanabe (with a patch, thank you)
 * Fix: RFC compliance, supporting keepalive timer of zero
 * Fix: parsing an invalid community string could cause a program crash
 * Improvement: add possibility to disable route attribute caching to reduce memory usage
               (over a few hundred Mb saved per full routing tables)
    requested by Daniel Piekacz

Version 3.0.10 - 6th of September 2012
 * Fix: not removing duplicate route correctly (same nlri different attributes) (issue 7)
    patch by: Reggie Yam (thank you)

Version 3.0.9 - 5th of September 2012
 * Fix: problem when parsing ASN which are not fitting in a Python integer
    reported by: Matthias Cramer

Version 3.0.8 - 28th of August 2012
 * Fix: empty as-path route printing
 * Fix: bug in printing neighbor objects
 * Fix: the first route of any MultiProtocol Update did not get its attributes set
 * Fix: safi on extensive route printing
 * Improvement: change the packet dump format to be cisco like
 * Change: added configuration self-checking (-t, --test)
 * Improvement: added parsing of raw update in command line (--decode)
 * Improvement: add a capability to disable asn4 support (useful when decoding routes)

Version 3.0.7 - 19th of August 2012
 * Fix: parser had a bug with multiple flow routes
    reported by Dmitry Lisakov and Oleg Alekseenko

Version 3.0.6 - 5th of August 2012
 * Fix: ommission during a variable name change
 * Fix: the example supervise script
 * Fix: withdrawing routes via helper program (issue 5)

Version 3.0.5 - 22 of July 2012
 * Improvement: suppor for systemd
    patch by: Sébastien Luttringer
 * Fix: some unexpected verbosity when use the exabgp shell script on some OSes
    patch by: Sébastien Luttringer
 * Fix: possible miss of connection loss
 * Fix: EOR code (again)
 * Fix: we were deleting the next-hop of MP routes !
 * Fix: follow correctly RFC 4760 (MP) for route generation (it was working, we were lucky)
 * Fix: exabgp.daemon was spelt exabgp.deamon for the PID location migration
    reported by: Tim Gebbett
 * CHANGE: Do not start if the PID file exists
 * CHANGE: helpers can now get new message for EORs like "announced eor 1/1 (IPv4 unicast)"
 * Debian package update by:
    Henry-Nicolas Tourneur
 * ArchLinux package by:
    by: Sébastien Luttringer

Version 3.0.4 - 19 of July 2012
 * Fix: FlowSpec API change update forgotten
 * Fix: Provide the right user to -fi when upgrading on Debian
 * Fix: split option now works with non ipv4 unicast route
 * Fix: log level parsing with -d
 * Fix: need to change gid before uid when dropping privileges
 * Fix: do not run our forked program as the caller but the suid user (fix bug when daemonizing too)
 * Fix: bug when daemonizing and not using syslog
 * Fix: handle gracefully ^C during configuration load/reload
 * Improvement: prevent SIGINT to reach the forked programs
 * Improvement: allow multiple configuration files, which forks multiple main loops
 * Improvement: send a "shutdown" message before terminating the worker processes
 * Improvement: group-updates option in neighbor which group routes with the same attributes in one update
 * Improvement: announce to helpers the start and end of update

Version 3.0.3 - 17 of July 2012 (unreleased experimental version)
 * Fix: bug in ASN4 path reconstruction
 * Fix: on peer close, do not carry untransmitted routes through the next cycle
 * Fix: on peer reload make sure all the routes are re-announced
 * Fix: massive CPU saving - only check for new route to announce when we have some
 * Fix: route buffering when sending many routes over slow connection/to slow routers was broken
    reported by Simon Woodhead (thank you for the testbed to debug it)
 * Improvement: in the way we store route in memory for the route delta on config change
 * Improvement: better reporting of message buffering
 * CHANGE: The way the routes as-path is printed/parsed (final for the 3.x.x)

Version 3.0.2 - 16 of July 2012 (unreleased experimental version)
 * CHANGE: python2.4 may work but it not supported anymore
 * Fix: as-path decoding issue with as-set being eaten (full rewrite of ASPATH and ASN4 parsing)
    reported by Rishabh Goel
 * Fix: bug with profiling
 * Fix: withdrawal was broken when path-info was added
 * API CHANGE: as-path configurtion syntax (as-sequence removed)
 * CHANGE: restructuration of file hierarchy

Version 3.0.1 - 14 of July 2012 (unreleased experimental version)
 * Improvement: caching of parsed attributes of route received (saving memory and CPU)
 * Improvement: do not generate complex string with packet data if not printed
 * Improvement: all objects are storing data in the wire format when possible
 * Improvement: add AGGREGATOR and AS4_AGGREGATOR support
    requested by: Rishabh Goel <rgoel@internap.com>
 * Improvement: add ATOMIC_AGGREGATE support
    requested by Rishabh Goel
 * Improvement: faster configuration parsing
 * Improvement: bring compatibility mode for option with 2.0.x
 * Improvement: support for RFC 4659 BGP-MPLS IP VPN Extension for IPv6 VPN
 * Fix: harmless bug in the EOR generation
 * Fix: missing family announcement in open when autogenerated with option "all"
 * Fix: silly bug in profiling
 * Fix: clusterid and originator_id were not added to generated routes
 * Fix: were not parsing extended-community in multi-line routes
 * Fix: flow-spec route creation (broken during the work for 3.0.0)
 * Fix: typo when generating route string with labels
 * Fix: problem when forking on BSD/Darwin
 * Change: to ASN4 code

Version 3.0.0 - 13 of July 2012 (unreleased experimental version)
 * Major version change due to incompatible CLI interface with version 1.x.x and 2.x.x
 * Major version change due to a change of API behaviour with the forked worker processes

 * Change : Many printed message have changed, including OPEN MultiProtocol
 * CLI Change: use new ini file and environment values for configuration
 * API Change: send "up" message to worker process when neighbour OPEN negotiation is complete (not on TCP up)
 * API Change: the format of the line sent to the worker changed, neighbor name include multi-session information
 * API Change: the down message sent to help programs now include a reason for the shutdown of the session
 * API Change: use the word withdrawn when the route was received, withdraw when it is an action, same for announce and announced
 * API Addition: send "connected" to worker when neighbour TCP session is established (replace previous 'up')
 * API Addition: requires peer-updates under 'process' to announce peer status changes
 * API Addition: show routes, show routes extensive, show neighbors
 * Fix: were not dropping root privileges correctly
 * Fix: reset counters correctly for number of routes seen (only affects the logs)
 * Fix: prevent 100% CPU usage/loop when trying to read on unreliable links
 * Fix: correctly process IPv6 routes with 32 bytes long next-hop
    reported by Daniel Piekacz (with patch, thank you)
 * Fix: problem on broken pipe with the helper program
 * Fix: correct sending of message to helper program (every worker was getting every peers messages)
 * Fix: if an helper program goes away, do not try to restart the peer (prevent surprises)
 * Fix: problem when writing too fast and causing EGAIN errno failure on the socket (mostly/only on Mac OSX)
    reported by Simon Helson (with patch, thank you)
 * Fix: a nasty bug when dynamic route announcement would not work when no routes were setup
    reported by Tim Gebbett
 * Fix: bad counting of routes parsed (not resetting in some case)
 * Fix: badly printed local-preference when generating route representation
 * Fix: bug when trying to daemonise ExaBGP, caused by unclosed FD
    reported by Ryan Lane (with a patch, thank you)
 * Fix: parse correctly routes with empty AS-SET or AS-SEQUENCE
 * Improvement: hidden option to change BGP select timeout (use at your own risk - do not ask me where it is - it is hidden)
 * Improvement: announce EOR even if Graceful-Restart was not negotiated but only MultiProtocol
 * Improvement: implementation of draft-ietf-idr-bgp-multisession-06
    use capability 131 (and not 68) for multisession to achieve interop with Cisco
 * Improvement: following RFC 6608 new notification codes
 * Improvement: to the logging code and message filtering
 * Improvement: support RFC 3765 (NOPEER community)
 * Improvement: support for draft-ietf-idr-add-paths-07 (even IPv6 even if it is not supported by anyone)
    requested by: Rishabh Goel (Thank you for giving me a BGP session to an XR)
 * Improvement: support for RFC 4456 (BGP Route Reflection: An Alternative to Full Mesh Internal BGP (IBGP))
    more exactly the generation and parsing of originator-id and cluster-list attributes
    requested by Rishabh Goel
 * Improvement: add tcp timeout control for connection over very slow ebgp multihop (dangerous, use with care)
 * Improvement: control of the MP families announced in the OPEN message
 * Improvement: support for RFC 3107 and 4364 (Carrying Label Information in BGP-4)
 * Improvement: selfcheck, allow to check if the routes we generate pass our own parser

Version 2.0.8 - 31 of March 2012 (stable version)
 * Fix: the update grouping could cause message up to "header size" bigger than allowed.
 * Fix: caller script path detection

Version 2.0.7 - 24 of March 2012
 * Fix: debian packaging issue
 * Note: Only released for debian (again :p)

Version 2.0.6 - 28 of Febuary 2012 (stable version)
 * Improvement: update grouping up to 4096 bytes
 * Fix: debian packaging issue

Version 2.0.5 - 10 of Febuary 2012
 * Improvement: allow named community
 * Fix: bad flowspec component size calculation for large flow routes
 * Fix: bad attribute generation for attributes bigger than 256 chars
 * Fix: allows to pass arguments to the helper programs
 * Contribution: route collector utilities from Daniel Piekacz

Version 2.0.4 - 1st of Febuary 2012
 * Fix: sending any signal stoped the program instead of reloading

Version 2.0.3 - 1st of Febuary 2012
 * Improvement: now sending help "neighbor <ip> up" when a neighbor goes up
 * Fix: now sending correctly "neighbor <ip> down" when a neighbor goes down
 * Fix: a bug when parsing "split" configuration
 * Fix: sending routes faster than a router can accept does not cause the BGP session to go down
    problem found by Eric Nghia Nguyen Duy (thank you for giving me access to his lab to fix the issue)
 * Improvement: Buffering message we can not send if sockets return a transient failure
 * Improvement: Limiting how long and how deep the buffer are kept before we kill the session
 * Fix: under load we could receive partial messages, read until we have it all
 * Fix: we were not always sending the 'down' message to handlers
 * Fix: handle signal during select
 * Internal Change: how we read from socket
 * User Change: new DEBUG_CORE option (alias for DEBUG_SUPERVISOR, DEBUG_DAEMON, DEBUG_PROCESS, DEBUG_MESSAGE, DEBUG_TIMER, DEBUG_ROUTE)
 * User Change: DEBUG_ROUTES is deprecated please use DEBUG_ROUTE (2.0.x release with have both values)
 * Improvement: Parsing AS4_PATH message and merging AS_PATH when required
 * Fix: possible problem with session establishment
 * Improvement: extendeded community are available in the configuration file
 * Improvement: printed routes now include extended community information
 * Fix: bad route generation for OLD BGP speakers, previously not including 2 bytes ASN in the AS4_PATH

Version 2.0.2 - 1st of January 2012
 * Copyright: updated all copyright notice (welcome to 2012)
 * Fix : would not daemonise correctly
 * Fix: we were mistakenly not displaying Notify sent on errors
 * Fix: some debian packaging issues
 * Fix: bug when parsing unknown open capability
 * Fix: forgotten to allow some route option on multiline
 * User Change: implemented RFC 6286 BGP Identifier released restrictions
 * Improvment: recognise multisession capability (draft-ietf-idr-bgp-multisession-06)
 * Improvment: allow the configuration of route which will not be announced on configuration reload (to work in conjunction with watchdog)
    requested by Marco d'Itri

Version 2.0.1 - 8th of December 2011
 * Fix : Regression on FlowSpec
 * Fix : interpreter not found on some Linux version
    (issue 3) reported by  Sebastien Luttringer

Version 2.0.0 - 3rd of December 2011 (experimental version)
 * Improvement: can set flowspec communities
    requested by Yiming Gong
 * Improvement: incoming route parsing for processing by an external application
    requested by Daniel Piekacz (and others)
 * Improvment: Add profiling features to find bottlenecks
 * Improvment: Code speedup following profiling
 * Internal Change : lots of folder restructuration
 * Internal Change : all includes now under exabpg and not bgp
 * User Change : move the program from bin to sbin, and renamed it from bgpd to exabgp
 * User Change : configuration folder now called exabgp to match debian package
 * User Change : move all external processes in the exabgp configuration folder

Version 1.3.4 - 21th of September 2011 (stable version)
 * Improvement: added support for asdot/asdot+
    requested by jonlooney (with a patch - thank you)
 * Fix: when the pid file could not be written, the daemon was crashing on exit

Version 1.3.3 - 25th of June 2011
 * Improvement: massive speed improvement when reloading with many routes (60 to 2 seconds with 10k routes)
    reported by Martin Baum (with proof of concept patch)

Version 1.3.2 - 23rd of June 2011
 * Fix bug where we would not wait long enough for OPEN/KEEPALIVE messages on startup
    reported by: Yann Berthier

Version 1.3.1 - 3rd of May 2011
 * Fix bug in configuration parsing introduce just before 1.3.0
 * Improvement: make tcp-server implement all the internal API available

Version 1.3.0 - 2nd of May 2011
 * Improvement: reduce likelyness of route update recalculation causing us to not send keepalive in time
 * Fix: introduced a bug in neighbor printing
 * Fix: we were trying to send a KEEPALIVE after the initial routes, but it was not going
 * Fix: a work around a python bug with TCP was not implemented everywhere
 * Improvement: adding a 'ttl-security' to allow to explicit setup of TCP TTL
 * Improvement: better handling of BGP timer for keepalive
 * Improvement: refuse to run as root, try to run as nobody automatically, uid/gid set to the user defined by env USER otherwise
 * Removed: the old wiki documentation
 * Improvement: Debian Packaging (author and maintainer: Henry-Nicolas Tourneur - thank you)
 * Change: renamed env variable DAEMON to DAEMONIZE (to prevent name clash with Debian)
 * Improvement: added env variable PDB if set the program will call pdb, the python debugger, on program fault
 * Improvement: it is now possible to get some routes withdrawn from an external process (see watchdog example conf.)
    warning: this code is not yet considered production ready, expect some bugs for complex configurations
 * Improvement: it is now possible to modify the configuration without reload from external proccess (see process example conf.)
    warning: this code is not yet considered production ready, expect some bugs for complex configurations
 * Fix: make sure we can setup a session even if no route (ie: AFI/SAFI families for Mulitprotocol) are in the configuration
 * Fix: many small bug fixes, simple code refactorisation, ...

Version 1.2.0 - 25th of January 2011
 * Improvement: Allow to break route in more specific (ie define a /22 and get 4x /24 announced)
                This is useful when blackholing traffic to make sure no routes more specific are received from your network peer/transit
    requested by : Renaud Chaput
 * Improvement: Save the program PID into a file (set the PID= environment value with the file path)
    requested by : Renaud Chaput
 * Improvement: Add syslog support (env SYSLOG= nothing for local syslog, a file name (auto-rotate) or host:<host> for remote syslog)
    requested by : Josh Ward
 * Improvement: Can now daemonise (env DAEMON= detach and send the program in the background)
    requested by : Josh Ward
 * Improvement: Selection of what subsystems to log, more readable logs (well, less unreadeable to be exact)
 * Improvement: Create a new "group" in the configuration to share routes and configuration options between neighbors
    requested by : Multiple people
 * Fix: non detection of MD5 change on configuration reload
 * Improvement: support distutil with a setup.py file for easy installation

Version 1.1.0 - 10th of January 2011
 * Improvement: Tested and completed TCP MD5 signature
    contribution: MD5 TCP code by David Farrar

Version 1.0.4 - 8th of January 2011
 * Improvement: can now toggle debuging using environment values (DEBUG_CONFIGURATION, DEBUG_SUPERVISOR, DEBUG_WIRE)
 * Fix: some change to the AS_PATH generation code (some routers did not accept empty AS_PATH as it was encoded before)
    reported by: R.P. Aditya
 * Fix: some interoperability issue with openbgpd (could not parse their OPEN message)
    (issue 1) reported by Manuel Guesdon
 * Experimental: Some MD5 for Linux (untested - surely not working)

Version 1.0.3 - 6th of January 2011
 * Fix: missing default localpref on IBGP session if not specified on the route
 * Improvement: more verbose messages in case of OPEN negociation issue
 * Fix: typo preventing 4 Bytes ASN to work

Version 1.0.2 - 22nd of October 2010
 * Improvement: only try to generate UPDATE messages if the configuration was changed (save quite some CPU as the algorithm is really naive)
 * Fix : a neighbor configuration change could have been undetected on SIGHUP/SIGALRM
    reported by: Yann Berthier
 * Fix : reloading the configuration did not detect the removed routes
    reported by Renaud Chaput
 * Fix : a bug in the format of the UPDATE for route withdrawal causing Cisco (and not Quagga) to tear the session
    reported by Renaud Chaput

Version 1.0.1 - 7th of September 2010
 * Fixes an issue with some python versions (at least 2.5.2) when sending a large number of routes (several hundred). Some messages could be sent in multiple parts, causing the parser at the other end to barf (Thank you to Renaud Chaput for the bug report)
