|
|
A cache of next hop information.
BGP requires information regarding resolvabilty and metrics for next hops. This information is known by the RIB. Questions are asked of the RIB and the results are cached here. The RIB notes that questions have been asked and if the state of a next hop changes then this is reported back to BGP. In order to save space the RIB does not record information about each next hop but returns an address/prefix range for which the answer is valid.
Not only can the RIB report changes but can also report that a previous entry is totally invalid. In the case that an entry is invalid all the next hops need to be re-requested.
~NextHopCache ()
| ~NextHopCache |
void add_entry (A addr, A nexthop, int prefix, int real_prefix,
bool resolvable, uint32_t metric = 0)
| add_entry |
Add an entry to our next hop table.
Parameters:
addr | Base address. |
nexthop | Next hop that is being added to the trie. |
prefix | The prefix that is masked with the nexhop. |
real_prefix | The actual prefix that this next hop resolves too. This is only used to match with upcalls from the RIB. |
resolvable | Is this route resolvable. |
metric | If this route is resolvable its metric. |
bool validate_entry (A addr, A nexthop, int prefix, int real_prefix)
| validate_entry |
Validate an entry.
add_entry creates an entry with no nexthop references. The assumption is that a register_nexthop will follow shortly after initial creation. It is possible due to a deregister_nexthop coming in while we are waiting for a response from the RIB that the register_nexthop never happens. This method checks that the specified entry is referenced and if it isn't it is deleted.
Parameters:
addr | Base address. |
nexthop | Next hop that is being added to the trie. |
prefix | The prefix that is masked with the nexhop. |
real_prefix | The actual prefix that this next hop |
Returns: true if the entry is in use.
map <A, int> change_entry (A addr, int real_prefix, uint32_t metric)
| change_entry |
Change an entry in the next hop table.
Parameters:
addr | The base address. |
real_prefix | The actual prefix that this next hop resolves too. This is only used to match with upcalls from the RIB. |
metric | If this route is resolvable its metric. |
Returns: The map of next hops with reference counts that were covered by this entry.
map <A, int> delete_entry (A addr, int prefix)
| delete_entry |
Delete an entry from the nexthop table.
It is a fatal error to attempt to delete an entry that doesn't exist.
Parameters:
addr | Base address that is being removed from the trie. |
prefix | The prefix. |
Returns: The map of next hops with reference counts that were covered by this entry.
bool lookup_by_addr (A addr, int prefix, bool& resolvable,
uint32_t& metric)
| lookup_by_addr |
[const]
Lookup by base address
Parameters:
addr | Base address. |
prefix | Prefix. |
resolvable | Is this route resolvable. |
metric | If this route is resolvable the metric of this route. |
Returns: True if this next hop is found.
bool lookup_by_nexthop (A nexthop, bool& resolvable, uint32_t& metric)
| lookup_by_nexthop |
[const]
Lookup next hop.
Parameters:
nexthop | Next hop. |
resolvable | Is this route resolvable. |
metric | If this route is resolvable the metric of this route. |
Returns: True if this next hop is found.
bool lookup_by_nexthop_without_entry (A nexthop, bool& resolvable,
uint32_t& metric)
| lookup_by_nexthop_without_entry |
[const]
Lookup next hop without entry
This lookup does not require that next hop is already known. That is the next hop is not in _nexthop_references.
Parameters:
nexthop | Next hop. |
resolvable | Is this route resolvable. |
metric | If this route is resolvable the metric of this route. |
Returns: True if this next hop is found.
bool register_nexthop (A nexthop, int ref_cnt_incr = 1)
| register_nexthop |
bool deregister_nexthop (A nexthop, bool& last, A& addr, uint32_t& prefix)
| deregister_nexthop |
Generated by: pavlin on possum.icir.org on Mon Mar 10 19:34:59 2003, using kdoc 2.0a54+XORP. |