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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
<table class="head">
<tr>
<td class="head-ltitle">DTRACE_UDP(4)</td>
<td class="head-vol">Device Drivers Manual</td>
<td class="head-rtitle">DTRACE_UDP(4)</td>
</tr>
</table>
<div class="manual-text">
<section class="Sh">
<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
<p class="Pp"><code class="Nm">dtrace_udp</code> — <span class="Nd">a
DTrace provider for tracing events related to the UDP protocol</span></p>
</section>
<section class="Sh">
<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
<p class="Pp"><code class="Fn">udp:::receive</code>(<var class="Fa" style="white-space: nowrap;">pktinfo_t
*</var>, <var class="Fa" style="white-space: nowrap;">csinfo_t *</var>,
<var class="Fa" style="white-space: nowrap;">ipinfo_t *</var>,
<var class="Fa" style="white-space: nowrap;">udpsinfo_t *</var>,
<var class="Fa" style="white-space: nowrap;">udpinfo_t *</var>);</p>
<p class="Pp"><code class="Fn">udp:::send</code>(<var class="Fa" style="white-space: nowrap;">pktinfo_t
*</var>, <var class="Fa" style="white-space: nowrap;">csinfo_t *</var>,
<var class="Fa" style="white-space: nowrap;">ipinfo_t *</var>,
<var class="Fa" style="white-space: nowrap;">udpsinfo_t *</var>,
<var class="Fa" style="white-space: nowrap;">udpinfo_t *</var>);</p>
</section>
<section class="Sh">
<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
<p class="Pp">The DTrace <code class="Nm">udp</code> provider allows users to
trace events in the <a class="Xr">udp(4)</a> protocol implementation. The
<a class="permalink" href="#udp:::send"><code class="Fn" id="udp:::send">udp:::send</code></a>()
probe fires whenever the kernel prepares to transmit a UDP packet, and the
<a class="permalink" href="#udp:::receive"><code class="Fn" id="udp:::receive">udp:::receive</code></a>()
probe fires whenever the kernel receives a UDP packet, unless the UDP header
is incomplete, the destination port is 0, the length field is invalid, or
the checksum is wrong. The arguments to these probes can be used to obtain
detailed information about the IP and UDP headers of the corresponding
packet.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="ARGUMENTS"><a class="permalink" href="#ARGUMENTS">ARGUMENTS</a></h1>
<p class="Pp">The <var class="Vt">pktinfo_t</var> argument is currently
unimplemented and is included for compatibility with other implementations
of this provider. Its fields are:</p>
<div class="Bd-indent">
<dl class="Bl-tag">
<dt><var class="Vt">uintptr_t pkt_addr</var></dt>
<dd>Always set to 0.</dd>
</dl>
</div>
<p class="Pp">The <var class="Vt">csinfo_t</var> argument is currently
unimplemented and is included for compatibility with other implementations
of this provider. Its fields are:</p>
<div class="Bd-indent">
<dl class="Bl-tag">
<dt><var class="Vt">uintptr_t cs_addr</var></dt>
<dd>Always set to 0.</dd>
<dt><var class="Vt">uint64_t cs_cid</var></dt>
<dd>A pointer to the <var class="Vt">struct inpcb</var> for this packet, or
<code class="Dv">NULL</code>.</dd>
<dt><var class="Vt">pid_t cs_pid</var></dt>
<dd>Always set to 0.</dd>
</dl>
</div>
<p class="Pp">The <var class="Vt">ipinfo_t</var> argument contains IP fields
common to both IPv4 and IPv6 packets. Its fields are:</p>
<div class="Bd-indent">
<dl class="Bl-tag">
<dt><var class="Vt">uint8_t ip_ver</var></dt>
<dd>IP version of the packet, 4 for IPv4 packets and 6 for IPv6 packets.</dd>
<dt><var class="Vt">uint32_t ip_plength</var></dt>
<dd>IP payload size. This does not include the size of the IP header or IPv6
option headers.</dd>
<dt><var class="Vt">string ip_saddr</var></dt>
<dd>IP source address.</dd>
<dt><var class="Vt">string ip_daddr</var></dt>
<dd>IP destination address.</dd>
</dl>
</div>
<p class="Pp">The <var class="Vt">udpsinfo_t</var> argument contains the state
of the UDP connection associated with the packet. Its fields are:</p>
<div class="Bd-indent">
<dl class="Bl-tag">
<dt><var class="Vt">uintptr_t udps_addr</var></dt>
<dd>Pointer to the <var class="Vt">struct inpcb</var> containing the IP state
for the associated socket.</dd>
<dt><var class="Vt">uint16_t udps_lport</var></dt>
<dd>Local UDP port.</dd>
<dt><var class="Vt">uint16_t udps_rport</var></dt>
<dd>Remote UDP port.</dd>
<dt><var class="Vt">string udps_laddr</var></dt>
<dd>Local IPv4 or IPv6 address.</dd>
<dt><var class="Vt">string udps_raddr</var></dt>
<dd>Remote IPv4 or IPv6 address.</dd>
</dl>
</div>
<p class="Pp">The <var class="Vt">udpinfo_t</var> argument is the raw UDP header
of the packet, with all fields in host order. Its fields are:</p>
<div class="Bd-indent">
<dl class="Bl-tag">
<dt><var class="Vt">uint16_t udp_sport</var></dt>
<dd>Source UDP port.</dd>
<dt><var class="Vt">uint16_t udp_dport</var></dt>
<dd>Destination UDP port.</dd>
<dt><var class="Vt">uint16_t udp_length</var></dt>
<dd>Length of the UDP header and payload, in bytes.</dd>
<dt><var class="Vt">uint16_t udp_checksum</var></dt>
<dd>A checksum of the UDP header and payload, or 0 if no checksum was
calculated.</dd>
<dt><var class="Vt">struct udphdr *udp_hdr</var></dt>
<dd>A pointer to the raw UDP header.</dd>
</dl>
</div>
</section>
<section class="Sh">
<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
<dl class="Bl-tag Bl-compact">
<dt><span class="Pa">/usr/lib/dtrace/udp.d</span></dt>
<dd>DTrace type and translator definitions for the <code class="Nm">udp</code>
provider.</dd>
</dl>
</section>
<section class="Sh">
<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
<p class="Pp">The following script counts transmitted packets by destination
port.</p>
<div class="Bd Pp Bd-indent Li">
<pre>udp:::send
{
@num[args[4]->udp_dport] = count();
}</pre>
</div>
<p class="Pp">This script will print some details of each UDP packet as it is
sent or received by the kernel:</p>
<div class="Bd Pp Bd-indent Li">
<pre>#pragma D option quiet
#pragma D option switchrate=10Hz
dtrace:::BEGIN
{
printf(" %10s %36s %-36s %6s\n", "DELTA(us)", "SOURCE",
"DEST", "BYTES");
last = timestamp;
}
udp:::send
{
this->elapsed = (timestamp - last) / 1000;
self->dest = strjoin(strjoin(args[2]->ip_daddr, ":"),
lltostr(args[4]->udp_dport));
printf(" %10d %30s:%-5d -> %-36s %6d\n", this->elapsed,
args[2]->ip_saddr, args[4]->udp_sport,
self->dest, args[4]->udp_length);
last = timestamp;
}
udp:::receive
{
this->elapsed = (timestamp - last) / 1000;
self->dest = strjoin(strjoin(args[2]->ip_saddr, ":"),
lltostr(args[4]->udp_sport));
printf(" %10d %30s:%-5d <- %-36s %6d\n", this->elapsed,
args[2]->ip_daddr, args[4]->udp_dport,
self->dest, args[4]->udp_length);
last = timestamp;
}</pre>
</div>
</section>
<section class="Sh">
<h1 class="Sh" id="COMPATIBILITY"><a class="permalink" href="#COMPATIBILITY">COMPATIBILITY</a></h1>
<p class="Pp">This provider is compatible with the <code class="Nm">udp</code>
provider in Solaris.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
ALSO</a></h1>
<p class="Pp"><a class="Xr">dtrace(1)</a>, <a class="Xr">dtrace_ip(4)</a>,
<a class="Xr">dtrace_sctp(4)</a>, <a class="Xr">dtrace_tcp(4)</a>,
<a class="Xr">dtrace_udplite(4)</a>, <a class="Xr">udp(4)</a>,
<a class="Xr">SDT(9)</a></p>
</section>
<section class="Sh">
<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
<p class="Pp">The <code class="Nm">udp</code> provider first appeared in
<span class="Ux">FreeBSD</span> 10.0.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
<p class="Pp">This manual page was written by <span class="An">Mark
Johnston</span>
<<a class="Mt" href="mailto:markj@FreeBSD.org">markj@FreeBSD.org</a>>.</p>
</section>
</div>
<table class="foot">
<tr>
<td class="foot-date">August 1, 2018</td>
<td class="foot-os">FreeBSD 15.0</td>
</tr>
</table>
|