|
|
The XORP BGP is internally implemented as a set of pipelines consisting of a series of BGPRouteTables. Each pipeline receives routes from a BGP peer, stores them, and applies filters to them to modify the routes. Then the pipelines converge on a single decision process, which decides which route wins amongst possible alternative routes. After decision, the winning routes fanout again along a set of pipelines, again being filtered, before being transmitted to peers.
Typically there are two FilterTables for each peer which modify routes passing down the pipeline, one in the input branch from that peer, and one in the output branch to that peer. A FilterTable does not store the routes it modifies, so a CacheTable is placed downstream of a FilterTable to store routes that are modified.
In the current code, a CacheTable isn't strictly necessary, but it simplifies life for all downstream tables, because they know that all routes they receive are stored in stable storage and won't go away without explicit notification.
In the future, it is likely that the CacheTables in the outgoing branches will be removed, as they waste quite a bit of memory for very little gain. However, they have not yet been removed because their internal sanity checks have served as a valuable debugging device to ensure consistency in the messages travelling down the outgoing branches.
CacheTable (string tablename, Safi safi, BGPRouteTable<A> *parent,
const PeerHandler *peer)
| CacheTable |
~CacheTable ()
| ~CacheTable |
int add_route (const InternalMessage<A> &rtmsg,
BGPRouteTable<A> *caller)
| add_route |
Reimplemented from BGPRouteTable.
int replace_route (const InternalMessage<A> &old_rtmsg,
const InternalMessage<A> &new_rtmsg,
BGPRouteTable<A> *caller)
| replace_route |
Reimplemented from BGPRouteTable.
int delete_route (const InternalMessage<A> &rtmsg,
BGPRouteTable<A> *caller)
| delete_route |
Reimplemented from BGPRouteTable.
int push (BGPRouteTable<A> *caller)
| push |
Reimplemented from BGPRouteTable.
int route_dump (const InternalMessage<A> &rtmsg,
BGPRouteTable<A> *caller,
const PeerHandler *dump_peer)
| route_dump |
Reimplemented from BGPRouteTable.
void flush_cache ()
| flush_cache |
const SubnetRoute<A> * lookup_route (const IPNet<A> &net,
uint32_t& genid)
| lookup_route |
[const]
Reimplemented from BGPRouteTable.
void route_used (const SubnetRoute<A>* route, bool in_use)
| route_used |
Reimplemented from BGPRouteTable.
RouteTableType type ()
| type |
[const]
Reimplemented from BGPRouteTable.
string str ()
| str |
[const]
Reimplemented from BGPRouteTable.
bool get_next_message (BGPRouteTable<A> *next_table)
| get_next_message |
Reimplemented from BGPRouteTable.
int route_count ()
| route_count |
[const]
EventLoop& eventloop ()
| eventloop |
[const]