General Structure of the Input and Output Routing Routines
We saw in the section "Cache
Lookup" in Chapter 33 that ingress and
egress routing lookups that cannot be satisfied by the cache are taken care of by ip_route_input_slow and ip_route_output_slow, respectively.
Both routines are pretty long. To make them more readable, part of their code has been
moved to two inline[*] functions, called ip_mkroute_input and
ip_mkroute_output, respectively. Both routines
differentiate between the case where the kernel supports multipath caching and the case
where it does not. In the latter case, they become an alias to the two routines ip_mkroute_input_def and ip_mkroute_output_def, respectively. Regardless of whether multipath caching
is supported, the routing cache entry is allocated and initialized with _ _mkroute_input and _
_mkroute_output. Regardless of whether it is ip_route_input_slow or ip_route_output_slow that triggers the insertion of a new entry into the cache,
that operation is performed by rt_intern_hash.
Figure 35-4 summarizes the material in this section and shows how symmetrical the skeletons of the two slow routines are.

Figure 35-4. Skeleton of ip_route_input_slow and ip_route_output_slow
The differences with regard to Multipath, like the call to fib_select_multipath in ip_mkroute_input_def that is missing in ip_mkroute_output_def, will be explained in the section "Multipath ...
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