kubernetes/vendor/github.com/vishvananda/netns
Dmitry Shulyak c6eb9e07bb Update vishvananda/netlink and add vishvananda/netns
This commit changes vishvananda/netlink binds godep version to:
  49a735373919c4c9a53aff1f9f63da73a243f32d
And adds vishvananda/netns with version:
  8ba1072b58e0c2a240eb5f6120165c7776c3e7b8
2016-08-14 14:42:32 +03:00
..
LICENSE Update vishvananda/netlink and add vishvananda/netns 2016-08-14 14:42:32 +03:00
netns_linux.go Update vishvananda/netlink and add vishvananda/netns 2016-08-14 14:42:32 +03:00
netns_unspecified.go Update vishvananda/netlink and add vishvananda/netns 2016-08-14 14:42:32 +03:00
netns.go Update vishvananda/netlink and add vishvananda/netns 2016-08-14 14:42:32 +03:00
README.md Update vishvananda/netlink and add vishvananda/netns 2016-08-14 14:42:32 +03:00

netns - network namespaces in go

The netns package provides an ultra-simple interface for handling network namespaces in go. Changing namespaces requires elevated privileges, so in most cases this code needs to be run as root.

Local Build and Test

You can use go get command:

go get github.com/vishvananda/netns

Testing (requires root):

sudo -E go test github.com/vishvananda/netns

Example

package main

import (
    "fmt"
    "net"
    "runtime"
    "github.com/vishvananda/netns"
)

func main() {
    // Lock the OS Thread so we don't accidentally switch namespaces
    runtime.LockOSThread()
    defer runtime.UnlockOSThread()

    // Save the current network namespace
    origns, _ := netns.Get()
    defer origns.Close()

    // Create a new network namespace
    newns, _ := netns.New()
    defer newns.Close()

    // Do something with the network namespace
    ifaces, _ := net.Interfaces()
    fmt.Printf("Interfaces: %v\n", ifaces)

    // Switch back to the original namespace
    netns.Set(origns)
}