return ustcomm_recv_app_reply(sock, &lur, lum.handle, lum.cmd);
}
+int ustctl_set_exclusion(int sock, struct lttng_ust_event_exclusion *exclusion,
+ struct lttng_ust_object_data *obj_data)
+{
+ struct ustcomm_ust_msg lum;
+ struct ustcomm_ust_reply lur;
+ int ret;
+
+ if (!obj_data) {
+ return -EINVAL;
+ }
+
+ memset(&lum, 0, sizeof(lum));
+ lum.handle = obj_data->handle;
+ lum.cmd = LTTNG_UST_EXCLUSION;
+ lum.u.exclusion.count = exclusion->count;
+
+ ret = ustcomm_send_app_msg(sock, &lum);
+ if (ret) {
+ return ret;
+ }
+
+ /* send var len bytecode */
+ ret = ustcomm_send_unix_sock(sock,
+ exclusion->names,
+ exclusion->count * LTTNG_UST_SYM_NAME_LEN);
+ if (ret < 0) {
+ return ret;
+ }
+ if (ret != exclusion->count * LTTNG_UST_SYM_NAME_LEN) {
+ return -EINVAL;
+ }
+ return ustcomm_recv_app_reply(sock, &lur, lum.handle, lum.cmd);
+}
+
/* Enable event, channel and session ioctl */
int ustctl_enable(int sock, struct lttng_ust_object_data *object)
{
return client_cb->stream_id(buf, handle, stream_id);
}
+int ustctl_get_current_timestamp(struct ustctl_consumer_stream *stream,
+ uint64_t *ts)
+{
+ struct lttng_ust_client_lib_ring_buffer_client_cb *client_cb;
+ struct lttng_ust_lib_ring_buffer *buf = stream->buf;
+ struct lttng_ust_shm_handle *handle = stream->chan->chan->handle;
+
+ if (!stream || !ts)
+ return -EINVAL;
+ client_cb = get_client_cb(buf, handle);
+ if (!client_cb || !client_cb->current_timestamp)
+ return -ENOSYS;
+ return client_cb->current_timestamp(buf, handle, ts);
+}
+
/*
* Returns 0 on success, negative error value on error.
*/