implementation global du fonctionnement de netns #10

Closed
opened 2026-01-05 10:59:23 +00:00 by nicolas.boufideline · 2 comments

Il faut maintenant creer un binaire qui sais creer verifier ou supprimer un netns:

Verification

func Exists(name string) bool {
	_, err := os.Stat("/var/run/netns/" + name)
	return err == nil
}

Suppression

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)
}

Creation

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
}
Il faut maintenant creer un binaire qui sais creer verifier ou supprimer un netns: # Verification ```golang func Exists(name string) bool { _, err := os.Stat("/var/run/netns/" + name) return err == nil } ``` # Suppression ```golang 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) } ``` # Creation ```golang 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 } ```
Author
Owner

a tester

a tester
Author
Owner

tester et valider sur linux

tester et valider sur linux
Sign in to join this conversation.
No milestone
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
syonad/two#10
No description provided.