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  }