Repository navigation
Fix systemd-networkd recovery after interface failures - #19686
Open
Alex Cortelyou (acortelyou) wants to merge 1 commit into
Open
Alex Cortelyou (acortelyou) wants to merge 1 commit into
Alex Cortelyou (acortelyou) wants to merge 1 commit into
Conversation
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
Member
Author
|
/azp run |
|
Commenter does not have sufficient privileges for PR 19686 in repo microsoft/azurelinux |
Alex Cortelyou (acortelyou)
marked this pull request as ready for review
October 23, 2026 02:55
Member
|
/azp run |
|
Azure Pipelines: Successfully started running 1 pipeline(s). 1 pipeline(s) were filtered out due to trigger conditions. |
Muhammad Falak R Wani (mfrw)
requested a review
from Dan Streetman (ddstreetmicrosoft)
October 23, 2026 06:22
Member
Author
|
The
|
Dan Streetman (ddstreetmicrosoft)
requested changes
Oct 23, 2026
Dan Streetman (ddstreetmicrosoft)
left a comment
There was a problem hiding this comment.
Your merging of multiple upstream commits into a single patch makes it significantly more difficult to review, as well as including patches unrelated to this issue. You additionally appear to be missing f8cdd37d0aed8423d6744dd6637955760346939a so this will definitely need significantly closer inspection, and isn't mergable in its current state.
Alex Cortelyou (acortelyou)
force-pushed
the
backport-systemd-networkd-auto-reconfigure
branch
from
October 24, 2026 16:54
37aa5dd to
e33b0a4
Compare
Backport systemd's rate-limited failed-interface recovery and its initialized-state and DHCP-client follow-ups, including f8cdd37d0aed8423d6744dd6637955760346939a. Keep each mainline commit in its own patch with original metadata and minimal v255 adaptations. Include separate downstream regression coverage and the upstream OpenSSL test compatibility fix. Synchronize the unsigned and signed boot package releases at 255-35.
Alex Cortelyou (acortelyou)
force-pushed
the
backport-systemd-networkd-auto-reconfigure
branch
from
October 24, 2026 16:57
e33b0a4 to
795172d
Compare
Alex Cortelyou (acortelyou)
requested a review
from Dan Streetman (ddstreetmicrosoft)
October 26, 2026 00:49
This branch has not been deployed
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.
Merge Checklist
All boxes should be checked before merging the PR (just tick any boxes which don't apply to this PR)
*-staticsubpackages, etc.) have had theirReleasetag incremented../cgmanifest.json,./toolkit/scripts/toolchain/cgmanifest.json,.github/workflows/cgmanifest.json)./LICENSES-AND-NOTICES/SPECS/data/licenses.json,./LICENSES-AND-NOTICES/SPECS/LICENSES-MAP.md,./LICENSES-AND-NOTICES/SPECS/LICENSE-EXCEPTIONS.PHOTON)*.signatures.jsonfilessudo make go-tidy-allandsudo make go-test-coveragepassCurrent-series validation is local x86_64 and ARM64; earlier pipeline results are scoped below. Regenerated Secure Boot signing/repackaging still requires the distribution pipeline. Go checks, toolchain rebuilding, dependent static-library release bumps, and build-system documentation changes are not applicable; none of those components changed.
Summary
AKS VMSS routine live migration occasionally leaves eth0 in systemd-networkd's failed state, stopping IPv6 router discovery. Existing routes continue forwarding traffic, masking the failure until the RA-derived IPv6 default route expires roughly 2.5 hours later. Although RAs are advertised every five seconds, the route is no longer refreshed. Manually running
networkctl reconfigure eth0restores RA processing and IPv6 connectivity.This behavior is consistent with systemd/systemd#29246. Backport systemd/systemd#30936 to Azure Linux's existing systemd v255, adding rate-limited automatic reconfiguration rather than upgrading systemd.
Include the failed-state initialization and duplicate DHCP STOP fixes from systemd/systemd#34054, plus its reviewer-requested DHCP renew/release/decline guards. These ensure automatic recovery actually proceeds and handles inactive DHCP clients safely. Each upstream commit is a separate patch, preserving its original metadata and commit message; necessary v255 adaptations are documented after the patch separator.
Change Log
255-34.azl3to255-35.azl3, retaining upstream v255 and the existing downstream patch stack.c2eb7756d1cea7685fd0dinitializedin shared reconfiguration, so the GETLINK callback does not ignore a failed link.link_reconfigure_on_bus_method_reload(), absent in v255. v255 reload already calls the patched sharedlink_reconfigure(); retained hunks unchanged.e5b19cbf8cdd37attemptinstead ofdiscover_attempt; all upstream added/deleted lines preserved.338ed5btest-networkd-failed-link-and-dhcp-client-recovery.patch, not mixed into upstream patches.Does this affect the toolchain?
NO. The runtime systemd package is not in the toolchain/worker manifests; systemd-bootstrap is unchanged.
Associated issues
Links to CVEs
None.
Test Methodology
mcr.microsoft.com/azurelinux/base/core:3.0, withLINUX_IMMUTABLEfor the existing capability test. The spec's existing chroot exclusions were unchanged; no additional skips or--nocheckwere introduced.RUN_CHECK=y rpmbuild -ba --noclean -D "_topdir /work/rpmbuild" -D "_smp_mflags -j8" -D "with_check 1" /work/rpmbuild/SPECS/systemd.spec. All unsigned RPMs and the SRPM were generated: 1,224 passed, 26 skipped, zero failures.meson test -C /work/rpmbuild/BUILD/systemd-stable-255/x86_64-azl-linux --no-rebuild --print-errorlogs --suite networkreported 16 passed, zero failures.meson test -C /work/rpmbuild/BUILD/systemd-stable-255/x86_64-azl-linux --no-rebuild --print-errorlogs test-networkfail its recovery assertion. Removing duplicate STOP suppression or each of the renew/release/decline guards mademeson test -C /work/rpmbuild/BUILD/systemd-stable-255/x86_64-azl-linux --no-rebuild --print-errorlogs test-dhcp-clientfail its corresponding assertion. Restoring the fixes made the tests pass.NETWORKD_BINARY=/usr/lib/systemd/systemd-networkd NETWORKCTL_BINARY=/usr/bin/networkctl python3 /artifacts/test-network-flap.py. The harness exercises the patched upstream IPv6 test against real veth interfaces in an isolated Docker network namespace: three iterations, 120 down/up cycles, nine successful address/readiness checks.795172d87): the same checked RPM build command and base image generated unsigned RPMs and the SRPM: 1,231 passed, 19 skipped, zero failures.meson test -C /work/rpmbuild/BUILD/systemd-stable-255/aarch64-azl-linux --no-rebuild --print-errorlogs --suite networkpassed all 16 tests. All five negative controls detected their respective missing fixes; restored tests passed. The same installed-RPM harness passed: three iterations, 120 cycles and nine readiness checks.python3 toolkit/scripts/check_spec_guidelines.py --toolchain_specs "" --specs SPECS/systemd/systemd.spec SPECS-SIGNED/systemd-boot-signed/systemd-boot-signed.spec.python3 toolkit/scripts/check_entangled_specs.py ..python3 toolkit/scripts/license_map.py LICENSES-AND-NOTICES/SPECS/data/licenses.json LICENSES-AND-NOTICES/SPECS/LICENSES-MAP.md SPECS SPECS-EXTENDED SPECS-SIGNED.git apply; after recovering its runtime rules,spec-cleaner -d --diff-prog="git --no-pager diff" /work/specs/systemd.spec /work/specs/systemd-boot-signed.specfails parsing an existing RPM version containing^. The untouched255-34systemd spec produces the same exception. No linter pass is claimed.