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