|
|
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.
DecisionTable is a BGPRouteTable which performs this decision process. It has many upstream BGPRouteTables and a single downstream BGPRouteTable. Only the winning routes according to the BGP decision process are propagated downstream.
When a new route reaches DecisionTable from one peer, we must lookup that route in all the other upstream branches to see if this route wins, or even if it doesn't win, if it causes a change of winning route. Similarly for route deletions coming from a peer, etc.
DecisionTable (string tablename,
Safi safi,
NextHopResolver<A>& next_hop_resolver)
| DecisionTable |
~DecisionTable ()
| ~DecisionTable |
int add_parent (BGPRouteTable<A> *parent,
PeerHandler *peer_handler,
uint32_t genid)
| add_parent |
int remove_parent (BGPRouteTable<A> *parent)
| remove_parent |
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 route_dump (const InternalMessage<A> &rtmsg,
BGPRouteTable<A> *caller,
const PeerHandler *peer)
| route_dump |
Reimplemented from BGPRouteTable.
int push (BGPRouteTable<A> *caller)
| push |
Reimplemented from BGPRouteTable.
const SubnetRoute<A> * lookup_route (const IPNet<A> &net,
uint32_t& genid)
| lookup_route |
[const]
Reimplemented from BGPRouteTable.
BGPRouteTable<A> * parent ()
| parent |
Reimplemented from BGPRouteTable.
RouteTableType type ()
| type |
[const]
Reimplemented from BGPRouteTable.
string str ()
| str |
[const]
Reimplemented from BGPRouteTable.
bool get_next_message (BGPRouteTable<A> *)
| get_next_message |
Reimplemented from BGPRouteTable.
bool dump_next_route (DumpIterator<A>& dump_iter)
| dump_next_route |
Reimplemented from BGPRouteTable.
void igp_nexthop_changed (const A& bgp_nexthop)
| igp_nexthop_changed |
[virtual]
Notification that the status of this next hop has changed.
Parameters:
bgp_nexthop | The next hop that has changed. |
Reimplemented from BGPRouteTable.
void peering_went_down (const PeerHandler *peer, uint32_t genid,
BGPRouteTable<A> *caller)
| peering_went_down |
Reimplemented from BGPRouteTable.
void peering_down_complete (const PeerHandler *peer, uint32_t genid,
BGPRouteTable<A> *caller)
| peering_down_complete |
Reimplemented from BGPRouteTable.
void peering_came_up (const PeerHandler *peer, uint32_t genid,
BGPRouteTable<A> *caller)
| peering_came_up |
Reimplemented from BGPRouteTable.