master
  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
 57struct	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
 79struct 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. */
127struct orlimit {
128	int32_t	rlim_cur;		/* current (soft) limit */
129	int32_t	rlim_max;		/* maximum value for rlim_cur */
130};
131#endif
132
133struct 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. */
140struct loadavg {
141	fixpt_t	ldavg[3];
142	long	fscale;
143};
144#endif
145
146#ifdef _KERNEL
147extern struct loadavg averunnable;
148struct pcred;
149int	dosetrlimit(struct lwp *, struct proc *, int, struct rlimit *);
150#else
151#include <sys/cdefs.h>
152
153__BEGIN_DECLS
154int	getpriority(int, id_t);
155int	getrlimit(int, struct rlimit *);
156#ifndef __LIBC12_SOURCE__
157int	getrusage(int, struct rusage *) __RENAME(__getrusage50);
158#endif
159int	setpriority(int, id_t, int);
160int	setrlimit(int, const struct rlimit *);
161__END_DECLS
162
163#endif	/* _KERNEL */
164#endif	/* !_SYS_RESOURCE_H_ */