Compare commits
No commits in common. "487972e698ce5d7dea36cac6d8bb704808aa3d38" and "473e1d01087dfd811b7159928817024d57bffbd1" have entirely different histories.
487972e698
...
473e1d0108
12 changed files with 1 additions and 209 deletions
|
|
@ -32,12 +32,7 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
goos: [linux]
|
goos: [linux]
|
||||||
goarch: [amd64]
|
goarch: [amd64]
|
||||||
binaries:
|
binaries: [db, metadata, metacli, agent]
|
||||||
- db
|
|
||||||
- metadata
|
|
||||||
- metacli
|
|
||||||
- agent
|
|
||||||
- netns
|
|
||||||
uses: ./.forgejo/workflows/build.yml
|
uses: ./.forgejo/workflows/build.yml
|
||||||
with:
|
with:
|
||||||
tag: ${{ needs.set-release-target.outputs.release_cible }}
|
tag: ${{ needs.set-release-target.outputs.release_cible }}
|
||||||
|
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"git.g3e.fr/syonad/two/internal/netns"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
netns_name = flag.String("netns", "", "Network namespace à faire")
|
|
||||||
action = flag.String("action", "", "Action a faire")
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
switch *action {
|
|
||||||
case "create":
|
|
||||||
err := netns.Create(*netns_name)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
case "delete":
|
|
||||||
err := netns.Delete(*netns_name)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
case "check":
|
|
||||||
if netns.Exist(*netns_name) {
|
|
||||||
fmt.Printf("netns %s exist\n", *netns_name)
|
|
||||||
} else {
|
|
||||||
fmt.Printf("netns %s do not exist\n", *netns_name)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
fmt.Printf("Available commande:\n - create\n - delete\n - check\n")
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
package netns
|
|
||||||
|
|
||||||
func Call(name string, fn func() error) error {
|
|
||||||
return call(name, fn)
|
|
||||||
}
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
||||||
//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
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
//go:build !linux
|
|
||||||
|
|
||||||
package netns
|
|
||||||
|
|
||||||
func call(name string, fn func() error) error {
|
|
||||||
return fn()
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
package netns
|
|
||||||
|
|
||||||
func Create(name string) error {
|
|
||||||
return create(name)
|
|
||||||
}
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
//go:build linux
|
|
||||||
|
|
||||||
package netns
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
func create(name string) error {
|
|
||||||
base := "/var/run/netns"
|
|
||||||
path := base + "/" + name
|
|
||||||
|
|
||||||
if err := os.MkdirAll(base, 0755); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// fichier cible
|
|
||||||
f, err := os.Create(path)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
f.Close()
|
|
||||||
|
|
||||||
// sauvegarde du netns courant
|
|
||||||
orig, err := os.Open("/proc/self/ns/net")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer orig.Close()
|
|
||||||
|
|
||||||
// nouveau netns
|
|
||||||
if err := unix.Unshare(unix.CLONE_NEWNET); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// bind mount du netns courant vers /var/run/netns/<name>
|
|
||||||
if err := unix.Mount(
|
|
||||||
"/proc/self/ns/net",
|
|
||||||
path,
|
|
||||||
"",
|
|
||||||
unix.MS_BIND,
|
|
||||||
"",
|
|
||||||
); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// revenir au netns original
|
|
||||||
if err := unix.Setns(int(orig.Fd()), unix.CLONE_NEWNET); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
//go:build !linux
|
|
||||||
|
|
||||||
package netns
|
|
||||||
|
|
||||||
func create(string) error { return nil }
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
package netns
|
|
||||||
|
|
||||||
func Delete(name string) error {
|
|
||||||
return delete(name)
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
//go:build linux
|
|
||||||
|
|
||||||
package netns
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
func delete(name string) error {
|
|
||||||
path := "/var/run/netns/" + name
|
|
||||||
|
|
||||||
if err := unix.Unmount(path, unix.MNT_DETACH); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return os.Remove(path)
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
//go:build !linux
|
|
||||||
|
|
||||||
package netns
|
|
||||||
|
|
||||||
func delete(string) error { return nil }
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
package netns
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
func exist(name string) bool {
|
|
||||||
_, err := os.Stat("/var/run/netns/" + name)
|
|
||||||
return err == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Exist(name string) bool {
|
|
||||||
return exist(name)
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue