|
|
ExternalRoutes (Olsr& olsr, EventLoop& eventloop,
FaceManager& fm, Neighborhood& nh)
| ExternalRoutes |
~ExternalRoutes ()
| ~ExternalRoutes |
FaceManager& face_manager ()
| face_manager |
inline RouteManager* route_manager ()
| route_manager |
inline void set_route_manager (RouteManager* rm)
| set_route_manager |
inline TimeVal get_hna_interval ()
| get_hna_interval |
[const]
void set_hna_interval (const TimeVal& hna_interval)
| set_hna_interval |
Set the HNA send timer.
The timer will only be restarted if previously scheduled. If the period of the HNA broadcasts is changed, a HNA broadcast MAY be scheduled to take place immediately.
Parameters:
hna_interval | the interval between HNA advertisements. |
inline TimeVal get_hna_hold_time ()
| get_hna_hold_time |
[const]
OlsrTypes::ExternalID update_hna_route_in (const IPv4Net& dest,
const IPv4& lasthop,
const uint16_t distance,
const TimeVal& expiry_time,
bool& is_created)
throw(BadExternalRoute) | update_hna_route_in |
Update or create a route entry learned from HNA.
If the origin of the HNA route is not reachable in the OLSR SPT, the route will be rejected; see NOTES. TODO: In future distance may also be treated as an advertised metric.
Parameters:
dest | The destination being updated. |
lasthop | The last-hop to reach the destination. |
distance | the number of hops to reach lasthop. |
expiry_time | The time at which the entry will expire. |
is_created | reference to a boolean which is set to true iff a new entry was created by this method. |
Returns: The ID of the created or updated route entry. @throw BadExternalRoute if the route could not be created.
OlsrTypes::ExternalID add_hna_route_in (const IPv4Net& dest,
const IPv4& lasthop,
const uint16_t distance,
const TimeVal& expiry_time)
throw(BadExternalRoute) | add_hna_route_in |
Create a route entry learned from HNA.
Parameters:
dest | The destination being updated. |
lasthop | The last-hop to reach the destination; usually this is the origin of the route. |
distance | the number of hops to reach lasthop. |
expiry_time | The time at which the entry will expire. |
Returns: The ID of the created route entry. @throw BadExternalRoute if the route could not be created.
bool delete_hna_route_in (OlsrTypes::ExternalID erid)
| delete_hna_route_in |
Delete an HNA learned route entry given its ID.
Parameters:
erid | The ID of the external route to delete. |
Returns: true if the entry was found and deleted.
void clear_hna_routes_in ()
| clear_hna_routes_in |
const ExternalRoute* get_hna_route_in (const IPv4Net& dest,
const IPv4& lasthop)
throw(BadExternalRoute) | get_hna_route_in |
Look up an ExternalRoute learned from HNA, given its origin and destination network prefix.
Parameters:
dest | the destination network prefix. |
lasthop | the origin. |
Returns: pointer to the ExternalRoute. @throw BadExternalRoute if the route could not be found.
OlsrTypes::ExternalID get_hna_route_in_id (const IPv4Net& dest,
const IPv4& lasthop)
throw(BadExternalRoute) | get_hna_route_in_id |
Look up the ID of a learned HNA entry. Both the destination and the OLSR last-hop must be specified to match.
Parameters:
dest | The destination address. |
lasthop | The last-hop advertised for the destination. |
Returns: the ID of the learned external route. @throw BadExternalRoute if the route could not be found.
const ExternalRoute* get_hna_route_in_by_id (
const OlsrTypes::ExternalID erid)
throw(BadExternalRoute) | get_hna_route_in_by_id |
Look up a learned HNA route entry by its ID.
Parameters:
erid | the ID of the learned ExternalRoute. |
Returns: the pointer to the learned ExternalRoute. @throw BadExternalRoute if the route could not be found.
size_t hna_origin_count ()
| hna_origin_count |
[const]
Calculate the number of unique OLSR nodes with HNA entries in this node's HNA learned route database.
Used only by the protocol simulator.
As we don't currently maintain a list of origins for HNA, this is a more computationally expensive invariant than for TC or MID.
Returns: the number of unique origins in the HNA route-in map.
size_t hna_dest_count ()
| hna_dest_count |
[const]
Calculate the number of unique HNA prefixes which have been learned.
Used only by the protocol simulator.
Returns: the number of unique destinations in the HNA route-in map.
inline size_t hna_entry_count ()
| hna_entry_count |
[const]
Returns: the number of entries in the learned HNA route database.
void get_hna_route_in_list (list<OlsrTypes::ExternalID>& hnalist)
| get_hna_route_in_list |
Fill out a list of all the external learned route IDs.
Parameters:
hnalist | the list to fill out. |
bool originate_hna_route_out (const IPv4Net& dest)
throw(BadExternalRoute) | originate_hna_route_out |
Originate an HNA route.
Parameters:
dest | the network for which to originate HNA broadcasts. |
Returns: true if the route was originated successfully. @throw BadExternalRoute if the route could not be originated.
void withdraw_hna_route_out (const IPv4Net& dest)
throw(BadExternalRoute) | withdraw_hna_route_out |
Withdraw an HNA route.
Parameters:
dest | the network to withdraw from HNA broadcasts. @throw BadExternalRoute if no route to the given destination could be found. |
void clear_hna_routes_out ()
| clear_hna_routes_out |
Clear the advertised HNA routes.
OlsrTypes::ExternalID get_hna_route_out_id (const IPv4Net& dest)
throw(BadExternalRoute) | get_hna_route_out_id |
Look up the ID of an originated HNA entry. Both the destination and the OLSR last-hop must be specified to match.
Parameters:
dest | The destination address. |
Returns: the ID of the originated external route. @throw BadExternalRoute if the route could not be found.
void push_external_routes ()
| push_external_routes |
Push candidate HNA routes to the RouteManager.
12.6: The distance to the last-hop, as measured from the HNA message, is used as the current discriminator; this is what's specified in the RFC.
TODO: Deal with the metric here rather than in the RouteManager. For now, RouteManager will invent a metric before plumbing to the RIB.
void start_hna_send_timer ()
| start_hna_send_timer |
void stop_hna_send_timer ()
| stop_hna_send_timer |
void restart_hna_send_timer ()
| restart_hna_send_timer |
void reschedule_hna_send_timer ()
| reschedule_hna_send_timer |
Reschedule the HNA send timer (if the HNA interval has changed).
void reschedule_immediate_hna_send_timer ()
| reschedule_immediate_hna_send_timer |
Schedule the HNA send timer to fire as soon as possible.
bool event_send_hna ()
| event_send_hna |
Callback method to: service the HNA transmission timer. Section 12: Non-OLSR Interfaces.
Flood a HNA message to the rest of the OLSR domain which contains this node's Host and Network Associations.
Returns: true if the callback should be rescheduled, otherwise false.
bool event_receive_hna (Message* msg,
const IPv4& remote_addr,
const IPv4& local_addr)
| event_receive_hna |
Process incoming HNA message. Section 12.5: HNA Message Processing.
Parameters:
msg | the message to process. |
remote_addr | the source address of the Packet containing msg. |
local_addr | the address of the OLSR interface where the Packet containing msg was received. |
Returns: true if msg was consumed by this method, otherwise false.
void event_hna_route_in_expired (const OlsrTypes::ExternalID erid)
| event_hna_route_in_expired |
Callback method to: delete a learned route entry when it expires.
Parameters:
erid | The ID of the external route to delete. |