pacemaker  2.0.1-15814c6c0d
Scalable High-Availability cluster resource manager
ipcs.h
Go to the documentation of this file.
1 /*
2  * Copyright 2013-2018 Andrew Beekhof <andrew@beekhof.net>
3  *
4  * This source code is licensed under the GNU Lesser General Public License
5  * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
6  */
7 
8 #ifndef CRM_COMMON_IPCS__H
9 # define CRM_COMMON_IPCS__H
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 # include <stdbool.h>
16 # include <qb/qbipcs.h>
17 # ifdef HAVE_GNUTLS_GNUTLS_H
18 # undef KEYFILE
19 # include <gnutls/gnutls.h>
20 # endif
21 
22 # include <crm/common/ipc.h>
23 # include <crm/common/mainloop.h>
24 
25 typedef struct crm_client_s crm_client_t;
26 
30 # ifdef HAVE_GNUTLS_GNUTLS_H
31  CRM_CLIENT_TLS = 3,
32 # endif
33 };
34 
35 struct crm_remote_s {
36  /* Shared */
37  char *buffer;
38  size_t buffer_size;
39  size_t buffer_offset;
43 
44  /* CIB-only */
46  char *token;
47 
48  /* TLS only */
49 # ifdef HAVE_GNUTLS_GNUTLS_H
50  gnutls_session_t *tls_session;
51  bool tls_handshake_complete;
52 # endif
53 };
54 
56 {
57  crm_client_flag_ipc_proxied = 0x00001, /* ipc_proxy code only */
58  crm_client_flag_ipc_privileged = 0x00002, /* root or cluster user */
59 };
60 
61 struct crm_client_s {
62  uint pid;
63 
64  uid_t uid;
65  gid_t gid;
66 
67  char *id;
68  char *name;
69  char *user;
70 
71  /* Provided for server use (not used by library) */
72  /* @TODO merge options, flags, and kind (reserving lower bits for server) */
73  long long options;
74 
77  void *userdata;
78 
80  GQueue *event_queue;
81 
82  /* Depending on the value of kind, only some of the following
83  * will be populated/valid
84  */
85  enum client_type kind;
86 
87  qb_ipcs_connection_t *ipcs; /* IPC */
88 
89  struct crm_remote_s *remote; /* TCP/TLS */
90 
91  unsigned int queue_backlog; /* IPC queue length after last flush */
92  unsigned int queue_max; /* Evict client whose queue grows this big */
93 };
94 
95 extern GHashTable *client_connections;
96 
97 void crm_client_init(void);
98 void crm_client_cleanup(void);
99 
100 crm_client_t *crm_client_get(qb_ipcs_connection_t * c);
101 crm_client_t *crm_client_get_by_id(const char *id);
102 const char *crm_client_name(crm_client_t * c);
104 
105 crm_client_t *crm_client_alloc(void *key);
106 crm_client_t *crm_client_new(qb_ipcs_connection_t * c, uid_t uid, gid_t gid);
108 void crm_client_disconnect_all(qb_ipcs_service_t *s);
109 bool crm_set_client_queue_max(crm_client_t *client, const char *qmax);
110 
112  const char *tag, const char *function, int line);
113 
114 /* when max_send_size is 0, default ipc buffer size is used */
115 ssize_t crm_ipc_prepare(uint32_t request, xmlNode * message, struct iovec ** result, uint32_t max_send_size);
116 ssize_t crm_ipcs_send(crm_client_t * c, uint32_t request, xmlNode * message, enum crm_ipc_flags flags);
117 ssize_t crm_ipcs_sendv(crm_client_t * c, struct iovec *iov, enum crm_ipc_flags flags);
118 xmlNode *crm_ipcs_recv(crm_client_t * c, void *data, size_t size, uint32_t * id, uint32_t * flags);
119 
120 int crm_ipcs_client_pid(qb_ipcs_connection_t * c);
121 
122 #ifdef __cplusplus
123 }
124 #endif
125 
126 #endif
void crm_client_destroy(crm_client_t *c)
Definition: ipc.c:435
client_type
Definition: ipcs.h:27
size_t buffer_offset
Definition: ipcs.h:39
GQueue * event_queue
Definition: ipcs.h:80
crm_client_t * crm_client_alloc(void *key)
Allocate a new crm_client_t object and generate its ID.
Definition: ipc.c:341
void crm_client_disconnect_all(qb_ipcs_service_t *s)
Definition: ipc.c:259
mainloop_io_t * source
Definition: ipcs.h:42
uid_t uid
Definition: ipcs.h:64
uint32_t flags
Definition: ipcs.h:76
qb_ipcs_connection_t * ipcs
Definition: ipcs.h:87
uint32_t size
Definition: internal.h:81
int request_id
Definition: ipcs.h:75
xmlNode * crm_ipcs_recv(crm_client_t *c, void *data, size_t size, uint32_t *id, uint32_t *flags)
Definition: ipc.c:509
struct mainloop_io_s mainloop_io_t
Definition: mainloop.h:29
char * buffer
Definition: ipcs.h:37
unsigned int queue_max
Definition: ipcs.h:92
struct crm_remote_s * remote
Definition: ipcs.h:89
crm_client_t * crm_client_get(qb_ipcs_connection_t *c)
Definition: ipc.c:175
char * user
Definition: ipcs.h:69
Wrappers for and extensions to glib mainloop.
void crm_client_init(void)
Definition: ipc.c:237
char * token
Definition: ipcs.h:46
void crm_ipcs_send_ack(crm_client_t *c, uint32_t request, uint32_t flags, const char *tag, const char *function, int line)
Definition: ipc.c:852
const char * crm_client_type_text(enum client_type client_type)
Definition: ipc.c:220
void gnutls_session_t
Definition: cib_remote.c:42
ssize_t crm_ipcs_send(crm_client_t *c, uint32_t request, xmlNode *message, enum crm_ipc_flags flags)
Definition: ipc.c:829
unsigned int queue_backlog
Definition: ipcs.h:91
int auth_timeout
Definition: ipcs.h:40
void * userdata
Definition: ipcs.h:77
long long options
Definition: ipcs.h:73
uint pid
Definition: ipcs.h:62
int event_timer
Definition: ipcs.h:79
size_t buffer_size
Definition: ipcs.h:38
gid_t gid
Definition: ipcs.h:65
crm_client_t * crm_client_get_by_id(const char *id)
Definition: ipc.c:186
crm_client_flags
Definition: ipcs.h:55
GHashTable * client_connections
Definition: ipc.c:172
#define uint32_t
Definition: stdint.in.h:158
char data[0]
Definition: internal.h:87
ssize_t crm_ipc_prepare(uint32_t request, xmlNode *message, struct iovec **result, uint32_t max_send_size)
Definition: ipc.c:682
void crm_client_cleanup(void)
Definition: ipc.c:246
char * id
Definition: ipcs.h:67
bool crm_set_client_queue_max(crm_client_t *client, const char *qmax)
Raise IPC eviction threshold for a client, if allowed.
Definition: ipc.c:485
int crm_ipcs_client_pid(qb_ipcs_connection_t *c)
Definition: ipc.c:499
Wrappers for and extensions to libqb IPC.
const char * crm_client_name(crm_client_t *c)
Definition: ipc.c:206
bool authenticated
Definition: ipcs.h:45
crm_client_t * crm_client_new(qb_ipcs_connection_t *c, uid_t uid, gid_t gid)
Definition: ipc.c:350
int tcp_socket
Definition: ipcs.h:41
char * name
Definition: ipcs.h:68
crm_ipc_flags
Definition: ipc.h:37
ssize_t crm_ipcs_sendv(crm_client_t *c, struct iovec *iov, enum crm_ipc_flags flags)
Definition: ipc.c:756
uint64_t flags
Definition: remote.c:148