xref: /illumos-gate/usr/src/cmd/nscd/nscd_db.h (revision 2a8bcb4e)
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 #ifdef	__cplusplus
30cb5caa98Sdjl extern "C" {
31cb5caa98Sdjl #endif
32cb5caa98Sdjl 
33cb5caa98Sdjl #include <nss_dbdefs.h>		/* nssuint_t */
34cb5caa98Sdjl #include "nscd_common.h"
35cb5caa98Sdjl 
36cb5caa98Sdjl /* make a pointer 8-byte aligned, or an integer a multiple of 8 */
37cb5caa98Sdjl #define	roundup(x)	(((unsigned long)(x)+7) & ~7)
38cb5caa98Sdjl 
39cb5caa98Sdjl /*
40cb5caa98Sdjl  * type of nscd data
41cb5caa98Sdjl  */
42cb5caa98Sdjl #define	NSCD_DATA_UNKNOWN		0
43cb5caa98Sdjl #define	NSCD_DATA_NSW_CONFIG		1
44cb5caa98Sdjl #define	NSCD_DATA_NSW_STATE_BASE	2
45cb5caa98Sdjl #define	NSCD_DATA_GETENT_CTX_BASE	3
46cb5caa98Sdjl #define	NSCD_DATA_BACKEND_INFO		4
47cb5caa98Sdjl #define	NSCD_DATA_BACKEND_INFO_DB	5
48cb5caa98Sdjl #define	NSCD_DATA_CFG_NSW_DB_INDEX	6
49cb5caa98Sdjl #define	NSCD_DATA_CFG_NSW_SRC_INDEX	7
50cb5caa98Sdjl #define	NSCD_DATA_CFG_PARAM_INDEX	8
51cb5caa98Sdjl #define	NSCD_DATA_CFG_STAT_INDEX	9
52cb5caa98Sdjl #define	NSCD_DATA_ADDR			127
53cb5caa98Sdjl #define	NSCD_DATA_CTX_ADDR		128
54cb5caa98Sdjl 
55cb5caa98Sdjl /*
56cb5caa98Sdjl  * database operation options
57cb5caa98Sdjl  */
58cb5caa98Sdjl typedef enum {
59cb5caa98Sdjl 	NSCD_GET_FIRST_DB_ENTRY		= 1,
60cb5caa98Sdjl 	NSCD_GET_NEXT_DB_ENTRY		= 2,
61cb5caa98Sdjl 	NSCD_GET_EXACT_DB_ENTRY		= 3,
62cb5caa98Sdjl 	NSCD_ADD_DB_ENTRY_FIRST		= 4,
63cb5caa98Sdjl 	NSCD_ADD_DB_ENTRY_LAST		= 5,
64cb5caa98Sdjl 	NSCD_ADD_DB_ENTRY_REPLACE	= 6,
65cb5caa98Sdjl 	NSCD_ADD_DB_ENTRY_IF_NONE	= 7,
66cb5caa98Sdjl 	NSCD_DEL_FIRST_DB_ENTRY		= 8,
67cb5caa98Sdjl 	NSCD_DEL_ALL_DB_ENTRY		= 9,
68cb5caa98Sdjl 	NSCD_DEL_EXACT_DB_ENTRY		= 10
69cb5caa98Sdjl } nscd_db_option_t;
70cb5caa98Sdjl 
71cb5caa98Sdjl /*
72cb5caa98Sdjl  * This structure defines an instance of the
73cb5caa98Sdjl  * nscd database entry.
74cb5caa98Sdjl  */
75cb5caa98Sdjl typedef struct nscd_db_entry {
76cb5caa98Sdjl 	int			type;
77cb5caa98Sdjl 	int			id_num;
78cb5caa98Sdjl 	int			num_data;
79cb5caa98Sdjl 	int			num_array;
80cb5caa98Sdjl 	char			*name;
81cb5caa98Sdjl 	void			**data_array;
82cb5caa98Sdjl } nscd_db_entry_t;
83cb5caa98Sdjl 
84cb5caa98Sdjl /*
85cb5caa98Sdjl  * sequence number attached to nscd data
86cb5caa98Sdjl  */
87cb5caa98Sdjl typedef	nssuint_t nscd_seq_num_t;
88*e37190e5Smichen typedef nssuint_t nscd_cookie_num_t;
89cb5caa98Sdjl 
90cb5caa98Sdjl /*
91cb5caa98Sdjl  * The nscd_access_s datatype represents a nscd
92cb5caa98Sdjl  * access data structure. It is an opaque structure.
93cb5caa98Sdjl  */
94cb5caa98Sdjl struct nscd_access_s;
95cb5caa98Sdjl typedef struct nscd_access_s	nscd_access_t;
96cb5caa98Sdjl struct nscd_acc_data_s;
97cb5caa98Sdjl typedef struct nscd_acc_data_s	nscd_acc_data_t;
98cb5caa98Sdjl 
99cb5caa98Sdjl /*
100cb5caa98Sdjl  * The nscd_db_t datatype represents a nscd
101cb5caa98Sdjl  * database. It is also an opaque structure.
102cb5caa98Sdjl  */
103cb5caa98Sdjl struct nscd_db_s;
104cb5caa98Sdjl typedef struct nscd_db_s	nscd_db_t;
105cb5caa98Sdjl 
106cb5caa98Sdjl /*
107cb5caa98Sdjl  * four sizes for a nscd database:
108cb5caa98Sdjl  * large, medium, small, tiny
109cb5caa98Sdjl  */
110cb5caa98Sdjl #define	NSCD_DB_SIZE_LARGE	1
111cb5caa98Sdjl #define	NSCD_DB_SIZE_MEDIUM	2
112cb5caa98Sdjl #define	NSCD_DB_SIZE_SMALL	3
113cb5caa98Sdjl #define	NSCD_DB_SIZE_TINY	4
114cb5caa98Sdjl 
115cb5caa98Sdjl /*
116cb5caa98Sdjl  * options for _nscd_alloc()
117cb5caa98Sdjl  */
118cb5caa98Sdjl #define	NSCD_ALLOC_MUTEX	0x0001
119cb5caa98Sdjl #define	NSCD_ALLOC_RWLOCK	0x0002
120cb5caa98Sdjl #define	NSCD_ALLOC_COND		0x0004
121cb5caa98Sdjl 
122cb5caa98Sdjl /*
123cb5caa98Sdjl  * prototypes
124cb5caa98Sdjl  */
125cb5caa98Sdjl nscd_seq_num_t
126cb5caa98Sdjl _nscd_get_seq_num();
127cb5caa98Sdjl 
128*e37190e5Smichen nscd_cookie_num_t
129*e37190e5Smichen _nscd_get_cookie_num();
130cb5caa98Sdjl 
131cb5caa98Sdjl nscd_acc_data_t *
132cb5caa98Sdjl _nscd_get(
133cb5caa98Sdjl 	nscd_acc_data_t		*data);
134cb5caa98Sdjl 
135cb5caa98Sdjl nscd_acc_data_t
136cb5caa98Sdjl *_nscd_set(
137cb5caa98Sdjl 	nscd_acc_data_t		*old,
138cb5caa98Sdjl 	nscd_acc_data_t		*new);
139cb5caa98Sdjl 
140cb5caa98Sdjl void
141cb5caa98Sdjl _nscd_release(
142cb5caa98Sdjl 	nscd_acc_data_t		*data);
143cb5caa98Sdjl 
144cb5caa98Sdjl nscd_acc_data_t
145cb5caa98Sdjl *_nscd_rdlock(
146cb5caa98Sdjl 	nscd_acc_data_t		*data);
147cb5caa98Sdjl 
148cb5caa98Sdjl nscd_acc_data_t
149cb5caa98Sdjl *_nscd_wrlock(
150cb5caa98Sdjl 	nscd_acc_data_t		*data);
151cb5caa98Sdjl 
152cb5caa98Sdjl void
153cb5caa98Sdjl _nscd_rw_unlock(
154cb5caa98Sdjl 	nscd_acc_data_t		*data);
155cb5caa98Sdjl 
156cb5caa98Sdjl void
157cb5caa98Sdjl _nscd_rw_unlock_no_release(
158cb5caa98Sdjl 	nscd_acc_data_t		*data);
159cb5caa98Sdjl 
160cb5caa98Sdjl nscd_acc_data_t
161cb5caa98Sdjl *_nscd_mutex_lock(
162cb5caa98Sdjl 	nscd_acc_data_t		*data);
163cb5caa98Sdjl 
164cb5caa98Sdjl void
165cb5caa98Sdjl _nscd_mutex_unlock(
166cb5caa98Sdjl 	nscd_acc_data_t		*data);
167cb5caa98Sdjl 
168cb5caa98Sdjl void
169cb5caa98Sdjl _nscd_cond_signal(
170cb5caa98Sdjl 	nscd_acc_data_t		*data);
171cb5caa98Sdjl 
172cb5caa98Sdjl void
173cb5caa98Sdjl _nscd_cond_wait(
174cb5caa98Sdjl 	nscd_acc_data_t		*data,
175cb5caa98Sdjl 	cond_t			*cond);
176cb5caa98Sdjl 
177cb5caa98Sdjl nscd_acc_data_t *
178cb5caa98Sdjl _nscd_alloc(
179cb5caa98Sdjl 	int			type,
180cb5caa98Sdjl 	size_t			size,
181cb5caa98Sdjl 	void			(*data_free)(
182cb5caa98Sdjl 				nscd_acc_data_t *data),
183cb5caa98Sdjl 	int			option);
184cb5caa98Sdjl 
185cb5caa98Sdjl nscd_rc_t
186cb5caa98Sdjl _nscd_add_int_addr(
187cb5caa98Sdjl 	void 			*ptr,
188cb5caa98Sdjl 	int 			type,
189cb5caa98Sdjl 	nscd_seq_num_t		seq_num);
190cb5caa98Sdjl 
191cb5caa98Sdjl rwlock_t *
192cb5caa98Sdjl _nscd_is_int_addr(
193cb5caa98Sdjl 	void 			*ptr,
194cb5caa98Sdjl 	nscd_seq_num_t		seq_num);
195cb5caa98Sdjl 
196cb5caa98Sdjl void
197cb5caa98Sdjl _nscd_del_int_addr(
198cb5caa98Sdjl 	void 			*ptr,
199cb5caa98Sdjl 	nscd_seq_num_t		seq_num);
200cb5caa98Sdjl 
201cb5caa98Sdjl nscd_db_t *
202cb5caa98Sdjl _nscd_alloc_db(
203cb5caa98Sdjl 	int			size);
204cb5caa98Sdjl 
205cb5caa98Sdjl void
206cb5caa98Sdjl _nscd_free_db(
207cb5caa98Sdjl 	nscd_db_t		*db);
208cb5caa98Sdjl 
209cb5caa98Sdjl nscd_db_entry_t *
210cb5caa98Sdjl _nscd_alloc_db_entry(
211cb5caa98Sdjl 	int			type,
212cb5caa98Sdjl 	const char 		*name,
213cb5caa98Sdjl 	int			dataSize,
214cb5caa98Sdjl 	int			num_data,
215cb5caa98Sdjl 	int			num_array);
216cb5caa98Sdjl 
217cb5caa98Sdjl const nscd_db_entry_t *
218cb5caa98Sdjl _nscd_get_db_entry(
219cb5caa98Sdjl 	const nscd_db_t		*db,
220cb5caa98Sdjl 	int			type,
221cb5caa98Sdjl 	const char		*str,
222cb5caa98Sdjl 	nscd_db_option_t	option,
223cb5caa98Sdjl 	int			id_num);
224cb5caa98Sdjl 
225cb5caa98Sdjl nscd_rc_t
226cb5caa98Sdjl _nscd_add_db_entry(
227cb5caa98Sdjl 	nscd_db_t		*db,
228cb5caa98Sdjl 	const char 		*str,
229cb5caa98Sdjl 	nscd_db_entry_t		*entry,
230cb5caa98Sdjl 	nscd_db_option_t	option);
231cb5caa98Sdjl 
232cb5caa98Sdjl nscd_rc_t
233cb5caa98Sdjl _nscd_delete_db_entry(
234cb5caa98Sdjl 	nscd_db_t		*db,
235cb5caa98Sdjl 	int			type,
236cb5caa98Sdjl 	const char		*str,
237cb5caa98Sdjl 	nscd_db_option_t	option,
238cb5caa98Sdjl 	int			id_num);
239cb5caa98Sdjl 
240cb5caa98Sdjl 
241cb5caa98Sdjl void *
242cb5caa98Sdjl _nscd_create_int_addrDB();
243cb5caa98Sdjl 
244cb5caa98Sdjl void
245cb5caa98Sdjl _nscd_destroy_int_addrDB();
246cb5caa98Sdjl 
247cb5caa98Sdjl #ifdef	__cplusplus
248cb5caa98Sdjl }
249cb5caa98Sdjl #endif
250cb5caa98Sdjl 
251cb5caa98Sdjl #endif	/* _NSCD_DB_H */
252