From 348eb4aee32b127480087826b5f55ce0c2bb4cbf Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 28 Dec 2025 14:57:36 +0100 Subject: [PATCH 1/2] f-8: code: implemete netns first code #8 Signed-off-by: GnomeZworc --- go.mod | 6 ++++-- go.sum | 2 ++ internal/netns/enter.go | 5 +++++ internal/netns/enter_linux.go | 26 ++++++++++++++++++++++++++ internal/netns/enter_other.go | 8 ++++++++ 5 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 internal/netns/enter.go create mode 100644 internal/netns/enter_linux.go create mode 100644 internal/netns/enter_other.go diff --git a/go.mod b/go.mod index 555ca1b..26bd137 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module git.g3e.fr/syonad/two -go 1.23.8 +go 1.24.0 + +toolchain go1.24.11 require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -29,7 +31,7 @@ require ( go.opentelemetry.io/otel/trace v1.37.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/net v0.41.0 // indirect - golang.org/x/sys v0.34.0 // indirect + golang.org/x/sys v0.39.0 // indirect golang.org/x/text v0.28.0 // indirect google.golang.org/protobuf v1.36.6 // indirect ) diff --git a/go.sum b/go.sum index f61e769..0d19489 100644 --- a/go.sum +++ b/go.sum @@ -53,6 +53,8 @@ golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= diff --git a/internal/netns/enter.go b/internal/netns/enter.go new file mode 100644 index 0000000..68ea372 --- /dev/null +++ b/internal/netns/enter.go @@ -0,0 +1,5 @@ +package netns + +func Enter(name string) error { + return enter(name) +} diff --git a/internal/netns/enter_linux.go b/internal/netns/enter_linux.go new file mode 100644 index 0000000..04e116a --- /dev/null +++ b/internal/netns/enter_linux.go @@ -0,0 +1,26 @@ +//go:build linux + +package netns + +import ( + "fmt" + "os" + "runtime" + + "golang.org/x/sys/unix" +) + +func enter(name string) error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + path := fmt.Sprintf("/var/run/netns/%s", name) + + f, err := os.Open(path) + if err != nil { + return err + } + defer f.Close() + + return unix.Setns(int(f.Fd()), unix.CLONE_NEWNET) +} diff --git a/internal/netns/enter_other.go b/internal/netns/enter_other.go new file mode 100644 index 0000000..2691ff2 --- /dev/null +++ b/internal/netns/enter_other.go @@ -0,0 +1,8 @@ +//go:build !linux + +package netns + +func enter(name string) error { + // Ignoré hors Linux + return nil +} From 2c6c1ff2dfb1f0c0eaf590e2fff2452db6285c7b Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 28 Dec 2025 14:58:09 +0100 Subject: [PATCH 2/2] f-8: code: use local usage of netns #8 Signed-off-by: GnomeZworc --- internal/metadata/server.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/internal/metadata/server.go b/internal/metadata/server.go index 336f754..2e43a1a 100644 --- a/internal/metadata/server.go +++ b/internal/metadata/server.go @@ -9,14 +9,17 @@ import ( "net" "net/http" "time" + + "git.g3e.fr/syonad/two/internal/netns" ) var data NoCloudData var ( - iface = flag.String("interface", "0.0.0.0", "Interface IP à écouter") - port = flag.Int("port", 8080, "Port à utiliser") - file = flag.String("file", "", "Fichier JSON contenant les données NoCloud") + iface = flag.String("interface", "0.0.0.0", "Interface IP à écouter") + port = flag.Int("port", 8080, "Port à utiliser") + file = flag.String("file", "", "Fichier JSON contenant les données NoCloud") + netns_name = flag.String("netns", "", "Network namespace à utiliser") ) func getIP(r *http.Request) string { @@ -54,6 +57,12 @@ func rootHandler(w http.ResponseWriter, r *http.Request) { func StartServer() { flag.Parse() + if *netns_name != "" { + if err := netns.Enter(*netns_name); err != nil { + log.Fatalf("Impossible d'entrer dans le netns: %v", err) + } + } + if *file == "" { log.Fatal("Vous devez spécifier un fichier via --file") }