Documentation
¶
Overview ¶
Package ns On Linux each OS thread can have a different network namespace. Go's thread scheduling model switches goroutines between OS threads based on OS thread load and whether the goroutine would block other goroutines. This can result in a goroutine switching network namespaces without notice and lead to errors in your code.
Index ¶
Constants ¶
View Source
const (
// SoMark mark packets sent from a specific socket.
SoMark = 0x24
)
Variables ¶
This section is empty.
Functions ¶
Types ¶
type NetNS ¶
type NetNS interface {
// Do execute the passed closure in this object's network namespace,
// attempting to restore the original namespace before returning.
// However, since each OS thread can have a different network namespace,
// and Go's thread scheduling is highly variable, callers cannot
// guarantee any specific namespace is set unless operations that
// require that namespace are wrapped with Do(). Also, no code called
// from Do() should call runtime.UnlockOSThread(), or the risk
// of executing code in an incorrect namespace will be greater. See
// https://github.com/golang/go/wiki/LockOSThread for further details.
Do(toRun func(NetNS) error) error
// Set the current network namespace to this object's network namespace.
// Note that since Go's thread scheduling is highly variable, callers
// cannot guarantee the requested namespace will be the current namespace
// after this function is called; to ensure this wrap operations that
// require the namespace with Do() instead.
Set() error
// Path returns the filesystem path representing this object's network namespace
Path() string
// Fd returns a file descriptor representing this object's network namespace
Fd() uintptr
// Close cleans up this instance of the network namespace; if this instance
// is the last user the namespace will be destroyed
Close() error
}
NetNS define netns ops
func GetCurrentNS ¶
GetCurrentNS returns an object representing the current OS thread's network namespace
Click to show internal directories.
Click to hide internal directories.