int ustctl_start_session(int sock, int handle);
int ustctl_stop_session(int sock, int handle);
-int ustctl_tracepoint_list(int sock); /* not implemented yet */
+/*
+ * ustctl_tracepoint_list returns a tracepoint list handle, or negative
+ * error value.
+ */
+int ustctl_tracepoint_list(int sock);
+/*
+ * ustctl_tracepoint_list_get is used to iterate on the tp list
+ * handle. End is iteration is reached when -ENOENT is returned.
+ */
+int ustctl_tracepoint_list_get(int sock, int tp_list_handle,
+ char iter[LTTNG_UST_SYM_NAME_LEN]);
+
int ustctl_tracer_version(int sock, struct lttng_ust_tracer_version *v);
int ustctl_wait_quiescent(int sock);
return ustctl_disable(sock, &obj);
}
-
int ustctl_tracepoint_list(int sock)
{
- return -ENOSYS; /* not implemented */
+ struct ustcomm_ust_msg lum;
+ struct ustcomm_ust_reply lur;
+ int ret, tp_list_handle;
+
+ memset(&lum, 0, sizeof(lum));
+ lum.handle = LTTNG_UST_ROOT_HANDLE;
+ lum.cmd = LTTNG_UST_TRACEPOINT_LIST;
+ ret = ustcomm_send_app_cmd(sock, &lum, &lur);
+ if (ret)
+ return ret;
+ tp_list_handle = lur.ret_val;
+ DBG("received tracepoint list handle %u", tp_list_handle);
+ return tp_list_handle;
+}
+
+int ustctl_tracepoint_list_get(int sock, int tp_list_handle,
+ char iter[LTTNG_UST_SYM_NAME_LEN])
+{
+ struct ustcomm_ust_msg lum;
+ struct ustcomm_ust_reply lur;
+ int ret;
+
+ memset(&lum, 0, sizeof(lum));
+ lum.handle = tp_list_handle;
+ lum.cmd = LTTNG_UST_TRACEPOINT_LIST_GET;
+ ret = ustcomm_send_app_cmd(sock, &lum, &lur);
+ if (ret)
+ return ret;
+ DBG("received tracepoint list entry %s", lur.u.tracepoint_list_entry);
+ memcpy(iter, lur.u.tracepoint_list_entry, LTTNG_UST_SYM_NAME_LEN);
+ return 0;
}
int ustctl_tracer_version(int sock, struct lttng_ust_tracer_version *v)
long lttng_tracepoint_list_cmd(int objd, unsigned int cmd, unsigned long arg)
{
struct ltt_tracepoint_list *list = objd_private(objd);
+ char *str = (char *) arg;
switch (cmd) {
case LTTNG_UST_TRACEPOINT_LIST_GET:
- ltt_tracepoint_list_get(list, (char *) arg);
+ ltt_tracepoint_list_get(list, str);
+ if (str[0] == '\0')
+ return -ENOENT;
return 0;
default:
return -EINVAL;
case LTTNG_UST_VERSION:
lur.u.version = lum->u.version;
break;
+ case LTTNG_UST_TRACEPOINT_LIST_GET:
+ memcpy(lur.u.tracepoint_list_entry,
+ lum->u.tracepoint_list_entry,
+ LTTNG_UST_SYM_NAME_LEN);
+ break;
}
ret = send_reply(sock, &lur);
if (ret < 0) {