Home | History | Annotate | Line # | Download | only in sys
      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