| // Package sysinfo stores information about which features a kernel supports. |
| package sysinfo |
| |
| // Opt for New(). |
| type Opt func(info *SysInfo) |
| |
| // SysInfo stores information about which features a kernel supports. |
| // TODO Windows: Factor out platform specific capabilities. |
| type SysInfo struct { |
| // Whether the kernel supports AppArmor or not |
| AppArmor bool |
| // Whether the kernel supports Seccomp or not |
| Seccomp bool |
| |
| cgroupMemInfo |
| cgroupCPUInfo |
| cgroupBlkioInfo |
| cgroupCpusetInfo |
| cgroupPids |
| |
| // Whether the kernel supports cgroup namespaces or not |
| CgroupNamespaces bool |
| |
| // TimeNamespaces indicates whether the kernel supports time namespaces. |
| TimeNamespaces bool |
| |
| // Whether IPv4 forwarding is supported or not, if this was disabled, networking will not work |
| IPv4ForwardingDisabled bool |
| |
| // Whether the cgroup has the mountpoint of "devices" or not |
| CgroupDevicesEnabled bool |
| |
| // Whether the cgroup is in unified mode (v2). |
| CgroupUnified bool |
| |
| // Warnings contains a slice of warnings that occurred while collecting |
| // system information. These warnings are intended to be informational |
| // messages for the user, and can either be logged or returned to the |
| // client; they are not intended to be parsed / used for other purposes, |
| // and do not have a fixed format. |
| Warnings []string |
| |
| // cgMounts is the list of cgroup v1 mount paths, indexed by subsystem, to |
| // inspect availability of subsystems. |
| cgMounts map[string]string |
| |
| // cg2GroupPath is the cgroup v2 group path to inspect availability of the controllers. |
| cg2GroupPath string |
| |
| // cg2Controllers is an index of available cgroup v2 controllers. |
| cg2Controllers map[string]struct{} |
| } |
| |
| type cgroupMemInfo struct { |
| // Whether memory limit is supported or not |
| MemoryLimit bool |
| |
| // Whether swap limit is supported or not |
| SwapLimit bool |
| |
| // Whether soft limit is supported or not |
| MemoryReservation bool |
| |
| // Whether OOM killer disable is supported or not |
| OomKillDisable bool |
| |
| // Whether memory swappiness is supported or not |
| MemorySwappiness bool |
| } |
| |
| type cgroupCPUInfo struct { |
| // Whether CPU shares is supported or not |
| CPUShares bool |
| |
| // Whether CPU CFS (Completely Fair Scheduler) is supported |
| CPUCfs bool |
| |
| // Whether CPU real-time scheduler is supported |
| CPURealtime bool |
| } |
| |
| type cgroupBlkioInfo struct { |
| // Whether Block IO weight is supported or not |
| BlkioWeight bool |
| |
| // Whether Block IO weight_device is supported or not |
| BlkioWeightDevice bool |
| |
| // Whether Block IO read limit in bytes per second is supported or not |
| BlkioReadBpsDevice bool |
| |
| // Whether Block IO write limit in bytes per second is supported or not |
| BlkioWriteBpsDevice bool |
| |
| // Whether Block IO read limit in IO per second is supported or not |
| BlkioReadIOpsDevice bool |
| |
| // Whether Block IO write limit in IO per second is supported or not |
| BlkioWriteIOpsDevice bool |
| } |
| |
| type cgroupCpusetInfo struct { |
| // Whether Cpuset is supported or not |
| Cpuset bool |
| |
| // Available Cpuset's cpus as read from "cpuset.cpus.effective" (cgroups v2) |
| // or "cpuset.cpus" (cgroups v1). |
| Cpus string |
| |
| // CPUSets holds the list of available cpusets parsed from "cpuset.cpus.effective" (cgroups v2) |
| // or "cpuset.cpus" (cgroups v1). |
| CPUSets map[int]struct{} |
| |
| // Available Cpuset's memory nodes as read from "cpuset.mems.effective" (cgroups v2) |
| // or "cpuset.mems" (cgroups v1). |
| Mems string |
| |
| // MemSets holds the list of available cpusets parsed from "cpuset.mems.effective" (cgroups v2) |
| // or "cpuset.mems" (cgroups v1). |
| MemSets map[int]struct{} |
| } |
| |
| type cgroupPids struct { |
| // Whether Pids Limit is supported or not |
| PidsLimit bool |
| } |
| |
| // IsCpusetCpusAvailable returns `true` if the provided string set is contained |
| // in cgroup's cpuset.cpus set, `false` otherwise. |
| // If error is not nil a parsing error occurred. |
| func (c cgroupCpusetInfo) IsCpusetCpusAvailable(requested string) (bool, error) { |
| return isCpusetListAvailable(requested, c.CPUSets) |
| } |
| |
| // IsCpusetMemsAvailable returns `true` if the provided string set is contained |
| // in cgroup's cpuset.mems set, `false` otherwise. |
| // If error is not nil a parsing error occurred. |
| func (c cgroupCpusetInfo) IsCpusetMemsAvailable(requested string) (bool, error) { |
| return isCpusetListAvailable(requested, c.MemSets) |
| } |