two/internal/netns/call_linux.go
GnomeZworc a650a34fc3
f-10: code: add function to call a function in a netns #10
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2026-01-08 23:47:52 +01:00

44 lines
771 B
Go

//go:build linux
package netns
import (
"fmt"
"os"
"runtime"
"golang.org/x/sys/unix"
)
func call(name string, fn func() error) error {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
// sauvegarde du netns courant
orig, err := os.Open("/proc/self/ns/net")
if err != nil {
return err
}
defer orig.Close()
// entrer dans le netns cible
f, err := os.Open(fmt.Sprintf("/var/run/netns/%s", name))
if err != nil {
return err
}
defer f.Close()
if err := unix.Setns(int(f.Fd()), unix.CLONE_NEWNET); err != nil {
return err
}
// exécuter la fonction dans le netns
err = fn()
// toujours revenir au netns d'origine
if restoreErr := unix.Setns(int(orig.Fd()), unix.CLONE_NEWNET); restoreErr != nil {
return restoreErr
}
return err
}