nscd_cfgdef.h revision 4904:cd464a980538
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 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef	_NSCD_CFGDEF_H
27#define	_NSCD_CFGDEF_H
28
29#pragma ident	"%Z%%M%	%I%	%E% SMI"
30
31#ifdef	__cplusplus
32extern "C" {
33#endif
34
35#include <stddef.h>
36#include <limits.h>
37#include <nss_dbdefs.h>
38#include "nscd_config.h"
39#include "nscd_log.h"
40#include "cache.h"
41
42/*
43 * structure used for preliminary checking of an integer
44 * configuration value
45 */
46typedef	struct {
47	int	min;
48	int	max;
49} nscd_cfg_int_check_t;
50
51/*
52 * structure used for preliminary checking of a bitmap
53 * configuration value
54 */
55typedef	struct {
56	nscd_cfg_bitmap_t	valid_bits;
57} nscd_cfg_bitmap_check_t;
58
59/*
60 * structure used for preliminary checking of a string
61 * configuration value
62 */
63typedef	struct {
64	nscd_bool_t	must_not_null;
65	int		maxlen;
66} nscd_cfg_str_check_t;
67
68/*
69 * Per nsswitch database config data
70 */
71typedef struct {
72	nscd_cfg_frontend_t	fe;
73	nscd_cfg_switch_t	sw;
74	nscd_cfg_cache_t	cache;
75} nscd_cfg_nsw_db_data_t;
76
77/*
78 * Per nsswitch database statistics data
79 */
80typedef struct {
81	nscd_cfg_stat_switch_t		sw;
82	nscd_cfg_stat_cache_t		cache;
83} nscd_cfg_stat_nsw_db_data_t;
84
85/*
86 * global statistics data
87 */
88typedef struct {
89	nscd_cfg_stat_global_log_t	log;
90	nscd_cfg_stat_global_switch_t	sw;
91	nscd_cfg_stat_cache_t		cache;
92} nscd_cfg_stat_global_data_t;
93
94/*
95 * global config data
96 */
97typedef struct {
98	nscd_cfg_global_log_t		log;
99	nscd_cfg_global_frontend_t	fe;
100	nscd_cfg_global_selfcred_t	sc;
101	nscd_cfg_global_switch_t	sw;
102	nscd_cfg_global_cache_t		cache;
103} nscd_cfg_global_data_t;
104
105/*
106 * structure for handling the switch database specific group
107 * or parameter default
108 */
109typedef struct nscd_cfg_nsw_spc_default {
110	char	*db;
111	int	group_off;
112	int	param_off;
113	void	*data;		/* pointer or link to data */
114	int	data_len;
115} nscd_cfg_nsw_spc_default_t;
116
117/*
118 * name service switch source (repository) table
119 */
120nscd_cfg_id_t _nscd_cfg_nsw_src[] = {
121	{	0,	"files"			},
122	{	1,	"ldap"			},
123	{	2,	"nis"			},
124	{	3,	"nisplus"		},
125	{	4,	"mdns"			},
126	{	5,	"dns"			},
127	{	6,	"compat"		},
128	{	7,	"user"			},
129	{	-1,	NULL			}
130};
131
132/*
133 * name service related smf service table
134 * (the order of the services should match the order of the source
135 *  listed above, 0: files, 1: ldap, 2: nis, 3: nisplus, 4: mdns.
136 *  dns is not needed)
137 */
138nscd_cfg_id_t _nscd_cfg_smf_services[] = {
139	{	0,	"svc:/system/name-service-cache:default"},
140	{	1,	"svc:/network/ldap/client:default"	},
141	{	2,	"svc:/network/nis/client:default"	},
142	{	3,	"svc:/network/rpc/bind:default"		},
143	{	4,	"svc:/network/dns/multicast:default"	},
144	{	-1,	NULL					}
145};
146
147/*
148 * name service database table
149 */
150nscd_cfg_id_t _nscd_cfg_nsw_db[] = {
151	{	0,	NSS_DBNAM_PASSWD	},
152	{	1,	NSS_DBNAM_GROUP		},
153	{	2,	NSS_DBNAM_HOSTS		},
154	{	3,	NSS_DBNAM_IPNODES	},
155	{	4,	NSS_DBNAM_EXECATTR	},
156	{	5,	NSS_DBNAM_PROFATTR	},
157	{	6,	NSS_DBNAM_USERATTR	},
158	{	7,	NSS_DBNAM_NETWORKS	},
159	{	8,	NSS_DBNAM_PROTOCOLS	},
160	{	9,	NSS_DBNAM_RPC		},
161	{	10,	NSS_DBNAM_ETHERS	},
162	{	11,	NSS_DBNAM_NETMASKS	},
163	{	12,	NSS_DBNAM_BOOTPARAMS	},
164	{	13,	NSS_DBNAM_PUBLICKEY	},
165	{	14,	NSS_DBNAM_NETGROUP	},
166	{	15,	NSS_DBNAM_SERVICES	},
167	{	16,	NSS_DBNAM_PRINTERS	},
168	{	17,	NSS_DBNAM_AUTHATTR	},
169	{	18,	NSS_DBNAM_PROJECT	},
170	{	19,	NSS_DBNAM_SHADOW	},
171	{	20,	NSS_DBNAM_AUDITUSER	},
172	{	21,	NSS_DBNAM_TSOL_TP	},
173	{	22,	NSS_DBNAM_TSOL_RH	},
174	/* pseudo-databases for the compat backend */
175	{	23,	NSS_DBNAM_PASSWD_COMPAT },
176	{	24,	NSS_DBNAM_GROUP_COMPAT  },
177#define	NSS_DBNAM_COMPAT_NUM_DB	5
178	/*
179	 * pseudo-databases that use the switch policy that is
180	 * configured for NSS_DBNAM_PASSWD_COMPAT
181	 */
182	{	25,	NSS_DBNAM_PASSWD	},
183	{	26,	NSS_DBNAM_SHADOW	},
184	{	27,	NSS_DBNAM_AUDITUSER	},
185	{	28,	NSS_DBNAM_USERATTR	},
186	/*
187	 * pseudo-database that uses the switch policy that is
188	 * configured for NSS_DBNAM_GROUP_COMPAT
189	 */
190	{	29,	NSS_DBNAM_GROUP		},
191	{	-1,	NULL			}
192};
193
194/*
195 * A special way to indicate all switch databases
196 */
197static	nscd_cfg_id_t _nscd_cfg_nsw_alldb = {
198		NSCD_CFG_NSW_ALLDB_INDEX,
199		NSCD_CFG_NSW_ALLDB
200};
201
202/*
203 * data for preliminary checking of the log configuration
204 */
205static nscd_cfg_str_check_t	NSCD_CFG_LOGFILE_PCHECK =
206				{nscd_false, PATH_MAX};
207static nscd_cfg_bitmap_check_t	NSCD_CFG_LOGCOMP_PCHECK =
208				{NSCD_LOG_ALL};
209static nscd_cfg_bitmap_check_t	NSCD_CFG_LOGLEVEL_PCHECK =
210				{NSCD_LOG_LEVEL_ALL};
211
212/* data for preliminary checking of the switch configuration */
213static nscd_cfg_str_check_t	NSCD_CFG_NSWCFGSTR_PCHECK =
214				{nscd_true, 128};
215
216/*
217 * macros for defining the static param table
218 */
219#define	NSCD_CFG_PGROUP_DESC(pn, type, pflag, gf, g_in_t, pcheck_p,\
220		nfunc_name, vfunc_name) \
221	{ \
222		{-1, pn}, type, (NSCD_CFG_PFLAG_GROUP | pflag), \
223		0, 0, 0,\
224		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
225		pcheck_p, nfunc_name, vfunc_name \
226	}
227
228#define	NSCD_CFG_PARAM_DESC(pn, type, pflag, pf, p_in_t, \
229		gf, g_in_t, pcheck_p, nfunc_name, vfunc_name) \
230	{ \
231		{-1, pn}, type, pflag, \
232		NSCD_SIZEOF(p_in_t, pf), offsetof(p_in_t, pf), -1, \
233		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
234		pcheck_p, nfunc_name, vfunc_name \
235	}
236
237#define	NSCD_CFG_PGROUP_DESC_NULL \
238	{ \
239		{-1, NULL}, -1, NSCD_CFG_PFLAG_GROUP, \
240		0, 0, 0, \
241		0, 0, 0, \
242		NULL, NULL, NULL \
243	}
244
245/* nscd internal cfg_*_notify() cfg_*_verify() and cfg_*_get_stat()  */
246extern	nscd_rc_t	_nscd_cfg_log_notify();
247extern	nscd_rc_t	_nscd_cfg_log_verify();
248extern	nscd_rc_t	_nscd_cfg_frontend_notify();
249extern	nscd_rc_t	_nscd_cfg_frontend_verify();
250extern	nscd_rc_t	_nscd_cfg_selfcred_notify();
251extern	nscd_rc_t	_nscd_cfg_selfcred_verify();
252extern	nscd_rc_t	_nscd_cfg_switch_notify();
253extern	nscd_rc_t	_nscd_cfg_switch_verify();
254extern	nscd_rc_t	_nscd_cfg_cache_notify();
255extern	nscd_rc_t	_nscd_cfg_cache_verify();
256extern	nscd_rc_t	_nscd_cfg_log_get_stat();
257extern	nscd_rc_t	_nscd_cfg_switch_get_stat();
258extern	nscd_rc_t	_nscd_cfg_cache_get_stat();
259
260/*
261 * the following macros are used to indicate a parameter's
262 * notify/verify/get_stat functions are the same as those
263 * of the group
264 */
265#define	NSCD_CFG_FUNC_NOTIFY_AS_GROUP	((nscd_cfg_func_notify_t)-1)
266#define	NSCD_CFG_FUNC_VERIFY_AS_GROUP	((nscd_cfg_func_verify_t)-1)
267#define	NSCD_CFG_FUNC_GET_STAT_AS_GROUP	((nscd_cfg_func_get_stat_t)-1)
268
269/*
270 * the static config parameter description table
271 */
272static	nscd_cfg_param_desc_t	_nscd_cfg_param_desc[] = {
273
274	NSCD_CFG_PGROUP_DESC(
275		"param-group-global-log",
276		NSCD_CFG_DATA_NONE,
277		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
278		NSCD_CFG_PFLAG_GLOBAL,
279		log,
280		nscd_cfg_global_data_t,
281		NULL,
282		_nscd_cfg_log_notify,
283		_nscd_cfg_log_verify),
284
285	NSCD_CFG_PARAM_DESC(
286		"logfile",
287		NSCD_CFG_DATA_STRING,
288		NSCD_CFG_PFLAG_GLOBAL |
289		NSCD_CFG_PFLAG_VLEN_DATA,
290		logfile,
291		nscd_cfg_global_log_t,
292		log,
293		nscd_cfg_global_data_t,
294		&NSCD_CFG_LOGFILE_PCHECK,
295		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
296		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
297
298	NSCD_CFG_PARAM_DESC(
299		"debug-level",
300		NSCD_CFG_DATA_BITMAP,
301		NSCD_CFG_PFLAG_GLOBAL,
302		debug_level,
303		nscd_cfg_global_log_t,
304		log,
305		nscd_cfg_global_data_t,
306		&NSCD_CFG_LOGLEVEL_PCHECK,
307		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
308		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
309
310	NSCD_CFG_PARAM_DESC(
311		"debug-components",
312		NSCD_CFG_DATA_BITMAP,
313		NSCD_CFG_PFLAG_GLOBAL,
314		debug_comp,
315		nscd_cfg_global_log_t,
316		log,
317		nscd_cfg_global_data_t,
318		&NSCD_CFG_LOGCOMP_PCHECK,
319		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
320		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
321
322	NSCD_CFG_PGROUP_DESC(
323		"param-group-global-frontend",
324		NSCD_CFG_DATA_NONE,
325		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
326		NSCD_CFG_PFLAG_GLOBAL,
327		fe,
328		nscd_cfg_global_data_t,
329		NULL,
330		_nscd_cfg_frontend_notify,
331		_nscd_cfg_frontend_verify),
332
333	NSCD_CFG_PARAM_DESC(
334		"common-worker-threads",
335		NSCD_CFG_DATA_INTEGER,
336		NSCD_CFG_PFLAG_SEND_BIT_SELECTED |
337		NSCD_CFG_PFLAG_GLOBAL,
338		common_worker_threads,
339		nscd_cfg_global_frontend_t,
340		fe,
341		nscd_cfg_global_data_t,
342		NULL,
343		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
344		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
345
346	NSCD_CFG_PARAM_DESC(
347		"cache-hit-threads",
348		NSCD_CFG_DATA_INTEGER,
349		NSCD_CFG_PFLAG_SEND_BIT_SELECTED |
350		NSCD_CFG_PFLAG_GLOBAL,
351		cache_hit_threads,
352		nscd_cfg_global_frontend_t,
353		fe,
354		nscd_cfg_global_data_t,
355		NULL,
356		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
357		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
358
359	NSCD_CFG_PGROUP_DESC(
360		"param-group-global-selfcred",
361		NSCD_CFG_DATA_NONE,
362		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
363		NSCD_CFG_PFLAG_GLOBAL,
364		sc,
365		nscd_cfg_global_data_t,
366		NULL,
367		_nscd_cfg_selfcred_notify,
368		_nscd_cfg_selfcred_verify),
369
370	NSCD_CFG_PARAM_DESC(
371		"enable-selfcred",
372		NSCD_CFG_DATA_BOOLEAN,
373		NSCD_CFG_PFLAG_GLOBAL,
374		enable_selfcred,
375		nscd_cfg_global_selfcred_t,
376		sc,
377		nscd_cfg_global_data_t,
378		NULL,
379		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
380		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
381
382	NSCD_CFG_PARAM_DESC(
383		"max-per-user-nscd",
384		NSCD_CFG_DATA_INTEGER,
385		NSCD_CFG_PFLAG_GLOBAL,
386		max_per_user_nscd,
387		nscd_cfg_global_selfcred_t,
388		sc,
389		nscd_cfg_global_data_t,
390		NULL,
391		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
392		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
393
394	NSCD_CFG_PARAM_DESC(
395		"per-user-nscd-ttl",
396		NSCD_CFG_DATA_INTEGER,
397		NSCD_CFG_PFLAG_GLOBAL,
398		per_user_nscd_ttl,
399		nscd_cfg_global_selfcred_t,
400		sc,
401		nscd_cfg_global_data_t,
402		NULL,
403		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
404		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
405
406	NSCD_CFG_PGROUP_DESC(
407		"param-group-global-switch",
408		NSCD_CFG_DATA_NONE,
409		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
410		NSCD_CFG_PFLAG_GLOBAL,
411		sw,
412		nscd_cfg_global_data_t,
413		NULL,
414		_nscd_cfg_switch_notify,
415		_nscd_cfg_switch_verify),
416
417	NSCD_CFG_PARAM_DESC(
418		"global-enable-lookup",
419		NSCD_CFG_DATA_BOOLEAN,
420		NSCD_CFG_PFLAG_GLOBAL,
421		enable_lookup_g,
422		nscd_cfg_global_switch_t,
423		sw,
424		nscd_cfg_global_data_t,
425		NULL,
426		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
427		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
428
429	NSCD_CFG_PARAM_DESC(
430		"global-enable-loopback-checking",
431		NSCD_CFG_DATA_BOOLEAN,
432		NSCD_CFG_PFLAG_GLOBAL,
433		enable_loopback_checking_g,
434		nscd_cfg_global_switch_t,
435		sw,
436		nscd_cfg_global_data_t,
437		NULL,
438		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
439		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
440
441	NSCD_CFG_PARAM_DESC(
442		"global-check-smf-state-interval",
443		NSCD_CFG_DATA_INTEGER,
444		NSCD_CFG_PFLAG_GLOBAL,
445		check_smf_state_interval_g,
446		nscd_cfg_global_switch_t,
447		sw,
448		nscd_cfg_global_data_t,
449		NULL,
450		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
451		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
452
453	NSCD_CFG_PGROUP_DESC(
454		"param-group-global-cache",
455		NSCD_CFG_DATA_NONE,
456		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
457		NSCD_CFG_PFLAG_INIT_SET_ALL_DB |
458		NSCD_CFG_PFLAG_GLOBAL,
459		cache,
460		nscd_cfg_global_data_t,
461		NULL,
462		_nscd_cfg_cache_notify,
463		_nscd_cfg_cache_verify),
464
465	NSCD_CFG_PARAM_DESC(
466		"global-enable-cache",
467		NSCD_CFG_DATA_BOOLEAN,
468		NSCD_CFG_PFLAG_GLOBAL,
469		enable,
470		nscd_cfg_global_cache_t,
471		cache,
472		nscd_cfg_global_data_t,
473		NULL,
474		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
475		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
476
477	/* non-global config param from this point on */
478
479	NSCD_CFG_PGROUP_DESC(
480		"param-group-frontend",
481		NSCD_CFG_DATA_NONE,
482		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP,
483		fe,
484		nscd_cfg_nsw_db_data_t,
485		NULL,
486		_nscd_cfg_frontend_notify,
487		_nscd_cfg_frontend_verify),
488
489	NSCD_CFG_PARAM_DESC(
490		"worker-thread-per-nsw-db",
491		NSCD_CFG_DATA_INTEGER,
492		NSCD_CFG_PFLAG_NONE,
493		worker_thread_per_nsw_db,
494		nscd_cfg_frontend_t,
495		fe,
496		nscd_cfg_nsw_db_data_t,
497		NULL,
498		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
499		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
500
501	NSCD_CFG_PGROUP_DESC(
502		"param-group-switch",
503		NSCD_CFG_DATA_NONE,
504		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
505		NSCD_CFG_PFLAG_NONE,
506		sw,
507		nscd_cfg_nsw_db_data_t,
508		NULL,
509		_nscd_cfg_switch_notify,
510		_nscd_cfg_switch_verify),
511
512	NSCD_CFG_PARAM_DESC(
513		"nsw-config-string",
514		NSCD_CFG_DATA_STRING,
515		NSCD_CFG_PFLAG_VLEN_DATA |
516		NSCD_CFG_PFLAG_LINKED,
517		nsw_config_string,
518		nscd_cfg_switch_t,
519		sw,
520		nscd_cfg_nsw_db_data_t,
521		&NSCD_CFG_NSWCFGSTR_PCHECK,
522		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
523		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
524
525	NSCD_CFG_PARAM_DESC(
526		"nsw-config-database",
527		NSCD_CFG_DATA_STRING,
528		NSCD_CFG_PFLAG_VLEN_DATA |
529		NSCD_CFG_PFLAG_HIDDEN,
530		nsw_config_db,
531		nscd_cfg_switch_t,
532		sw,
533		nscd_cfg_nsw_db_data_t,
534		&NSCD_CFG_NSWCFGSTR_PCHECK,
535		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
536		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
537
538	NSCD_CFG_PARAM_DESC(
539		"enable-lookup",
540		NSCD_CFG_DATA_BOOLEAN,
541		NSCD_CFG_PFLAG_NONE,
542		enable_lookup,
543		nscd_cfg_switch_t,
544		sw,
545		nscd_cfg_nsw_db_data_t,
546		NULL,
547		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
548		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
549
550	NSCD_CFG_PARAM_DESC(
551		"enable-loopback-checking",
552		NSCD_CFG_DATA_BOOLEAN,
553		NSCD_CFG_PFLAG_NONE,
554		enable_loopback_checking,
555		nscd_cfg_switch_t,
556		sw,
557		nscd_cfg_nsw_db_data_t,
558		NULL,
559		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
560		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
561
562	NSCD_CFG_PARAM_DESC(
563		"max-nsw-state-per-db",
564		NSCD_CFG_DATA_INTEGER,
565		NSCD_CFG_PFLAG_NONE,
566		max_nsw_state_per_db,
567		nscd_cfg_switch_t,
568		sw,
569		nscd_cfg_nsw_db_data_t,
570		NULL,
571		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
572		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
573
574	NSCD_CFG_PARAM_DESC(
575		"max-nsw-state-per-thread",
576		NSCD_CFG_DATA_INTEGER,
577		NSCD_CFG_PFLAG_NONE,
578		max_nsw_state_per_thread,
579		nscd_cfg_switch_t,
580		sw,
581		nscd_cfg_nsw_db_data_t,
582		NULL,
583		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
584		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
585
586	NSCD_CFG_PARAM_DESC(
587		"max-getent-ctx-per-db",
588		NSCD_CFG_DATA_INTEGER,
589		NSCD_CFG_PFLAG_NONE,
590		max_getent_ctx_per_db,
591		nscd_cfg_switch_t,
592		sw,
593		nscd_cfg_nsw_db_data_t,
594		NULL,
595		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
596		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
597
598	NSCD_CFG_PGROUP_DESC(
599		"param-group-cache",
600		NSCD_CFG_DATA_NONE,
601		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP,
602		cache,
603		nscd_cfg_nsw_db_data_t,
604		NULL,
605		_nscd_cfg_cache_notify,
606		_nscd_cfg_cache_verify),
607
608	NSCD_CFG_PARAM_DESC(
609		"enable-cache",
610		NSCD_CFG_DATA_BOOLEAN,
611		NSCD_CFG_PFLAG_NONE,
612		enable,
613		nscd_cfg_cache_t,
614		cache,
615		nscd_cfg_nsw_db_data_t,
616		NULL,
617		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
618		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
619
620	NSCD_CFG_PARAM_DESC(
621		"enable-per-user-cache",
622		NSCD_CFG_DATA_BOOLEAN,
623		NSCD_CFG_PFLAG_NONE,
624		per_user,
625		nscd_cfg_cache_t,
626		cache,
627		nscd_cfg_nsw_db_data_t,
628		NULL,
629		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
630		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
631
632	NSCD_CFG_PARAM_DESC(
633		"avoid-nameservice",
634		NSCD_CFG_DATA_BOOLEAN,
635		NSCD_CFG_PFLAG_NONE,
636		avoid_ns,
637		nscd_cfg_cache_t,
638		cache,
639		nscd_cfg_nsw_db_data_t,
640		NULL,
641		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
642		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
643
644	NSCD_CFG_PARAM_DESC(
645		"check-files",
646		NSCD_CFG_DATA_BOOLEAN,
647		NSCD_CFG_PFLAG_NONE,
648		check_files,
649		nscd_cfg_cache_t,
650		cache,
651		nscd_cfg_nsw_db_data_t,
652		NULL,
653		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
654		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
655
656	NSCD_CFG_PARAM_DESC(
657		"check-file-interval",
658		NSCD_CFG_DATA_INTEGER,
659		NSCD_CFG_PFLAG_NONE,
660		check_interval,
661		nscd_cfg_cache_t,
662		cache,
663		nscd_cfg_nsw_db_data_t,
664		NULL,
665		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
666		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
667
668	NSCD_CFG_PARAM_DESC(
669		"positive-time-to-live",
670		NSCD_CFG_DATA_INTEGER,
671		NSCD_CFG_PFLAG_NONE,
672		pos_ttl,
673		nscd_cfg_cache_t,
674		cache,
675		nscd_cfg_nsw_db_data_t,
676		NULL,
677		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
678		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
679
680	NSCD_CFG_PARAM_DESC(
681		"negative-time-to-live",
682		NSCD_CFG_DATA_INTEGER,
683		NSCD_CFG_PFLAG_NONE,
684		neg_ttl,
685		nscd_cfg_cache_t,
686		cache,
687		nscd_cfg_nsw_db_data_t,
688		NULL,
689		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
690		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
691
692	NSCD_CFG_PARAM_DESC(
693		"keep-hot-count",
694		NSCD_CFG_DATA_INTEGER,
695		NSCD_CFG_PFLAG_NONE,
696		keephot,
697		nscd_cfg_cache_t,
698		cache,
699		nscd_cfg_nsw_db_data_t,
700		NULL,
701		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
702		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
703
704	NSCD_CFG_PARAM_DESC(
705		"hint-size",
706		NSCD_CFG_DATA_INTEGER,
707		NSCD_CFG_PFLAG_NONE,
708		hint_size,
709		nscd_cfg_cache_t,
710		cache,
711		nscd_cfg_nsw_db_data_t,
712		NULL,
713		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
714		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
715
716	NSCD_CFG_PARAM_DESC(
717		"maximum-entries-allowed",
718		NSCD_CFG_DATA_INTEGER,
719		NSCD_CFG_PFLAG_NONE,
720		maxentries,
721		nscd_cfg_cache_t,
722		cache,
723		nscd_cfg_nsw_db_data_t,
724		NULL,
725		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
726		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
727
728	NSCD_CFG_PARAM_DESC(
729		"suggested-size",
730		NSCD_CFG_DATA_INTEGER,
731		NSCD_CFG_PFLAG_OBSOLETE,
732		suggestedsize,
733		nscd_cfg_cache_t,
734		cache,
735		nscd_cfg_nsw_db_data_t,
736		NULL,
737		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
738		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
739
740	NSCD_CFG_PARAM_DESC(
741		"old-data-ok",
742		NSCD_CFG_DATA_BOOLEAN,
743		NSCD_CFG_PFLAG_OBSOLETE,
744		old_data_ok,
745		nscd_cfg_cache_t,
746		cache,
747		nscd_cfg_nsw_db_data_t,
748		NULL,
749		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
750		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
751
752	NSCD_CFG_PGROUP_DESC_NULL
753};
754
755/*
756 * defaults for the global configuration
757 */
758static nscd_cfg_global_data_t nscd_cfg_global_default = {
759
760	/*
761	 * nscd_cfg_global_log_t
762	 */
763	{
764
765	NSCD_CFG_GROUP_INFO_GLOBAL_LOG,
766	NULL,
767	NSCD_LOG_LEVEL_NONE,	/* debug_level */
768	NSCD_LOG_CACHE,		/* debug_comp */
769
770	},
771
772	/*
773	 * nscd_cfg_global_frontend_t
774	 */
775	{
776
777	NSCD_CFG_GROUP_INFO_GLOBAL_FRONTEND,
778	100,			/* common_worker_threads */
779	100,			/* cache_hit_threads */
780
781	},
782
783	/*
784	 * nscd_cfg_global_selfcred_t
785	 */
786	{
787
788	NSCD_CFG_GROUP_INFO_GLOBAL_SELFCRED,
789	nscd_true,		/* enable_selfcred */
790	1000,			/* max_per_user_nscd */
791	120,			/* per_user_nscd_ttl: 120 seconds */
792
793	},
794
795	/*
796	 * nscd_cfg_global_switch_t
797	 */
798	{
799
800	NSCD_CFG_GROUP_INFO_GLOBAL_SWITCH,
801	nscd_true,		/* enable_lookup_g */
802	nscd_false,		/* enable_loopback_checking_g */
803	120,			/* check_smf_state_interval_g */
804
805	},
806
807	/*
808	 * nscd_cfg_global_cache_t
809	 */
810	NSCD_CFG_GLOBAL_CACHE_DEFAULTS
811};
812
813/*
814 * defaults for the per switch database configuration
815 */
816static nscd_cfg_nsw_db_data_t nscd_cfg_nsw_db_data_default = {
817
818	/*
819	 * nscd_cfg_frontend_t
820	 */
821	{
822
823	NSCD_CFG_GROUP_INFO_FRONTEND,
824	50, 			/* worker_thread_per_nsw_db */
825
826	},
827
828	/*
829	 * nscd_cfg_switch_t
830	 */
831	{
832
833	NSCD_CFG_GROUP_INFO_SWITCH,
834	"nis files",		/* nsw_config_string */
835	NULL,			/* nsw_config_db */
836	nscd_true,		/* enable_lookup */
837	nscd_false,		/* enable_loopback_checking */
838	288,			/* max_nsw_state_per_db */
839	32,			/* max_nsw_state_per_thread */
840	256,			/* max_getent_ctx_per_db */
841
842	},
843
844	/*
845	 * nscd_cfg_cache_t
846	 */
847	NSCD_CFG_CACHE_DEFAULTS
848};
849
850/*
851 * macros for defining the database specific defaults
852 */
853#define	NSCD_CFG_DB_DEFAULT_PARAM(db, gf, pf, gt, defaddr, deflen) \
854	{ \
855		db, offsetof(nscd_cfg_nsw_db_data_t, gf), \
856		offsetof(gt, pf), defaddr, deflen \
857	}
858
859#define	NSCD_CFG_DB_DEFAULT_GROUP(db, gf, defaddr, deflen) \
860	{ \
861		db, offsetof(nscd_cfg_nsw_db_data_t, gf), \
862		0, defaddr, deflen \
863	}
864
865#define	NSCD_CFG_DB_DEFAULT_NULL \
866	{ \
867		NULL, 0, 0, NULL, 0 \
868	}
869
870/*
871 * shadow, user_attr, and audit_user use the same switch policy
872 * as that of passwd. exec_attr use that of prof_attr.
873 */
874static char *nscd_cfg_shadow_cfg_db	= NSS_DBNAM_PASSWD;
875static char *nscd_cfg_userattr_cfg_db	= NSS_DBNAM_PASSWD;
876static char *nscd_cfg_auuser_cfg_db	= NSS_DBNAM_PASSWD;
877static char *nscd_cfg_execattr_cfg_db	= NSS_DBNAM_PROFATTR;
878
879/*
880 * default switch policy for pseudo-databases passwd_compat and
881 * and group_compa is "nis"
882 */
883static char *nscd_cfg_def_passwd_compat	= NSS_DEFCONF_PASSWD_COMPAT;
884static char *nscd_cfg_def_group_compat	= NSS_DEFCONF_GROUP_COMPAT;
885
886static nscd_cfg_nsw_spc_default_t nscd_cfg_passwd_cfg_link =
887	NSCD_CFG_DB_DEFAULT_PARAM(
888		NSS_DBNAM_PASSWD,
889		sw,
890		nsw_config_string,
891		nscd_cfg_switch_t,
892		NULL,
893		NSCD_SIZEOF(nscd_cfg_switch_t, nsw_config_string));
894
895static nscd_cfg_nsw_spc_default_t nscd_cfg_profattr_cfg_link =
896	NSCD_CFG_DB_DEFAULT_PARAM(
897		NSS_DBNAM_PROFATTR,
898		sw,
899		nsw_config_string,
900		nscd_cfg_switch_t,
901		NULL,
902		NSCD_SIZEOF(nscd_cfg_switch_t, nsw_config_string));
903
904
905/*
906 * switch database specific defaults
907 */
908nscd_cfg_nsw_spc_default_t	_nscd_cfg_nsw_spc_default[] = {
909
910	NSCD_CFG_DB_DEFAULT_PARAM(
911	NSS_DBNAM_SHADOW,
912		sw,
913		nsw_config_db,
914		nscd_cfg_switch_t,
915		&nscd_cfg_shadow_cfg_db,
916		sizeof (nscd_cfg_shadow_cfg_db)),
917
918	NSCD_CFG_DB_DEFAULT_PARAM(
919		NSS_DBNAM_USERATTR,
920		sw,
921		nsw_config_db,
922		nscd_cfg_switch_t,
923		&nscd_cfg_userattr_cfg_db,
924		sizeof (nscd_cfg_userattr_cfg_db)),
925
926	NSCD_CFG_DB_DEFAULT_PARAM(
927		NSS_DBNAM_AUDITUSER,
928		sw,
929		nsw_config_db,
930		nscd_cfg_switch_t,
931		&nscd_cfg_auuser_cfg_db,
932		sizeof (nscd_cfg_auuser_cfg_db)),
933
934	NSCD_CFG_DB_DEFAULT_PARAM(
935		NSS_DBNAM_EXECATTR,
936		sw,
937		nsw_config_db,
938		nscd_cfg_switch_t,
939		&nscd_cfg_execattr_cfg_db,
940		sizeof (nscd_cfg_execattr_cfg_db)),
941
942	NSCD_CFG_DB_DEFAULT_PARAM(
943		NSS_DBNAM_PASSWD_COMPAT,
944		sw,
945		nsw_config_string,
946		nscd_cfg_switch_t,
947		&nscd_cfg_def_passwd_compat,
948		sizeof (nscd_cfg_def_passwd_compat)),
949
950	NSCD_CFG_DB_DEFAULT_PARAM(
951		NSS_DBNAM_GROUP_COMPAT,
952		sw,
953		nsw_config_string,
954		nscd_cfg_switch_t,
955		&nscd_cfg_def_group_compat,
956		sizeof (nscd_cfg_def_group_compat)),
957
958	NSCD_CFG_DB_DEFAULT_NULL
959};
960
961/*
962 * switch database specific defaults that are linked to
963 * those of other databases
964 */
965nscd_cfg_nsw_spc_default_t	_nscd_cfg_nsw_link_default[] = {
966
967	NSCD_CFG_DB_DEFAULT_PARAM(
968		NSS_DBNAM_SHADOW,
969		sw,
970		nsw_config_string,
971		nscd_cfg_switch_t,
972		&nscd_cfg_passwd_cfg_link,
973		0),
974
975	NSCD_CFG_DB_DEFAULT_PARAM(
976		NSS_DBNAM_USERATTR,
977		sw,
978		nsw_config_string,
979		nscd_cfg_switch_t,
980		&nscd_cfg_passwd_cfg_link,
981		0),
982
983	NSCD_CFG_DB_DEFAULT_PARAM(
984		NSS_DBNAM_AUDITUSER,
985		sw,
986		nsw_config_string,
987		nscd_cfg_switch_t,
988		&nscd_cfg_passwd_cfg_link,
989		0),
990
991	NSCD_CFG_DB_DEFAULT_PARAM(
992		NSS_DBNAM_EXECATTR,
993		sw,
994		nsw_config_string,
995		nscd_cfg_switch_t,
996		&nscd_cfg_profattr_cfg_link,
997		0),
998
999	NSCD_CFG_DB_DEFAULT_NULL
1000};
1001
1002/*
1003 * macros for defining the static stats table
1004 */
1005#define	NSCD_CFG_SGROUP_DESC(sn, type, sflag, gi, \
1006		gf, g_in_t, gsfunc_name) \
1007	{ \
1008		{-1, sn}, type, NSCD_CFG_SFLAG_GROUP | sflag, gi, \
1009		0, 0, 0,\
1010		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
1011		gsfunc_name \
1012	}
1013
1014#define	NSCD_CFG_STAT_DESC(sn, type, sflag, sf, s_in_t, \
1015		gf, g_in_t, gsfunc_name) \
1016	{ \
1017		{-1, sn}, type, sflag, NSCD_CFG_GROUP_INFO_NULL, \
1018		NSCD_SIZEOF(s_in_t, sf), offsetof(s_in_t, sf), -1, \
1019		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
1020		gsfunc_name \
1021	}
1022
1023#define	NSCD_CFG_SGROUP_DESC_NULL \
1024	{ \
1025		{-1, NULL}, -1, NSCD_CFG_SFLAG_GROUP, NULL, \
1026		0, 0, 0, \
1027		0, 0, 0, \
1028		NULL \
1029	}
1030
1031/*
1032 * the static statistics description table
1033 */
1034static	nscd_cfg_stat_desc_t	_nscd_cfg_stat_desc[] = {
1035
1036	NSCD_CFG_SGROUP_DESC(
1037		"stat-group-global-log",
1038		NSCD_CFG_DATA_NONE,
1039		NSCD_CFG_SFLAG_GLOBAL,
1040		NSCD_CFG_STAT_GROUP_INFO_GLOBAL_LOG,
1041		log,
1042		nscd_cfg_stat_global_data_t,
1043		_nscd_cfg_log_get_stat),
1044
1045	NSCD_CFG_STAT_DESC(
1046		"entries-logged",
1047		NSCD_CFG_DATA_INTEGER,
1048		NSCD_CFG_SFLAG_GLOBAL,
1049		entries_logged,
1050		nscd_cfg_stat_global_log_t,
1051		log,
1052		nscd_cfg_stat_global_data_t,
1053		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1054
1055	NSCD_CFG_SGROUP_DESC(
1056		"stat-group-global-switch",
1057		NSCD_CFG_DATA_NONE,
1058		NSCD_CFG_SFLAG_GLOBAL,
1059		NSCD_CFG_STAT_GROUP_INFO_GLOBAL_SWITCH,
1060		sw,
1061		nscd_cfg_stat_global_data_t,
1062		_nscd_cfg_switch_get_stat),
1063
1064	NSCD_CFG_STAT_DESC(
1065		"global-lookup-request-received",
1066		NSCD_CFG_DATA_INTEGER,
1067		NSCD_CFG_SFLAG_GLOBAL,
1068		lookup_request_received_g,
1069		nscd_cfg_stat_global_switch_t,
1070		sw,
1071		nscd_cfg_stat_global_data_t,
1072		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1073
1074	NSCD_CFG_STAT_DESC(
1075		"global-lookup-request-queued",
1076		NSCD_CFG_DATA_INTEGER,
1077		NSCD_CFG_SFLAG_GLOBAL,
1078		lookup_request_queued_g,
1079		nscd_cfg_stat_global_switch_t,
1080		sw,
1081		nscd_cfg_stat_global_data_t,
1082		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1083
1084	NSCD_CFG_STAT_DESC(
1085		"global-lookup-request-in-progress",
1086		NSCD_CFG_DATA_INTEGER,
1087		NSCD_CFG_SFLAG_GLOBAL,
1088		lookup_request_in_progress_g,
1089		nscd_cfg_stat_global_switch_t,
1090		sw,
1091		nscd_cfg_stat_global_data_t,
1092		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1093
1094	NSCD_CFG_STAT_DESC(
1095		"global-lookup-request-succeeded",
1096		NSCD_CFG_DATA_INTEGER,
1097		NSCD_CFG_SFLAG_GLOBAL,
1098		lookup_request_succeeded_g,
1099		nscd_cfg_stat_global_switch_t,
1100		sw,
1101		nscd_cfg_stat_global_data_t,
1102		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1103
1104	NSCD_CFG_STAT_DESC(
1105		"global-lookup-request-failed",
1106		NSCD_CFG_DATA_INTEGER,
1107		NSCD_CFG_SFLAG_GLOBAL,
1108		lookup_request_failed_g,
1109		nscd_cfg_stat_global_switch_t,
1110		sw,
1111		nscd_cfg_stat_global_data_t,
1112		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1113
1114	NSCD_CFG_STAT_DESC(
1115		"global-loopback-nsw-db-skipped",
1116		NSCD_CFG_DATA_INTEGER,
1117		NSCD_CFG_SFLAG_GLOBAL,
1118		loopback_nsw_db_skipped_g,
1119		nscd_cfg_stat_global_switch_t,
1120		sw,
1121		nscd_cfg_stat_global_data_t,
1122		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1123
1124	NSCD_CFG_SGROUP_DESC(
1125		"stat-group-global-cache",
1126		NSCD_CFG_DATA_NONE,
1127		NSCD_CFG_SFLAG_GLOBAL,
1128		NSCD_CFG_STAT_GROUP_INFO_CACHE,
1129		cache,
1130		nscd_cfg_stat_global_data_t,
1131		_nscd_cfg_cache_get_stat),
1132
1133	NSCD_CFG_STAT_DESC(
1134		"global-cache-hits-on-positive",
1135		NSCD_CFG_DATA_INTEGER,
1136		NSCD_CFG_SFLAG_GLOBAL,
1137		pos_hits,
1138		nscd_cfg_stat_cache_t,
1139		cache,
1140		nscd_cfg_stat_global_data_t,
1141		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1142
1143	NSCD_CFG_STAT_DESC(
1144		"global-cache-hits-on-negative",
1145		NSCD_CFG_DATA_INTEGER,
1146		NSCD_CFG_SFLAG_GLOBAL,
1147		neg_hits,
1148		nscd_cfg_stat_cache_t,
1149		cache,
1150		nscd_cfg_stat_global_data_t,
1151		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1152
1153	NSCD_CFG_STAT_DESC(
1154		"global-cache-misses-on-positive",
1155		NSCD_CFG_DATA_INTEGER,
1156		NSCD_CFG_SFLAG_GLOBAL,
1157		pos_misses,
1158		nscd_cfg_stat_cache_t,
1159		cache,
1160		nscd_cfg_stat_global_data_t,
1161		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1162
1163	NSCD_CFG_STAT_DESC(
1164		"global-cache-misses-on-negative",
1165		NSCD_CFG_DATA_INTEGER,
1166		NSCD_CFG_SFLAG_GLOBAL,
1167		neg_misses,
1168		nscd_cfg_stat_cache_t,
1169		cache,
1170		nscd_cfg_stat_global_data_t,
1171		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1172
1173	NSCD_CFG_STAT_DESC(
1174		"global-cache-queries-queued",
1175		NSCD_CFG_DATA_INTEGER,
1176		NSCD_CFG_SFLAG_GLOBAL,
1177		wait_count,
1178		nscd_cfg_stat_cache_t,
1179		cache,
1180		nscd_cfg_stat_global_data_t,
1181		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1182
1183	NSCD_CFG_STAT_DESC(
1184		"global-total-cache-entries",
1185		NSCD_CFG_DATA_INTEGER,
1186		NSCD_CFG_SFLAG_GLOBAL,
1187		entries,
1188		nscd_cfg_stat_cache_t,
1189		cache,
1190		nscd_cfg_stat_global_data_t,
1191		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1192
1193	NSCD_CFG_STAT_DESC(
1194		"global-complete-cache-invalidations",
1195		NSCD_CFG_DATA_INTEGER,
1196		NSCD_CFG_SFLAG_GLOBAL,
1197		invalidate_count,
1198		nscd_cfg_stat_cache_t,
1199		cache,
1200		nscd_cfg_stat_global_data_t,
1201		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1202
1203	NSCD_CFG_STAT_DESC(
1204		"global-cache-queries-dropped",
1205		NSCD_CFG_DATA_INTEGER,
1206		NSCD_CFG_SFLAG_GLOBAL,
1207		drop_count,
1208		nscd_cfg_stat_cache_t,
1209		cache,
1210		nscd_cfg_stat_global_data_t,
1211		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1212
1213	NSCD_CFG_STAT_DESC(
1214		"global-cache-hit-rate",
1215		NSCD_CFG_DATA_PERCENT,
1216		NSCD_CFG_SFLAG_GLOBAL,
1217		hitrate,
1218		nscd_cfg_stat_cache_t,
1219		cache,
1220		nscd_cfg_stat_global_data_t,
1221		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1222
1223	/* non-global stat from this point on */
1224
1225	NSCD_CFG_SGROUP_DESC(
1226		"stat-group-switch",
1227		NSCD_CFG_DATA_NONE,
1228		NSCD_CFG_SFLAG_GROUP,
1229		NSCD_CFG_STAT_GROUP_INFO_SWITCH,
1230		cache,
1231		nscd_cfg_stat_nsw_db_data_t,
1232		_nscd_cfg_switch_get_stat),
1233
1234	NSCD_CFG_STAT_DESC(
1235		"lookup-request-received",
1236		NSCD_CFG_DATA_INTEGER,
1237		NSCD_CFG_SFLAG_NONE,
1238		lookup_request_received,
1239		nscd_cfg_stat_switch_t,
1240		sw,
1241		nscd_cfg_stat_nsw_db_data_t,
1242		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1243
1244	NSCD_CFG_STAT_DESC(
1245		"lookup-request-queued",
1246		NSCD_CFG_DATA_INTEGER,
1247		NSCD_CFG_SFLAG_NONE,
1248		lookup_request_queued,
1249		nscd_cfg_stat_switch_t,
1250		sw,
1251		nscd_cfg_stat_nsw_db_data_t,
1252		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1253
1254	NSCD_CFG_STAT_DESC(
1255		"lookup-request-in-progress",
1256		NSCD_CFG_DATA_INTEGER,
1257		NSCD_CFG_SFLAG_NONE,
1258		lookup_request_in_progress,
1259		nscd_cfg_stat_switch_t,
1260		sw,
1261		nscd_cfg_stat_nsw_db_data_t,
1262		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1263
1264	NSCD_CFG_STAT_DESC(
1265		"lookup-request-succeeded",
1266		NSCD_CFG_DATA_INTEGER,
1267		NSCD_CFG_SFLAG_NONE,
1268		lookup_request_succeeded,
1269		nscd_cfg_stat_switch_t,
1270		sw,
1271		nscd_cfg_stat_nsw_db_data_t,
1272		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1273
1274	NSCD_CFG_STAT_DESC(
1275		"lookup-request-failed",
1276		NSCD_CFG_DATA_INTEGER,
1277		NSCD_CFG_SFLAG_NONE,
1278		lookup_request_failed,
1279		nscd_cfg_stat_switch_t,
1280		sw,
1281		nscd_cfg_stat_nsw_db_data_t,
1282		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1283
1284	NSCD_CFG_STAT_DESC(
1285		"loopback-nsw-db-skipped",
1286		NSCD_CFG_DATA_INTEGER,
1287		NSCD_CFG_SFLAG_NONE,
1288		loopback_nsw_db_skipped,
1289		nscd_cfg_stat_switch_t,
1290		sw,
1291		nscd_cfg_stat_nsw_db_data_t,
1292		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1293
1294	NSCD_CFG_SGROUP_DESC(
1295		"stat-group-cache",
1296		NSCD_CFG_DATA_NONE,
1297		NSCD_CFG_SFLAG_GROUP,
1298		NSCD_CFG_STAT_GROUP_INFO_CACHE,
1299		cache,
1300		nscd_cfg_stat_nsw_db_data_t,
1301		_nscd_cfg_cache_get_stat),
1302
1303	NSCD_CFG_STAT_DESC(
1304		"cache-hits-on-positive",
1305		NSCD_CFG_DATA_INTEGER,
1306		NSCD_CFG_SFLAG_NONE,
1307		pos_hits,
1308		nscd_cfg_stat_cache_t,
1309		cache,
1310		nscd_cfg_stat_nsw_db_data_t,
1311		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1312
1313	NSCD_CFG_STAT_DESC(
1314		"cache-hits-on-negative",
1315		NSCD_CFG_DATA_INTEGER,
1316		NSCD_CFG_SFLAG_NONE,
1317		neg_hits,
1318		nscd_cfg_stat_cache_t,
1319		cache,
1320		nscd_cfg_stat_nsw_db_data_t,
1321		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1322
1323	NSCD_CFG_STAT_DESC(
1324		"cache-misses-on-positive",
1325		NSCD_CFG_DATA_INTEGER,
1326		NSCD_CFG_SFLAG_NONE,
1327		pos_misses,
1328		nscd_cfg_stat_cache_t,
1329		cache,
1330		nscd_cfg_stat_nsw_db_data_t,
1331		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1332
1333	NSCD_CFG_STAT_DESC(
1334		"cache-misses-on-negative",
1335		NSCD_CFG_DATA_INTEGER,
1336		NSCD_CFG_SFLAG_NONE,
1337		neg_misses,
1338		nscd_cfg_stat_cache_t,
1339		cache,
1340		nscd_cfg_stat_nsw_db_data_t,
1341		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1342
1343	NSCD_CFG_STAT_DESC(
1344		"cache-queries-queued",
1345		NSCD_CFG_DATA_INTEGER,
1346		NSCD_CFG_SFLAG_NONE,
1347		wait_count,
1348		nscd_cfg_stat_cache_t,
1349		cache,
1350		nscd_cfg_stat_nsw_db_data_t,
1351		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1352
1353	NSCD_CFG_STAT_DESC(
1354		"total-cache-entries",
1355		NSCD_CFG_DATA_INTEGER,
1356		NSCD_CFG_SFLAG_NONE,
1357		entries,
1358		nscd_cfg_stat_cache_t,
1359		cache,
1360		nscd_cfg_stat_nsw_db_data_t,
1361		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1362
1363	NSCD_CFG_STAT_DESC(
1364		"complete-cache-invalidations",
1365		NSCD_CFG_DATA_INTEGER,
1366		NSCD_CFG_SFLAG_NONE,
1367		invalidate_count,
1368		nscd_cfg_stat_cache_t,
1369		cache,
1370		nscd_cfg_stat_nsw_db_data_t,
1371		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1372
1373	NSCD_CFG_STAT_DESC(
1374		"cache-hit-rate",
1375		NSCD_CFG_DATA_PERCENT,
1376		NSCD_CFG_SFLAG_NONE,
1377		hitrate,
1378		nscd_cfg_stat_cache_t,
1379		cache,
1380		nscd_cfg_stat_nsw_db_data_t,
1381		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1382
1383	NSCD_CFG_STAT_DESC(
1384		"cache-queries-dropped",
1385		NSCD_CFG_DATA_PERCENT,
1386		NSCD_CFG_SFLAG_NONE,
1387		drop_count,
1388		nscd_cfg_stat_cache_t,
1389		cache,
1390		nscd_cfg_stat_nsw_db_data_t,
1391		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1392
1393
1394	NSCD_CFG_SGROUP_DESC_NULL
1395};
1396
1397/* number of entries in the static tables */
1398
1399int _nscd_cfg_num_nsw_src =
1400	(sizeof (_nscd_cfg_nsw_src) /
1401		sizeof (_nscd_cfg_nsw_src[0]) - 1);
1402
1403int _nscd_cfg_num_smf_services =
1404	(sizeof (_nscd_cfg_smf_services) /
1405		sizeof (_nscd_cfg_smf_services[0]) - 1);
1406
1407/* number of supported nsw databases (including pseudo ones) */
1408int _nscd_cfg_num_nsw_db_all =
1409	(sizeof (_nscd_cfg_nsw_db) /
1410		sizeof (_nscd_cfg_nsw_db[0]) - 1);
1411
1412/* number of supported nsw databases (not including pseudo ones) */
1413int _nscd_cfg_num_nsw_db =
1414	(sizeof (_nscd_cfg_nsw_db) /
1415		sizeof (_nscd_cfg_nsw_db[0]) - 1) -
1416		NSS_DBNAM_COMPAT_NUM_DB;
1417
1418static int _nscd_cfg_num_param =
1419	(sizeof (_nscd_cfg_param_desc) /
1420		sizeof (_nscd_cfg_param_desc[0]) - 1);
1421
1422static int _nscd_cfg_num_stat =
1423	(sizeof (_nscd_cfg_stat_desc) /
1424		sizeof (_nscd_cfg_stat_desc[0]) - 1);
1425
1426int _nscd_cfg_num_nsw_default =
1427	(sizeof (_nscd_cfg_nsw_spc_default) /
1428		sizeof (_nscd_cfg_nsw_spc_default[0]) - 1);
1429
1430int _nscd_cfg_num_link_default =
1431	(sizeof (_nscd_cfg_nsw_link_default) /
1432		sizeof (_nscd_cfg_nsw_link_default[0]) - 1);
1433
1434#ifdef	__cplusplus
1435}
1436#endif
1437
1438#endif	/* _NSCD_CFGDEF_H */
1439