Add base support for event rule hit
[lttng-tools.git] / src / bin / lttng-sessiond / kernel.c
index 53efad5e79ed0b60dbff2d8d3d9b04319ed12e25..d93478edf86c706b1dea1d710cb786fe621667e6 100644 (file)
@@ -5,11 +5,6 @@
  *
  */
 
-#include "bin/lttng-sessiond/tracker.h"
-#include "common/tracker.h"
-#include "common/utils.h"
-#include "lttng/lttng-error.h"
-#include "lttng/tracker.h"
 #define _LGPL_SOURCE
 #include <fcntl.h>
 #include <stdlib.h>
 #include <common/kernel-ctl/kernel-ctl.h>
 #include <common/kernel-ctl/kernel-ioctl.h>
 #include <common/sessiond-comm/sessiond-comm.h>
+#include <common/tracker.h>
+#include <common/utils.h>
+#include <lttng/event.h>
+#include <lttng/lttng-error.h>
+#include <lttng/tracker.h>
 
 #include "lttng-sessiond.h"
 #include "lttng-syscall.h"
@@ -34,6 +34,7 @@
 #include "utils.h"
 #include "rotate.h"
 #include "modprobe.h"
+#include "tracker.h"
 
 /*
  * Key used to reference a channel between the sessiond and the consumer. This
@@ -1640,16 +1641,10 @@ int kernel_syscall_mask(int chan_fd, char **syscall_mask, uint32_t *nr_bits)
        return kernctl_syscall_mask(chan_fd, syscall_mask, nr_bits);
 }
 
-/*
- * Check for the support of the RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS via abi
- * version number.
- *
- * Return 1 on success, 0 when feature is not supported, negative value in case
- * of errors.
- */
-int kernel_supports_ring_buffer_snapshot_sample_positions(void)
+static
+int kernel_tracer_abi_greater_or_equal(unsigned int major, unsigned int minor)
 {
-       int ret = 0; // Not supported by default
+       int ret;
        struct lttng_kernel_tracer_abi_version abi;
 
        ret = kernctl_tracer_abi_version(kernel_tracer_fd, &abi);
@@ -1658,18 +1653,24 @@ int kernel_supports_ring_buffer_snapshot_sample_positions(void)
                goto error;
        }
 
+       ret = abi.major > major || (abi.major == major && abi.minor >= minor);
+error:
+       return ret;
+}
+
+/*
+ * Check for the support of the RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS via abi
+ * version number.
+ *
+ * Return 1 on success, 0 when feature is not supported, negative value in case
+ * of errors.
+ */
+int kernel_supports_ring_buffer_snapshot_sample_positions(void)
+{
        /*
         * RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS was introduced in 2.3
         */
-       if (abi.major >= 2 && abi.minor >= 3) {
-               /* Supported */
-               ret = 1;
-       } else {
-               /* Not supported */
-               ret = 0;
-       }
-error:
-       return ret;
+       return kernel_tracer_abi_greater_or_equal(2, 3);
 }
 
 /*
@@ -1680,28 +1681,25 @@ error:
  */
 int kernel_supports_ring_buffer_packet_sequence_number(void)
 {
-       int ret = 0; // Not supported by default
-       struct lttng_kernel_tracer_abi_version abi;
-
-       ret = kernctl_tracer_abi_version(kernel_tracer_fd, &abi);
-       if (ret < 0) {
-               ERR("Failed to retrieve lttng-modules ABI version");
-               goto error;
-       }
-
        /*
         * Packet sequence number was introduced in LTTng 2.8,
         * lttng-modules ABI 2.1.
         */
-       if (abi.major >= 2 && abi.minor >= 1) {
-               /* Supported */
-               ret = 1;
-       } else {
-               /* Not supported */
-               ret = 0;
-       }
-error:
-       return ret;
+       return kernel_tracer_abi_greater_or_equal(2, 1);
+}
+
+/*
+ * Check for the support of event notifiers via abi version number.
+ *
+ * Return 1 on success, 0 when feature is not supported, negative value in case
+ * of errors.
+ */
+int kernel_supports_event_notifiers(void)
+{
+       /*
+        * Event notifiers were introduced in LTTng 2.13, lttng-modules ABI 2.6.
+        */
+       return kernel_tracer_abi_greater_or_equal(2, 6);
 }
 
 /*
@@ -1733,7 +1731,7 @@ enum lttng_error_code kernel_rotate_session(struct ltt_session *session)
                        socket, node.node) {
                struct ltt_kernel_channel *chan;
 
-                /* For each channel, ask the consumer to rotate it. */
+               /* For each channel, ask the consumer to rotate it. */
                cds_list_for_each_entry(chan, &ksess->channel_list.head, list) {
                        DBG("Rotate kernel channel %" PRIu64 ", session %s",
                                        chan->key, session->name);
This page took 0.027633 seconds and 4 git commands to generate.