/*
* Get kernel version and validate it.
*/
-int kernel_validate_version(int tracer_fd)
+int kernel_validate_version(int tracer_fd,
+ struct lttng_kernel_tracer_version *version,
+ struct lttng_kernel_tracer_abi_version *abi_version)
{
int ret;
- struct lttng_kernel_tracer_version version;
- struct lttng_kernel_tracer_abi_version abi_version;
- ret = kernctl_tracer_version(tracer_fd, &version);
+ ret = kernctl_tracer_version(tracer_fd, version);
if (ret < 0) {
ERR("Failed to retrieve the lttng-modules version");
goto error;
}
/* Validate version */
- if (version.major != VERSION_MAJOR) {
+ if (version->major != VERSION_MAJOR) {
ERR("Kernel tracer major version (%d) is not compatible with lttng-tools major version (%d)",
- version.major, VERSION_MAJOR);
+ version->major, VERSION_MAJOR);
goto error_version;
}
- ret = kernctl_tracer_abi_version(tracer_fd, &abi_version);
+ ret = kernctl_tracer_abi_version(tracer_fd, abi_version);
if (ret < 0) {
ERR("Failed to retrieve lttng-modules ABI version");
goto error;
}
- if (abi_version.major != LTTNG_MODULES_ABI_MAJOR_VERSION) {
+ if (abi_version->major != LTTNG_MODULES_ABI_MAJOR_VERSION) {
ERR("Kernel tracer ABI version (%d.%d) does not match the expected ABI major version (%d.*)",
- abi_version.major, abi_version.minor,
+ abi_version->major, abi_version->minor,
LTTNG_MODULES_ABI_MAJOR_VERSION);
goto error;
}
DBG2("Kernel tracer version validated (%d.%d, ABI %d.%d)",
- version.major, version.minor,
- abi_version.major, abi_version.minor);
+ version->major, version->minor,
+ abi_version->major, abi_version->minor);
return 0;
error_version:
int kernel_stop_session(struct ltt_kernel_session *session);
ssize_t kernel_list_events(int tracer_fd, struct lttng_event **event_list);
void kernel_wait_quiescent(int fd);
-int kernel_validate_version(int tracer_fd);
+int kernel_validate_version(int tracer_fd,
+ struct lttng_kernel_tracer_version *kernel_tracer_version,
+ struct lttng_kernel_tracer_abi_version *kernel_tracer_abi_version);
void kernel_destroy_session(struct ltt_kernel_session *ksess);
void kernel_destroy_channel(struct ltt_kernel_channel *kchan);
int kernel_snapshot_record(struct ltt_kernel_session *ksess,
/* Set to 1 when a SIGUSR1 signal is received. */
static int recv_child_signal;
+static struct lttng_kernel_tracer_version kernel_tracer_version;
+static struct lttng_kernel_tracer_abi_version kernel_tracer_abi_version;
+
/*
* Consumer daemon specific control data. Every value not initialized here is
* set to 0 by the static definition.
}
/* Validate kernel version */
- ret = kernel_validate_version(kernel_tracer_fd);
+ ret = kernel_validate_version(kernel_tracer_fd, &kernel_tracer_version,
+ &kernel_tracer_abi_version);
if (ret < 0) {
goto error_version;
}