uint64_t get_context_vtid(const struct bt_ctf_event *event)
{
- const struct definition *scope;
+ const struct bt_definition *scope;
uint64_t vtid;
scope = bt_ctf_get_top_level_scope(event, BT_STREAM_EVENT_CONTEXT);
uint64_t get_context_vpid(const struct bt_ctf_event *event)
{
- const struct definition *scope;
+ const struct bt_definition *scope;
uint64_t vpid;
scope = bt_ctf_get_top_level_scope(event, BT_STREAM_EVENT_CONTEXT);
uint64_t get_context_vppid(const struct bt_ctf_event *event)
{
- const struct definition *scope;
+ const struct bt_definition *scope;
uint64_t vppid;
scope = bt_ctf_get_top_level_scope(event, BT_STREAM_EVENT_CONTEXT);
char *get_context_hostname(const struct bt_ctf_event *event)
{
- const struct definition *scope;
+ const struct bt_definition *scope;
char *hostname;
scope = bt_ctf_get_top_level_scope(event, BT_STREAM_EVENT_CONTEXT);
const char *opt_input_path;
static int opt_textdump;
static int opt_child;
+static int opt_begin;
int quit = 0;
OPT_HOSTNAME,
OPT_RELAY_HOSTNAME,
OPT_KPROBES,
+ OPT_BEGIN,
};
static struct poptOption long_options[] = {
{ "help", 'h', POPT_ARG_NONE, NULL, OPT_HELP, NULL, NULL },
{ "textdump", 't', POPT_ARG_NONE, NULL, OPT_TEXTDUMP, NULL, NULL },
{ "child", 'f', POPT_ARG_NONE, NULL, OPT_CHILD, NULL, NULL },
+ { "begin", 'b', POPT_ARG_NONE, NULL, OPT_BEGIN, NULL, NULL },
{ "pid", 'p', POPT_ARG_STRING, &opt_tid, OPT_PID, NULL, NULL },
{ "hostname", 'n', POPT_ARG_STRING, &opt_hostname, OPT_HOSTNAME, NULL, NULL },
{ "relay-hostname", 'r', POPT_ARG_STRING, &opt_relay_hostname,
tmp_str = strtok(NULL, ",");
}
break;
+ case OPT_BEGIN:
+ /* start reading the live trace from the beginning */
+ opt_begin = 1;
+ break;
case OPT_HOSTNAME:
toggle_filter = 1;
tmp_str = strtok(opt_hostname, ",");
#endif /* LTTNGTOP_MMAP_LIVE */
} else if (!opt_input_path && remote_live) {
/* network live */
- ret = setup_network_live(opt_relay_hostname);
+ ret = setup_network_live(opt_relay_hostname, opt_begin);
if (ret < 0) {
goto end;
}
return ret;
}
-int attach_session(int id)
+static
+int attach_session(int id, int begin)
{
struct lttng_viewer_cmd cmd;
struct lttng_viewer_attach_session_request rq;
cmd.cmd_version = 0;
rq.session_id = htobe64(id);
- //rq.seek = htobe32(VIEWER_SEEK_BEGINNING);
- rq.seek = htobe32(VIEWER_SEEK_LAST);
+ if (begin) {
+ rq.seek = htobe32(VIEWER_SEEK_BEGINNING);
+ } else {
+ rq.seek = htobe32(VIEWER_SEEK_LAST);
+ }
do {
ret = send(control_sock, &cmd, sizeof(cmd), 0);
return ret;
}
-int setup_network_live(char *hostname)
+int setup_network_live(char *hostname, int begin)
{
int ret;
int session_id;
do {
fprintf(stderr, "* Attach session %d\n", ret);
- ret = attach_session(session_id);
+ ret = attach_session(session_id, begin);
if (ret < 0) {
goto error;
}
int list_sessions(void);
int write_index_header(int fd);
-int attach_session(int id);
void dump_packet_index(struct lttng_packet_index *index);
int get_next_index(int id, struct packet_index *index);
void ctf_live_packet_seek(struct bt_stream_pos *stream_pos, size_t index,
int whence);
int open_trace(struct bt_context **bt_ctx);
-int setup_network_live(char *hostname);
+int setup_network_live(char *hostname, int begin);
#endif /* _LIVE_H */