HomeFreeBSD

routing: refactor control cmds #1

Description

routing: refactor control cmds #1

This and the follow-up routing-related changes target to remove or
reduce struct rt_addrinfo usage and use recently-landed nhop(9)
KPI instead.
Traditionally rt_addrinfo structure has been used to propagate all necessary
information between the protocol/rtsock and a routing layer. Many
functions inside routing subsystem uses it internally. However, using
this structure became somewhat complicated, as there are too many ways
of specifying a single state and verifying data consistency is hard.
For example, arerouting flgs consistent with mask/gateway sockaddr pointers?
Is mask really a host mask? Are sockaddr "valid" (e.g. properly zeroed, masked,
have proper length)? Are they mutable? Is the suggested interface specified
by the interface index embedded into the sockadd_dl gateway, or passed
as RTAX_IFP parameter, or directly provided by rti_ifp or it needs to
be derived from the ifa?
These (and other similar) questions have to be considered every time when
a function has rt_addrinfo pointer as an argument.

The new approach is to bring more control back to the protocols and
construct the desired routing objects themselves - in the end, it's the
protocol/subsystem who knows the desired outcome.

This specific diff changes the following:

  • add explicit basic low-level radix operations: add_route() (renamed from add_route_nhop()) delete_route() (factored from change_route_nhop()) change_route() (renamed from change_route_nhop)
  • remove "info" parameter from change_route_conditional() as a part of reducing rt_addrinfo usage in the internal KPIs
  • add lookup_prefix_rt() wrapper for doing re-lookups after RIB lock/unlock

Differential Revision: https://reviews.freebsd.org/D36070
MFC after: 2 weeks

Details

Provenance
melifaroAuthored on Aug 2 2022, 12:44 PM
Differential Revision
D36070: routing: refactor control cmds #1.
Parents
rG07285bb4c22c: tcp: utilize new solisten_clone() and solisten_enqueue()
Branches
Unknown
Tags
Unknown