- if (bt_clock_value_set_initialize(&packet->begin_cv_set)) {
- BT_PUT(packet);
- goto end;
- }
-
- if (bt_clock_value_set_initialize(&packet->end_cv_set)) {
- BT_PUT(packet);
- goto end;
- }
-
- bt_packet_reset_avail(packet);
- BT_LOGD("Created packet object: addr=%p", packet);
-
-end:
- return packet;
-}
-
-static inline
-uint64_t get_uint_field_value(struct bt_field *parent_field, const char *name)
-{
- uint64_t val = UINT64_C(-1);
- struct bt_field *field = bt_field_structure_borrow_field_by_name(
- parent_field, name);
- int ret;
-
- if (!field) {
- goto end;
- }
-
- BT_ASSERT(bt_field_is_integer(field));
- BT_ASSERT(!bt_field_type_integer_is_signed(
- bt_field_borrow_type(field)));
- ret = bt_field_integer_unsigned_get_value(field, &val);
- BT_ASSERT(ret == 0);
-
-end:
- return val;
-}
-
-static inline
-void set_packet_prop_uint64(struct bt_packet_prop_uint64 *prop, uint64_t val)
-{
- BT_ASSERT(prop);
- prop->value = val;
- prop->avail = BT_PACKET_PROPERTY_AVAILABILITY_AVAILABLE;
-}
-
-static inline
-int set_packet_default_clock_value(struct bt_field *pkt_ctx_field,
- const char *field_name, struct bt_clock_value_set *cv_set)
-{
- int ret = 0;
- uint64_t val = UINT64_C(-1);
- struct bt_field *field = bt_field_structure_borrow_field_by_name(
- pkt_ctx_field, field_name);
- struct bt_clock_class *clock_class;
-
- if (!field) {
- goto end;
- }
-
- BT_ASSERT(bt_field_is_integer(field));
- BT_ASSERT(!bt_field_type_integer_is_signed(
- bt_field_borrow_type(field)));
- clock_class = bt_field_type_integer_borrow_mapped_clock_class(
- bt_field_borrow_type(field));
- if (!clock_class) {
- goto end;
- }
-
- ret = bt_field_integer_unsigned_get_value(field, &val);
- BT_ASSERT(ret == 0);
- ret = bt_clock_value_set_set_clock_value(cv_set, clock_class,
- val, true);
-
-end:
- return ret;
-}
-
-BT_HIDDEN
-int bt_packet_set_properties(struct bt_packet *packet)
-{
- struct bt_field *pkt_context_field;
- uint64_t val;
- int ret = 0;
-
- BT_ASSERT(!packet->props_are_set);
-
- pkt_context_field = bt_packet_borrow_context(packet);
- if (!pkt_context_field) {
- goto end;
- }
-
- /* Discarded event counter */
- val = get_uint_field_value(pkt_context_field, "events_discarded");
- if (val != UINT64_C(-1)) {
- set_packet_prop_uint64(&packet->discarded_event_counter, val);
- }
-
- /* Sequence number */
- val = get_uint_field_value(pkt_context_field, "packet_seq_num");
- if (val != UINT64_C(-1)) {
- set_packet_prop_uint64(&packet->seq_num, val);
- }
-
- /* Beginning and end times */
- ret = set_packet_default_clock_value(pkt_context_field,
- "timestamp_begin", &packet->begin_cv_set);
- if (ret) {
- goto end;
- }
-
- ret = set_packet_default_clock_value(pkt_context_field,
- "timestamp_end", &packet->end_cv_set);
- if (ret) {
- goto end;
- }
-
- /* Information from previous packet */
- if (packet->prev_packet_info.avail ==
- BT_PACKET_PREVIOUS_PACKET_AVAILABILITY_AVAILABLE) {
- /* Discarded event count */
- if (packet->prev_packet_info.discarded_event_counter.avail ==
- BT_PACKET_PROPERTY_AVAILABILITY_AVAILABLE) {
- BT_ASSERT(packet->discarded_event_counter.avail ==
- BT_PACKET_PROPERTY_AVAILABILITY_AVAILABLE);
- set_packet_prop_uint64(&packet->discarded_event_count,
- packet->discarded_event_counter.value -
- packet->prev_packet_info.discarded_event_counter.value);