binctr/container/rlimit.go
Jess Frazelle 7743701943 add container lib
Signed-off-by: Jess Frazelle <acidburn@microsoft.com>
2018-03-19 22:54:29 -04:00

66 lines
2 KiB
Go

package container
import (
"fmt"
"github.com/opencontainers/runc/libcontainer/configs"
specs "github.com/opencontainers/runtime-spec/specs-go"
)
const (
rLimitCPU = iota // CPU time in sec
rLimitFsize // Maximum filesize
rLimitData // max data size
rLimitStack // max stack size
rLimitCore // max core file size
rLimitRss // max resident set size
rLimitNproc // max number of processes
rLimitNofile // max number of open files
rLimitMemlock // max locked-in-memory address space
rLimitAs // address space limit
rLimitLocks // maximum file locks held
rLimitSigpending // max number of pending signals
rLimitMsgqueue // maximum bytes in POSIX mqueues
rLimitNice // max nice prio allowed to raise to
rLimitRtprio // maximum realtime priority
rLimitRttime // timeout for RT tasks in us
)
var rlimitMap = map[string]int{
"RLIMIT_CPU": rLimitCPU,
"RLIMIT_FSIZE": rLimitFsize,
"RLIMIT_DATA": rLimitData,
"RLIMIT_STACK": rLimitStack,
"RLIMIT_CORE": rLimitCore,
"RLIMIT_RSS": rLimitRss,
"RLIMIT_NPROC": rLimitNproc,
"RLIMIT_NOFILE": rLimitNofile,
"RLIMIT_MEMLOCK": rLimitMemlock,
"RLIMIT_AS": rLimitAs,
"RLIMIT_LOCKS": rLimitLocks,
"RLIMIT_SIGPENDING": rLimitSigpending,
"RLIMIT_MSGQUEUE": rLimitMsgqueue,
"RLIMIT_NICE": rLimitNice,
"RLIMIT_RTPRIO": rLimitRtprio,
"RLIMIT_RTTIME": rLimitRttime,
}
func strToRlimit(key string) (int, error) {
rl, ok := rlimitMap[key]
if !ok {
return 0, fmt.Errorf("wrong rlimit value: %s", key)
}
return rl, nil
}
func createLibContainerRlimit(rlimit specs.POSIXRlimit) (configs.Rlimit, error) {
rl, err := strToRlimit(rlimit.Type)
if err != nil {
return configs.Rlimit{}, err
}
return configs.Rlimit{
Type: rl,
Hard: rlimit.Hard,
Soft: rlimit.Soft,
}, nil
}