Fix: deny multiple event types with enable-event
[lttng-tools.git] / src / lib / lttng-ctl / lttng-ctl.c
index 8f63bf3e85e367285f9c599176040a4cd266dcd5..3b67923b9cae45ce088b02853c19d7b0e31799bc 100644 (file)
@@ -73,6 +73,33 @@ static int connected;
 int lttng_opt_quiet;
 int lttng_opt_verbose;
 
+/*
+ * Compare two URL destination.
+ *
+ * Return 0 is equal else is not equal.
+ */
+static int compare_destination(struct lttng_uri *ctrl, struct lttng_uri *data)
+{
+       int ret;
+
+       assert(ctrl);
+       assert(data);
+
+       switch (ctrl->dtype) {
+       case LTTNG_DST_IPV4:
+               ret = strncmp(ctrl->dst.ipv4, data->dst.ipv4, sizeof(ctrl->dst.ipv4));
+               break;
+       case LTTNG_DST_IPV6:
+               ret = strncmp(ctrl->dst.ipv6, data->dst.ipv6, sizeof(ctrl->dst.ipv6));
+               break;
+       default:
+               ret = -1;
+               break;
+       }
+
+       return ret;
+}
+
 static void set_default_url_attr(struct lttng_uri *uri,
                enum lttng_stream_type stype)
 {
@@ -158,6 +185,8 @@ static ssize_t parse_str_urls_to_uri(const char *ctrl_url, const char *data_url,
        }
 
        if (data_url) {
+               int ret;
+
                /* We have to parse the data URL in this case */
                size_data = uri_parse(data_url, &data_uris);
                if (size_data < 1) {
@@ -169,6 +198,12 @@ static ssize_t parse_str_urls_to_uri(const char *ctrl_url, const char *data_url,
                }
 
                set_default_url_attr(&data_uris[0], LTTNG_STREAM_DATA);
+
+               ret = compare_destination(&ctrl_uris[0], &data_uris[0]);
+               if (ret != 0) {
+                       ERR("Control and data destination mismatch");
+                       goto error;
+               }
        }
 
        /* Compute total size */
@@ -1360,6 +1395,8 @@ void lttng_channel_set_default_attr(struct lttng_domain *domain,
                attr->subbuf_size = default_get_kernel_channel_subbuf_size();
                attr->num_subbuf = DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM;
                attr->output = DEFAULT_KERNEL_CHANNEL_OUTPUT;
+               attr->tracefile_size = DEFAULT_KERNEL_CHANNEL_TRACEFILE_SIZE;
+               attr->tracefile_count = DEFAULT_KERNEL_CHANNEL_TRACEFILE_COUNT;
                break;
        case LTTNG_DOMAIN_UST:
 #if 0
@@ -1374,6 +1411,8 @@ void lttng_channel_set_default_attr(struct lttng_domain *domain,
                attr->subbuf_size = default_get_ust_channel_subbuf_size();
                attr->num_subbuf = DEFAULT_UST_CHANNEL_SUBBUF_NUM;
                attr->output = DEFAULT_UST_CHANNEL_OUTPUT;
+               attr->tracefile_size = DEFAULT_UST_CHANNEL_TRACEFILE_SIZE;
+               attr->tracefile_count = DEFAULT_UST_CHANNEL_TRACEFILE_COUNT;
                break;
        default:
                /* Default behavior: leave set to 0. */
This page took 0.024278 seconds and 4 git commands to generate.