17f71a271f
The dtrace provider for UDP-Lite is modeled after the UDP provider. This fixes the bug that UDP-Lite packets were triggering the UDP provider. Thanks to dteske@ for providing the dwatch module. Reviewed by: dteske@, markj@, rrs@ Relnotes: yes Differential Revision: https://reviews.freebsd.org/D16377
206 lines
6.0 KiB
Groff
206 lines
6.0 KiB
Groff
.\" Copyright (c) 2015 Mark Johnston <markj@FreeBSD.org>
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.Dd August 1, 2018
|
|
.Dt DTRACE_UDP 4
|
|
.Os
|
|
.Sh NAME
|
|
.Nm dtrace_udp
|
|
.Nd a DTrace provider for tracing events related to the UDP protocol
|
|
.Sh SYNOPSIS
|
|
.Fn udp:::receive "pktinfo_t *" "csinfo_t *" "ipinfo_t *" "udpsinfo_t *" \
|
|
"udpinfo_t *"
|
|
.Fn udp:::send "pktinfo_t *" "csinfo_t *" "ipinfo_t *" "udpsinfo_t *" \
|
|
"udpinfo_t *"
|
|
.Sh DESCRIPTION
|
|
The DTrace
|
|
.Nm udp
|
|
provider allows users to trace events in the
|
|
.Xr udp 4
|
|
protocol implementation.
|
|
The
|
|
.Fn udp:::send
|
|
probe fires whenever the kernel prepares to transmit a UDP packet, and the
|
|
.Fn udp:::receive
|
|
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.
|
|
.Sh ARGUMENTS
|
|
The
|
|
.Vt pktinfo_t
|
|
argument is currently unimplemented and is included for compatibility with other
|
|
implementations of this provider.
|
|
Its fields are:
|
|
.Bl -tag -width "uintptr_t pkt_addr" -offset indent
|
|
.It Vt uintptr_t pkt_addr
|
|
Always set to 0.
|
|
.El
|
|
.Pp
|
|
The
|
|
.Vt csinfo_t
|
|
argument is currently unimplemented and is included for compatibility with other
|
|
implementations of this provider.
|
|
Its fields are:
|
|
.Bl -tag -width "uintptr_t cs_addr" -offset indent
|
|
.It Vt uintptr_t cs_addr
|
|
Always set to 0.
|
|
.It Vt uint64_t cs_cid
|
|
A pointer to the
|
|
.Vt struct inpcb
|
|
for this packet, or
|
|
.Dv NULL .
|
|
.It Vt pid_t cs_pid
|
|
Always set to 0.
|
|
.El
|
|
.Pp
|
|
The
|
|
.Vt ipinfo_t
|
|
argument contains IP fields common to both IPv4 and IPv6 packets.
|
|
Its fields are:
|
|
.Bl -tag -width "uint32_t ip_plength" -offset indent
|
|
.It Vt uint8_t ip_ver
|
|
IP version of the packet, 4 for IPv4 packets and 6 for IPv6 packets.
|
|
.It Vt uint32_t ip_plength
|
|
IP payload size.
|
|
This does not include the size of the IP header or IPv6 option headers.
|
|
.It Vt string ip_saddr
|
|
IP source address.
|
|
.It Vt string ip_daddr
|
|
IP destination address.
|
|
.El
|
|
.Pp
|
|
The
|
|
.Vt udpsinfo_t
|
|
argument contains the state of the UDP connection associated with the packet.
|
|
Its fields are:
|
|
.Bl -tag -width "uintptr_t udps_addr" -offset indent
|
|
.It Vt uintptr_t udps_addr
|
|
Pointer to the
|
|
.Vt struct inpcb
|
|
containing the IP state for the associated socket.
|
|
.It Vt uint16_t udps_lport
|
|
Local UDP port.
|
|
.It Vt uint16_t udps_rport
|
|
Remote UDP port.
|
|
.It Vt string udps_laddr
|
|
Local IPv4 or IPv6 address.
|
|
.It Vt string udps_raddr
|
|
Remote IPv4 or IPv6 address.
|
|
.El
|
|
.Pp
|
|
The
|
|
.Vt udpinfo_t
|
|
argument is the raw UDP header of the packet, with all fields in host order.
|
|
Its fields are:
|
|
.Bl -tag -width "struct udphdr *udp_hdr" -offset indent
|
|
.It Vt uint16_t udp_sport
|
|
Source UDP port.
|
|
.It Vt uint16_t udp_dport
|
|
Destination UDP port.
|
|
.It Vt uint16_t udp_length
|
|
Length of the UDP header and payload, in bytes.
|
|
.It Vt uint16_t udp_checksum
|
|
A checksum of the UDP header and payload, or 0 if no checksum was calculated.
|
|
.It Vt struct udphdr *udp_hdr
|
|
A pointer to the raw UDP header.
|
|
.El
|
|
.Sh FILES
|
|
.Bl -tag -width "/usr/lib/dtrace/udp.d" -compact
|
|
.It Pa /usr/lib/dtrace/udp.d
|
|
DTrace type and translator definitions for the
|
|
.Nm udp
|
|
provider.
|
|
.El
|
|
.Sh EXAMPLES
|
|
The following script counts transmitted packets by destination port.
|
|
.Bd -literal -offset indent
|
|
udp:::send
|
|
{
|
|
@num[args[4]->udp_dport] = count();
|
|
}
|
|
.Ed
|
|
.Pp
|
|
This script will print some details of each UDP packet as it is sent or received
|
|
by the kernel:
|
|
.Bd -literal -offset indent
|
|
#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;
|
|
}
|
|
.Ed
|
|
.Sh COMPATIBILITY
|
|
This provider is compatible with the
|
|
.Nm udp
|
|
provider in Solaris.
|
|
.Sh SEE ALSO
|
|
.Xr dtrace 1 ,
|
|
.Xr dtrace_ip 4 ,
|
|
.Xr dtrace_sctp 4 ,
|
|
.Xr dtrace_tcp 4 ,
|
|
.Xr dtrace_udplite 4 ,
|
|
.Xr udp 4 ,
|
|
.Xr SDT 9
|
|
.Sh HISTORY
|
|
The
|
|
.Nm udp
|
|
provider first appeared in
|
|
.Fx
|
|
10.0.
|
|
.Sh AUTHORS
|
|
This manual page was written by
|
|
.An Mark Johnston Aq Mt markj@FreeBSD.org .
|