forked from github/multus-cni
* Add error message for ifname collision This changes introduce to validateIfName, to check the validation for interface name, i.e. same name among two or more interfaces.
52 lines
1.1 KiB
Markdown
52 lines
1.1 KiB
Markdown
# 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 ##
|
|
|
|
```go
|
|
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()
|
|
netns.Set(newns)
|
|
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)
|
|
}
|
|
|
|
```
|