xref: /freebsd-src/usr.sbin/nscd/protocol.h (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
106a99fe3SHajimu UMEMOTO /*-
206a99fe3SHajimu UMEMOTO  * Copyright (c) 2005 Michael Bushkov <bushman@rsu.ru>
306a99fe3SHajimu UMEMOTO  * All rights reserved.
406a99fe3SHajimu UMEMOTO  *
506a99fe3SHajimu UMEMOTO  * Redistribution and use in source and binary forms, with or without
606a99fe3SHajimu UMEMOTO  * modification, are permitted provided that the following conditions
706a99fe3SHajimu UMEMOTO  * are met:
806a99fe3SHajimu UMEMOTO  * 1. Redistributions of source code must retain the above copyright
906a99fe3SHajimu UMEMOTO  *    notice, this list of conditions and the following disclaimer.
1006a99fe3SHajimu UMEMOTO  * 2. Redistributions in binary form must reproduce the above copyright
1106a99fe3SHajimu UMEMOTO  *    notice, this list of conditions and the following disclaimer in the
1206a99fe3SHajimu UMEMOTO  *    documentation and/or other materials provided with the distribution.
1306a99fe3SHajimu UMEMOTO  *
1406a99fe3SHajimu UMEMOTO  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1506a99fe3SHajimu UMEMOTO  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1606a99fe3SHajimu UMEMOTO  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1706a99fe3SHajimu UMEMOTO  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1806a99fe3SHajimu UMEMOTO  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1906a99fe3SHajimu UMEMOTO  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2006a99fe3SHajimu UMEMOTO  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2106a99fe3SHajimu UMEMOTO  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2206a99fe3SHajimu UMEMOTO  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2306a99fe3SHajimu UMEMOTO  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2406a99fe3SHajimu UMEMOTO  * SUCH DAMAGE.
2506a99fe3SHajimu UMEMOTO  */
2606a99fe3SHajimu UMEMOTO 
27db1bdf2bSMichael Bushkov #ifndef __NSCD_PROTOCOL_H__
28db1bdf2bSMichael Bushkov #define __NSCD_PROTOCOL_H__
2906a99fe3SHajimu UMEMOTO 
3006a99fe3SHajimu UMEMOTO /* maximum buffer size to receive - larger buffers are not allowed */
3106a99fe3SHajimu UMEMOTO #define MAX_BUFFER_SIZE (1 << 20)
3206a99fe3SHajimu UMEMOTO 
3306a99fe3SHajimu UMEMOTO /* buffer size correctness checking routine */
3406a99fe3SHajimu UMEMOTO #define BUFSIZE_CORRECT(x) (((x) > 0) && ((x) < MAX_BUFFER_SIZE))
3506a99fe3SHajimu UMEMOTO #define BUFSIZE_INVALID(x) (!BUFSIZE_CORRECT(x))
3606a99fe3SHajimu UMEMOTO 
3706a99fe3SHajimu UMEMOTO /* structures below represent the data that are sent/received by the daemon */
38d2432adbSDag-Erling Smørgrav struct cache_write_request {
3906a99fe3SHajimu UMEMOTO 	char	*entry;
4006a99fe3SHajimu UMEMOTO 	char	*cache_key;
4106a99fe3SHajimu UMEMOTO 	char	*data;
4206a99fe3SHajimu UMEMOTO 
4306a99fe3SHajimu UMEMOTO 	size_t	entry_length;
4406a99fe3SHajimu UMEMOTO 	size_t	cache_key_size;
4506a99fe3SHajimu UMEMOTO 	size_t	data_size;
4606a99fe3SHajimu UMEMOTO };
4706a99fe3SHajimu UMEMOTO 
48d2432adbSDag-Erling Smørgrav struct cache_write_response {
4906a99fe3SHajimu UMEMOTO 	int	error_code;
5006a99fe3SHajimu UMEMOTO };
5106a99fe3SHajimu UMEMOTO 
52d2432adbSDag-Erling Smørgrav struct cache_read_request {
5306a99fe3SHajimu UMEMOTO 	char	*entry;
5406a99fe3SHajimu UMEMOTO 	char	*cache_key;
5506a99fe3SHajimu UMEMOTO 
5606a99fe3SHajimu UMEMOTO 	size_t	entry_length;
5706a99fe3SHajimu UMEMOTO 	size_t	cache_key_size;
5806a99fe3SHajimu UMEMOTO };
5906a99fe3SHajimu UMEMOTO 
60d2432adbSDag-Erling Smørgrav struct cache_read_response {
6106a99fe3SHajimu UMEMOTO 	char	*data;			// ignored if error_code is not 0
6206a99fe3SHajimu UMEMOTO 	size_t	data_size;		// ignored if error_code is not 0
6306a99fe3SHajimu UMEMOTO 
6406a99fe3SHajimu UMEMOTO 	int	error_code;
6506a99fe3SHajimu UMEMOTO };
6606a99fe3SHajimu UMEMOTO 
6706a99fe3SHajimu UMEMOTO enum transformation_type {
68*3df5ecacSUlrich Spörlein 	TT_USER = 0,	// transform only the entries of the caller
6906a99fe3SHajimu UMEMOTO 	TT_ALL = 1	// transform all entries
7006a99fe3SHajimu UMEMOTO };
7106a99fe3SHajimu UMEMOTO 
72d2432adbSDag-Erling Smørgrav struct cache_transform_request {
7306a99fe3SHajimu UMEMOTO 	char	*entry; 		// ignored if entry_length is 0
7406a99fe3SHajimu UMEMOTO 	size_t	entry_length;
7506a99fe3SHajimu UMEMOTO 
7606a99fe3SHajimu UMEMOTO 	int	transformation_type;
7706a99fe3SHajimu UMEMOTO };
7806a99fe3SHajimu UMEMOTO 
79d2432adbSDag-Erling Smørgrav struct cache_transform_response {
8006a99fe3SHajimu UMEMOTO 	int	error_code;
8106a99fe3SHajimu UMEMOTO };
8206a99fe3SHajimu UMEMOTO 
8306a99fe3SHajimu UMEMOTO struct cache_mp_write_session_request {
8406a99fe3SHajimu UMEMOTO 	char	*entry;
8506a99fe3SHajimu UMEMOTO 	size_t	entry_length;
8606a99fe3SHajimu UMEMOTO };
8706a99fe3SHajimu UMEMOTO 
8806a99fe3SHajimu UMEMOTO struct cache_mp_write_session_response {
8906a99fe3SHajimu UMEMOTO 	int	error_code;
9006a99fe3SHajimu UMEMOTO };
9106a99fe3SHajimu UMEMOTO 
9206a99fe3SHajimu UMEMOTO struct cache_mp_write_session_write_request {
9306a99fe3SHajimu UMEMOTO 	char	*data;
9406a99fe3SHajimu UMEMOTO 	size_t	data_size;
9506a99fe3SHajimu UMEMOTO };
9606a99fe3SHajimu UMEMOTO 
9706a99fe3SHajimu UMEMOTO struct cache_mp_write_session_write_response {
9806a99fe3SHajimu UMEMOTO 	int	error_code;
9906a99fe3SHajimu UMEMOTO };
10006a99fe3SHajimu UMEMOTO 
10106a99fe3SHajimu UMEMOTO struct cache_mp_read_session_request {
10206a99fe3SHajimu UMEMOTO 	char	*entry;
10306a99fe3SHajimu UMEMOTO 	size_t	entry_length;
10406a99fe3SHajimu UMEMOTO };
10506a99fe3SHajimu UMEMOTO 
10606a99fe3SHajimu UMEMOTO struct cache_mp_read_session_response {
10706a99fe3SHajimu UMEMOTO 	int	error_code;
10806a99fe3SHajimu UMEMOTO };
10906a99fe3SHajimu UMEMOTO 
11006a99fe3SHajimu UMEMOTO struct cache_mp_read_session_read_response {
11106a99fe3SHajimu UMEMOTO 	char	*data;
11206a99fe3SHajimu UMEMOTO 	size_t	data_size;
11306a99fe3SHajimu UMEMOTO 
11406a99fe3SHajimu UMEMOTO 	int	error_code;
11506a99fe3SHajimu UMEMOTO };
11606a99fe3SHajimu UMEMOTO 
11706a99fe3SHajimu UMEMOTO 
11806a99fe3SHajimu UMEMOTO enum comm_element_t {
11906a99fe3SHajimu UMEMOTO 	CET_UNDEFINED 	= 0,
12006a99fe3SHajimu UMEMOTO 	CET_WRITE_REQUEST = 1,
12106a99fe3SHajimu UMEMOTO 	CET_WRITE_RESPONSE = 2,
12206a99fe3SHajimu UMEMOTO 	CET_READ_REQUEST = 3,
12306a99fe3SHajimu UMEMOTO 	CET_READ_RESPONSE = 4,
12406a99fe3SHajimu UMEMOTO 	CET_TRANSFORM_REQUEST = 5,
12506a99fe3SHajimu UMEMOTO 	CET_TRANSFORM_RESPONSE = 6,
12606a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_REQUEST = 7,
12706a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_RESPONSE = 8,
12806a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_WRITE_REQUEST = 9,
12906a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_WRITE_RESPONSE = 10,
13006a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_CLOSE_NOTIFICATION = 11,
13106a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_ABANDON_NOTIFICATION = 12,
13206a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_REQUEST = 13,
13306a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_RESPONSE = 14,
13406a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_READ_REQUEST = 15,
13506a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_READ_RESPONSE = 16,
13606a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_CLOSE_NOTIFICATION = 17,
13706a99fe3SHajimu UMEMOTO 	CET_MAX = 18
13806a99fe3SHajimu UMEMOTO };
13906a99fe3SHajimu UMEMOTO 
14006a99fe3SHajimu UMEMOTO /*
14106a99fe3SHajimu UMEMOTO  * The comm_element is used as the holder of any known (defined above) data
14206a99fe3SHajimu UMEMOTO  * type that is to be sent/received.
14306a99fe3SHajimu UMEMOTO  */
144d2432adbSDag-Erling Smørgrav struct comm_element {
14506a99fe3SHajimu UMEMOTO 	union {
14606a99fe3SHajimu UMEMOTO 	struct cache_write_request c_write_request;
14706a99fe3SHajimu UMEMOTO 	struct cache_write_response c_write_response;
14806a99fe3SHajimu UMEMOTO 	struct cache_read_request c_read_request;
14906a99fe3SHajimu UMEMOTO 	struct cache_read_response c_read_response;
15006a99fe3SHajimu UMEMOTO 	struct cache_transform_request c_transform_request;
15106a99fe3SHajimu UMEMOTO 	struct cache_transform_response c_transform_response;
15206a99fe3SHajimu UMEMOTO 
15306a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_request c_mp_ws_request;
15406a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_response c_mp_ws_response;
15506a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_write_request c_mp_ws_write_request;
15606a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_write_response c_mp_ws_write_response;
15706a99fe3SHajimu UMEMOTO 
15806a99fe3SHajimu UMEMOTO 	struct cache_mp_read_session_request c_mp_rs_request;
15906a99fe3SHajimu UMEMOTO 	struct cache_mp_read_session_response c_mp_rs_response;
16006a99fe3SHajimu UMEMOTO 	struct cache_mp_read_session_read_response c_mp_rs_read_response;
161d2432adbSDag-Erling Smørgrav 	} /* anonymous */;
16206a99fe3SHajimu UMEMOTO 	enum comm_element_t type;
16306a99fe3SHajimu UMEMOTO };
16406a99fe3SHajimu UMEMOTO 
165d2432adbSDag-Erling Smørgrav void init_comm_element(struct comm_element *, enum comm_element_t type);
166d2432adbSDag-Erling Smørgrav void finalize_comm_element(struct comm_element *);
16706a99fe3SHajimu UMEMOTO 
16806a99fe3SHajimu UMEMOTO /*
16906a99fe3SHajimu UMEMOTO  * For each type of data, there is three functions (init/finalize/get), that
17006a99fe3SHajimu UMEMOTO  * used with comm_element structure
17106a99fe3SHajimu UMEMOTO  */
172d2432adbSDag-Erling Smørgrav void init_cache_write_request(struct cache_write_request *);
173d2432adbSDag-Erling Smørgrav void finalize_cache_write_request(struct cache_write_request *);
174d2432adbSDag-Erling Smørgrav struct cache_write_request *get_cache_write_request(struct comm_element *);
175d2432adbSDag-Erling Smørgrav 
176d2432adbSDag-Erling Smørgrav void init_cache_write_response(struct cache_write_response *);
177d2432adbSDag-Erling Smørgrav void finalize_cache_write_response(struct cache_write_response *);
178d2432adbSDag-Erling Smørgrav struct cache_write_response *get_cache_write_response(struct comm_element *);
179d2432adbSDag-Erling Smørgrav 
180d2432adbSDag-Erling Smørgrav void init_cache_read_request(struct cache_read_request *);
181d2432adbSDag-Erling Smørgrav void finalize_cache_read_request(struct cache_read_request *);
182d2432adbSDag-Erling Smørgrav struct cache_read_request *get_cache_read_request(struct comm_element *);
183d2432adbSDag-Erling Smørgrav 
184d2432adbSDag-Erling Smørgrav void init_cache_read_response(struct cache_read_response *);
185d2432adbSDag-Erling Smørgrav void finalize_cache_read_response(struct cache_read_response *);
186d2432adbSDag-Erling Smørgrav struct cache_read_response *get_cache_read_response(struct comm_element *);
187d2432adbSDag-Erling Smørgrav 
188d2432adbSDag-Erling Smørgrav void init_cache_transform_request(struct cache_transform_request *);
189d2432adbSDag-Erling Smørgrav void finalize_cache_transform_request(struct cache_transform_request *);
190d2432adbSDag-Erling Smørgrav struct cache_transform_request *get_cache_transform_request(
19106a99fe3SHajimu UMEMOTO 	struct comm_element *);
19206a99fe3SHajimu UMEMOTO 
193d2432adbSDag-Erling Smørgrav void init_cache_transform_response(struct cache_transform_response *);
194d2432adbSDag-Erling Smørgrav void finalize_cache_transform_response(struct cache_transform_response *);
195d2432adbSDag-Erling Smørgrav struct cache_transform_response *get_cache_transform_response(
19606a99fe3SHajimu UMEMOTO 	struct comm_element *);
19706a99fe3SHajimu UMEMOTO 
198d2432adbSDag-Erling Smørgrav void init_cache_mp_write_session_request(
19906a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_request *);
200d2432adbSDag-Erling Smørgrav void finalize_cache_mp_write_session_request(
20106a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_request *);
202d2432adbSDag-Erling Smørgrav struct cache_mp_write_session_request *
203d2432adbSDag-Erling Smørgrav     	get_cache_mp_write_session_request(struct comm_element *);
20406a99fe3SHajimu UMEMOTO 
205d2432adbSDag-Erling Smørgrav void init_cache_mp_write_session_response(
20606a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_response *);
207d2432adbSDag-Erling Smørgrav void finalize_cache_mp_write_session_response(
20806a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_response *);
209d2432adbSDag-Erling Smørgrav struct cache_mp_write_session_response *
21006a99fe3SHajimu UMEMOTO 	get_cache_mp_write_session_response(struct comm_element *);
21106a99fe3SHajimu UMEMOTO 
212d2432adbSDag-Erling Smørgrav void init_cache_mp_write_session_write_request(
21306a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_write_request *);
214d2432adbSDag-Erling Smørgrav void finalize_cache_mp_write_session_write_request(
21506a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_write_request *);
216d2432adbSDag-Erling Smørgrav struct cache_mp_write_session_write_request *
21706a99fe3SHajimu UMEMOTO 	get_cache_mp_write_session_write_request(struct comm_element *);
21806a99fe3SHajimu UMEMOTO 
219d2432adbSDag-Erling Smørgrav void init_cache_mp_write_session_write_response(
22006a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_write_response *);
221d2432adbSDag-Erling Smørgrav void finalize_cache_mp_write_session_write_response(
22206a99fe3SHajimu UMEMOTO 	struct cache_mp_write_session_write_response *);
223d2432adbSDag-Erling Smørgrav struct cache_mp_write_session_write_response *
22406a99fe3SHajimu UMEMOTO 	get_cache_mp_write_session_write_response(struct comm_element *);
22506a99fe3SHajimu UMEMOTO 
226d2432adbSDag-Erling Smørgrav void init_cache_mp_read_session_request(
22706a99fe3SHajimu UMEMOTO 	struct cache_mp_read_session_request *);
228d2432adbSDag-Erling Smørgrav void finalize_cache_mp_read_session_request(
22906a99fe3SHajimu UMEMOTO 	struct cache_mp_read_session_request *);
230d2432adbSDag-Erling Smørgrav struct cache_mp_read_session_request *get_cache_mp_read_session_request(
23106a99fe3SHajimu UMEMOTO 	struct comm_element *);
23206a99fe3SHajimu UMEMOTO 
233d2432adbSDag-Erling Smørgrav void init_cache_mp_read_session_response(
23406a99fe3SHajimu UMEMOTO 	struct cache_mp_read_session_response *);
235d2432adbSDag-Erling Smørgrav void finalize_cache_mp_read_session_response(
23606a99fe3SHajimu UMEMOTO 	struct cache_mp_read_session_response *);
237d2432adbSDag-Erling Smørgrav struct cache_mp_read_session_response *
238d2432adbSDag-Erling Smørgrav     	get_cache_mp_read_session_response(struct comm_element *);
23906a99fe3SHajimu UMEMOTO 
240d2432adbSDag-Erling Smørgrav void init_cache_mp_read_session_read_response(
24106a99fe3SHajimu UMEMOTO 	struct cache_mp_read_session_read_response *);
242d2432adbSDag-Erling Smørgrav void finalize_cache_mp_read_session_read_response(
24306a99fe3SHajimu UMEMOTO 	struct cache_mp_read_session_read_response *);
244d2432adbSDag-Erling Smørgrav struct cache_mp_read_session_read_response *
24506a99fe3SHajimu UMEMOTO 	get_cache_mp_read_session_read_response(struct comm_element *);
24606a99fe3SHajimu UMEMOTO 
24706a99fe3SHajimu UMEMOTO #endif
248