Bug 240969 - netinet6: Neighbour reachability detection broken when using multiple FIB
Summary: netinet6: Neighbour reachability detection broken when using multiple FIB
Status: Open
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 12.0-RELEASE
Hardware: Any Any
: --- Affects Some People
Assignee: freebsd-net (Nobody)
URL:
Keywords: needs-patch, needs-qa, regression
Depends on:
Blocks:
 
Reported: 2019-10-01 13:21 UTC by topical
Modified: 2020-10-20 11:45 UTC (History)
4 users (show)

See Also:
koobs: mfc-stable12?
koobs: mfc-stable11?


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description topical 2019-10-01 13:21:22 UTC
If you define multiple FIB and set "net.add_addr_allfibs=0", ND reachability packets are sent via wrong interface, containing wrong data.

Effectively:
  * reachability detection only works in FIB 0
  * neighbour routers/firewalls may barf about strange ND packets for other FIBs (this is what happens to me)

Still, network connectivity recovers automatically as standard ND multicasts are sent out automatically after reachability detection fails.

After some investigation, I found the source of the problem: review D1998 introduced FIB-aware nd6_ns_output_fib() and a legacy wrapper nd6_ns_output() passing RT_DEFAULT_FIB unconditionally. So, all calls to nd6_ns_output() must be enhanced by FIB and replaced by calls to nd6_ns_output_fib(). 

As nd6_ns_output() is enclosed by "#ifndef BURN_BRIDGES", this seems to be the original intention, but work has never been finished.
Comment 1 Kubilay Kocak freebsd_committer freebsd_triage 2019-10-02 03:06:40 UTC
^Triage: CC committer (and reviewers) of https://reviews.freebsd.org/D1998