3 #endif /* HAVE_CONFIG_H */
11 #include <sys/syslog.h>
12 #include <qb/qbdefs.h>
13 #include <qb/qbutil.h>
14 #include <qb/qbipcc.h>
16 #define PCS_SOCKET_NAME "pve2"
18 #define PCS_SERVICE1 1
19 #define MAX_MSG_SIZE (8192*128)
21 static qb_ipcc_connection_t *conn;
22 static pid_t conn_pid;
24 static char ipcbuffer[MAX_MSG_SIZE];
26 static void libqb_log_writer(const char *file_name,
28 int32_t severity, const char *msg)
30 if (severity == LOG_DEBUG)
33 warn("libqb: %s:%d [%d] %s\n", file_name, file_line, severity, msg);
36 MODULE = PVE::IPCC PACKAGE = PVE::IPCC
39 ipcc_send_rec(msgid, data=NULL)
45 pid_t cpid = getpid();
47 /* Each process needs its own ipcc connection,
48 * else the shared memory buffer gets corrupted.
50 if (conn && conn_pid != cpid) {
55 qb_util_set_log_function(libqb_log_writer);
56 conn = qb_ipcc_connect(PCS_SOCKET_NAME, MAX_MSG_SIZE);
66 if (data && SvPOK(data))
67 dataptr = SvPV(data, len);
70 struct iovec iov[iov_len];
72 struct qb_ipc_request_header req_header;
74 req_header.id = msgid;
75 req_header.size = sizeof(req_header) + len;
77 iov[0].iov_base = (char *)&req_header;
78 iov[0].iov_len = sizeof(req_header);
79 iov[1].iov_base = dataptr;
82 int32_t ms_timeout = -1; // fixme:
83 int res = qb_ipcc_sendv_recv(conn, iov, iov_len, ipcbuffer, sizeof(ipcbuffer), ms_timeout);
85 qb_ipcc_disconnect(conn);
91 struct qb_ipc_response_header *res_header;
93 res_header = (struct qb_ipc_response_header *)ipcbuffer;
94 int dsize = res_header->size - sizeof(struct qb_ipc_response_header);
96 if (res_header->error < 0) {
97 errno = -res_header->error;
101 RETVAL = newSVpv(ipcbuffer + sizeof(struct qb_ipc_response_header), dsize);