2 * Copyright (C) 2013 Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 * SPDX-License-Identifier: LGPL-2.1-only
9 #include "lttng-ctl-helper.hpp"
11 #include <common/sessiond-comm/sessiond-comm.hpp>
13 #include <lttng/lttng-error.h>
14 #include <lttng/save-internal.hpp>
15 #include <lttng/save.h>
19 struct lttng_save_session_attr
*lttng_save_session_attr_create(void)
21 return zmalloc
<lttng_save_session_attr
>();
24 void lttng_save_session_attr_destroy(struct lttng_save_session_attr
*output
)
31 const char *lttng_save_session_attr_get_session_name(struct lttng_save_session_attr
*attr
)
33 const char *ret
= nullptr;
35 if (attr
&& attr
->session_name
[0]) {
36 ret
= attr
->session_name
;
42 const char *lttng_save_session_attr_get_output_url(struct lttng_save_session_attr
*attr
)
44 const char *ret
= nullptr;
46 if (attr
&& attr
->configuration_url
[0]) {
47 ret
= attr
->configuration_url
;
53 int lttng_save_session_attr_get_overwrite(struct lttng_save_session_attr
*attr
)
55 return attr
? attr
->overwrite
: -LTTNG_ERR_INVALID
;
58 int lttng_save_session_attr_get_omit_name(struct lttng_save_session_attr
*attr
)
60 return attr
? attr
->omit_name
: -LTTNG_ERR_INVALID
;
63 int lttng_save_session_attr_get_omit_output(struct lttng_save_session_attr
*attr
)
65 return attr
? attr
->omit_output
: -LTTNG_ERR_INVALID
;
68 int lttng_save_session_attr_set_session_name(struct lttng_save_session_attr
*attr
,
69 const char *session_name
)
74 ret
= -LTTNG_ERR_INVALID
;
81 len
= strlen(session_name
);
82 if (len
>= LTTNG_NAME_MAX
) {
83 ret
= -LTTNG_ERR_INVALID
;
87 ret
= lttng_strncpy(attr
->session_name
, session_name
, sizeof(attr
->session_name
));
89 ret
= -LTTNG_ERR_INVALID
;
93 attr
->session_name
[0] = '\0';
99 int lttng_save_session_attr_set_output_url(struct lttng_save_session_attr
*attr
, const char *url
)
104 struct lttng_uri
*uris
= nullptr;
107 ret
= -LTTNG_ERR_INVALID
;
112 attr
->configuration_url
[0] = '\0';
118 if (len
>= PATH_MAX
) {
119 ret
= -LTTNG_ERR_INVALID
;
123 size
= uri_parse_str_urls(url
, nullptr, &uris
);
124 if (size
<= 0 || uris
[0].dtype
!= LTTNG_DST_PATH
) {
125 ret
= -LTTNG_ERR_INVALID
;
129 /* Copy string plus the NULL terminated byte. */
131 attr
->configuration_url
, uris
[0].dst
.path
, sizeof(attr
->configuration_url
));
133 ret
= -LTTNG_ERR_INVALID
;
143 int lttng_save_session_attr_set_overwrite(struct lttng_save_session_attr
*attr
, int overwrite
)
148 ret
= -LTTNG_ERR_INVALID
;
152 attr
->overwrite
= !!overwrite
;
157 int lttng_save_session_attr_set_omit_name(struct lttng_save_session_attr
*attr
, int omit_name
)
162 ret
= -LTTNG_ERR_INVALID
;
166 attr
->omit_name
= !!omit_name
;
171 int lttng_save_session_attr_set_omit_output(struct lttng_save_session_attr
*attr
, int omit_output
)
176 ret
= -LTTNG_ERR_INVALID
;
180 attr
->omit_output
= !!omit_output
;
186 * The lttng-ctl API does not expose all the information needed to save the
187 * session configurations. Thus, we must send a save command to the session
188 * daemon which will, in turn, save its current session configuration.
190 int lttng_save_session(struct lttng_save_session_attr
*attr
)
192 struct lttcomm_session_msg lsm
;
196 ret
= -LTTNG_ERR_INVALID
;
200 memset(&lsm
, 0, sizeof(lsm
));
201 lsm
.cmd_type
= LTTCOMM_SESSIOND_COMMAND_SAVE_SESSION
;
203 memcpy(&lsm
.u
.save_session
.attr
, attr
, sizeof(struct lttng_save_session_attr
));
204 ret
= lttng_ctl_ask_sessiond(&lsm
, nullptr);