Conversation
This patch fixes intermittent DHCPv6/link-local punt loops caused by a startup race in IPv6 link-local discovery. LL discovery ran in configureVppUplinkInterface() before Linux had brought the tap UP, so LL was intermittently missing. Without LL /128 in punt table, punted link-local packets matched fe80::/10 (ip6-link-local DPO), got redirected back to per-interface LL FIB, and looped until VPP recursion guard dropped them. - Add configureIPv6LinkLocal() and call it from runVpp() after configureLinuxTap() (LinkSetUp) and before InterfaceAdminUp(). - Poll for tap LL with bounded retries after tap UP; if not found, return an error so runVpp() terminates VPP. - Program LL-specific state in configureIPv6LinkLocal(): * punt-table LL /128 route * LL address on uplink in VPP * ND proxy for LL - Remove old LL handling from the previous setup path. Signed-off-by: Aritra Basu <aritrbas@cisco.com>
sknat
approved these changes
Mar 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR fixes an intermittent IPv6 startup issue where DHCPv6 traffic to the node link-local address can enter a punt loop, preventing global IPv6 from being acquired.
RCA
LL discovery previously ran during
configureVppUplinkInterface(), before Linux tapNETDEV_UP. In intermittent cases, no LL was discovered in time, so the LL/128route was not installed in the punt table.For punted LL traffic (e.g. DHCPv6 UDP/546), lookup in the punt table then matched the built-in
fe80::/10 -> ip6-link-localpath, which redirected traffic back to the per-interface LL FIB and created a receive/punt/redirect loop until recursion drop.Fix
configureIPv6LinkLocal()invpp-manager/vpp_runner.go.runVpp()afterconfigureLinuxTap()and beforeInterfaceAdminUp().terminateVpp()path./128route in punt table