1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // +build linux freebsd
- package configs
- import "fmt"
- const (
- NEWNET NamespaceType = "NEWNET"
- NEWPID NamespaceType = "NEWPID"
- NEWNS NamespaceType = "NEWNS"
- NEWUTS NamespaceType = "NEWUTS"
- NEWIPC NamespaceType = "NEWIPC"
- NEWUSER NamespaceType = "NEWUSER"
- )
- func NamespaceTypes() []NamespaceType {
- return []NamespaceType{
- NEWNET,
- NEWPID,
- NEWNS,
- NEWUTS,
- NEWIPC,
- NEWUSER,
- }
- }
- // Namespace defines configuration for each namespace. It specifies an
- // alternate path that is able to be joined via setns.
- type Namespace struct {
- Type NamespaceType `json:"type"`
- Path string `json:"path"`
- }
- func (n *Namespace) GetPath(pid int) string {
- if n.Path != "" {
- return n.Path
- }
- return fmt.Sprintf("/proc/%d/ns/%s", pid, n.file())
- }
- func (n *Namespace) file() string {
- file := ""
- switch n.Type {
- case NEWNET:
- file = "net"
- case NEWNS:
- file = "mnt"
- case NEWPID:
- file = "pid"
- case NEWIPC:
- file = "ipc"
- case NEWUSER:
- file = "user"
- case NEWUTS:
- file = "uts"
- }
- return file
- }
- func (n *Namespaces) Remove(t NamespaceType) bool {
- i := n.index(t)
- if i == -1 {
- return false
- }
- *n = append((*n)[:i], (*n)[i+1:]...)
- return true
- }
- func (n *Namespaces) Add(t NamespaceType, path string) {
- i := n.index(t)
- if i == -1 {
- *n = append(*n, Namespace{Type: t, Path: path})
- return
- }
- (*n)[i].Path = path
- }
- func (n *Namespaces) index(t NamespaceType) int {
- for i, ns := range *n {
- if ns.Type == t {
- return i
- }
- }
- return -1
- }
- func (n *Namespaces) Contains(t NamespaceType) bool {
- return n.index(t) != -1
- }
|