1 /*        $NetBSD: resource.h,v 1.36 2019/03/30 23:29:55 christos Exp $         */
2 
3 /*
4  * Copyright (c) 1982, 1986, 1993
5  *        The Regents of the University of California.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  *        @(#)resource.h      8.4 (Berkeley) 1/9/95
32  */
33 
34 #ifndef _SYS_RESOURCE_H_
35 #define   _SYS_RESOURCE_H_
36 
37 #include <sys/featuretest.h>
38 #include <sys/time.h>
39 
40 /*
41  * Process priority specifications to get/setpriority.
42  */
43 #define   PRIO_MIN  -20
44 #define   PRIO_MAX  20
45 
46 #define   PRIO_PROCESS        0
47 #define   PRIO_PGRP 1
48 #define   PRIO_USER 2
49 
50 /*
51  * Resource utilization information.
52  */
53 
54 #define   RUSAGE_SELF         0
55 #define   RUSAGE_CHILDREN     -1
56 
57 struct    rusage {
58           struct timeval ru_utime;      /* user time used */
59           struct timeval ru_stime;      /* system time used */
60           long      ru_maxrss;                    /* max resident set size */
61 #define   ru_first  ru_ixrss
62           long      ru_ixrss;           /* integral shared memory size */
63           long      ru_idrss;           /* integral unshared data " */
64           long      ru_isrss;           /* integral unshared stack " */
65           long      ru_minflt;                    /* page reclaims */
66           long      ru_majflt;                    /* page faults */
67           long      ru_nswap;           /* swaps */
68           long      ru_inblock;                   /* block input operations */
69           long      ru_oublock;                   /* block output operations */
70           long      ru_msgsnd;                    /* messages sent */
71           long      ru_msgrcv;                    /* messages received */
72           long      ru_nsignals;                  /* signals received */
73           long      ru_nvcsw;           /* voluntary context switches */
74           long      ru_nivcsw;                    /* involuntary " */
75 #define   ru_last             ru_nivcsw
76 };
77 
78 #ifdef _NETBSD_SOURCE
79 struct wrusage {
80         struct rusage   wru_self;
81           struct rusage   wru_children;
82 };
83 #endif
84 
85 /*
86  * Resource limits
87  */
88 #define   RLIMIT_CPU          0                   /* cpu time in milliseconds */
89 #define   RLIMIT_FSIZE        1                   /* maximum file size */
90 #define   RLIMIT_DATA         2                   /* data size */
91 #define   RLIMIT_STACK        3                   /* stack size */
92 #define   RLIMIT_CORE         4                   /* core file size */
93 #define   RLIMIT_RSS          5                   /* resident set size */
94 #define   RLIMIT_MEMLOCK      6                   /* locked-in-memory address space */
95 #define   RLIMIT_NPROC        7                   /* number of processes */
96 #define   RLIMIT_NOFILE       8                   /* number of open files */
97 #define   RLIMIT_SBSIZE       9                   /* maximum size of all socket buffers */
98 #define   RLIMIT_AS 10                  /* virtual process size (inclusive of mmap) */
99 #define   RLIMIT_VMEM         RLIMIT_AS /* common alias */
100 #define   RLIMIT_NTHR         11                  /* number of threads */
101 
102 #if defined(_NETBSD_SOURCE)
103 #define   RLIM_NLIMITS        12                  /* number of resource limits */
104 
105 #define RLIM_STRINGS { \
106           "cpu-time", \
107           "file-size", \
108           "data-size", \
109           "stack-size", \
110           "core-dump-size", \
111           "resident-memory-size", \
112           "locked-memory-size", \
113           "processes-number", \
114           "files-number", \
115           "socket-buffer-size", \
116           "virtual-memory-size", \
117           "threads-number", \
118 }
119 #endif
120 
121 #define   RLIM_INFINITY       (~((u_quad_t)1 << 63))        /* no limit */
122 #define   RLIM_SAVED_MAX      RLIM_INFINITY       /* unrepresentable hard limit */
123 #define   RLIM_SAVED_CUR      RLIM_INFINITY       /* unrepresentable soft limit */
124 
125 #if defined(_KERNEL)
126 /* 4.3BSD compatibility rlimit argument structure. */
127 struct orlimit {
128           int32_t   rlim_cur;           /* current (soft) limit */
129           int32_t   rlim_max;           /* maximum value for rlim_cur */
130 };
131 #endif
132 
133 struct rlimit {
134           rlim_t    rlim_cur;           /* current (soft) limit */
135           rlim_t    rlim_max;           /* maximum value for rlim_cur */
136 };
137 
138 #if defined(_NETBSD_SOURCE)
139 /* Load average structure. */
140 struct loadavg {
141           fixpt_t   ldavg[3];
142           long      fscale;
143 };
144 #endif
145 
146 #ifdef _KERNEL
147 extern struct loadavg averunnable;
148 struct pcred;
149 int       dosetrlimit(struct lwp *, struct proc *, int, struct rlimit *);
150 #else
151 #include <sys/cdefs.h>
152 
153 __BEGIN_DECLS
154 int       getpriority(int, id_t);
155 int       getrlimit(int, struct rlimit *);
156 #ifndef __LIBC12_SOURCE__
157 int       getrusage(int, struct rusage *) __RENAME(__getrusage50);
158 #endif
159 int       setpriority(int, id_t, int);
160 int       setrlimit(int, const struct rlimit *);
161 __END_DECLS
162 
163 #endif    /* _KERNEL */
164 #endif    /* !_SYS_RESOURCE_H_ */
165