Area Router
| AreaRouter (Ospf<A>& ospf, OspfTypes::AreaID area,
OspfTypes::AreaType area_type)
| AreaRouter |
| bool startup ()
| startup |
Required by the class Subsystem. Called on startup.
Reimplemented from ServiceBase.
| bool shutdown ()
| shutdown |
Required by the class Subsystem. Called on shutdown.
Reimplemented from ServiceBase.
| void add_peer (PeerID peer)
| add_peer |
| void delete_peer (PeerID peer)
| delete_peer |
| bool peer_up (PeerID peer)
| peer_up |
| bool peer_down (PeerID peer)
| peer_down |
| void area_border_router_transition (bool up)
| area_border_router_transition |
Track border router transitions.
Parameters:
| up | true of the router just became an area border router, false if the router was an area border router and is no longer. |
| void change_area_router_type (OspfTypes::AreaType area_type)
| change_area_router_type |
| bool add_virtual_link (OspfTypes::RouterID rid)
| add_virtual_link |
| bool remove_virtual_link (OspfTypes::RouterID rid)
| remove_virtual_link |
Remove a virtual link endpoint.
| void start_virtual_link ()
| start_virtual_link |
Start looking through the list of routers for a virtual link endpoint.
| void check_for_virtual_link (const RouteCmd<Vertex>& rc, Lsa::LsaRef lsar)
| check_for_virtual_link |
Check this node to see if its a virtual link endpoint.
Parameters:
| rc | node under consideration. |
| router | this router's Router-LSA. |
| void end_virtual_link ()
| end_virtual_link |
End looking through the list of routers for a virtual link endpoint.
| bool find_interface_address (Lsa::LsaRef src, Lsa::LsaRef dst,
A& interface)
| find_interface_address |
[const]
Given two LSAs find the interface address of the destination LSA. The source LSA can be a Router-LSA or a Network-LSA the destination LSA must be a Router-LSA.
| bool area_range_add (IPNet<A> net, bool advertise)
| area_range_add |
| bool area_range_delete (IPNet<A> net)
| area_range_delete |
| bool area_range_change_state (IPNet<A> net, bool advertise)
| area_range_change_state |
Change the advertised state of this area.
| bool area_range_covered (IPNet<A> net, bool& advertise)
| area_range_covered |
Is network covered by an area range and if it is should it be advertised.
| bool area_range_covering (IPNet<A> net, IPNet<A>& sumnet)
| area_range_covering |
This network falls in a covered area range, return the covering range.
| bool area_range_configured ()
| area_range_configured |
Does this area have any area ranges configured.
| bool originate_default_route (bool enable)
| originate_default_route |
If this is a "stub" or "nssa" area toggle the sending of a default route.
| bool stub_default_cost (uint32_t cost)
| stub_default_cost |
Set the StubDefaultCost, the default cost sent in a default route in a "stub" or "nssa" area.
| bool summaries (bool enable)
| summaries |
Toggle the sending of summaries into "stub" or "nssa" areas.
| bool get_lsa (const uint32_t index, bool& valid, bool& toohigh, bool& self,
vector<uint8_t>& lsa)
| get_lsa |
get lsa at index if it exists.
| bool new_router_links (PeerID peer, const list<RouterLink>& router_link)
| new_router_links |
| void refresh_router_lsa (bool timer = false)
| refresh_router_lsa |
Refresh Router-LSA.
Cause the generation of a new Router-LSA if necessary.
Parameters:
| timer | true if called by the timer. |
| void summary_announce (OspfTypes::AreaID area, IPNet<A> net,
RouteEntry<A>& rt, bool push)
| summary_announce |
A new route has been added to the routing table it is being presented to this area for possible Summary-LSA generation.
Parameters:
| area | the route came from |
| rt | routing entry. |
| push | true if the routes are arriving as a consquence of calling summary_push() |
| void summary_withdraw (OspfTypes::AreaID area, IPNet<A> net,
RouteEntry<A>& rt)
| summary_withdraw |
A route has been deleted from the routing table. It may previously have caused a Summary-LSA which now needs to be withdrawn.
| bool external_area_type ()
| external_area_type |
[const]
Returns: true if this area should accept an AS-External-LSA or a Type-7-LSA.
| void external_copy_net_nexthop (A,
ASExternalLsa *dst,
ASExternalLsa *src)
| external_copy_net_nexthop |
Copy the net and nexthop information from one AS-External-LSA to another.
The first dummy argument A is to allow template specialisation by address family.
| Lsa::LsaRef external_generate_type7 (Lsa::LsaRef lsar, bool& indb)
| external_generate_type7 |
Given an AS-External-LSA generate a Type-7 LSA.
Parameters:
| indb | if true the Type-7-LSA is already in the database. |
| Lsa::LsaRef external_generate_external (Lsa::LsaRef lsar)
| external_generate_external |
Given a Type-7 LSA generate an AS-External-LSA.
| void external_announce (Lsa::LsaRef lsar, bool push, bool redist)
| external_announce |
An AS-External-LSA being announced either from another area or from the RIB as a redist.
The LSAs should not be scheduled for transmission until the external_shove() is seen. In many cases a number of LSAs may arrive in a single packet, waiting for the external_shove() offers an opportunity for aggregation.
Parameters:
| lsar | the AS-External-LSA |
| push | set to true if the push is a result of an external_push(). |
| redist | true if this LSA was locally generated due to a redistribution. |
| void external_shove ()
| external_shove |
Called to complete a series of calls to external_announce().
| void external_refresh (Lsa::LsaRef lsar)
| external_refresh |
Refresh this LSA either because a timer has expired or because a newer LSA has arrived from another area. In either cause the LSA should already be in this area's database.
| void external_withdraw (Lsa::LsaRef lsar)
| external_withdraw |
An AS-External-LSA being withdrawn either from another area or from the RIB as a redist.
Parameters:
| lsar | the AS-External-LSA |
| bool generate_network_lsa (PeerID peer,
OspfTypes::RouterID link_state_id,
list<OspfTypes::RouterID>& attached_routers,
uint32_t network_mask)
| generate_network_lsa |
Generate a Network-LSA for this peer.
| bool update_network_lsa (PeerID peer,
OspfTypes::RouterID link_state_id,
list<OspfTypes::RouterID>& attached_routers,
uint32_t network_mask)
| update_network_lsa |
Update the Network-LSA for this peer.
| bool withdraw_network_lsa (PeerID peer, OspfTypes::RouterID link_state_id)
| withdraw_network_lsa |
Withdraw the Network-LSA for this peer by prematurely aging.
| void refresh_network_lsa (PeerID peerid, Lsa::LsaRef lsar,
bool timer = false)
| refresh_network_lsa |
Refresh the Network-LSAs.
Parameters:
| peerid | the peer that needs its Network-LSA refreshed. |
| lsar | the Network-LSA itself. |
| timer | is the Network-LSA being refreshed due to the timer firing? |
| void generate_default_route ()
| generate_default_route |
Create an LSA that will be used to announce the default route into "stub" and "nssa" areas.
| bool find_default_route (size_t& index)
| find_default_route |
Find the default route LSA in the database if it exists.
| Lsa::LsaRef _saved_default_route | _saved_default_route |
| void save_default_route ()
| save_default_route |
If the default route LSA is in the database remove it. Typically to stop it being purged when the area type changes or summarisation is disable.
| void restore_default_route ()
| restore_default_route |
If the default route LSA should be in the database put it back. Either from the previously saved or generate a new one if necessary. Typically paired with save_default_route().
| void withdraw_default_route ()
| withdraw_default_route |
Withdraw the default route LSA if it exists. Set the LSA to MaxAge and floods.
| void refresh_default_route ()
| refresh_default_route |
Refresh the default route LSA. Increments the sequence and floods updates the cost if it has changed.
| OspfTypes::AreaType get_area_type ()
| get_area_type |
[const]
Returns: the type of this area.
| uint32_t get_options ()
| get_options |
Get the options that are sent in hello packets, data description packets, LSA headers (OSPFv2), Router-LSAs (OSPFv3) and Network-LSAs (OSPFv3).
| void receive_lsas (PeerID peerid, OspfTypes::NeighbourID nid,
list<Lsa::LsaRef>& lsas,
list<Lsa_header>& direct_ack,
list<Lsa_header>& delayed_ack,
bool backup, bool dr)
| receive_lsas |
Receive LSAs
Parameters:
| peerid | that the LSAs arrived on. |
| nid | neighbourID that the LSAs arrived on. |
| lsas | list of recived lsas. |
| direct_ack | list of direct acks to send in response to the LSA |
| delayed_ack | list of delayed acks to send in response to the LSA |
| backup | true if the receiving interface was in state backup. |
| dr | true if the LSA was received from the designated router. |
| enum LsaSearch { NOMATCH, EQUIVALENT, NEWER, OLDER, } | LsaSearch |
| LsaSearch compare_lsa (const Lsa_header& candidate,
const Lsa_header& current)
| compare_lsa |
[const]
Compare two LSAs.
Parameters:
| candidate | offered LSA |
| current | equivalent to the database copy. |
Returns: LsaSearch that describes the type of match.
| LsaSearch compare_lsa (const Lsa_header&)
| compare_lsa |
[const]
Compare this LSA to
Parameters:
| Lsa_header | that is being sought. |
Returns: LsaSearch that describes the type of match.
| bool newer_lsa (const Lsa_header&)
| newer_lsa |
[const]
Returns: true if this is a newer LSA than we already have.
| bool get_lsas (const list<Ls_request>& requests,
list<Lsa::LsaRef>& lsas)
| get_lsas |
Fetch a list of lsas given a list of requests.
The age fields of the returned LSAs will be correctly set.
Parameters:
| requests | list of requests |
| lsas | list of LSAs |
Returns: True if *all* the requests have been satisfied. If an LSA can not be found False is returned and the state of the lsas list is undefined; hence should not be used.
| DataBaseHandle open_database (bool& empty)
| open_database |
Open database
Used only by the peer to generate the database description packets.
Parameters:
| empty | true if the database is empty. |
Returns: Database Handle
| bool valid_entry_database (size_t index)
| valid_entry_database |
Is this a valid entry to be returned by the database.
This method is for internal use and its use is not recommended.
Returns: true if this entry is valid.
| bool subsequent (DataBaseHandle& dbh)
| subsequent |
Is there another database entry following this one.
This method is for internal use and its use is not recommended.
Returns: true if there is a subsequent entry.
| Lsa::LsaRef get_entry_database (DataBaseHandle& dbh, bool& last)
| get_entry_database |
Next database entry
Parameters:
| last | true if this is the last entry. |
Returns: The next LSA in the database.
| void close_database (DataBaseHandle& dbh)
| close_database |
Close the database
Parameters:
| dbd | Database descriptor |
| void clear_database ()
| clear_database |
| void maxage_type_database (uint16_t type)
| maxage_type_database |
All self originated LSAs of this type MaxAge them.
| bool backbone ()
| backbone |
[const]
| bool backbone (OspfTypes::AreaID area)
| backbone |
[const]
| void testing_print_link_state_database ()
| testing_print_link_state_database |
[const]
| bool testing_replace_router_lsa (Lsa::LsaRef lsar)
| testing_replace_router_lsa |
Testing entry point to add this router Router-LSA to the database replacing the one that is already there.
| bool testing_add_lsa (Lsa::LsaRef lsar)
| testing_add_lsa |
Testing entry point to add an LSA to the database.
| bool testing_delete_lsa (Lsa::LsaRef lsar)
| testing_delete_lsa |
Testing entry point to delete an LSA from the database.
| void testing_routing_total_recompute ()
| testing_routing_total_recompute |
Testing enty point to force a toal routing computation.
| string str ()
| str |