Package SSF.OS.BGP4

Provides the core functionality of the Border Gateway Protocol version 4 (BGP-4).


Class Summary
AdjRIBIn One element of the Adj-RIBs-In section of BGP's Routing Information Base.
AdjRIBOut One element of the Adj-RIBs-Out section of BGP's Routing Information Base.
BGPSession The BGP-4 inter-domain routing protocol.
DampInfo Contains route flap damping information about a particular route.
Debug Encapsulates and manages some debugging information and methods which are specific to BGP.
Global Manages options and other parameters which apply globally to all BGP instances (in a simulation).
LocRIB The Loc-RIB section of BGP's Routing Information Base.
Monitor Monitors a BGP instance for events of interest and reports them when they occur.
PeerEntry This class encapsulates the data that a BGP speaker would keep for one of its peers.
RIBElement An element of a RIB.
Route Information describing a single route.
RouteInfo A unit of BGP route information.
RouteInfoIC A unit of BGP route information.
RouteInfoOOC A unit of BGP route information.

Package SSF.OS.BGP4 Description

Provides the core functionality of the Border Gateway Protocol version 4 (BGP-4). This package also contains subpackages which are necessary for the protocol's proper implementation. The reason for subpackaging is primarily for code modularity and readability. The subpackages are:

Three other supplementary subpackages are included to provide support for model experimentation: SSF.OS.BGP4.Players, SSF.OS.BGP4.Widgets, and SSF.OS.BGP4.test.App.

The Border Gateway Protocol is the de facto standard inter-domain routing protocol in today's global Internet. Its purpose is to build up forwarding tables (often incorrectly referred to as "routing tables") to be used by a router when forwarding data packets around an internetwork. It does so in a distributed fashion: all routers running BGP in the entire internetwork share reachability information with each other. When faced with multiple routes to the same destination, a selection is made based on several factors, many of which can be configured by the administrator. Most commonly, shortest autonomous system (AS) path length is the primary factor.

The specifications upon which this implementation is based are given in the Internet Engineering Task Force's Request for Comments number 1771 (RFC 1771), "A Border Gateway Protocol 4". Following are the details of the implementation, including explanations where it differs from this specification.

IBGP/EBGP This implementation simulates both Internal BGP and External BGP. Route reflection--an extension for IBGP--has also been implemented. (See section 9.2.1 of RFC 1771 for a discussion of Internal BGP.)

RIB The Routing Information Base (RIB), which stores route information, is implemented with a type of binary tree called a radix tree (the specification leaves the specific implementation of the RIB up to the implementor). As described in section 3.2 of RFC 1771, there are three sections to the RIB, each of which has been implemented in compliance with the specification.

Messages All message types used by BGP (Open, Update, Notification, and KeepAlive) contain the same fields as given in the specification, with a few exceptions. Fields which specify the length in bytes of a message and any fields used for authentication have been omitted. In addition, no attempt is made to make fields the exact size (in number of bits or bytes) as given in the specification, as these are irrelevant in the simulation. Message-related classes can be found in subpackage SSF.OS.BGP4.Comm, except for TimeoutMessage which is in subpackage SSF.OS.BGP4.Timing.

Error Handling No error handling (as per section 6 of the specification) is implemented. Error handling is typically used for catching syntactical errors in messages.

Update Message Handling The handling of Update messages (the type which carry route information) is fully implemented.

Path Attributes All standard path attributes have been implemented, though some have not been extensively tested. Attribute-related classes can be found in subpackage SSF.OS.BGP4.Path.

Timers All five timers used by BGP are implemented, with time interval defaults as suggested in Appendix section 6.4 of RFC 1771. Timing-related classes can be found in subpackage SSF.OS.BGP4.Timing.

Jitter RFC 1771 requires that three of the timers be jittered (Minimum AS Origination, Keep Alive, and Minimum Route Advertisement--see section Jitter on any or all of them can optionally be switched off.

Finite State Machine The primary behavior of BGP is defined in one method which handles all BGP messages and events (method BGPSession.handle_event()). It reacts to the incoming message/event based on its type and the current state of BGP. From here, some helper methods may be called to manipulate the RIB and to compose and send messages, if necessary.

Route Reflection Route reflection, which is a BGP extension, is fully implemented.

Policy (Route Filtering) This implementation also supports, in addition to the core required behaviors, a policy configuration (route filtering) scheme along the lines of those used by well-known vendors and following the suggestions in RFC 1772. This feature has not yet been exercised as fully as most others, and should be used with care. Policy-related classes can be found in subpackage SSF.OS.BGP4.Policy.

Route Flap Damping Support for route flap damping, as described in RFC 2439 and RIPE 210, is included.

Validation All of the required behaviors of BGP have been implemented to our knowledge, though we are still constantly evaluating and testing it to attempt to verify its correctness. To this end, a series of validation tests have been composed which exercise these required behaviors.

Configuration See distribution file ssfnet/src/SSF/OS/BGP4/doc/index.html.

See Also:
SSF.OS.BGP4.Comm, SSF.OS.BGP4.Path, SSF.OS.BGP4.Players, SSF.OS.BGP4.Policy, SSF.OS.BGP4.Timing, SSF.OS.BGP4.Util, SSF.OS.BGP4.Widgets, SSF.OS.BGP4.test.App