Skip to content
This repository was archived by the owner on Dec 9, 2025. It is now read-only.
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions pkg/driver/hostdevice.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,17 @@ func nsAttachNetdev(hostIfName string, containerNsPAth string, interfaceConfig a
hostDev, err := netlink.LinkByName(hostIfName)
// recover same behavior on vishvananda/netlink@1.2.1 and do not fail when the kernel returns NLM_F_DUMP_INTR.
if err != nil && !errors.Is(err, netlink.ErrDumpInterrupted) {
return nil, err
return nil, fmt.Errorf("failed to get link for interface %s: %w", hostIfName, err)
}

// Devices can be renamed only when down
if err = netlink.LinkSetDown(hostDev); err != nil {
return nil, fmt.Errorf("failed to set %q down: %v", hostDev.Attrs().Name, err)
return nil, fmt.Errorf("failed to set %q down: %w", hostIfName, err)
}

containerNs, err := netns.GetFromPath(containerNsPAth)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to get container network namespace %s: %w", containerNsPAth, err)
}
defer containerNs.Close()

Expand Down Expand Up @@ -121,14 +121,14 @@ func nsAttachNetdev(hostIfName string, containerNsPAth string, interfaceConfig a

_, err = req.Execute(unix.NETLINK_ROUTE, 0)
if err != nil && !errors.Is(err, netlink.ErrDumpInterrupted) {
return nil, err
return nil, fmt.Errorf("failed to move interface %s to container namespace %s: %w", hostIfName, containerNsPAth, err)
}

// to avoid golang problem with goroutines we create the socket in the
// namespace and use it directly
nhNs, err := netlink.NewHandleAt(containerNs)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to get netlink handle in container namespace %s: %w", containerNsPAth, err)
}
defer nhNs.Close()

Expand Down Expand Up @@ -186,7 +186,7 @@ func nsDetachNetdev(containerNsPAth string, devName string, outName string) erro
// when it is restored to the original namespace
err = nhNs.LinkSetDown(nsLink)
if err != nil {
return err
return fmt.Errorf("failed to set %q down: %w", devName, err)
}

attrs := nsLink.Attrs()
Expand All @@ -197,7 +197,7 @@ func nsDetachNetdev(containerNsPAth string, devName string, outName string) erro

rootNs, err := netns.Get()
if err != nil {
return err
return fmt.Errorf("failed to get root network namespace: %w", err)
}
defer rootNs.Close()

Expand Down Expand Up @@ -229,18 +229,18 @@ func nsDetachNetdev(containerNsPAth string, devName string, outName string) erro

_, err = req.Execute(unix.NETLINK_ROUTE, 0)
if err != nil {
return err
return fmt.Errorf("failed to move interface %s to root namespace: %w", devName, err)
}

// Set up the interface in case host network workloads depend on it
hostDev, err := netlink.LinkByName(ifName)
// recover same behavior on vishvananda/netlink@1.2.1 and do not fail when the kernel returns NLM_F_DUMP_INTR.
if err != nil && !errors.Is(err, netlink.ErrDumpInterrupted) {
return err
return fmt.Errorf("failed to get link for interface %s: %w", ifName, err)
}

if err = netlink.LinkSetUp(hostDev); err != nil {
return fmt.Errorf("failed to set %q down: %v", hostDev.Attrs().Name, err)
return fmt.Errorf("failed to set %q up: %w", ifName, err)
}
return nil
}
Loading