in.ripngd is the IPv6 equivalent of in.routed(1M).
It is invoked at boot time to manage the network routing tables. The routing
daemon uses the Routing Information Protocol for IPv6.
In normal operation, in.ripngd listens on the udp(7P) socket
port 521 for routing information packets. If the host is an internetwork
router, it periodically supplies copies of its routing tables to any directly
connected hosts and networks.
Whenin.ripngd is started, it uses the SIOCGLIFCONF ioctl(2) to find those directly connected
IPv6 interfaces configured into the system and marked "up"; the software
loopback interface is ignored. If multiple interfaces are present, it is
assumed the host will forward packets between networks. in.ripngd then multicasts a request packet on each IPv6 interface and
enters a loop, listening for request and response packets from other hosts.
When a request packet is received, in.ripngd
formulates a reply based on the information maintained in its internal
tables. The response packet contains a list of known routes. With each
route is a number specifying the number of bits in the prefix. The prefix
is the number of bits in the high order part of an address that indicate
the subnet or network that the route describes. Each route reported
also has a "hop count" metric. A count of 16
or greater is considered "infinity." The metric associated with
each route returned provides a metric relative to the sender.
The request packets received by in.ripngd are used
to update the routing tables if one of the following conditions is satisfied:
- No routing table entry exists for the destination network
or host, and the metric indicates the destination is "reachable, that is,
the hop count is not infinite.
- The source host of the packet is the same as
the router in the existing routing table entry. That is, updated information
is being received from the very internetwork router through which packets
for the destination are being routed.
- The existing entry in the routing table has not
been updated for a period of time, defined to be 90 seconds, and the route
is at least as cost-effective as the current route.
- The new route describes a shorter route to the
destination than the one currently stored in the routing tables; this
is determined by comparing the metric of the new route against the one stored
in the table.
When an update is applied, in.ripngd records the
change in its internal tables and generates a response packet to all
directly connected hosts and networks. To allow possible unstable situations
to settle, in.ripngd waits a short period of time
(no more than 30 seconds) before modifying the kernel's routing tables.
In addition to processing incoming packets, in.ripngd
also periodically checks the routing table entries. If an entry has not
been updated for 3 minutes, the entry's metric is set to infinity
and marked for deletion. Deletions are delayed an additional 60 seconds
to insure the invalidation is propagated throughout the internet.
Hosts acting as internetwork routers gratuitously supply their
routing tables every 30 seconds to all directly connected hosts and networks.
|