1 /* $OpenLDAP$ */ 2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>. 3 * 4 * Copyright 1998-2021 The OpenLDAP Foundation. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted only as authorized by the OpenLDAP 9 * Public License. 10 * 11 * A copy of this license is available in the file LICENSE in the 12 * top-level directory of the distribution or, alternatively, at 13 * <http://www.OpenLDAP.org/license.html>. 14 */ 15 /* Portions Copyright (c) 1995 Regents of the University of Michigan. 16 * All rights reserved. 17 * 18 * Redistribution and use in source and binary forms are permitted 19 * provided that this notice is preserved and that due credit is given 20 * to the University of Michigan at Ann Arbor. The name of the University 21 * may not be used to endorse or promote products derived from this 22 * software without specific prior written permission. This software 23 * is provided ``as is'' without express or implied warranty. 24 */ 25 26 #ifndef PROTO_LLOAD_H 27 #define PROTO_LLOAD_H 28 29 #include <ldap_cdefs.h> 30 #include "ldap_pvt.h" 31 32 #include <event2/event.h> 33 34 LDAP_BEGIN_DECL 35 36 /* 37 * backend.c 38 */ 39 40 LDAP_SLAPD_F (void) backend_connect( evutil_socket_t s, short what, void *arg ); 41 LDAP_SLAPD_F (void *) backend_connect_task( void *ctx, void *arg ); 42 LDAP_SLAPD_F (void) backend_retry( LloadBackend *b ); 43 LDAP_SLAPD_F (int) upstream_select( LloadOperation *op, LloadConnection **c, int *res, char **message ); 44 LDAP_SLAPD_F (int) backend_select( LloadBackend *b, LloadOperation *op, LloadConnection **c, int *res, char **message ); 45 LDAP_SLAPD_F (int) try_upstream( LloadBackend *b, lload_c_head *head, LloadOperation *op, LloadConnection *c, int *res, char **message ); 46 LDAP_SLAPD_F (void) backend_reset( LloadBackend *b, int gentle ); 47 LDAP_SLAPD_F (LloadBackend *) lload_backend_new( void ); 48 LDAP_SLAPD_F (void) lload_backend_destroy( LloadBackend *b ); 49 50 /* 51 * bind.c 52 */ 53 LDAP_SLAPD_F (int) request_bind( LloadConnection *c, LloadOperation *op ); 54 LDAP_SLAPD_F (int) handle_bind_response( LloadConnection *client, LloadOperation *op, BerElement *ber ); 55 LDAP_SLAPD_F (int) handle_whoami_response( LloadConnection *client, LloadOperation *op, BerElement *ber ); 56 LDAP_SLAPD_F (int) handle_vc_bind_response( LloadConnection *client, LloadOperation *op, BerElement *ber ); 57 58 /* 59 * client.c 60 */ 61 LDAP_SLAPD_F (int) request_abandon( LloadConnection *c, LloadOperation *op ); 62 LDAP_SLAPD_F (int) request_process( LloadConnection *c, LloadOperation *op ); 63 LDAP_SLAPD_F (int) handle_one_request( LloadConnection *c ); 64 LDAP_SLAPD_F (void) client_tls_handshake_cb( evutil_socket_t s, short what, void *arg ); 65 LDAP_SLAPD_F (LloadConnection *) client_init( ber_socket_t s, const char *peername, struct event_base *base, int use_tls ); 66 LDAP_SLAPD_F (void) client_reset( LloadConnection *c ); 67 LDAP_SLAPD_F (void) client_destroy( LloadConnection *c ); 68 LDAP_SLAPD_F (void) clients_destroy( int gentle ); 69 LDAP_SLAPD_V (long) lload_client_max_pending; 70 71 /* 72 * config.c 73 */ 74 LDAP_SLAPD_F (int) lload_read_config( const char *fname, const char *dir ); 75 LDAP_SLAPD_F (void) lload_config_destroy( void ); 76 LDAP_SLAPD_F (int) verb_to_mask( const char *word, slap_verbmasks *v ); 77 LDAP_SLAPD_F (int) lload_tls_get_config( LDAP *ld, int opt, char **val ); 78 LDAP_SLAPD_F (void) lload_bindconf_tls_defaults( slap_bindconf *bc ); 79 LDAP_SLAPD_F (int) lload_backend_parse( const char *word, LloadBackend *b ); 80 LDAP_SLAPD_F (int) lload_bindconf_parse( const char *word, slap_bindconf *bc ); 81 LDAP_SLAPD_F (int) lload_bindconf_unparse( slap_bindconf *bc, struct berval *bv ); 82 LDAP_SLAPD_F (int) lload_bindconf_tls_set( slap_bindconf *bc, LDAP *ld ); 83 LDAP_SLAPD_F (void) lload_bindconf_free( slap_bindconf *bc ); 84 #ifdef BALANCER_MODULE 85 LDAP_SLAPD_F (int) lload_back_init_cf( BackendInfo *bi ); 86 #endif 87 88 /* 89 * connection.c 90 */ 91 LDAP_SLAPD_V (ldap_pvt_thread_mutex_t) clients_mutex; 92 LDAP_SLAPD_F (void *) handle_pdus( void *ctx, void *arg ); 93 LDAP_SLAPD_F (void) connection_write_cb( evutil_socket_t s, short what, void *arg ); 94 LDAP_SLAPD_F (void) connection_read_cb( evutil_socket_t s, short what, void *arg ); 95 LDAP_SLAPD_F (int) lload_connection_close( LloadConnection *c, void *arg ); 96 LDAP_SLAPD_F (LloadConnection *) lload_connection_init( ber_socket_t s, const char *peername, int use_tls ); 97 LDAP_SLAPD_F (void) connection_destroy( LloadConnection *c ); 98 LDAP_SLAPD_F (void) connections_walk_last( ldap_pvt_thread_mutex_t *cq_mutex, 99 lload_c_head *cq, 100 LloadConnection *cq_last, 101 CONNCB cb, 102 void *arg ); 103 LDAP_SLAPD_F (void) connections_walk( ldap_pvt_thread_mutex_t *cq_mutex, lload_c_head *cq, CONNCB cb, void *arg ); 104 105 /* 106 * daemon.c 107 */ 108 LDAP_SLAPD_F (int) lload_open_new_listener( const char *urls, LDAPURLDesc *lud ); 109 LDAP_SLAPD_F (int) lloadd_listeners_init( const char *urls ); 110 LDAP_SLAPD_F (int) lloadd_daemon_destroy( void ); 111 LDAP_SLAPD_F (int) lloadd_daemon( struct event_base *daemon_base ); 112 LDAP_SLAPD_F (LloadListener **) lloadd_get_listeners( void ); 113 LDAP_SLAPD_F (void) listeners_reactivate( void ); 114 LDAP_SLAPD_F (struct event_base *) lload_get_base( ber_socket_t s ); 115 LDAP_SLAPD_V (int) lload_daemon_threads; 116 LDAP_SLAPD_V (int) lload_daemon_mask; 117 118 LDAP_SLAPD_F (void) lload_sig_shutdown( evutil_socket_t sig, short what, void *arg ); 119 120 LDAP_SLAPD_F (void) lload_pause_server( void ); 121 LDAP_SLAPD_F (void) lload_unpause_server( void ); 122 123 LDAP_SLAPD_V (struct event_base *) daemon_base; 124 LDAP_SLAPD_V (struct evdns_base *) dnsbase; 125 LDAP_SLAPD_V (volatile sig_atomic_t) slapd_shutdown; 126 LDAP_SLAPD_V (volatile sig_atomic_t) slapd_gentle_shutdown; 127 LDAP_SLAPD_V (int) lloadd_inited; 128 LDAP_SLAPD_V (struct LloadChange) lload_change; 129 130 LDAP_SLAPD_V (struct event *) lload_timeout_event; 131 132 LDAP_SLAPD_V (LDAP *) lload_tls_backend_ld; 133 LDAP_SLAPD_V (LDAP *) lload_tls_ld; 134 LDAP_SLAPD_V (void *) lload_tls_ctx; 135 #ifdef BALANCER_MODULE 136 LDAP_SLAPD_V (int) lload_use_slap_tls_ctx; 137 #endif /* BALANCER_MODULE */ 138 139 /* 140 * extended.c 141 */ 142 LDAP_SLAPD_V (Avlnode *) lload_exop_handlers; 143 LDAP_SLAPD_F (int) exop_handler_cmp( const void *l, const void *r ); 144 LDAP_SLAPD_F (int) request_extended( LloadConnection *c, LloadOperation *op ); 145 LDAP_SLAPD_F (int) lload_exop_init( void ); 146 147 /* 148 * init.c 149 */ 150 LDAP_SLAPD_F (int) lload_global_init( void ); 151 LDAP_SLAPD_F (int) lload_tls_init( void ); 152 LDAP_SLAPD_F (int) lload_init( int mode, const char *name ); 153 LDAP_SLAPD_F (int) lload_destroy( void ); 154 LDAP_SLAPD_F (void) lload_counters_init( void ); 155 156 /* 157 * libevent_support.c 158 */ 159 LDAP_SLAPD_F (int) lload_libevent_init( void ); 160 LDAP_SLAPD_F (void) lload_libevent_destroy( void ); 161 162 #ifdef BALANCER_MODULE 163 /* 164 * monitor.c 165 */ 166 LDAP_SLAPD_V (monitor_subsys_t *) lload_monitor_client_subsys; 167 LDAP_SLAPD_F (int) lload_monitor_open( void ); 168 LDAP_SLAPD_F (int) lload_monitor_conn_entry_create( LloadConnection *c, monitor_subsys_t *ms ); 169 LDAP_SLAPD_F (int) lload_monitor_conn_unlink( LloadConnection *c ); 170 LDAP_SLAPD_F (int) lload_monitor_backend_init( BackendInfo *bi, monitor_subsys_t *ms, LloadBackend *b ); 171 LDAP_SLAPD_F (int) lload_monitor_tier_init( BackendInfo *bi, LloadTier *tier ); 172 #endif /* BALANCER_MODULE */ 173 174 /* 175 * operation.c 176 */ 177 LDAP_SLAPD_V (ldap_pvt_thread_mutex_t) lload_pin_mutex; 178 LDAP_SLAPD_V (unsigned long) lload_next_pin; 179 LDAP_SLAPD_V (TAvlnode *) lload_control_actions; 180 LDAP_SLAPD_V (TAvlnode *) lload_exop_actions; 181 LDAP_SLAPD_V (enum op_restriction) lload_default_exop_action; 182 LDAP_SLAPD_F (int) lload_restriction_cmp( const void *left, const void *right ); 183 LDAP_SLAPD_F (const char *) lload_msgtype2str( ber_tag_t tag ); 184 LDAP_SLAPD_F (int) operation_upstream_cmp( const void *l, const void *r ); 185 LDAP_SLAPD_F (int) operation_client_cmp( const void *l, const void *r ); 186 LDAP_SLAPD_F (LloadOperation *) operation_init( LloadConnection *c, BerElement *ber ); 187 LDAP_SLAPD_F (int) operation_send_abandon( LloadOperation *op, LloadConnection *c ); 188 LDAP_SLAPD_F (void) operation_abandon( LloadOperation *op ); 189 LDAP_SLAPD_F (void) operation_send_reject( LloadOperation *op, int result, const char *msg, int send_anyway ); 190 LDAP_SLAPD_F (int) operation_send_reject_locked( LloadOperation *op, int result, const char *msg, int send_anyway ); 191 LDAP_SLAPD_F (void) operation_lost_upstream( LloadOperation *op ); 192 LDAP_SLAPD_F (void) operation_destroy( LloadOperation *op ); 193 LDAP_SLAPD_F (int) operation_unlink( LloadOperation *op ); 194 LDAP_SLAPD_F (int) operation_unlink_client( LloadOperation *op, LloadConnection *client ); 195 LDAP_SLAPD_F (int) operation_unlink_upstream( LloadOperation *op, LloadConnection *upstream ); 196 LDAP_SLAPD_F (void) operations_timeout( evutil_socket_t s, short what, void *arg ); 197 LDAP_SLAPD_F (void) operation_update_conn_counters( LloadOperation *op, LloadConnection *upstream ); 198 LDAP_SLAPD_F (void) operation_update_backend_counters( LloadOperation *op, LloadBackend *b ); 199 LDAP_SLAPD_F (void) operation_update_global_rejected( LloadOperation *op ); 200 201 /* 202 * tier.c 203 */ 204 LDAP_SLAPD_F (int) tier_startup( LloadTier *tier ); 205 LDAP_SLAPD_F (int) tier_reset( LloadTier *tier, int shutdown ); 206 LDAP_SLAPD_F (int) tier_destroy( LloadTier *tier ); 207 LDAP_SLAPD_F (void) lload_tiers_shutdown( void ); 208 LDAP_SLAPD_F (void) lload_tiers_reset( int shutdown ); 209 LDAP_SLAPD_F (void) lload_tiers_update( evutil_socket_t s, short what, void *arg ); 210 LDAP_SLAPD_F (void) lload_tiers_destroy( void ); 211 LDAP_SLAPD_F (struct lload_tier_type *) lload_tier_find( char *type ); 212 213 /* 214 * upstream.c 215 */ 216 LDAP_SLAPD_F (int) lload_upstream_entry_cmp( const void *l, const void *r ); 217 LDAP_SLAPD_F (int) forward_final_response( LloadConnection *client, LloadOperation *op, BerElement *ber ); 218 LDAP_SLAPD_F (int) forward_response( LloadConnection *client, LloadOperation *op, BerElement *ber ); 219 LDAP_SLAPD_F (void *) upstream_bind( void *ctx, void *arg ); 220 LDAP_SLAPD_F (LloadConnection *) upstream_init( ber_socket_t s, LloadBackend *b ); 221 LDAP_SLAPD_F (void) upstream_destroy( LloadConnection *c ); 222 223 LDAP_SLAPD_V (ber_len_t) sockbuf_max_incoming_client; 224 LDAP_SLAPD_V (ber_len_t) sockbuf_max_incoming_upstream; 225 LDAP_SLAPD_V (int) lload_conn_max_pdus_per_cycle; 226 227 LDAP_SLAPD_V (int) lload_write_coherence; 228 229 LDAP_SLAPD_V (lload_features_t) lload_features; 230 231 LDAP_SLAPD_V (slap_mask_t) global_allows; 232 LDAP_SLAPD_V (slap_mask_t) global_disallows; 233 234 LDAP_SLAPD_V (const char) Versionstr[]; 235 236 LDAP_SLAPD_V (int) global_gentlehup; 237 LDAP_SLAPD_V (int) global_idletimeout; 238 239 LDAP_SLAPD_V (struct timeval *) lload_timeout_api; 240 LDAP_SLAPD_V (struct timeval *) lload_timeout_net; 241 LDAP_SLAPD_V (struct timeval *) lload_write_timeout; 242 243 LDAP_SLAPD_V (char *) global_host; 244 LDAP_SLAPD_V (int) lber_debug; 245 LDAP_SLAPD_V (int) ldap_syslog; 246 247 LDAP_SLAPD_V (lload_global_stats_t) lload_stats; 248 LDAP_SLAPD_V (char *) listeners_list; 249 LDAP_END_DECL 250 251 #endif /* PROTO_LLOAD_H */ 252