1/* $NetBSD: param.c,v 1.67 2015/11/09 01:21:18 pgoyette Exp $ */
2
3/*
4 * Copyright (c) 1980, 1986, 1989 Regents of the University of California.
5 * All rights reserved.
6 * (c) UNIX System Laboratories, Inc.
7 * All or some portions of this file are derived from material licensed
8 * to the University of California by American Telephone and Telegraph
9 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
10 * the permission of UNIX System Laboratories, Inc.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 * notice, this list of conditions and the following disclaimer in the
19 * documentation and/or other materials provided with the distribution.
20 * 3. Neither the name of the University nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)param.c 7.20 (Berkeley) 6/27/91
37 */
38
39#include <sys/cdefs.h>
40__KERNEL_RCSID(0, "$NetBSD: param.c,v 1.67 2015/11/09 01:21:18 pgoyette Exp $");
41
42#ifdef _KERNEL_OPT
43#include "opt_hz.h"
44#include "opt_rtc_offset.h"
45#include "opt_sysv.h"
46#include "opt_sysvparam.h"
47#include "opt_multiprocessor.h"
48#endif
49
50#include <sys/param.h>
51#include <sys/systm.h>
52#include <sys/socket.h>
53#include <sys/socketvar.h>
54#include <sys/proc.h>
55#include <sys/vnode.h>
56#include <sys/file.h>
57#include <sys/callout.h>
58#include <sys/mbuf.h>
59#include <ufs/ufs/quota.h>
60#include <sys/kernel.h>
61#include <sys/utsname.h>
62#include <sys/lwp.h>
63#ifdef SYSVSHM
64#include <machine/vmparam.h>
65#include <sys/shm.h>
66#endif
67#ifdef SYSVSEM
68#include <sys/sem.h>
69#endif
70#ifdef SYSVMSG
71#include <sys/msg.h>
72#endif
73
74/*
75 * PCC cannot handle the 80KB string literal.
76 */
77#if !defined(__PCC__)
78#define CONFIG_FILE
79#include "config_file.h"
80#endif
81
82/*
83 * System parameter formulae.
84 *
85 * This file is copied into each directory where we compile
86 * the kernel; it should be modified there to suit local taste
87 * if necessary.
88 *
89 * Compiled with -DHZ=xx -DRTC_OFFSET=x -DMAXUSERS=xx
90 */
91
92#ifdef TIMEZONE
93#error TIMEZONE is an obsolete kernel option.
94#endif
95
96#ifdef DST
97#error DST is an obsolete kernel option.
98#endif
99
100#ifndef RTC_OFFSET
101#define RTC_OFFSET 0
102#endif
103
104#ifndef HZ
105#define HZ 100
106#endif
107
108#ifndef MAXFILES
109#define MAXFILES (3 * (NPROC + MAXUSERS) + 80)
110#endif
111
112#ifndef MAXEXEC
113#define MAXEXEC 16
114#endif
115
116int hz = HZ;
117int tick = 1000000 / HZ;
118/* can adjust 240ms in 60s */
119int tickadj = (240000 / (60 * HZ)) ? (240000 / (60 * HZ)) : 1;
120int rtc_offset = RTC_OFFSET;
121int maxproc = NPROC;
122int maxlwp = MAXLWP;
123int desiredvnodes = NVNODE;
124u_int maxfiles = MAXFILES;
125int fscale = FSCALE; /* kernel uses `FSCALE', user uses `fscale' */
126int maxexec = MAXEXEC; /* max number of concurrent exec() calls */
127
128#ifdef MULTIPROCESSOR
129u_int maxcpus = MAXCPUS;
130size_t coherency_unit = COHERENCY_UNIT;
131#else
132u_int maxcpus = 1;
133size_t coherency_unit = ALIGNBYTES + 1;
134#endif
135
136/*
137 * Various mbuf-related parameters. These can also be changed at run-time
138 * with sysctl.
139 */
140int nmbclusters = 0;
141
142#ifndef MBLOWAT
143#define MBLOWAT 16
144#endif
145int mblowat = MBLOWAT;
146
147#ifndef MCLLOWAT
148#define MCLLOWAT 8
149#endif
150int mcllowat = MCLLOWAT;
151
152#if XXX_PRG
153/*
154 * Values in support of System V compatible shared memory. XXX
155 */
156#ifdef SYSVSHM
157#if !defined(SHMMAX) && defined(SHMMAXPGS)
158#define SHMMAX SHMMAXPGS /* shminit() performs a `*= PAGE_SIZE' */
159#elif !defined(SHMMAX)
160#define SHMMAX 0
161#endif
162#ifndef SHMMIN
163#define SHMMIN 1
164#endif
165#ifndef SHMMNI
166#define SHMMNI 128 /* <64k, see IPCID_TO_IX in ipc.h */
167#endif
168#ifndef SHMSEG
169#define SHMSEG 128
170#endif
171
172struct shminfo shminfo = {
173 SHMMAX,
174 SHMMIN,
175 SHMMNI,
176 SHMSEG,
177 0
178};
179#endif
180
181/*
182 * Values in support of System V compatible semaphores.
183 */
184#ifdef SYSVSEM
185struct seminfo seminfo = {
186 SEMMAP, /* # of entries in semaphore map */
187 SEMMNI, /* # of semaphore identifiers */
188 SEMMNS, /* # of semaphores in system */
189 SEMMNU, /* # of undo structures in system */
190 SEMMSL, /* max # of semaphores per id */
191 SEMOPM, /* max # of operations per semop call */
192 SEMUME, /* max # of undo entries per process */
193 SEMUSZ, /* size in bytes of undo structure */
194 SEMVMX, /* semaphore maximum value */
195 SEMAEM /* adjust on exit max value */
196};
197#endif
198
199/*
200 * Values in support of System V compatible messages.
201 */
202#ifdef SYSVMSG
203struct msginfo msginfo = {
204 MSGMAX, /* max chars in a message */
205 MSGMNI, /* # of message queue identifiers */
206 MSGMNB, /* max chars in a queue */
207 MSGTQL, /* max messages in system */
208 MSGSSZ, /* size of a message segment */
209 /* (must be small power of 2 greater than 4) */
210 MSGSEG /* number of message segments */
211};
212#endif
213#endif /* XXX_PRG */
214
215/*
216 * Actual network mbuf sizes (read-only), for netstat.
217 */
218const int msize = MSIZE;
219const int mclbytes = MCLBYTES;
220