+ case LTTNG_ROTATE_SESSION:
+ {
+ struct lttng_rotate_session_return rotate_return;
+
+ DBG("Client rotate session \"%s\"", cmd_ctx->session->name);
+
+ if (cmd_ctx->session->kernel_session && !check_rotate_compatible()) {
+ DBG("Kernel tracer version is not compatible with the rotation feature");
+ ret = LTTNG_ERR_ROTATION_WRONG_VERSION;
+ goto error;
+ }
+
+ ret = cmd_rotate_session(cmd_ctx->session, &rotate_return);
+ if (ret < 0) {
+ ret = -ret;
+ goto error;
+ }
+
+ ret = setup_lttng_msg_no_cmd_header(cmd_ctx, &rotate_return,
+ sizeof(rotate_return));
+ if (ret < 0) {
+ ret = -ret;
+ goto error;
+ }
+
+ ret = LTTNG_OK;
+ break;
+ }
+ case LTTNG_ROTATE_PENDING:
+ {
+ struct lttng_rotate_pending_return *pending_return = NULL;
+
+ ret = cmd_rotate_pending(cmd_ctx->session, &pending_return,
+ cmd_ctx->lsm->u.rotate_pending.rotate_id);
+ if (ret < 0) {
+ ret = -ret;
+ goto error;
+ }
+
+ ret = setup_lttng_msg_no_cmd_header(cmd_ctx, pending_return,
+ sizeof(struct lttng_rotate_session_handle));
+ free(pending_return);
+ if (ret < 0) {
+ ret = -ret;
+ goto error;
+ }
+
+ ret = LTTNG_OK;
+ break;
+ }
+ case LTTNG_ROTATE_GET_CURRENT_PATH:
+ {
+ struct lttng_rotate_get_current_path *get_return = NULL;
+
+ ret = cmd_rotate_get_current_path(cmd_ctx->session, &get_return);
+ if (ret < 0) {
+ ret = -ret;
+ goto error;
+ }
+
+ ret = setup_lttng_msg_no_cmd_header(cmd_ctx, get_return,
+ sizeof(struct lttng_rotate_get_current_path));
+ free(get_return);
+ if (ret < 0) {
+ ret = -ret;
+ goto error;
+ }
+
+ ret = LTTNG_OK;
+ break;
+ }