22. Routing and route maintenance
22.1. Overview
The ROUTING and ROUTE_MAINTENANCE services work closely to provide multi-hop communications. The ROUTING serice provider is responsible for maintaining a routing table, and for routing datagrams according to the table. The ROUTE_MAINTENANCE service provider, on the other hand, is responsible for discovering new routes and providing updated routing information to the ROUTING service provider.
If a network only requires static routes, the ROUTING service provider is sufficient to provide the functionality. In case of networks with dynamic route discovery, a ROUTE_MAINTENANCE service provider discovers routes (or route changes) and publishes
RouteDiscoveryNtf
messages. The ROUTING service provider subscribes to these messages and updates its routing tables.
The ROUTING service provider also typically listens for
LinkStatusNtf
messages from the LINK service agents. These messages allow it to keep track of link availability and link quality.
Both ROUTING and ROUTE_MAINTENANCE services are described below.
22.2. Routing service
org.arl.unet.Services.ROUTING
Agents offering the ROUTING service provide multi-hop communication.
All agents supporting the ROUTING service must also support the DATAGRAM service ( Chapter 14 ).
It is recommended that agents offering the ROUTING service provide reliability, when requested. Agents that are able to provide reliability, do so by advertising the DATAGRAM service capability RELIABILITY.
22.2.1. Messages
Agents providing the ROUTING service support the following messages:
-
GetRouteReq
⇒RouteRsp
/AGREE
/REFUSE
— find route or a list of routes -
EditRouteReq
⇒AGREE
/REFUSE
— add, delete or change routing table entry -
RouteChangeNtf
— sent to agent’s topic when a routing table entry is added, removed or changed
The
GetRouteReq
message may be used to request a single route (
all = false
), or a list of routes (
all = true
). When a single route is requested, the response is either a
RouteRsp
(with route information) or a
REFUSE
(if no route available). When multiple routes are requested, the response is a series of
RouteRsp
messages, followed by an
AGREE
message to indicate end of the list. If no routes available, a
REFUSE
message is sent back instead of the
AGREE
message.
While the above messages may be used programmatically to manipulate the routing table, typically users interact with the router via the shell commands described in Chapter 6 and Section 22.4 below.
22.3. Route maintenance service
org.arl.unet.Services.ROUTE_MAINTENANCE
Agents offering the ROUTE_MAINTENANCE service generate
RouteDiscoveryNtf
messages to allow ROUTING service providers to maintain routing tables.
22.3.1. Messages
Agents providing the ROUTE_MAINTENANCE service support the following messages:
-
RouteDiscoveryReq
⇒AGREE
/REFUSE
/FAILURE
— start route discovery to a specified node -
RouteTraceReq
⇒AGREE
/REFUSE
/FAILURE
— trace current route to a specified node -
RouteDiscoveryNtf
— sent to the agent’s topic when a route is discovered -
RouteTraceNtf
— sent to requestor when a requested trace is successfully completed
22.4. Router and the route discovery protocol
The
Router
class (agent name
router
) provides the ROUTING service in the standard stack. Apart from supporting the
routes
,
addroute
,
delroute
and
delroutesto
commands, this agent exposes two parameters:
-
auto1hop
— automatically assume single-hop routes available, if no entry for destination node in routing table -
defaultLink
— default LINK service provider to use for datagram transmission, if unspecified while adding a route
Without
auto1hop
enabled, every route must be explicitly added to the routing table (even when the node is accessible over a single hop). By enabling
auto1hop
, we tell the router than any node that isn’t explicitly added to the routing table is assumed to be accessible over a single hop. This is the default setting:
> router
« Router »
Routes datagrams in the network, based on a routing table.
[org.arl.unet.DatagramParam]
MTU = 3145581
RTU = 1447
[org.arl.unet.net.RouterParam]
auto1hop = true
defaultLink = uwlink
The
RouteDiscoveryProtocol
class (agent name
rdp
) provides the ROUTE_MAINTENANCE service in the standard stack. This agent has no configurable parameters.
In
Chapter 6
, we explored several examples of how to set up networks with static and dynamic routes. To find out more about routing, type
help router
in the shell:
> help router
router - access to routing service
Examples:
routes // display routing table
routes 2 // display routes to node 2
addroute 27, 29 // add a route to node 27 via node 29
delroute 'as7623' // delete route with UUID as7623
editroute 'as7623', metric: 5.0 // edit route to change metric
delroutesto 27 // delete all routes to node 27
delroutes // delete all routes
trace 27 // trace route to node 27
ping 27 // check if node 27 is accessible
Parameters:
- router.MTU - maximum data transfer size
- router.RTU - recommended data transfer size
- router.auto1hop - automatically assume single hop routes
- router.defaultLink - default link to use
Commands:
- routes - print routing table
- addroute - add a route to the routing table
- editroute - edit a route in the routing table
- delroute - delete a route from the routing table
- delroutesto - delete all routes to specified node from the routing table
- delroutes - delete all routes from the routing table
You can also type
help
followed by any of the commands above to get more information on the usage of that command.
<<< [Single-hop links] | [Transport service] >>> |