Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vishvananda/netns
Simple network namespace handling for go.
https://github.com/vishvananda/netns
Last synced: 22 days ago
JSON representation
Simple network namespace handling for go.
- Host: GitHub
- URL: https://github.com/vishvananda/netns
- Owner: vishvananda
- License: apache-2.0
- Created: 2014-08-31T20:48:39.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2024-08-13T19:31:45.000Z (3 months ago)
- Last Synced: 2024-10-18T15:18:28.655Z (29 days ago)
- Language: Go
- Size: 56.6 KB
- Stars: 378
- Watchers: 11
- Forks: 133
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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 mainimport (
"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)
}```