Skip to content

Commit 27cec38

Browse files
committed
net: fix tap flags initialization order (VNET_HDR base + ONE_QUEUE/MULTI_QUEUE); close tap fds after LinkAdd
1 parent 325a067 commit 27cec38

1 file changed

Lines changed: 8 additions & 5 deletions

File tree

network/cni/config_linux.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,12 @@ func tcRedirectInNS(ifName, tapName string, queues int) (string, error) {
9393
// VNET_HDR: allows kernel to parse virtio_net headers for checksum/GSO offload.
9494
// Multi-queue: match CH num_queues so each vCPU gets its own TX/RX ring.
9595
// Single-queue: ONE_QUEUE prevents packet drops on older kernels.
96-
if queues <= 0 {
96+
flags := netlink.TUNTAP_VNET_HDR
97+
if queues <= 1 {
9798
queues = 1
98-
}
99-
flags := netlink.TUNTAP_ONE_QUEUE | netlink.TUNTAP_VNET_HDR
100-
if queues > 1 {
101-
flags = netlink.TUNTAP_MULTI_QUEUE_DEFAULTS | netlink.TUNTAP_VNET_HDR
99+
flags |= netlink.TUNTAP_ONE_QUEUE
100+
} else {
101+
flags |= netlink.TUNTAP_MULTI_QUEUE_DEFAULTS
102102
}
103103
tap := &netlink.Tuntap{
104104
LinkAttrs: netlink.LinkAttrs{Name: tapName},
@@ -109,6 +109,9 @@ func tcRedirectInNS(ifName, tapName string, queues int) (string, error) {
109109
if addErr := netlink.LinkAdd(tap); addErr != nil {
110110
return "", fmt.Errorf("add tap %s: %w", tapName, addErr)
111111
}
112+
for _, fd := range tap.Fds {
113+
_ = fd.Close()
114+
}
112115
tapLink, err := netlink.LinkByName(tapName)
113116
if err != nil {
114117
return "", fmt.Errorf("find tap %s: %w", tapName, err)

0 commit comments

Comments
 (0)