+int lttng_trigger_serialize(struct lttng_trigger *trigger,
+ struct lttng_payload *payload)
+{
+ int ret;
+ size_t header_offset, size_before_payload;
+ struct lttng_trigger_comm trigger_comm = {};
+ struct lttng_trigger_comm *header;
+ const struct lttng_credentials *creds = NULL;
+
+ creds = lttng_trigger_get_credentials(trigger);
+ assert(creds);
+
+ trigger_comm.uid = LTTNG_OPTIONAL_GET(creds->uid);
+
+ header_offset = payload->buffer.size;
+ ret = lttng_dynamic_buffer_append(&payload->buffer, &trigger_comm,
+ sizeof(trigger_comm));
+ if (ret) {
+ goto end;
+ }
+
+ size_before_payload = payload->buffer.size;
+ ret = lttng_condition_serialize(trigger->condition, payload);
+ if (ret) {
+ goto end;
+ }
+
+ ret = lttng_action_serialize(trigger->action, payload);
+ if (ret) {
+ goto end;
+ }
+
+ /* Update payload size. */
+ header = (typeof(header)) (payload->buffer.data + header_offset);
+ header->length = payload->buffer.size - size_before_payload;
+end:
+ return ret;
+}
+
+LTTNG_HIDDEN
+bool lttng_trigger_is_equal(
+ const struct lttng_trigger *a, const struct lttng_trigger *b)