RIB is the master class for a Routing Information Base. It holds the Vif table, routing tables for each protocol, etc. Typically we would have one RIB for IPv4 unicast, one for IPv4 multicast topology, one for IPv6 unicast and one for IPv6 multicast.
Note that the XRL commands assume some level of filtering has already taken place to route to command to the right RIB.
RIB (RibTransportType rib_type, RibManager& rib_manager,
EventLoop& eventloop)
| RIB |
RIB Constructor.
Parameters:
rib_type | indicates whether this RIB holds UNICAST or MULTICAST routing information. In the case of multicast, this is the topology information, not the forwarding information. |
rib_manager | the main RIB manager process holding stuff that's common to all the individual RIBs. |
eventloop | the main event loop. |
~RIB ()
| ~RIB |
[virtual]
void set_errors_are_fatal ()
| set_errors_are_fatal |
Set test-mode: abort on some errors that we'd normally mask.
void initialize (RegisterServer& register_server)
| initialize |
Initialize the RIB. Note that it is an error to initialize the table twice.
Parameters:
register_server | the RegisterServer to initialize the Rib with. |
int initialize_redist_all (const string& all)
| initialize_redist_all |
Initialize the RIB's RedistTable at the end so that the winning routes are exported to the RIB clients (e.g., the FEA). Note that it is an error to initialize the table twice.
Parameters:
all | a keyword string which can be used by RIB clients to register with the RIB to receive the winning routes from the RedistTable. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
See also: RedistTable
int initialize_policy_redist ()
| initialize_policy_redist |
Initialize the RIB's PolicyRedistTable. The PolicyRedistTable enables route redistribution according to policy configuration. Based on the policy tags of routes passing through this table, a redistribution request is sent to the relevant protocols. If routes are being deleted, protocols are informed to stop advertising the route.
int initialize_register (RegisterServer& register_server)
| initialize_register |
Initialize the RIB's RegisterTable. The RegisterTable allows routing protocols such as BGP to register interest in routing information that affects specfic addresses. Note that it is an error to initialize the table twice.
Parameters:
register_server | the RegisterServer to initialize the Rib with. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int new_origin_table (const string& tablename,
const string& target_class,
const string& target_instance,
uint32_t admin_distance,
ProtocolType protocol_type)
| new_origin_table |
Add a new OriginTable. Use is deprecated, except in test suites.
Parameters:
tablename | human-readable name for this table to help in debugging. |
target_class | the XRL target class of the routing protocol that will supply routes to this OriginTable. |
target_instance | the XRL target instance of the routing protocol that will supply routes to this OriginTable. |
admin_distance | default administrative distance to be applied to routes that enter the RIB through this OriginTable. |
protocol_type | the routing protocol type (ProtocolType). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
See also: OriginTable
int new_vif (const string& vifname, const Vif& vif)
| new_vif |
[virtual]
Inform the RIB about the existence of a Virtual Interface. Note that it is an error to add twice a vif with the same vifname.
Parameters:
vifname | the name of the VIF, as understood by the FEA. |
vif | Vif class instance giving the information about this vif. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
See also: Vif
int delete_vif (const string& vifname)
| delete_vif |
[virtual]
Inform the RIB that a VIF no longer exists.
Parameters:
vifname | the name of the VIF, as previously indicated by new_vif. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int set_vif_flags (const string& vifname,
bool is_p2p,
bool is_loopback,
bool is_multicast,
bool is_broadcast,
bool is_up)
| set_vif_flags |
[virtual]
Set the vif flags of a configured vif.
Parameters:
vifname | the name of the vif. |
is_pim_register | true if the vif is a PIM Register interface. |
is_p2p | true if the vif is point-to-point interface. |
is_loopback | true if the vif is a loopback interface. |
is_multicast | true if the vif is multicast capable. |
is_broadcast | true if the vif is broadcast capable. |
is_up | true if the underlying vif is UP. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int add_vif_address (const string& vifname,
const A& addr,
const IPNet<A>& subnet,
const A& broadcast_addr,
const A& peer_addr)
| add_vif_address |
[virtual]
Add an address and subnet to a existing VIF. Each VIF may have multiple addresses and associated subnets.
Parameters:
vifname | the name of the VIF the address will be added to. |
addr | the address to be added. This must be one of the addresses of this router. |
subnet | the subnet that is connected to this VIF corresponding to the address addr. |
broadcast | the broadcast address to add. In case of IPv6 this address is ignored. |
peer | the peer address to add. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int delete_vif_address (const string& vifname, const A& addr)
| delete_vif_address |
[virtual]
Remove an address and the associated subnet from an existing VIF.
Parameters:
vifname | the name of the VIF the address will be removed from. |
addr | the address to be removed. This must be an address previously added by add_vif_address. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int add_route (const string& tablename,
const IPNet<A>& net,
const A& nexthop_addr,
const string& ifname,
const string& vifname,
uint32_t metric,
const PolicyTags& policytags)
| add_route |
[virtual]
Add a route via the OriginTable called tablename.
Parameters:
tablename | the name of the OriginTable into which the route should be inserted. |
net | the subnet (address and prefix length) of the route. |
nexthop_addr | the nexthop that packets destined for net should be forwarded to. |
ifname | the name of the physical interface toward the destination. If an empty string the interface will be chosen by RIB. |
vifname | the name of the virtual interface toward the destination. If an empty string the interface will be chosen by RIB. |
metric | the routing protocol metric associated with this route. |
policytags | the policy-tags for this route. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int replace_route (const string& tablename,
const IPNet<A>& net,
const A& nexthop_addr,
const string& ifname,
const string& vifname,
uint32_t metric,
const PolicyTags& policytags)
| replace_route |
[virtual]
Replace an existing route via the OriginTable called tablename.
Parameters:
tablename | the name of the OriginTable in which the route should be replaced. |
net | the subnet (address and prefix length) of the route. |
nexthop_addr | the new nexthop that packets destined for net should be forwarded to. |
ifname | the name of the physical interface toward the destination. If an empty string the interface will be chosen by RIB. |
vifname | the name of the virtual interface toward the destination. If an empty string the interface will be chosen by RIB. |
metric | the new routing protocol metric associated with this |
policytags | the policy-tags for this route. route. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int verify_route (const A& lookupaddr,
const string& ifname,
const A& nexthop_addr,
uint32_t metric,
RibVerifyType matchtype)
| verify_route |
[virtual]
Verify the result of a route lookup in the RIB matches the parameters we expect. Intended for testing purposes only.
Parameters:
lookupaddr | the destination to be verified. |
nexthop_addr | the expected next hop address. |
ifname | the expected interface. |
metric | the expected routing protocol metric. |
type | the expected type of match. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int delete_route (const string& tablename,
const IPNet<A>& subnet)
| delete_route |
[virtual]
Delete an existing route via the OriginTable called tablename.
Parameters:
tablename | the name of the OriginTable in which the route should be deleted. |
subnet | the subnet (address and prefix length) of the route to be deleted. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
const A& lookup_route (const A& lookupaddr)
| lookup_route |
[virtual]
Lookup an address in the RIB to determine the nexthop router to which packets for this address will be forwarded.
Parameters:
lookupaddr | the address to be looked up. |
Returns: pointer to address of next hop for lookupaddr if available, otherwise A::ZERO().
RouteRange<A>* route_range_lookup (const A& lookupaddr)
| route_range_lookup |
[virtual]
RouteRegister<A>* route_register (const A& lookupaddr,
const string& module)
| route_register |
[virtual]
Register interest in being notified about all changes to routing information that would affect traffic destined for a particular address.
Parameters:
lookupaddr | the address to register interest in. |
module | the XRL module name to which notifications of changes should be sent. |
int route_deregister (const IPNet<A>& subnet, const string& module)
| route_deregister |
[virtual]
De-register interest in being notified about all changes to routing information for a particular address.
Parameters:
lookupaddr | the address to de-register interest in. |
module | the XRL module name to which notifications of changes should no longer be sent. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
See also: route_register
Protocol* find_protocol (const string& protocol)
| find_protocol |
Find a routing protocol, given its protocol name.
Parameters:
protocol | the name of the table to search for. |
Returns: pointer to table if exists, NULL otherwise.
RedistTable<A>* protocol_redist_table (const string& protocol)
| protocol_redist_table |
Get route redistribution table for specified routing protocol.
int add_igp_table (const string& tablename,
const string& target_class,
const string& target_instance)
| add_igp_table |
[virtual]
Create the OriginTable for an IGP protocol and plumb it into the RIB. Typically this will be called when a new instance of an IGP routing protocol such as OSPF starts up.
Parameters:
tablename | the routing protocol name. This should be one of the list of names the RIB knows about, or the incorrect default administrative distance will be applied. |
target_class | the XRL target class of the routing protocol that will supply routes to this OriginTable. |
target_instance | the XRL target instance of the routing protocol that will supply routes to this OriginTable. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int delete_igp_table (const string& tablename,
const string& target_class,
const string& target_instance)
| delete_igp_table |
[virtual]
Delete the OriginTable for an IGP protocol and unplumb it from the RIB. Typically this will be called when an instance of an IGP routing protocol such as OSPF exits.
Parameters:
tablename | the routing protocol name, previously registered using add_igp_table. |
target_class | the XRL target class of the routing protocol that supplied routes to this OriginTable. |
target_instance | the XRL target instance of the routing protocol that supplied routes to this OriginTable. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int add_egp_table (const string& tablename,
const string& target_class,
const string& target_instance)
| add_egp_table |
[virtual]
Create the OriginTable for an EGP protocol and plumb it into the RIB. Typically this will be called when a new instance of an EGP routing protocol such as EBGP or IBGP starts up. Note that EBGP and IBGP should register separately.
Parameters:
tablename | the routing protocol name. This should be one of the list of names the RIB knows about, or the incorrect default administrative distance will be applied. |
target_class | the XRL target class of the routing protocol that will supply routes to this OriginTable. |
target_instance | the XRL target instance of the routing protocol that will supply routes to this OriginTable. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int delete_egp_table (const string& tablename,
const string& target_class,
const string& target_instance)
| delete_egp_table |
[virtual]
Delete the OriginTable for an EGP protocol and unplumb it from the RIB. Typically this will be called when an instance of an EGP routing protocol such as BGP exits.
Parameters:
tablename | the routing protocol name, previously registered using add_igp_table. |
target_class | the XRL target class of the routing protocol that supplied routes to this OriginTable. |
target_instance | the XRL target instance of the routing protocol that supplied routes to this OriginTable. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
void target_death (const string& target_class,
const string& target_instance)
| target_death |
An XRL Target died. We need to check if it's a routing protocol, and if it was, clean up after it.
Parameters:
target_class | the XRL Class of the target that died. |
target_instance | the XRL Class Instance of the target that died. |
void print_rib ()
| print_rib |
[const]
Print the RIB structure for debugging
string name ()
| name |
[const]
void push_routes ()
| push_routes |
Push routes through policy filters for re-filtering.
RibManager& _rib_manager | _rib_manager |
[protected]
EventLoop& _eventloop | _eventloop |
[protected]
RouteTable<A>* _final_table | _final_table |
[protected]
RegisterTable<A>* _register_table | _register_table |
[protected]
bool _multicast | _multicast |
[protected]
bool _errors_are_fatal | _errors_are_fatal |
[protected]
PolicyRedistTable<A>* _policy_redist_table | _policy_redist_table |
[protected]
list<RouteTable<A>* > _tables | _tables |
[protected]
map<string, Protocol* > _protocols | _protocols |
[protected]
map<string, OriginTable<A>* > _routing_protocol_instances | _routing_protocol_instances |
[protected]
map<string, Vif> _vifs | _vifs |
[protected]
map<string, uint32_t> _admin_distances | _admin_distances |
[protected]
map<A, IPExternalNextHop<A> > _external_nexthops | _external_nexthops |
[protected]
map<A, IPPeerNextHop<A> > _peer_nexthops | _peer_nexthops |
[protected]