2007-06-10 17:02:09 +00:00
/*
Unix SMB / CIFS implementation .
Samba3 ctdb connection handling
Copyright ( C ) Volker Lendecke 2007
2011-10-23 20:56:08 +02:00
2007-06-10 17:02:09 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-09 19:25:36 +00:00
the Free Software Foundation ; either version 3 of the License , or
2007-06-10 17:02:09 +00:00
( at your option ) any later version .
2011-10-23 20:56:08 +02:00
2007-06-10 17:02:09 +00:00
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
2011-10-23 20:56:08 +02:00
2007-06-10 17:02:09 +00:00
You should have received a copy of the GNU General Public License
2007-07-10 00:52:41 +00:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2007-06-10 17:02:09 +00:00
*/
2008-01-16 12:09:48 +03:00
# ifndef _CTDBD_CONN_H
# define _CTDBD_CONN_H
2016-04-08 16:14:33 +02:00
# include "replace.h"
# include "system/filesys.h"
# include "system/network.h"
2017-01-09 08:17:02 +01:00
# include "lib/dbwrap/dbwrap.h"
2015-03-12 14:40:16 +00:00
# include <tdb.h>
2016-04-08 16:14:33 +02:00
# include <tevent.h>
2011-05-05 11:25:29 +02:00
2007-06-10 17:02:09 +00:00
struct ctdbd_connection ;
2011-03-24 15:31:06 +01:00
struct messaging_context ;
struct messaging_rec ;
2007-06-10 17:02:09 +00:00
2016-04-05 10:09:35 +02:00
int ctdbd_init_connection ( TALLOC_CTX * mem_ctx ,
const char * sockname , int timeout ,
struct ctdbd_connection * * pconn ) ;
2020-03-12 16:05:58 +01:00
int ctdbd_init_async_connection (
TALLOC_CTX * mem_ctx ,
const char * sockname ,
int timeout ,
struct ctdbd_connection * * pconn ) ;
2016-07-09 08:59:09 +02:00
int ctdbd_reinit_connection ( TALLOC_CTX * mem_ctx ,
const char * sockname , int timeout ,
struct ctdbd_connection * conn ) ;
2016-04-05 10:09:35 +02:00
2012-07-30 09:31:59 -04:00
uint32_t ctdbd_vnn ( const struct ctdbd_connection * conn ) ;
2007-06-10 17:02:09 +00:00
2010-01-23 00:05:15 +01:00
int ctdbd_conn_get_fd ( struct ctdbd_connection * conn ) ;
2017-06-01 18:00:45 +02:00
void ctdbd_socket_readable ( struct tevent_context * ev ,
struct ctdbd_connection * conn ) ;
2010-01-23 00:05:15 +01:00
2015-10-02 20:42:05 -07:00
int ctdbd_messaging_send_iov ( struct ctdbd_connection * conn ,
uint32_t dst_vnn , uint64_t dst_srvid ,
const struct iovec * iov , int iovlen ) ;
2007-06-10 17:02:09 +00:00
2012-07-30 09:31:59 -04:00
bool ctdbd_process_exists ( struct ctdbd_connection * conn , uint32_t vnn ,
2017-08-29 13:26:20 +02:00
pid_t pid , uint64_t unique_id ) ;
2007-06-10 17:02:09 +00:00
char * ctdbd_dbpath ( struct ctdbd_connection * conn ,
TALLOC_CTX * mem_ctx , uint32_t db_id ) ;
2015-10-02 20:42:05 -07:00
int ctdbd_db_attach ( struct ctdbd_connection * conn , const char * name ,
2017-07-11 20:41:43 +02:00
uint32_t * db_id , bool persistent ) ;
2007-06-10 17:02:09 +00:00
2015-10-02 20:42:05 -07:00
int ctdbd_migrate ( struct ctdbd_connection * conn , uint32_t db_id , TDB_DATA key ) ;
2007-06-10 17:02:09 +00:00
2015-10-02 20:42:05 -07:00
int ctdbd_parse ( struct ctdbd_connection * conn , uint32_t db_id ,
TDB_DATA key , bool local_copy ,
void ( * parser ) ( TDB_DATA key , TDB_DATA data ,
void * private_data ) ,
void * private_data ) ;
2007-06-10 17:02:09 +00:00
2015-10-02 20:42:05 -07:00
int ctdbd_traverse ( struct ctdbd_connection * master , uint32_t db_id ,
void ( * fn ) ( TDB_DATA key , TDB_DATA data ,
void * private_data ) ,
void * private_data ) ;
2007-06-10 17:02:09 +00:00
2015-10-02 20:42:05 -07:00
int ctdbd_register_ips ( struct ctdbd_connection * conn ,
const struct sockaddr_storage * server ,
const struct sockaddr_storage * client ,
2017-06-01 17:45:47 +02:00
int ( * cb ) ( struct tevent_context * ev ,
uint32_t src_vnn , uint32_t dst_vnn ,
2015-10-02 20:42:05 -07:00
uint64_t dst_srvid ,
const uint8_t * msg , size_t msglen ,
void * private_data ) ,
void * private_data ) ;
2023-11-16 13:18:03 +01:00
void ctdbd_unregister_ips ( struct ctdbd_connection * conn ,
const struct sockaddr_storage * _server ,
const struct sockaddr_storage * _client ,
int ( * cb ) ( struct tevent_context * ev ,
uint32_t src_vnn ,
uint32_t dst_vnn ,
uint64_t dst_srvid ,
const uint8_t * msg ,
size_t msglen ,
void * private_data ) ,
void * private_data ) ;
2023-11-20 14:57:46 +01:00
void ctdbd_passed_ips ( struct ctdbd_connection * conn ,
const struct sockaddr_storage * _server ,
const struct sockaddr_storage * _client ,
int ( * cb ) ( struct tevent_context * ev ,
uint32_t src_vnn ,
uint32_t dst_vnn ,
uint64_t dst_srvid ,
const uint8_t * msg ,
size_t msglen ,
void * private_data ) ,
void * private_data ) ;
2007-06-10 17:02:09 +00:00
2020-09-07 00:17:11 +02:00
/*
* call @ cb for each public IP . If @ cb returns non - zero , then break the loop
* and propagate the return value upwards .
* @ returns : 0 on success , where all @ cb invocations also returned zero
* ENOMEM on memory allocation failure
* EIO on ctdbd connection failure
* @ cb ( ) return value if non - zero
*/
int ctdbd_public_ip_foreach ( struct ctdbd_connection * conn ,
int ( * cb ) ( uint32_t total_ip_count ,
const struct sockaddr_storage * ip ,
bool is_movable_ip ,
void * private_data ) ,
void * private_data ) ;
2023-08-11 13:07:46 +02:00
int ctdbd_all_ip_foreach ( struct ctdbd_connection * conn ,
bool include_node_ips ,
bool include_public_ips ,
int ( * cb ) ( uint32_t total_ip_count ,
const struct sockaddr_storage * ip ,
uint32_t pinned_pnn ,
uint32_t current_pnn ,
void * private_data ) ,
void * private_data ) ;
2020-06-25 15:14:04 +02:00
2015-10-02 20:42:05 -07:00
int ctdbd_control_local ( struct ctdbd_connection * conn , uint32_t opcode ,
uint64_t srvid , uint32_t flags , TDB_DATA data ,
TALLOC_CTX * mem_ctx , TDB_DATA * outdata ,
2016-04-21 13:31:39 +02:00
int32_t * cstatus ) ;
2015-10-02 20:42:05 -07:00
int ctdb_watch_us ( struct ctdbd_connection * conn ) ;
2015-10-02 20:42:05 -07:00
int ctdb_unwatch ( struct ctdbd_connection * conn ) ;
2015-05-19 07:05:24 +02:00
2015-10-29 16:36:30 +11:00
struct ctdb_req_message_old ;
2015-05-19 07:05:24 +02:00
2015-10-02 20:42:05 -07:00
int register_with_ctdbd ( struct ctdbd_connection * conn , uint64_t srvid ,
2017-06-01 17:45:47 +02:00
int ( * cb ) ( struct tevent_context * ev ,
uint32_t src_vnn , uint32_t dst_vnn ,
2015-10-02 20:42:05 -07:00
uint64_t dst_srvid ,
const uint8_t * msg , size_t msglen ,
void * private_data ) ,
void * private_data ) ;
2023-10-12 17:11:42 +02:00
void deregister_from_ctdbd ( struct ctdbd_connection * conn ,
uint64_t srvid ,
int ( * cb ) ( struct tevent_context * ev ,
uint32_t src_vnn ,
uint32_t dst_vnn ,
uint64_t dst_srvid ,
const uint8_t * msg ,
size_t msglen ,
void * private_data ) ,
void * private_data ) ;
2015-10-02 20:42:05 -07:00
int ctdbd_probe ( const char * sockname , int timeout ) ;
2008-08-07 16:20:05 +10:00
2020-03-20 13:46:13 +01:00
struct ctdb_req_header ;
void ctdbd_prep_hdr_next_reqid (
struct ctdbd_connection * conn , struct ctdb_req_header * hdr ) ;
2020-03-20 13:58:21 +01:00
/*
* Async ctdb_request . iov [ 0 ] must start with an initialized
* struct ctdb_req_header
*/
struct tevent_req * ctdbd_req_send (
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct ctdbd_connection * conn ,
struct iovec * iov ,
size_t num_iov ) ;
int ctdbd_req_recv (
struct tevent_req * req ,
TALLOC_CTX * mem_ctx ,
struct ctdb_req_header * * reply ) ;
2017-01-09 08:17:02 +01:00
struct tevent_req * ctdbd_parse_send ( TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct ctdbd_connection * conn ,
uint32_t db_id ,
TDB_DATA key ,
bool local_copy ,
void ( * parser ) ( TDB_DATA key ,
TDB_DATA data ,
void * private_data ) ,
void * private_data ,
enum dbwrap_req_state * req_state ) ;
int ctdbd_parse_recv ( struct tevent_req * req ) ;
2008-01-16 12:09:48 +03:00
# endif /* _CTDBD_CONN_H */