Adding and Removing Routes
In Chapter
36, we will see how routes are added, deleted, and modified by user commands and
routing daemons. Both are satisfied through a single set of routines in the kernel's
routing subsystem. In this section, we will see what the kernel has to do when asked to
add or remove a route from one of its routing tables. As shown in Table 34-1, fn_hash_insert and fn_hash_delete are the
routines used to insert and delete routes, and we will analyze them in the sections "Adding a Route" and "Deleting a Route." fn_hash_insert has several related uses, all involving changes
of routes.
Here are a few operations common to the two routines:
Given a route to add or remove, derive the search key and use it to make a
fib_nodelookup and afib_aliaslookup. These lookups are similar to the ones done to route data packets, but are done for a different purpose: to check whether a route being added is a duplicate of an existing route, or whether a route being removed really exists.Populate (in case of insert) and clean up (in case of delete) the right hash tables.
Flush the routing cache if necessary.
Generate a Netlink broadcast notification to tell the interested listeners that a route has been added to or removed from a routing table (see the section "Netlink Notifications" in Chapter 32).
Adding a Route
The insertion of a new route is taken care of by fn_hash_insert, whose logic is described in Figures 34-3(a) and
34-3(b).[*] This routine is actually called for many operations: ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access