class RegisterTable

RouteTable which stores routing protocols' registration of interest in changes to certain routes. More...

Definition#include <rt_tab_register.hh>
Template formRegisterTable<class A>
InheritsRouteTable [public ]
List of all Methods
Annotated List
Files
Globals
Hierarchy
Index

Public Methods


Detailed Description

RegisterTable is a RouteTable that is plumbed into the RIB after all the MergedTable and ExtIntTable instances, but before the ExportTable. Thus it seems all winning route updates that will be propagated to the forwarding engine.

It's purpose is to track route changes that affect specific addresses in which routing protocols have expressed an interest, and to notify these routing protocols of any changes.

 RegisterTable (const string& tablename, RegisterServer *rs, bool mcast)

RegisterTable

RegisterTable constructor

Unlike other RouteTable constructors, this doesn't plumb itself into the table graph because it is set up before any origin tables, so it doesn't yet have a parent. RIB::initialize_register will do the plumbing later on.

Parameters:
tablenamehuman-readable name for this table for debugging purposes.
rspointer to the RIB's RegisterServer instance. The RegisterServer handles IPC requests and responses related to registration of interest.
mcastindicates whether or not this RegisterTable is in a multicast RIB. The information is needed when notifying a routing protocol of a change, because the same route might be in both unicast and multicast RIBs.

 ~RegisterTable ()

~RegisterTable

RegisterTable destructor

int  add_route (const IPRouteEntry<A>& route, RouteTable<A>* caller)

add_route

Add a new route to the RIB. This will be propagated downstream to the next table, but may also cause the RegisterTable to invalidate a RouteRegister because the new route overlaps an existing registration.

Parameters:
routethe new route.
callerthis must be this table's parent table.

Reimplemented from RouteTable.

int  delete_route (const IPRouteEntry<A>* , RouteTable<A>* caller)

delete_route

Delete a route from the RIB. This will be propagated downstream to the next table, but may also cause the RegisterTable to invalidate a RouteRegister referencing this route.

Parameters:
routethe route being deleted.
callerthis must be this table's parent table.

Reimplemented from RouteTable.

const IPRouteEntry<A>*  lookup_route (const IPNet<A>& net)

lookup_route

[const]

Lookup a route in the RIB. This request will be propagated to the parent table unchanged.

Reimplemented from RouteTable.

const IPRouteEntry<A>*  lookup_route (const A &addr)

lookup_route

[const]

Lookup a route in the RIB. This request will be propagated to the parent table unchanged.

Reimplemented from RouteTable.

RouteRange<A>*  lookup_route_range (const A &addr)

lookup_route_range

[const]

Lookup a route_range in the RIB. This request will be propagated to the parent table unchanged. It is not expected this will be called, but not prohibited.

Reimplemented from RouteTable.

void  replumb (RouteTable<A>* old_parent, RouteTable<A>* new_parent)

replumb

replumb to replace the old parent of this table with a new parent

Parameters:
old_parentthe parent RouteTable being replaced (must be the same as the existing parent)
new_parentthe new parent RouteTable

Reimplemented from RouteTable.

RouteTable<A>*  parent ()

parent

Returns: the parent RouteTable of this RegisterTable

Reimplemented from RouteTable.

string  str ()

str

[const]

Returns: this RegisterTable as a string for debugging purposes

Reimplemented from RouteTable.

void  print ()

print

print the contents of this RegisterTable as a string for debugging purposes

RouteRegister<A>*  register_route_range (const A &addr, const string &module)

register_route_range

register_route_range is called to register interest in routing changes that affect a specific IP address.

Parameters:
addrthe IP address of interest.
modulethe XRL target name of the module (typically a routing protocol) that is interested in being notified about changes to this address.

Returns: a RouteRegister instance detailing the route that is currently being used to route packets to this address and the subset of this route (including the address of interest) for which this answer also applies.

bool  deregister_route_range (const IPNet<A> subnet, const string &module)

deregister_route_range

deregister_route_range is called to de-register interest in routing changes following a prior call to register_route_range.

Parameters:
valid_subnetthe subnet of validity from the RouteRegister returned by a prior call to register_route_range.
modulethe XRL target name of the module that is no longer interested in being notified.

Returns: bool true if the registration was found and removed, false otherwise.

int  type ()

type

[const]

Returns: REGISTER_TABLE

Reimplemented from RouteTable.

void  flush ()

flush

Cause the register server to push out queued changes to the routing protocols.

Reimplemented from RouteTable.


Generated by: pavlin on possum.icir.org on Wed Dec 11 16:51:00 2002, using kdoc 2.0a54+XORP.