xref: /titanic_50/usr/src/cmd/nscd/nscd_db.h (revision e37190e5b4531a897e4191a30b8f41678b582e25)
1cb5caa98Sdjl /*
2cb5caa98Sdjl  * CDDL HEADER START
3cb5caa98Sdjl  *
4cb5caa98Sdjl  * The contents of this file are subject to the terms of the
5cb5caa98Sdjl  * Common Development and Distribution License (the "License").
6cb5caa98Sdjl  * You may not use this file except in compliance with the License.
7cb5caa98Sdjl  *
8cb5caa98Sdjl  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9cb5caa98Sdjl  * or http://www.opensolaris.org/os/licensing.
10cb5caa98Sdjl  * See the License for the specific language governing permissions
11cb5caa98Sdjl  * and limitations under the License.
12cb5caa98Sdjl  *
13cb5caa98Sdjl  * When distributing Covered Code, include this CDDL HEADER in each
14cb5caa98Sdjl  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15cb5caa98Sdjl  * If applicable, add the following below this CDDL HEADER, with the
16cb5caa98Sdjl  * fields enclosed by brackets "[]" replaced with your own identifying
17cb5caa98Sdjl  * information: Portions Copyright [yyyy] [name of copyright owner]
18cb5caa98Sdjl  *
19cb5caa98Sdjl  * CDDL HEADER END
20cb5caa98Sdjl  */
21cb5caa98Sdjl /*
22cb5caa98Sdjl  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
23cb5caa98Sdjl  * Use is subject to license terms.
24cb5caa98Sdjl  */
25cb5caa98Sdjl 
26cb5caa98Sdjl #ifndef	_NSCD_DB_H
27cb5caa98Sdjl #define	_NSCD_DB_H
28cb5caa98Sdjl 
29cb5caa98Sdjl #pragma ident	"%Z%%M%	%I%	%E% SMI"
30cb5caa98Sdjl 
31cb5caa98Sdjl #ifdef	__cplusplus
32cb5caa98Sdjl extern "C" {
33cb5caa98Sdjl #endif
34cb5caa98Sdjl 
35cb5caa98Sdjl #include <nss_dbdefs.h>		/* nssuint_t */
36cb5caa98Sdjl #include "nscd_common.h"
37cb5caa98Sdjl 
38cb5caa98Sdjl /* make a pointer 8-byte aligned, or an integer a multiple of 8 */
39cb5caa98Sdjl #define	roundup(x)	(((unsigned long)(x)+7) & ~7)
40cb5caa98Sdjl 
41cb5caa98Sdjl /*
42cb5caa98Sdjl  * type of nscd data
43cb5caa98Sdjl  */
44cb5caa98Sdjl #define	NSCD_DATA_UNKNOWN		0
45cb5caa98Sdjl #define	NSCD_DATA_NSW_CONFIG		1
46cb5caa98Sdjl #define	NSCD_DATA_NSW_STATE_BASE	2
47cb5caa98Sdjl #define	NSCD_DATA_GETENT_CTX_BASE	3
48cb5caa98Sdjl #define	NSCD_DATA_BACKEND_INFO		4
49cb5caa98Sdjl #define	NSCD_DATA_BACKEND_INFO_DB	5
50cb5caa98Sdjl #define	NSCD_DATA_CFG_NSW_DB_INDEX	6
51cb5caa98Sdjl #define	NSCD_DATA_CFG_NSW_SRC_INDEX	7
52cb5caa98Sdjl #define	NSCD_DATA_CFG_PARAM_INDEX	8
53cb5caa98Sdjl #define	NSCD_DATA_CFG_STAT_INDEX	9
54cb5caa98Sdjl #define	NSCD_DATA_ADDR			127
55cb5caa98Sdjl #define	NSCD_DATA_CTX_ADDR		128
56cb5caa98Sdjl 
57cb5caa98Sdjl /*
58cb5caa98Sdjl  * database operation options
59cb5caa98Sdjl  */
60cb5caa98Sdjl typedef enum {
61cb5caa98Sdjl 	NSCD_GET_FIRST_DB_ENTRY		= 1,
62cb5caa98Sdjl 	NSCD_GET_NEXT_DB_ENTRY		= 2,
63cb5caa98Sdjl 	NSCD_GET_EXACT_DB_ENTRY		= 3,
64cb5caa98Sdjl 	NSCD_ADD_DB_ENTRY_FIRST		= 4,
65cb5caa98Sdjl 	NSCD_ADD_DB_ENTRY_LAST		= 5,
66cb5caa98Sdjl 	NSCD_ADD_DB_ENTRY_REPLACE	= 6,
67cb5caa98Sdjl 	NSCD_ADD_DB_ENTRY_IF_NONE	= 7,
68cb5caa98Sdjl 	NSCD_DEL_FIRST_DB_ENTRY		= 8,
69cb5caa98Sdjl 	NSCD_DEL_ALL_DB_ENTRY		= 9,
70cb5caa98Sdjl 	NSCD_DEL_EXACT_DB_ENTRY		= 10
71cb5caa98Sdjl } nscd_db_option_t;
72cb5caa98Sdjl 
73cb5caa98Sdjl /*
74cb5caa98Sdjl  * This structure defines an instance of the
75cb5caa98Sdjl  * nscd database entry.
76cb5caa98Sdjl  */
77cb5caa98Sdjl typedef struct nscd_db_entry {
78cb5caa98Sdjl 	int			type;
79cb5caa98Sdjl 	int			id_num;
80cb5caa98Sdjl 	int			num_data;
81cb5caa98Sdjl 	int			num_array;
82cb5caa98Sdjl 	char			*name;
83cb5caa98Sdjl 	void			**data_array;
84cb5caa98Sdjl } nscd_db_entry_t;
85cb5caa98Sdjl 
86cb5caa98Sdjl /*
87cb5caa98Sdjl  * sequence number attached to nscd data
88cb5caa98Sdjl  */
89cb5caa98Sdjl typedef	nssuint_t nscd_seq_num_t;
90*e37190e5Smichen typedef nssuint_t nscd_cookie_num_t;
91cb5caa98Sdjl 
92cb5caa98Sdjl /*
93cb5caa98Sdjl  * The nscd_access_s datatype represents a nscd
94cb5caa98Sdjl  * access data structure. It is an opaque structure.
95cb5caa98Sdjl  */
96cb5caa98Sdjl struct nscd_access_s;
97cb5caa98Sdjl typedef struct nscd_access_s	nscd_access_t;
98cb5caa98Sdjl struct nscd_acc_data_s;
99cb5caa98Sdjl typedef struct nscd_acc_data_s	nscd_acc_data_t;
100cb5caa98Sdjl 
101cb5caa98Sdjl /*
102cb5caa98Sdjl  * The nscd_db_t datatype represents a nscd
103cb5caa98Sdjl  * database. It is also an opaque structure.
104cb5caa98Sdjl  */
105cb5caa98Sdjl struct nscd_db_s;
106cb5caa98Sdjl typedef struct nscd_db_s	nscd_db_t;
107cb5caa98Sdjl 
108cb5caa98Sdjl /*
109cb5caa98Sdjl  * four sizes for a nscd database:
110cb5caa98Sdjl  * large, medium, small, tiny
111cb5caa98Sdjl  */
112cb5caa98Sdjl #define	NSCD_DB_SIZE_LARGE	1
113cb5caa98Sdjl #define	NSCD_DB_SIZE_MEDIUM	2
114cb5caa98Sdjl #define	NSCD_DB_SIZE_SMALL	3
115cb5caa98Sdjl #define	NSCD_DB_SIZE_TINY	4
116cb5caa98Sdjl 
117cb5caa98Sdjl /*
118cb5caa98Sdjl  * options for _nscd_alloc()
119cb5caa98Sdjl  */
120cb5caa98Sdjl #define	NSCD_ALLOC_MUTEX	0x0001
121cb5caa98Sdjl #define	NSCD_ALLOC_RWLOCK	0x0002
122cb5caa98Sdjl #define	NSCD_ALLOC_COND		0x0004
123cb5caa98Sdjl 
124cb5caa98Sdjl /*
125cb5caa98Sdjl  * prototypes
126cb5caa98Sdjl  */
127cb5caa98Sdjl nscd_seq_num_t
128cb5caa98Sdjl _nscd_get_seq_num();
129cb5caa98Sdjl 
130*e37190e5Smichen nscd_cookie_num_t
131*e37190e5Smichen _nscd_get_cookie_num();
132cb5caa98Sdjl 
133cb5caa98Sdjl nscd_acc_data_t *
134cb5caa98Sdjl _nscd_get(
135cb5caa98Sdjl 	nscd_acc_data_t		*data);
136cb5caa98Sdjl 
137cb5caa98Sdjl nscd_acc_data_t
138cb5caa98Sdjl *_nscd_set(
139cb5caa98Sdjl 	nscd_acc_data_t		*old,
140cb5caa98Sdjl 	nscd_acc_data_t		*new);
141cb5caa98Sdjl 
142cb5caa98Sdjl void
143cb5caa98Sdjl _nscd_release(
144cb5caa98Sdjl 	nscd_acc_data_t		*data);
145cb5caa98Sdjl 
146cb5caa98Sdjl nscd_acc_data_t
147cb5caa98Sdjl *_nscd_rdlock(
148cb5caa98Sdjl 	nscd_acc_data_t		*data);
149cb5caa98Sdjl 
150cb5caa98Sdjl nscd_acc_data_t
151cb5caa98Sdjl *_nscd_wrlock(
152cb5caa98Sdjl 	nscd_acc_data_t		*data);
153cb5caa98Sdjl 
154cb5caa98Sdjl void
155cb5caa98Sdjl _nscd_rw_unlock(
156cb5caa98Sdjl 	nscd_acc_data_t		*data);
157cb5caa98Sdjl 
158cb5caa98Sdjl void
159cb5caa98Sdjl _nscd_rw_unlock_no_release(
160cb5caa98Sdjl 	nscd_acc_data_t		*data);
161cb5caa98Sdjl 
162cb5caa98Sdjl nscd_acc_data_t
163cb5caa98Sdjl *_nscd_mutex_lock(
164cb5caa98Sdjl 	nscd_acc_data_t		*data);
165cb5caa98Sdjl 
166cb5caa98Sdjl void
167cb5caa98Sdjl _nscd_mutex_unlock(
168cb5caa98Sdjl 	nscd_acc_data_t		*data);
169cb5caa98Sdjl 
170cb5caa98Sdjl void
171cb5caa98Sdjl _nscd_cond_signal(
172cb5caa98Sdjl 	nscd_acc_data_t		*data);
173cb5caa98Sdjl 
174cb5caa98Sdjl void
175cb5caa98Sdjl _nscd_cond_wait(
176cb5caa98Sdjl 	nscd_acc_data_t		*data,
177cb5caa98Sdjl 	cond_t			*cond);
178cb5caa98Sdjl 
179cb5caa98Sdjl nscd_acc_data_t *
180cb5caa98Sdjl _nscd_alloc(
181cb5caa98Sdjl 	int			type,
182cb5caa98Sdjl 	size_t			size,
183cb5caa98Sdjl 	void			(*data_free)(
184cb5caa98Sdjl 				nscd_acc_data_t *data),
185cb5caa98Sdjl 	int			option);
186cb5caa98Sdjl 
187cb5caa98Sdjl nscd_rc_t
188cb5caa98Sdjl _nscd_add_int_addr(
189cb5caa98Sdjl 	void 			*ptr,
190cb5caa98Sdjl 	int 			type,
191cb5caa98Sdjl 	nscd_seq_num_t		seq_num);
192cb5caa98Sdjl 
193cb5caa98Sdjl rwlock_t *
194cb5caa98Sdjl _nscd_is_int_addr(
195cb5caa98Sdjl 	void 			*ptr,
196cb5caa98Sdjl 	nscd_seq_num_t		seq_num);
197cb5caa98Sdjl 
198cb5caa98Sdjl void
199cb5caa98Sdjl _nscd_del_int_addr(
200cb5caa98Sdjl 	void 			*ptr,
201cb5caa98Sdjl 	nscd_seq_num_t		seq_num);
202cb5caa98Sdjl 
203cb5caa98Sdjl nscd_db_t *
204cb5caa98Sdjl _nscd_alloc_db(
205cb5caa98Sdjl 	int			size);
206cb5caa98Sdjl 
207cb5caa98Sdjl void
208cb5caa98Sdjl _nscd_free_db(
209cb5caa98Sdjl 	nscd_db_t		*db);
210cb5caa98Sdjl 
211cb5caa98Sdjl nscd_db_entry_t *
212cb5caa98Sdjl _nscd_alloc_db_entry(
213cb5caa98Sdjl 	int			type,
214cb5caa98Sdjl 	const char 		*name,
215cb5caa98Sdjl 	int			dataSize,
216cb5caa98Sdjl 	int			num_data,
217cb5caa98Sdjl 	int			num_array);
218cb5caa98Sdjl 
219cb5caa98Sdjl const nscd_db_entry_t *
220cb5caa98Sdjl _nscd_get_db_entry(
221cb5caa98Sdjl 	const nscd_db_t		*db,
222cb5caa98Sdjl 	int			type,
223cb5caa98Sdjl 	const char		*str,
224cb5caa98Sdjl 	nscd_db_option_t	option,
225cb5caa98Sdjl 	int			id_num);
226cb5caa98Sdjl 
227cb5caa98Sdjl nscd_rc_t
228cb5caa98Sdjl _nscd_add_db_entry(
229cb5caa98Sdjl 	nscd_db_t		*db,
230cb5caa98Sdjl 	const char 		*str,
231cb5caa98Sdjl 	nscd_db_entry_t		*entry,
232cb5caa98Sdjl 	nscd_db_option_t	option);
233cb5caa98Sdjl 
234cb5caa98Sdjl nscd_rc_t
235cb5caa98Sdjl _nscd_delete_db_entry(
236cb5caa98Sdjl 	nscd_db_t		*db,
237cb5caa98Sdjl 	int			type,
238cb5caa98Sdjl 	const char		*str,
239cb5caa98Sdjl 	nscd_db_option_t	option,
240cb5caa98Sdjl 	int			id_num);
241cb5caa98Sdjl 
242cb5caa98Sdjl 
243cb5caa98Sdjl void *
244cb5caa98Sdjl _nscd_create_int_addrDB();
245cb5caa98Sdjl 
246cb5caa98Sdjl void
247cb5caa98Sdjl _nscd_destroy_int_addrDB();
248cb5caa98Sdjl 
249cb5caa98Sdjl #ifdef	__cplusplus
250cb5caa98Sdjl }
251cb5caa98Sdjl #endif
252cb5caa98Sdjl 
253cb5caa98Sdjl #endif	/* _NSCD_DB_H */
254