github.com/mgoltzsche/ctnr@v0.7.1-alpha/run/librunner/rlimit.go (about) 1 package librunner 2 3 import ( 4 "fmt" 5 6 "github.com/opencontainers/runc/libcontainer/configs" 7 "github.com/opencontainers/runtime-spec/specs-go" 8 ) 9 10 const ( 11 RLIMIT_CPU = iota // CPU time in sec 12 RLIMIT_FSIZE // Maximum filesize 13 RLIMIT_DATA // max data size 14 RLIMIT_STACK // max stack size 15 RLIMIT_CORE // max core file size 16 RLIMIT_RSS // max resident set size 17 RLIMIT_NPROC // max number of processes 18 RLIMIT_NOFILE // max number of open files 19 RLIMIT_MEMLOCK // max locked-in-memory address space 20 RLIMIT_AS // address space limit 21 RLIMIT_LOCKS // maximum file locks held 22 RLIMIT_SIGPENDING // max number of pending signals 23 RLIMIT_MSGQUEUE // maximum bytes in POSIX mqueues 24 RLIMIT_NICE // max nice prio allowed to raise to 25 RLIMIT_RTPRIO // maximum realtime priority 26 RLIMIT_RTTIME // timeout for RT tasks in us 27 ) 28 29 var linuxRlimitMap = map[string]int{ 30 "RLIMIT_CPU": RLIMIT_CPU, 31 "RLIMIT_FSIZE": RLIMIT_FSIZE, 32 "RLIMIT_DATA": RLIMIT_DATA, 33 "RLIMIT_STACK": RLIMIT_STACK, 34 "RLIMIT_CORE": RLIMIT_CORE, 35 "RLIMIT_RSS": RLIMIT_RSS, 36 "RLIMIT_NPROC": RLIMIT_NPROC, 37 "RLIMIT_NOFILE": RLIMIT_NOFILE, 38 "RLIMIT_MEMLOCK": RLIMIT_MEMLOCK, 39 "RLIMIT_AS": RLIMIT_AS, 40 "RLIMIT_LOCKS": RLIMIT_LOCKS, 41 "RLIMIT_SIGPENDING": RLIMIT_SIGPENDING, 42 "RLIMIT_MSGQUEUE": RLIMIT_MSGQUEUE, 43 "RLIMIT_NICE": RLIMIT_NICE, 44 "RLIMIT_RTPRIO": RLIMIT_RTPRIO, 45 "RLIMIT_RTTIME": RLIMIT_RTTIME, 46 } 47 48 func createLibContainerRlimit(rlimit specs.POSIXRlimit) (configs.Rlimit, error) { 49 rl, err := strToRlimit(rlimit.Type) 50 if err != nil { 51 return configs.Rlimit{}, err 52 } 53 return configs.Rlimit{ 54 Type: rl, 55 Hard: rlimit.Hard, 56 Soft: rlimit.Soft, 57 }, nil 58 } 59 60 func strToRlimit(key string) (int, error) { 61 rl, ok := linuxRlimitMap[key] 62 if !ok { 63 return 0, fmt.Errorf("wrong rlimit value: %s", key) 64 } 65 return rl, nil 66 }