Skip to content

fix(tuntap): disable created queue for multi-queue devices to fix KeepCarrier - #423

Open
deepin-ci-robot wants to merge 1 commit into
deepin-community:masterfrom
deepin-ci-robot:backport/fix-tuntap-keep-carrier-device-option
Open

fix(tuntap): disable created queue for multi-queue devices to fix KeepCarrier#423
deepin-ci-robot wants to merge 1 commit into
deepin-community:masterfrom
deepin-ci-robot:backport/fix-tuntap-keep-carrier-device-option

Conversation

@deepin-ci-robot

Copy link
Copy Markdown
Contributor

Problem Before the Change

When KeepCarrier=yes is set on a tun/tap netdev, networkd does not close the tun/tap file descriptor in order to preserve the active interface state. However, it never disables the queue attached to that file descriptor, so the kernel still considers the queue active and keeps sending packets to it. Since networkd never reads from the descriptor, those packets are silently dropped — for multi-queue devices this breaks the KeepCarrier option entirely (e.g. a user-space program attached to another queue of the same device never receives any traffic).

What This PR Changes

Backports upstream systemd commit 0e1ab2261cd91f3f7beec1f24134498a853ea4d5: for multi-queue tun/tap devices, right after the device is created/attached, issue TUNSETQUEUE with IFF_DETACH_QUEUE to detach networkd's own queue so the kernel stops routing packets to a queue that will never be read.

Problem Solved After the Change

With MultiQueue=yes and KeepCarrier=yes, packets sent to the tun/tap device are no longer swallowed by networkd's unused queue and are correctly delivered to the active user-space queue, making the KeepCarrier option work as intended.

Changes

  • Add debian/patches/fix-tuntap-keep-carrier-device-option.patch
  • Modify debian/patches/series
  • Modify debian/changelog

Upstream

systemd/systemd@0e1ab22

Generated-By: glm-5.3-flash
Co-Authored-By: deepin-ci-robot packages@deepin.org

…pCarrier

When KeepCarrier is set, networkd doesn't close tun/tap file descriptor
preserving the active interface state, but doesn't disable its queue
which makes kernel to think that it's still active and send packets to
it.

This patch disables the created queue right after tun/tap interface
creation.

Changes:
  - Add debian/patches/fix-tuntap-keep-carrier-device-option.patch
  - Modify debian/patches/series
  - Modify debian/changelog

Upstream: systemd/systemd@0e1ab22

Generated-By: glm-5.3-flash
Co-Authored-By: deepin-ci-robot <packages@deepin.org>
@deepin-ci-robot

Copy link
Copy Markdown
Contributor Author

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign goldendeng for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

TAG Bot

TAG: 255.2-4deepin68
EXISTED: no
DISTRIBUTION: unstable

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant