/*
- * Copyright (C) 2011 David Goulet <david.goulet@polymtl.ca>
- * Copyright (C) 2011 Julien Desfossez <julien.desfossez@polymtl.ca>
+ * Copyright (C) 2011 EfficiOS Inc.
* Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*
* SPDX-License-Identifier: GPL-2.0-only
#include <arpa/inet.h>
#include <netinet/in.h>
+#include <stdint.h>
#include <sys/un.h>
#include "inet.h"
#include "inet6.h"
#include <common/unix.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
/* Queue size of listen(2) */
#define LTTNG_SESSIOND_COMM_MAX_LISTEN 64
#define LTTCOMM_MAX_SEND_FDS 16
#endif
-/*
- * Get the error code index from 0 since LTTCOMM_OK start at 1000
- */
-#define LTTCOMM_ERR_INDEX(code) (code - LTTCOMM_CONSUMERD_COMMAND_SOCK_READY)
-
enum lttcomm_sessiond_command {
/* Tracer command */
LTTNG_ADD_CONTEXT = 0,
/* Feature branch specific commands start at 10000. */
};
+static inline
+const char *lttcomm_relayd_command_str(lttcomm_relayd_command cmd)
+{
+ switch (cmd) {
+ case RELAYD_ADD_STREAM:
+ return "RELAYD_ADD_STREAM";
+ case RELAYD_CREATE_SESSION:
+ return "RELAYD_CREATE_SESSION";
+ case RELAYD_START_DATA:
+ return "RELAYD_START_DATA";
+ case RELAYD_UPDATE_SYNC_INFO:
+ return "RELAYD_UPDATE_SYNC_INFO";
+ case RELAYD_VERSION:
+ return "RELAYD_VERSION";
+ case RELAYD_SEND_METADATA:
+ return "RELAYD_SEND_METADATA";
+ case RELAYD_CLOSE_STREAM:
+ return "RELAYD_CLOSE_STREAM";
+ case RELAYD_DATA_PENDING:
+ return "RELAYD_DATA_PENDING";
+ case RELAYD_QUIESCENT_CONTROL:
+ return "RELAYD_QUIESCENT_CONTROL";
+ case RELAYD_BEGIN_DATA_PENDING:
+ return "RELAYD_BEGIN_DATA_PENDING";
+ case RELAYD_END_DATA_PENDING:
+ return "RELAYD_END_DATA_PENDING";
+ case RELAYD_ADD_INDEX:
+ return "RELAYD_ADD_INDEX";
+ case RELAYD_SEND_INDEX:
+ return "RELAYD_SEND_INDEX";
+ case RELAYD_CLOSE_INDEX:
+ return "RELAYD_CLOSE_INDEX";
+ case RELAYD_LIST_SESSIONS:
+ return "RELAYD_LIST_SESSIONS";
+ case RELAYD_STREAMS_SENT:
+ return "RELAYD_STREAMS_SENT";
+ case RELAYD_RESET_METADATA:
+ return "RELAYD_RESET_METADATA";
+ case RELAYD_ROTATE_STREAMS:
+ return "RELAYD_ROTATE_STREAMS";
+ case RELAYD_CREATE_TRACE_CHUNK:
+ return "RELAYD_CREATE_TRACE_CHUNK";
+ case RELAYD_CLOSE_TRACE_CHUNK:
+ return "RELAYD_CLOSE_TRACE_CHUNK";
+ case RELAYD_TRACE_CHUNK_EXISTS:
+ return "RELAYD_TRACE_CHUNK_EXISTS";
+ case RELAYD_GET_CONFIGURATION:
+ return "RELAYD_GET_CONFIGURATION";
+ default:
+ abort();
+ }
+}
+
/*
* lttcomm error code.
*/
LTTCOMM_CONSUMERD_ROTATION_FAIL, /* Rotation has failed. */
LTTCOMM_CONSUMERD_SNAPSHOT_FAILED, /* snapshot has failed. */
LTTCOMM_CONSUMERD_CREATE_TRACE_CHUNK_FAILED,/* Trace chunk creation failed. */
- LTTCOMM_CONSUMERD_CLOSE_TRACE_CHUNK_FAILED, /* Trace chunk creation failed. */
+ LTTCOMM_CONSUMERD_CLOSE_TRACE_CHUNK_FAILED, /* Trace chunk close failed. */
LTTCOMM_CONSUMERD_INVALID_PARAMETERS, /* Invalid parameters. */
LTTCOMM_CONSUMERD_TRACE_CHUNK_EXISTS_LOCAL, /* Trace chunk exists on consumer daemon. */
LTTCOMM_CONSUMERD_TRACE_CHUNK_EXISTS_REMOTE,/* Trace chunk exists on relay daemon. */
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
} addr;
-} LTTNG_PACKED;
+};
struct lttcomm_sock {
int32_t fd;
enum lttcomm_sock_proto proto;
struct lttcomm_sockaddr sockaddr;
const struct lttcomm_proto_ops *ops;
-} LTTNG_PACKED;
+};
/*
* Relayd sock. Adds the protocol version to use for the communications with
struct lttcomm_sock sock;
uint32_t major;
uint32_t minor;
-} LTTNG_PACKED;
+};
struct lttcomm_net_family {
int family;
} LTTNG_PACKED disable;
/* Create channel */
struct {
- struct lttng_channel chan;
- struct lttng_channel_extended extended;
+ uint32_t length;
} LTTNG_PACKED channel;
/* Context */
struct {
uint32_t nb_events;
} LTTNG_PACKED;
+/*
+ * Listing command header.
+ */
+struct lttcomm_list_command_header {
+ /* Number of elements */
+ uint32_t count;
+} LTTNG_PACKED;
+
/*
* Event extended info header. This is the structure preceding each
* extended info data.
struct {
uint64_t net_index;
enum lttng_stream_type type;
- /* Open socket to the relayd */
- struct lttcomm_relayd_sock sock;
+ uint32_t major;
+ uint32_t minor;
+ uint8_t relayd_socket_protocol;
/* Tracing session id associated to the relayd. */
uint64_t session_id;
/* Relayd session id, only used with control socket. */
const char *ip, unsigned int port);
struct lttcomm_sock *lttcomm_alloc_sock(enum lttcomm_sock_proto proto);
+int lttcomm_populate_sock_from_open_socket(struct lttcomm_sock *sock,
+ int fd,
+ enum lttcomm_sock_proto protocol);
int lttcomm_create_sock(struct lttcomm_sock *sock);
struct lttcomm_sock *lttcomm_alloc_sock_from_uri(struct lttng_uri *uri);
void lttcomm_destroy_sock(struct lttcomm_sock *sock);
/* Get network timeout, in milliseconds */
unsigned long lttcomm_get_network_timeout(void);
-#ifdef __cplusplus
-}
-#endif
-
#endif /* _LTTNG_SESSIOND_COMM_H */