sysconfig.c revision 4321:a8930ec16e52
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28/*	  All Rights Reserved	*/
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32#include <sys/param.h>
33#include <sys/types.h>
34#include <sys/sysmacros.h>
35#include <sys/systm.h>
36#include <sys/tuneable.h>
37#include <sys/errno.h>
38#include <sys/var.h>
39#include <sys/signal.h>
40#include <sys/time.h>
41#include <sys/sysconfig.h>
42#include <sys/resource.h>
43#include <sys/ulimit.h>
44#include <sys/unistd.h>
45#include <sys/debug.h>
46#include <sys/cpuvar.h>
47#include <sys/mman.h>
48#include <sys/timer.h>
49#include <sys/zone.h>
50
51long
52sysconfig(int which)
53{
54	switch (which) {
55
56	/*
57	 * if it is not handled in mach_sysconfig either
58	 * it must be EINVAL.
59	 */
60	default:
61		return (mach_sysconfig(which)); /* `uname -i`/os */
62
63	case _CONFIG_CLK_TCK:
64		return ((long)hz);	/* clock frequency per second */
65
66	case _CONFIG_PROF_TCK:
67		return ((long)hz);	/* profiling clock freq per sec */
68
69	case _CONFIG_NGROUPS:
70		/*
71		 * Maximum number of supplementary groups.
72		 */
73		return (ngroups_max);
74
75	case _CONFIG_OPEN_FILES:
76		/*
77		 * Maximum number of open files (soft limit).
78		 */
79		{
80			rlim64_t fd_ctl;
81			mutex_enter(&curproc->p_lock);
82			fd_ctl = rctl_enforced_value(
83			    rctlproc_legacy[RLIMIT_NOFILE], curproc->p_rctls,
84			    curproc);
85			mutex_exit(&curproc->p_lock);
86			return ((ulong_t)fd_ctl);
87		}
88
89	case _CONFIG_CHILD_MAX:
90		/*
91		 * Maximum number of processes.
92		 */
93		return (v.v_maxup);
94
95	case _CONFIG_POSIX_VER:
96		return (_POSIX_VERSION); /* current POSIX version */
97
98	case _CONFIG_PAGESIZE:
99		return (PAGESIZE);
100
101	case _CONFIG_XOPEN_VER:
102		return (_XOPEN_VERSION); /* current XOPEN version */
103
104	case _CONFIG_NPROC_CONF:
105		return (zone_ncpus_get(curproc->p_zone));
106
107	case _CONFIG_NPROC_ONLN:
108		return (zone_ncpus_online_get(curproc->p_zone));
109
110	case _CONFIG_NPROC_MAX:
111		return (max_ncpus);
112
113	case _CONFIG_STACK_PROT:
114		return (curproc->p_stkprot & ~PROT_USER);
115
116	case _CONFIG_AIO_LISTIO_MAX:
117		return (_AIO_LISTIO_MAX);
118
119	case _CONFIG_AIO_MAX:
120		return (_AIO_MAX);
121
122	case _CONFIG_AIO_PRIO_DELTA_MAX:
123		return (0);
124
125	case _CONFIG_DELAYTIMER_MAX:
126		return (INT_MAX);
127
128	case _CONFIG_MQ_OPEN_MAX:
129		return (_MQ_OPEN_MAX);
130
131	case _CONFIG_MQ_PRIO_MAX:
132		return (_MQ_PRIO_MAX);
133
134	case _CONFIG_RTSIG_MAX:
135		return (_SIGRTMAX - _SIGRTMIN + 1);
136
137	case _CONFIG_SEM_NSEMS_MAX:
138		return (_SEM_NSEMS_MAX);
139
140	case _CONFIG_SEM_VALUE_MAX:
141		return (_SEM_VALUE_MAX);
142
143	case _CONFIG_SIGQUEUE_MAX:
144		return (_SIGQUEUE_MAX);
145
146	case _CONFIG_SIGRT_MIN:
147		return (_SIGRTMIN);
148
149	case _CONFIG_SIGRT_MAX:
150		return (_SIGRTMAX);
151
152	case _CONFIG_TIMER_MAX:
153		return (timer_max);
154
155	case _CONFIG_PHYS_PAGES:
156		return (physinstalled);
157
158	case _CONFIG_AVPHYS_PAGES:
159		return (freemem);
160
161	case _CONFIG_MAXPID:
162		return (maxpid);
163
164	case _CONFIG_CPUID_MAX:
165		return (max_cpuid);
166
167	case _CONFIG_EPHID_MAX:
168		return (MAXEPHUID);
169
170	case _CONFIG_SYMLOOP_MAX:
171		return (MAXSYMLINKS);
172	}
173}
174