class TopologyManager

Class which manages topology outside of the one-hop and two-hop neighborhood in the OLSR domain. More...

 
LOGO
 Annotated List  Files  Globals  Hierarchy  Index  Top

Public Methods

Protected Methods


Detailed Description

 TopologyManager (Olsr& olsr, EventLoop& eventloop, FaceManager& fm, Neighborhood& nh)

TopologyManager

 ~TopologyManager ()

~TopologyManager

inline RouteManager*  route_manager ()

route_manager

void  set_route_manager (RouteManager* rm)

set_route_manager

void  update_tc_entry (const IPv4& dest_addr, const IPv4& origin_addr, const uint16_t distance, const uint16_t ansn, const TimeVal& vtime, bool& is_created)
throw(BadTopologyEntry)

update_tc_entry

Update or create a topology entry in the TC database.

Parameters:

dest_addrthe destination of the topology entry.
origin_addrthe origin of the topology entry.
distancethe distance in hops from this node to the origin, calculated from the message hop count.
ansnthe advertised sequence number of the topology entry.
vtimethe time for which this topology entry remains valid.
is_createda boolean which is set to true if a new entry has been created. @throw BadTopologyEntry if the entry could not be created.
OlsrTypes::TopologyID  add_tc_entry (const IPv4& dest_addr, const IPv4& origin_addr, const uint16_t distance, const uint16_t ansn, const TimeVal& expiry_time)
throw(BadTopologyEntry)

add_tc_entry

Add a topology entry to the database.

Parameters:

dest_addrthe destination of the new topology entry.
origin_addrthe origin of the new topology entry.
distancethe distance in hops from this node to the origin, calculated from the message hop count.
ansnthe advertised sequence number of the topology entry.
expiry_timethe time for which this topology entry remains valid.
bool  delete_tc_entry (const OlsrTypes::TopologyID tcid)

delete_tc_entry

Delete a topology entry by ID. It must be removed from last-hop and destination maps.

Parameters:

tcidthe ID of the toplogy entry to delete.

Returns: true if the topology entry was deleted, false if it could not be found.

void  clear_tc_entries ()

clear_tc_entries

Clear the TC database.

bool  apply_tc_ansn (const uint16_t ansn, const IPv4& origin_addr)

apply_tc_ansn

Apply the Advertised Neighbor Sequence Number in the given TC message to the Topology Set. Section 9.5: TC Message Processing, 2-3.

Parameters:

ansnthe ANSN to apply.
origin_addrthe origin of the TC message containing @param ansn

Returns: true if the provided ANSN is valid and has been applied, otherwise false if the message is stale and should be rejected.

OlsrTypes::TopologyID  get_topologyid (const IPv4& dest_addr, const IPv4& lasthop_addr)
throw(BadTopologyEntry)

get_topologyid

Return a topology entry ID given its destination and origin.

Note: This is not declared 'const' due to the undeclared mutability of map::operator[].

Parameters:

dest_addrthe destination of the TC entry to look up.
lasthop_addrthe origin of the TC entry to look up.

Returns: the topology ID. @throw BadTopologyEntry if the entry could not be found.

const TopologyEntry*  get_topology_entry_by_id ( const OlsrTypes::TopologyID tcid)
throw(BadTopologyEntry)

get_topology_entry_by_id

[const]

Get a pointer to a topology entry given its ID.

Used by the XRL layer.

Parameters:

tcidthe ID of the TC entry to look up.

Returns: the MID pointer. @throw BadTopologyEntry if the entry could not be found.

void  get_topology_list (list<OlsrTypes::TopologyID>& tclist)

get_topology_list

[const]

Fill out a list of all topology entry IDs.

Used by the XRL layer.

Parameters:

tclistthe list to fill out.
vector<IPv4>  get_tc_neighbor_set (const IPv4& origin_addr, uint16_t& ansn)
throw(BadTopologyEntry)

get_tc_neighbor_set

Retrieve the Advertised Neighbor Set (ANS) for a given OLSR peer. Typically used by protocol simulator.

Given the address of a node in the topology, retrieve the addresses from all TC entries originated by that node. Assumes that the "all entries for origin have same ANSN" invariant holds.

TODO: Also return the per-link ETX information.

Parameters:

origin_addrthe originating node to look up in the TC database.
ansnthe sequence number of origin_addr's neighbor set. @throw BadTopologyEntry if origin_addr was not found.
uint16_t  get_tc_distance (const IPv4& origin_addr, const IPv4& dest_addr)
throw(BadTopologyEntry)

get_tc_distance

size_t  get_tc_lasthop_count_by_dest (const IPv4& dest_addr)

get_tc_lasthop_count_by_dest

Count the number of TC entries which point to a given destination. Used by protocol simulator.

Parameters:

dest_addrthe TC destination.

Returns: The number of TC entries pointing to dest_addr.

size_t  tc_node_count ()

tc_node_count

[const]

Calculate the number of unique OLSR nodes with TC entries in this node's TC database.

Returns: the number of unique main addresses in the TC lasthop map.

void  update_mid_entry (const IPv4& main_addr, const IPv4& iface_addr, const uint16_t distance, const TimeVal& vtime, bool& is_mid_created)
throw(BadMidEntry)

update_mid_entry

Update a Multiple Interface Declaration (MID) entry.

The entry will be created if it does not exist.

Parameters:

main_addrthe main address of the node originating the MID entry.
iface_addrthe interface address of the MID entry.
distancethe distance in hops of the origin of the MIS message being processed.
vtimethe time for which the MID entry remains valid.
is_mid_createdset to true if a new MID entry was created. @throw BadMidEntry if the entry could not be created or updated.
void  add_mid_entry (const IPv4& main_addr, const IPv4& iface_addr, const uint16_t distance, const TimeVal& vtime)
throw(BadMidEntry)

add_mid_entry

Create a new entry in the MID database.

TODO Find the next available ID if already taken, as the range may recycle quickly in large, dynamically changing topologies.

Parameters:

main_addrthe main address of the node originating the MID entry.
iface_addrthe interface address of the MID entry.
distancethe distance in hops of the origin of the MIS message being processed.
vtimethe time for which the MID entry remains valid. @throw BadMidEntry if the entry could not be created or updated.
bool  delete_mid_entry (const OlsrTypes::MidEntryID mid_id)

delete_mid_entry

Delete a MID entry by ID.

Parameters:

mid_idthe ID of the MID entry to delete.

Returns: true if the MID entry was deleted.

void  clear_mid_entries ()

clear_mid_entries

Clear MID entries.

vector<IPv4>  get_mid_addresses (const IPv4& main_addr)

get_mid_addresses

Given the main address of an OLSR node, return a vector containing all other interface addresses for it, as learned via the MID part of the OLSR protocol.

Parameters:

main_addrthe main address to look up

Returns: a vector of protocol addresses, which may be empty.

uint16_t  get_mid_address_distance (const IPv4& main_addr, const IPv4& iface_addr)
throw(BadMidEntry)

get_mid_address_distance

Look up the most recently seen distance of a MID entry, given its origin and interface address.

Internal method. Stubbed out if DETAILED_DEBUG is not defined.

Parameters:

main_addrthe main address of the OLSR node to look up.
iface_addrthe interface address of the OLSR node to look up. @throw BadMidEntry if the entry could not be found.
IPv4  get_main_addr_of_mid (const IPv4& mid_addr)
throw(BadMidEntry)

get_main_addr_of_mid

Given an address possibly corresponding to a MID entry, return the main address to which it would map.

Used by the protocol simulator. Requires a linear search of MID space, returns first match, there should be no other matches; no invariant.

Parameters:

mid_addrthe interface address to look up.

Returns: the main address of the node with the given interface address. @throw BadMidEntry if mid_addr was not found.

size_t  mid_node_count ()

mid_node_count

[const]

Count the number of unique OLSR main addresses in this node's MID database.

Returns: the number of OLSR main addresses in _mid_addr.

const MidEntry*  get_mid_entry_by_id ( const OlsrTypes::MidEntryID midid)
throw(BadTopologyEntry)

get_mid_entry_by_id

[const]

Get a pointer to a MID entry given its ID.

Used by the XRL layer.

Parameters:

mididthe ID of the MID entry to look up.

Returns: the MID entry pointer. @throw BadTopologyEntry if the entry could not be found.

void  get_mid_list (list<OlsrTypes::MidEntryID>& midlist)

get_mid_list

[const]

Fill out a list of all MID entry IDs.

Used by the XRL layer.

Parameters:

midlistthe list to fill out.
void  push_topology ()

push_topology

Push topology set to the RouteManager for SPT computation. Section 10: Route computation.

In ascending order, we push the rest of the known network topology, starting with the TC entries which would have been originated by two-hop neighbors. If we encounter incomplete TC information for the network topology, that is, there are no known nodes at a particular distance, we stop pushing topology to RouteManager.

TODO: Use ETX measurements for edge choice.

bool  event_receive_tc (Message* msg, const IPv4& remote_addr, const IPv4& local_addr)

event_receive_tc

Callback method to: process an incoming TC message. Section 9.5: TC Message Processing.

Parameters:

msgPointer to a message which is derived from TcMessage.
remote_addrThe source address of the packet containing msg.
local_addrThe address of the interface where this packet was received.

Returns: true if this function consumed msg.

void  event_tc_dead (OlsrTypes::TopologyID tcid)

event_tc_dead

Callback method to: delete an expiring TopologyEntry.

Parameters:

tcidthe ID of the expiring TopologyEntry.
bool  event_receive_mid (Message* msg, const IPv4& remote_addr, const IPv4& local_addr)

event_receive_mid

Callback method to: process an incoming MID message. Section 5.4: MID Message Processing.

Parameters:

msgthe message to process.
remote_addrthe source address of the Packet containing msg
local_addrthe address of the interface where @param msg was received.

Returns: true if this method consumed @param msg

void  event_mid_dead (const OlsrTypes::MidEntryID mid_id)

event_mid_dead

Callback method to: delete a dying MidEntry.

void  update_tc_distance (TopologyEntry* tc, uint16_t distance)

update_tc_distance

[protected]

Internal method to: update a TC entry's distance.

It is necessary to maintain an insertion sort collation order in the TcDistanceMap as it is used for route calculation.

Parameters:

tcpointer to the TopologyEntry to update.
distancethe new distance of the TopologyEntry.
void  assert_tc_distance_is_unique (const OlsrTypes::TopologyID tcid)
throw(BadTopologyEntry)

assert_tc_distance_is_unique

[protected]

Internal method to: assert that a TC's distance is unique.

Verify that the given TopologyID appears once, and only once, in the _tc_distances array used for route computation. Stubbed out if DETAILED_DEBUG is not defined.

Parameters:

tcidthe topology entry ID to verify. @throw BadTopologyEntry if tcid appears more than once in _tc_distances.
void  assert_tc_ansn_is_identical (const IPv4& origin_addr)
throw(BadTopologyEntry)

assert_tc_ansn_is_identical

[protected]

Internal method to: assert that the ANSNs for all TC entries originated by the node origin_addr are identical.

A full linear search of the TC record space is performed. Stubbed out if DETAILED_DEBUG is not defined.

TODO: Eliminate this function by refactoring the data structures; we SHOULD be able to check if the last ANSN from origin was empty, currently we don't do that.

Parameters:

origin_addrthe node for which to verify the ANSNs. @throw BadTopologyEntry if the ANSNs for origin_addr are not identical.

Generated by: bms on anglepoise.lon.incunabulum.net on Wed Jul 23 10:06:13 2008, using kdoc 2.0a54+XORP.