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