...

Package devices

import "github.com/opencontainers/runc/libcontainer/devices"
Overview
Index

Overview ▾

Constants

const (
    Wildcard = -1
)

Variables

ErrNotADevice denotes that a file is not a valid linux device.

var ErrNotADevice = errors.New("not a device node")

type Device

type Device struct {
    Rule

    // Path to the device.
    Path string `json:"path"`

    // FileMode permission bits for the device.
    FileMode os.FileMode `json:"file_mode"`

    // Uid of the device.
    Uid uint32 `json:"uid"`

    // Gid of the device.
    Gid uint32 `json:"gid"`
}

func DeviceFromPath

func DeviceFromPath(path, permissions string) (*Device, error)

DeviceFromPath takes the path to a device and its cgroup_permissions (which cannot be easily queried) to look up the information about a linux device and returns that information as a Device struct.

func GetDevices

func GetDevices(path string) ([]*Device, error)

GetDevices recursively traverses a directory specified by path and returns all devices found there.

func HostDevices

func HostDevices() ([]*Device, error)

HostDevices returns all devices that can be found under /dev directory.

type Permissions

Permissions is a cgroupv1-style string to represent device access. It has to be a string for backward compatibility reasons, hence why it has methods to do set operations.

type Permissions string

func (Permissions) Difference

func (p Permissions) Difference(o Permissions) Permissions

Difference returns the set difference of the two sets of Permissions. In set notation, A.Difference(B) gives you A\B.

func (Permissions) Intersection

func (p Permissions) Intersection(o Permissions) Permissions

Intersection computes the intersection of the two sets of Permissions.

func (Permissions) IsEmpty

func (p Permissions) IsEmpty() bool

IsEmpty returns whether the set of permissions in a Permissions is empty.

func (Permissions) IsValid

func (p Permissions) IsValid() bool

IsValid returns whether the set of permissions is a subset of valid permissions (namely, {r,w,m}).

func (Permissions) Union

func (p Permissions) Union(o Permissions) Permissions

Union returns the union of the two sets of Permissions.

type Rule

type Rule struct {
    // Type of device ('c' for char, 'b' for block). If set to 'a', this rule
    // acts as a wildcard and all fields other than Allow are ignored.
    Type Type `json:"type"`

    // Major is the device's major number.
    Major int64 `json:"major"`

    // Minor is the device's minor number.
    Minor int64 `json:"minor"`

    // Permissions is the set of permissions that this rule applies to (in the
    // cgroupv1 format -- any combination of "rwm").
    Permissions Permissions `json:"permissions"`

    // Allow specifies whether this rule is allowed.
    Allow bool `json:"allow"`
}

func (*Rule) CgroupString

func (d *Rule) CgroupString() string

func (*Rule) Mkdev

func (d *Rule) Mkdev() (uint64, error)

type Type

type Type rune
const (
    WildcardDevice Type = 'a'
    BlockDevice    Type = 'b'
    CharDevice     Type = 'c' // or 'u'
    FifoDevice     Type = 'p'
)

func (Type) CanCgroup

func (t Type) CanCgroup() bool

func (Type) CanMknod

func (t Type) CanMknod() bool

func (Type) IsValid

func (t Type) IsValid() bool