Since those structs are only transfered across unix sockets, endianess
is kept in host order.

Signed-off-by: Yannick Lamarre <ylama...@efficios.com>
---
 include/lttng/channel-internal.h         |   5 ++
 src/common/sessiond-comm/sessiond-comm.c | 105 +++++++++++++++++++++++++++++++
 2 files changed, 110 insertions(+)

diff --git a/include/lttng/channel-internal.h b/include/lttng/channel-internal.h
index c956c19d..db963f13 100644
--- a/include/lttng/channel-internal.h
+++ b/include/lttng/channel-internal.h
@@ -57,4 +57,9 @@ struct lttng_channel_extended_serialized {
        int64_t blocking_timeout;
 } LTTNG_PACKED;
 
+int lttng_channel_serialize(struct lttng_channel_serialized *dst, const struct 
lttng_channel *src);
+int lttng_channel_deserialize(struct lttng_channel *dst, const struct 
lttng_channel_serialized *src);
+int lttng_channel_extended_deserialize(struct lttng_channel_extended *dst, 
const struct lttng_channel_extended_serialized *src);
+int lttng_channel_extended_serialize(struct lttng_channel_extended_serialized 
*dst, const struct lttng_channel_extended *src);
+int init_serialized_extended_channel(struct lttng_domain *domain, struct 
lttng_channel_extended_serialized *extended);
 #endif /* LTTNG_CHANNEL_INTERNAL_H */
diff --git a/src/common/sessiond-comm/sessiond-comm.c 
b/src/common/sessiond-comm/sessiond-comm.c
index 8aee3cd1..6dc58739 100644
--- a/src/common/sessiond-comm/sessiond-comm.c
+++ b/src/common/sessiond-comm/sessiond-comm.c
@@ -76,6 +76,111 @@ static const char *lttcomm_readable_code[] = {
 
 static unsigned long network_timeout;
 
+int init_serialized_extended_channel(struct lttng_domain *domain, struct
+               lttng_channel_extended_serialized *extended)
+{
+       assert(domain && extended);
+       switch (domain->type) {
+       case LTTNG_DOMAIN_KERNEL:
+               extended->monitor_timer_interval =
+                       DEFAULT_KERNEL_CHANNEL_MONITOR_TIMER;
+               extended->blocking_timeout =
+                       DEFAULT_KERNEL_CHANNEL_BLOCKING_TIMEOUT;
+               break;
+       case LTTNG_DOMAIN_UST:
+               switch (domain->buf_type) {
+               case LTTNG_BUFFER_PER_UID:
+                       extended->monitor_timer_interval =
+                               DEFAULT_UST_UID_CHANNEL_MONITOR_TIMER;
+                       extended->blocking_timeout =
+                               DEFAULT_UST_UID_CHANNEL_BLOCKING_TIMEOUT;
+                       break;
+               case LTTNG_BUFFER_PER_PID:
+               default:
+                       extended->monitor_timer_interval =
+                               DEFAULT_UST_PID_CHANNEL_MONITOR_TIMER;
+                       extended->blocking_timeout =
+                               DEFAULT_UST_PID_CHANNEL_BLOCKING_TIMEOUT;
+                       break;
+               }
+       default:
+               /* Default behavior: leave set to 0. */
+               break;
+       }
+
+       return 0;
+}
+
+LTTNG_HIDDEN
+int lttng_channel_extended_serialize(struct lttng_channel_extended_serialized 
*dst,
+               const struct lttng_channel_extended *src)
+{
+       assert(src && dst);
+       dst->discarded_events = src->discarded_events;
+       dst->lost_packets = src->lost_packets;
+       dst->monitor_timer_interval = src->monitor_timer_interval;
+       dst->blocking_timeout = src->blocking_timeout;
+       return 0;
+}
+
+LTTNG_HIDDEN
+int lttng_channel_extended_deserialize(struct lttng_channel_extended *dst,
+               const struct lttng_channel_extended_serialized *src)
+{
+       assert(src && dst);
+       dst->discarded_events = src->discarded_events;
+       dst->lost_packets = src->lost_packets;
+       dst->monitor_timer_interval = src->monitor_timer_interval;
+       dst->blocking_timeout = src->blocking_timeout;
+       return 0;
+}
+
+LTTNG_HIDDEN
+int lttng_channel_serialize(struct lttng_channel_serialized *dst,
+               const struct lttng_channel *src)
+{
+       assert(src && dst);
+       struct lttng_channel_attr_serialized *dst_attr = &dst->attr;
+       const struct lttng_channel_attr *src_attr = &src->attr;
+
+       dst_attr->overwrite = src_attr->overwrite;
+       dst_attr->subbuf_size = src_attr->subbuf_size;
+       dst_attr->num_subbuf = src_attr->num_subbuf;
+       dst_attr->switch_timer_interval = src_attr->switch_timer_interval;
+       dst_attr->read_timer_interval = src_attr->read_timer_interval;
+       dst_attr->output = (uint32_t) src_attr->output;
+       dst_attr->tracefile_size = src_attr->tracefile_size;
+       dst_attr->tracefile_count = src_attr->tracefile_count;
+       dst_attr->live_timer_interval = src_attr->live_timer_interval;
+
+       dst->enabled = src->enabled;
+       memcpy(dst->name, src->name, sizeof(dst->name));
+       return 0;
+}
+
+LTTNG_HIDDEN
+int lttng_channel_deserialize(struct lttng_channel *dst,
+               const struct lttng_channel_serialized *src)
+{
+       assert(src && dst);
+       struct lttng_channel_attr *dst_attr = &dst->attr;
+       const struct lttng_channel_attr_serialized *src_attr = &src->attr;
+
+       dst_attr->overwrite = src_attr->overwrite;
+       dst_attr->subbuf_size = src_attr->subbuf_size;
+       dst_attr->num_subbuf = src_attr->num_subbuf;
+       dst_attr->switch_timer_interval = src_attr->switch_timer_interval;
+       dst_attr->read_timer_interval = src_attr->read_timer_interval;
+       dst_attr->output = (enum lttng_event_output) src_attr->output;
+       dst_attr->tracefile_size = src_attr->tracefile_size;
+       dst_attr->tracefile_count = src_attr->tracefile_count;
+       dst_attr->live_timer_interval = src_attr->live_timer_interval;
+
+       dst->enabled = src->enabled;
+       memcpy(dst->name, src->name, sizeof(dst->name));
+       return 0;
+}
+
 LTTNG_HIDDEN
 int sockaddr_in_serialize(struct sockaddr_in_serialized *dst,
                const struct sockaddr_in *src)
-- 
2.11.0

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to