summaryrefslogtreecommitdiff
path: root/doc/dlt_extended_network_trace.txt
blob: 42cdf920157b34043ac8829ec00fb01509788783 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
////
# SPDX license identifier: MPL-2.0
#
# Copyright (C) 2011-2015, BMW AG
#
# This file is part of GENIVI Project DLT - Diagnostic Log and Trace.
#
# This Source Code Form is subject to the terms of the
# Mozilla Public License (MPL), v. 2.0.
# If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
#
# For further information see http://www.genivi.org/.
////

Extended Network Trace
======================
Lassi Marttala <Lassi.LM.Marttala@partner.bmw.de>
0.0.1, 2012/10/11: Initial version

image::images/genivi_chrome_1_transparent.png[width=128]

== Introduction
The extended network trace allows the user to send or truncate network trace messages
that are larger than the normal maximum size of a DLT message.

== Protocol
When truncation of messages is allowed, the truncated messages will be wrapped into a special message which indicates
that a network trace message was truncated and what was the original size of the message.

Segmented messages are sent in multiple packages. The package stream is prepended with a a start message indicating
which contain a unique handle for this stream, size of data to follow, count of segments to follow and segment size.
Each segment contains the stream handle, segment sequence number, the data and data length.
Finally after sending all the data segments, one more packet is sent to indicate the end of the stream.

== Truncated package
Truncated message can be sent using the following function:

----
int dlt_user_trace_network_truncated(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload, int allow_truncate)
----

This will send a packet in the following format:

|==================================================================
|                      NWTR                          | Package identifier. STRING
|                     header                         | nw_trace header and it's length. RAW
|                      size                          | Original size of the message. UINT
|                    payload                         | The truncated nw_trace payload. RAW
|==================================================================

== Segmented messages
User can send a segmented network trace message asynchronously using:

----
void dlt_user_trace_network_segmented(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload)
----

This will start a background thread and return immediately.

User can also send all the required packages one by one using:

----
int dlt_user_trace_network_segmented_start(unsigned int *id, DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len)
int dlt_user_trace_network_segmented_segment(int id, DltContext *handle, DltNetworkTraceType nw_trace_type, int sequence, uint16_t payload_len, void *payload)
int dlt_user_trace_network_segmented_end(int id, DltContext *handle, DltNetworkTraceType nw_trace_type)
----

It is not recommended to use these functions unless you really have to.

== Segmented start packet
The first packet in the stream is the header:

|==================================================================
|                      NWST                          | Package identifier. STRING
|                  streamhandle                      | Unique identifier for all packages in the stream. UINT
|                     header                         | nw_trace header and it's length. RAW
|                   payloadsize                      | Size of the complete payload in this stream. UINT
|                   segmentcount                     | Number of segments to follow.
|                    segmentlen                      | Size of one segment
|==================================================================

== Data segment
After the header, follows a stream of data segments.

|==================================================================
|                      NWCH                          | Package identifier. STRING
|                  streamhandle                      | Unique identifier for all packages in the stream. UINT
|                    sequence                        | Sequence number of this segment. UINT
|                     data                           | One segment of the original nw_trace. RAW
|==================================================================

== End packet
After all the segments have been sent, an End identifier is sent.

|==================================================================
|                      NWEN                          | Package identifier. STRING
|                  streamhandle                      | Unique identifier for all packages in the stream. UINT
|==================================================================