Interface Between the DST and Calling Protocols
The DST cache is an independent subsystem; it has, for
instance, its own garbage collection mechanism. As a subsystem, it provides a set of
functions that various protocols can use to change or tune its behavior. When external
subsystems need to interact with the routing cache, such as to notify it of an event or
read the value of one of its parameters, they do it via a set of DST routines defined in
the files net/core/dst.c and include/net/dst.h. These routines are wrappers around a set
of functions made available by the L3 protocol that owns the cache, by initializing an
instance of a dst_ops VFT, as shown in Figure 33-6.

Figure 33-6. dst_ops interface
The key structure presented by DST to higher layers is dst_entry; protocol-specific structures such as rtable are merely wrappers for this structure. IP owns the routing cache, but
other protocols often keep references to routing cache elements. All of those references
refer to dst_entry, not to its rtable wrapper. The sk_buff buffers also
keep a reference to the dst_entry structure, not to the
rtable structure. This reference is used to store the
result of the routing lookup.
The dst_entry and dst_ops structures are described in detail in the associated sections in Chapter 36. There is an instance of dst_ops for each protocol; for example, IPv4 uses ipv4_dst_ops, initialized in net/ipv4/route.c ...
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