#include <common/hashtable/hashtable.h>
#include <lttng/lttng.h>
+/* Agent protocol version that is verified during the agent registration. */
+#define AGENT_MAJOR_VERSION 1
+#define AGENT_MINOR_VERSION 0
+
/*
* Hash table that contains the agent app created upon registration indexed by
- * socket.
+ * socket. Global to the session daemon.
*/
-struct lttng_ht *agent_apps_ht_by_sock;
+extern struct lttng_ht *agent_apps_ht_by_sock;
struct agent_ht_key {
const char *name;
* find back the corresponding UST app object so both socket can be linked.
*/
struct agent_register_msg {
+ /* This maps to a lttng_domain_type. */
+ uint32_t domain;
uint32_t pid;
+ uint32_t major_version;
+ uint32_t minor_version;
};
/*
*/
pid_t pid;
+ /* Domain of the application. */
+ enum lttng_domain_type domain;
+
/*
* AGENT TCP socket that was created upon registration.
*/
struct lttng_ht_node_str node;
/* Bytecode filter associated with the event . NULL if none. */
+ char *filter_expression;
struct lttng_filter_bytecode *filter;
};
* actually enabled.
*/
unsigned int being_used:1;
+
+ /* What domain this agent is. */
+ enum lttng_domain_type domain;
+
/* Contains event indexed by name. */
struct lttng_ht *events;
+
+ /* Node used for the hash table indexed by domain type. */
+ struct lttng_ht_node_u64 node;
};
-/* Setup agent subsystem. */
-int agent_setup(void);
+/* Allocate agent apps hash table */
+int agent_app_ht_alloc(void);
+/* Clean-up agent apps hash table */
+void agent_app_ht_clean(void);
/* Initialize an already allocated agent domain. */
int agent_init(struct agent *agt);
+struct agent *agent_create(enum lttng_domain_type domain);
void agent_destroy(struct agent *agt);
+void agent_add(struct agent *agt, struct lttng_ht *ht);
/* Agent event API. */
struct agent_event *agent_create_event(const char *name,
void agent_destroy_event(struct agent_event *event);
/* Agent app API. */
-struct agent_app *agent_create_app(pid_t pid, struct lttcomm_sock *sock);
+struct agent_app *agent_create_app(pid_t pid, enum lttng_domain_type domain,
+ struct lttcomm_sock *sock);
void agent_add_app(struct agent_app *app);
void agent_delete_app(struct agent_app *app);
struct agent_app *agent_find_app_by_sock(int sock);
void agent_destroy_app(struct agent_app *app);
+void agent_destroy_app_by_sock(int sock);
int agent_send_registration_done(struct agent_app *app);
/* Agent action API */
-int agent_enable_event(struct agent_event *event);
-int agent_disable_event(struct agent_event *event);
+int agent_enable_event(struct agent_event *event,
+ enum lttng_domain_type domain);
+int agent_disable_event(struct agent_event *event,
+ enum lttng_domain_type domain);
void agent_update(struct agent *agt, int sock);
-int agent_list_events(struct lttng_event **events);
+int agent_list_events(struct lttng_event **events,
+ enum lttng_domain_type domain);
#endif /* LTTNG_SESSIOND_AGENT_H */