File Release Notes and Changelog
Notes:
bgpd.pl
Version 0.07, 6/8/2003
Copyright (C)2001, 2002, 2003 Steven Hessing (steven@xs4all.nl)
See the file LICENSE for licensing details.
bgpd.pl is a partial implementation of the BGP protocol (RFC1771) written in
perl. It has been designed as a module to be used in other applications
and as tool to monitor BGP routing updates and collect all kinds of statistics.
bgpd.pl is NOT written to be used as a BGP router in an operational network,
in fact is has no support to propogate routing information because there is
no code to send BGP UPDATE messages. bgpd.pl also does not touch the routing
table of the host it runs on.
This 0.07 release is a bug fix release. Please see the CHANGES file for details.
LIMITATIONS:
With the constraints described in the above text, the software supports the
following RFCs to the extend indicated:
RFC1771 - Border Gateway Protocol version 4
adj-RIB-out not maintained, no outgoing BGP UPDATE messages, BGP TCP sessions
are not initiated. No Finite State Machine support.
RFC1863 - BGP Route Server
Route Server client behaviour is supported.
RFC1997 - BGP Communities attribute
supported
RFC2385 - Protection of BGP Sessions via the TCP MD5 Signature Option
not supported
RFC2439 - BGP Route Flap Damping
not supported, not needed because we don't send out UPDATES
RFC2545 - Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
not supported
RFC2547 - BGP/MPLS VPNs
not supported
RFC2796 - BGP Route reflection
supported
RFC2842 - Capabilities Advertisement with BGP-4
We don't follow this RFC when a neighbor doesn't support a capability that
we do. We keep announcing the same set of capabilities.
RFC2858 - Multiprotocol Extensions for BGP-4
almost no support. We recognise the RFC2842-capability announcement
RFC2918 - Route refresh capability for BGP-4
supported
RFC3065 - Autonomous System Confederations for BGP
supported
The following RFC drafts are not yet supported:
draft-ietf-id-bgp4-12
draft-ietf-id-route-filter-03
draft-ietf-id-restart-00
draft-ietf-id-as4bytes-01
draft-ietf-id-route-oscillation-00
Multiprotocol support:
Although the MP capability is accepted and announced in the BGP OPEN message,
all MP path attributes in BGP UPDATE messages are silently ignored. There is
no support for the MPLS/BGP VPN application or IPv6. This is planned for
future releases.
DOWNLOAD:
bgpd.pl has its own project on sourceforge.net:
http://sourceforge.net/projects/bgpd/
INSTALLATION:
- download and install Net::Patricia from
http://net.doit.wisc.edu/~plonka/Net-Patricia/
- cd <parent-dir>; tar zxvf bgpd.pl-0.05.tar.gz
CONFIGURATION:
There is a `bgpd.conf' configuration file. It accepts three types of commands:
router bgp <as> # this is your own AS number
router-id <a.b.c.d> # The ip address of your BGP router
# the default is the address retuned by
# gethostbyname()
neighbor <a.b.c.d> remote-as <as> # IP address & AS of neighbor
USAGE:
- cd into the bgpd.pl-0.07 directory
- `su' to root
- ./bgpd.pl [--log [syslog|file|stdout] ] [ --daemon]
[ --config <config file> ]
- There are many logging levels, read the `LOGGING' file. If you enable full
logging then prepare for a lot of logging information! For a full BGP table
you'll get log file that will easily grow beyond 200MB
- set up a BGP session from your router to the host on which you run bgpd.pl
If you use a private AS then don't forget to enable eBGP multihop on your
router, if necessary. If you prefer to use iBGP then I would suggest
configuring your router as a route reflector for this BGP connection.
- You can send the bgpd.pl process a USR1 signal to get a dump of the routing
table or USR2 to get a dump of the state of the BGP neighbors
MAILING-LIST:
You can subscribe to bgpd-users-request@lists.sourceforge.net, put in the
body of the message the word `subscribe'
SECURITY CONSIDERATIONS:
- connecting this beta software which has undergone limited testing
to your production network can result in considerable damage to your
network! Use this software at your own risk!
- this software runs as root because it needs to connect to the TCP/BGP port.
The code does not switch back to a regular UID yet. It opens a logfile
for writing in the current working directory under the name bgpd.log. Make
sure that this is not a (sym-) link!
INTEROPERABILITY:
- bgpd.pl has succesfully maintained BGP sessions with:
- Zebra 0.91A
- Cisco IOS ios 12.0(14)S2 running on a Cisco 7206
Changes:
RELEASE bgpd.pl-0.07 released on June 8th 2003
- Removed unpack for the ORIGNATOR_ID path attribute, the value should be
stored in network byte order (Report by Terra,
mlists-bgpd-pl@FutureQuest.net), the same bug occurs in the code for the
AGGREGATOR and ADVERTISER path attributes
RELEASE bgpd.pl-0.06 released on October 1st 2002
- Fixes provided by Andrew of Supernews <andrew@supernews.net> for the
route selection algorithm used to select for a route announced by two or
more peers.
RELEASE bgpd.pl-0.05 released on June 20th 2002
- Fixes provided Andrew of Supernews <andrew@supernews.net> His coments
included below:
--------------------
- (critical) the logic of BGP::Neighbor::receive was completely wrong,
leading to failure of the session (and many perl warnings) any time
that the data returned from sysread() was shorter than expected,
which is something that TCP-based applications must _always_ expect
and handle.
- (annoying) router-id in the config file didn't work at all
- (serious) updates where the AS-PATH was present but empty (which is
normal for local routes from iBGP peers) were treated as though
the AS-PATH were missing (killing the session)
- (trivial) changed the dump output format to eliminate whitespace in
the prefix output for prefixes smaller than /10
- (performance) most of the time taken to take in a full routing table
was being eaten by BGP::Neighbor::log due to doing significant
processing before checking the log level. The change I did results in
about a 2x speedup with most logging turned off
I also changed the logfile open to use append mode, not really a bug
but probably more useful in most cases.
Stuff I didn't fix: your daemonize function uses a method that would
have been archaic 10 years ago, and closing stdin/out/err without
reopening them again is a dangerous practice. Check out
POSIX::setsid. (I'm not currently using daemon mode for various
reasons)
-------------------
RELEASE bgpd.pl-0.04 released on December 9th 2001
- fixed bug in AdjRibIn.pm where `!=' was used to compare packed IP addresses.
- fixed bug Neighbor.pm where UPDATES with unfeasable routes would not
have their new routes processed
- fixed bug Neighbor.pm where the closure of a BGP session would not
undefine the filehandle, causing errors in socket processing
- fixed & redesigned logging
RELEASE bgpd.pl-0.03 released on June 21th 2001
beta4:
- get rid of logging.pm, have logging functions in BGP and Neighbor modules
beta3:
- create BGP::Neighbor module, there is now a BGP::Neighbor object
- create BGP module, there is now a BGP object
- made PathAttribute module, there is now a PathAttribute object
beta2:
- oob'd %conf (although it is not an object yet),
two new elements:$conf{adjRIBin} & $conf{localRIB}
- added configuration file support. Neighbors need to be defined in this file
otherwise incoming BGP sessions are not accepted.
- the routing table dump is now generated after a USR1 signal vs the HUP signal
- an overview of the configured BGP sessions can be generated with SIGUSR2
- fixed a bug where route aggregation was going a bit too automagically :-)
beta1:
- prefixes in adj-RIB-in now reference a Path Attribute hash. This
hash is referenced by multiple prefixes if these prefixes are send in one
BGP UPDATE message. This should significantly reduce memory consumption.
RELEASE bgpd.pl-0.02 releases on May 2nd 2001
- fixed LOCAL_PREF handling for BGP UPDATE messages
(bug report by Matthias Cramer <cramer@dolphins.ch>)
RELEASE bgpd.pl-0.01 released on April 23rd 2001