xref: /freebsd/share/man/man4/dtrace_udp.4 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
14b4ad3a2SMark Johnston.\" Copyright (c) 2015 Mark Johnston <markj@FreeBSD.org>
24b4ad3a2SMark Johnston.\" All rights reserved.
34b4ad3a2SMark Johnston.\"
44b4ad3a2SMark Johnston.\" Redistribution and use in source and binary forms, with or without
54b4ad3a2SMark Johnston.\" modification, are permitted provided that the following conditions
64b4ad3a2SMark Johnston.\" are met:
74b4ad3a2SMark Johnston.\" 1. Redistributions of source code must retain the above copyright
84b4ad3a2SMark Johnston.\"    notice, this list of conditions and the following disclaimer.
94b4ad3a2SMark Johnston.\" 2. Redistributions in binary form must reproduce the above copyright
104b4ad3a2SMark Johnston.\"    notice, this list of conditions and the following disclaimer in the
114b4ad3a2SMark Johnston.\"    documentation and/or other materials provided with the distribution.
124b4ad3a2SMark Johnston.\"
134b4ad3a2SMark Johnston.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
144b4ad3a2SMark Johnston.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
154b4ad3a2SMark Johnston.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
164b4ad3a2SMark Johnston.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
174b4ad3a2SMark Johnston.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
184b4ad3a2SMark Johnston.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
194b4ad3a2SMark Johnston.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
204b4ad3a2SMark Johnston.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
214b4ad3a2SMark Johnston.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
224b4ad3a2SMark Johnston.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
234b4ad3a2SMark Johnston.\" SUCH DAMAGE.
244b4ad3a2SMark Johnston.\"
25*7bda9663SMichael Tuexen.Dd August 1, 2018
264b4ad3a2SMark Johnston.Dt DTRACE_UDP 4
274b4ad3a2SMark Johnston.Os
284b4ad3a2SMark Johnston.Sh NAME
294b4ad3a2SMark Johnston.Nm dtrace_udp
304b4ad3a2SMark Johnston.Nd a DTrace provider for tracing events related to the UDP protocol
314b4ad3a2SMark Johnston.Sh SYNOPSIS
324b4ad3a2SMark Johnston.Fn udp:::receive "pktinfo_t *" "csinfo_t *" "ipinfo_t *" "udpsinfo_t *" \
334b4ad3a2SMark Johnston    "udpinfo_t *"
344b4ad3a2SMark Johnston.Fn udp:::send "pktinfo_t *" "csinfo_t *" "ipinfo_t *" "udpsinfo_t *" \
354b4ad3a2SMark Johnston    "udpinfo_t *"
364b4ad3a2SMark Johnston.Sh DESCRIPTION
374b4ad3a2SMark JohnstonThe DTrace
384b4ad3a2SMark Johnston.Nm udp
394b4ad3a2SMark Johnstonprovider allows users to trace events in the
404b4ad3a2SMark Johnston.Xr udp 4
414b4ad3a2SMark Johnstonprotocol implementation.
424b4ad3a2SMark JohnstonThe
434b4ad3a2SMark Johnston.Fn udp:::send
444b4ad3a2SMark Johnstonprobe fires whenever the kernel prepares to transmit a UDP packet, and the
454b4ad3a2SMark Johnston.Fn udp:::receive
46e1526d5aSMichael Tuexenprobe fires whenever the kernel receives a UDP packet, unless
47e1526d5aSMichael Tuexenthe UDP header is incomplete,
48e1526d5aSMichael Tuexenthe destination port is 0,
49e1526d5aSMichael Tuexenthe length field is invalid,
50e1526d5aSMichael Tuexenor the checksum is wrong.
514b4ad3a2SMark JohnstonThe arguments to these probes can be used to obtain detailed information about
524b4ad3a2SMark Johnstonthe IP and UDP headers of the corresponding packet.
534b4ad3a2SMark Johnston.Sh ARGUMENTS
544b4ad3a2SMark JohnstonThe
554b4ad3a2SMark Johnston.Vt pktinfo_t
564b4ad3a2SMark Johnstonargument is currently unimplemented and is included for compatibility with other
574b4ad3a2SMark Johnstonimplementations of this provider.
584b4ad3a2SMark JohnstonIts fields are:
594b4ad3a2SMark Johnston.Bl -tag -width "uintptr_t pkt_addr" -offset indent
604b4ad3a2SMark Johnston.It Vt uintptr_t pkt_addr
614b4ad3a2SMark JohnstonAlways set to 0.
624b4ad3a2SMark Johnston.El
634b4ad3a2SMark Johnston.Pp
644b4ad3a2SMark JohnstonThe
654b4ad3a2SMark Johnston.Vt csinfo_t
664b4ad3a2SMark Johnstonargument is currently unimplemented and is included for compatibility with other
674b4ad3a2SMark Johnstonimplementations of this provider.
684b4ad3a2SMark JohnstonIts fields are:
694b4ad3a2SMark Johnston.Bl -tag -width "uintptr_t cs_addr" -offset indent
704b4ad3a2SMark Johnston.It Vt uintptr_t cs_addr
714b4ad3a2SMark JohnstonAlways set to 0.
724b4ad3a2SMark Johnston.It Vt uint64_t cs_cid
734b4ad3a2SMark JohnstonA pointer to the
744b4ad3a2SMark Johnston.Vt struct inpcb
754b4ad3a2SMark Johnstonfor this packet, or
764b4ad3a2SMark Johnston.Dv NULL .
774b4ad3a2SMark Johnston.It Vt pid_t cs_pid
784b4ad3a2SMark JohnstonAlways set to 0.
794b4ad3a2SMark Johnston.El
804b4ad3a2SMark Johnston.Pp
814b4ad3a2SMark JohnstonThe
824b4ad3a2SMark Johnston.Vt ipinfo_t
834b4ad3a2SMark Johnstonargument contains IP fields common to both IPv4 and IPv6 packets.
844b4ad3a2SMark JohnstonIts fields are:
854b4ad3a2SMark Johnston.Bl -tag -width "uint32_t ip_plength" -offset indent
864b4ad3a2SMark Johnston.It Vt uint8_t ip_ver
874b4ad3a2SMark JohnstonIP version of the packet, 4 for IPv4 packets and 6 for IPv6 packets.
884b4ad3a2SMark Johnston.It Vt uint32_t ip_plength
894b4ad3a2SMark JohnstonIP payload size.
904b4ad3a2SMark JohnstonThis does not include the size of the IP header or IPv6 option headers.
914b4ad3a2SMark Johnston.It Vt string ip_saddr
924b4ad3a2SMark JohnstonIP source address.
934b4ad3a2SMark Johnston.It Vt string ip_daddr
944b4ad3a2SMark JohnstonIP destination address.
954b4ad3a2SMark Johnston.El
964b4ad3a2SMark Johnston.Pp
974b4ad3a2SMark JohnstonThe
984b4ad3a2SMark Johnston.Vt udpsinfo_t
994b4ad3a2SMark Johnstonargument contains the state of the UDP connection associated with the packet.
1004b4ad3a2SMark JohnstonIts fields are:
1014b4ad3a2SMark Johnston.Bl -tag -width "uintptr_t udps_addr" -offset indent
1024b4ad3a2SMark Johnston.It Vt uintptr_t udps_addr
1034b4ad3a2SMark JohnstonPointer to the
1044b4ad3a2SMark Johnston.Vt struct inpcb
1054b4ad3a2SMark Johnstoncontaining the IP state for the associated socket.
1064b4ad3a2SMark Johnston.It Vt uint16_t udps_lport
1074b4ad3a2SMark JohnstonLocal UDP port.
1084b4ad3a2SMark Johnston.It Vt uint16_t udps_rport
1094b4ad3a2SMark JohnstonRemote UDP port.
1104b4ad3a2SMark Johnston.It Vt string udps_laddr
1114b4ad3a2SMark JohnstonLocal IPv4 or IPv6 address.
1124b4ad3a2SMark Johnston.It Vt string udps_raddr
1134b4ad3a2SMark JohnstonRemote IPv4 or IPv6 address.
1144b4ad3a2SMark Johnston.El
1154b4ad3a2SMark Johnston.Pp
1164b4ad3a2SMark JohnstonThe
1174b4ad3a2SMark Johnston.Vt udpinfo_t
1184b4ad3a2SMark Johnstonargument is the raw UDP header of the packet, with all fields in host order.
1194b4ad3a2SMark JohnstonIts fields are:
1204b4ad3a2SMark Johnston.Bl -tag -width "struct udphdr *udp_hdr" -offset indent
1214b4ad3a2SMark Johnston.It Vt uint16_t udp_sport
1224b4ad3a2SMark JohnstonSource UDP port.
1234b4ad3a2SMark Johnston.It Vt uint16_t udp_dport
1244b4ad3a2SMark JohnstonDestination UDP port.
1254b4ad3a2SMark Johnston.It Vt uint16_t udp_length
1264b4ad3a2SMark JohnstonLength of the UDP header and payload, in bytes.
1274b4ad3a2SMark Johnston.It Vt uint16_t udp_checksum
1284b4ad3a2SMark JohnstonA checksum of the UDP header and payload, or 0 if no checksum was calculated.
1294b4ad3a2SMark Johnston.It Vt struct udphdr *udp_hdr
1304b4ad3a2SMark JohnstonA pointer to the raw UDP header.
1314b4ad3a2SMark Johnston.El
1324b4ad3a2SMark Johnston.Sh FILES
1334b4ad3a2SMark Johnston.Bl -tag -width "/usr/lib/dtrace/udp.d" -compact
1344b4ad3a2SMark Johnston.It Pa /usr/lib/dtrace/udp.d
1354b4ad3a2SMark JohnstonDTrace type and translator definitions for the
1364b4ad3a2SMark Johnston.Nm udp
1374b4ad3a2SMark Johnstonprovider.
1384b4ad3a2SMark Johnston.El
1394b4ad3a2SMark Johnston.Sh EXAMPLES
1404b4ad3a2SMark JohnstonThe following script counts transmitted packets by destination port.
1414b4ad3a2SMark Johnston.Bd -literal -offset indent
1424b4ad3a2SMark Johnstonudp:::send
1434b4ad3a2SMark Johnston{
1444b4ad3a2SMark Johnston        @num[args[4]->udp_dport] = count();
1454b4ad3a2SMark Johnston}
1464b4ad3a2SMark Johnston.Ed
1474b4ad3a2SMark Johnston.Pp
1484b4ad3a2SMark JohnstonThis script will print some details of each UDP packet as it is sent or received
1494b4ad3a2SMark Johnstonby the kernel:
1504b4ad3a2SMark Johnston.Bd -literal -offset indent
1514b4ad3a2SMark Johnston#pragma D option quiet
1524b4ad3a2SMark Johnston#pragma D option switchrate=10Hz
1534b4ad3a2SMark Johnston
1544b4ad3a2SMark Johnstondtrace:::BEGIN
1554b4ad3a2SMark Johnston{
156af1e9f5aSChristian Brueffer        printf(" %10s %36s    %-36s %6s\\n", "DELTA(us)", "SOURCE",
1574b4ad3a2SMark Johnston            "DEST", "BYTES");
1584b4ad3a2SMark Johnston        last = timestamp;
1594b4ad3a2SMark Johnston}
1604b4ad3a2SMark Johnston
1614b4ad3a2SMark Johnstonudp:::send
1624b4ad3a2SMark Johnston{
1634b4ad3a2SMark Johnston        this->elapsed = (timestamp - last) / 1000;
1644b4ad3a2SMark Johnston        self->dest = strjoin(strjoin(args[2]->ip_daddr, ":"),
1654b4ad3a2SMark Johnston             lltostr(args[4]->udp_dport));
166af1e9f5aSChristian Brueffer        printf(" %10d %30s:%-5d -> %-36s %6d\\n", this->elapsed,
1674b4ad3a2SMark Johnston            args[2]->ip_saddr, args[4]->udp_sport,
1684b4ad3a2SMark Johnston            self->dest, args[4]->udp_length);
1694b4ad3a2SMark Johnston        last = timestamp;
1704b4ad3a2SMark Johnston}
1714b4ad3a2SMark Johnston
1724b4ad3a2SMark Johnstonudp:::receive
1734b4ad3a2SMark Johnston{
1744b4ad3a2SMark Johnston        this->elapsed = (timestamp - last) / 1000;
1754b4ad3a2SMark Johnston        self->dest = strjoin(strjoin(args[2]->ip_saddr, ":"),
1764b4ad3a2SMark Johnston             lltostr(args[4]->udp_sport));
177af1e9f5aSChristian Brueffer        printf(" %10d %30s:%-5d <- %-36s %6d\\n", this->elapsed,
1784b4ad3a2SMark Johnston            args[2]->ip_daddr, args[4]->udp_dport,
1794b4ad3a2SMark Johnston            self->dest, args[4]->udp_length);
1804b4ad3a2SMark Johnston        last = timestamp;
1814b4ad3a2SMark Johnston}
1824b4ad3a2SMark Johnston.Ed
1834b4ad3a2SMark Johnston.Sh COMPATIBILITY
1844b4ad3a2SMark JohnstonThis provider is compatible with the
1854b4ad3a2SMark Johnston.Nm udp
1864b4ad3a2SMark Johnstonprovider in Solaris.
1874b4ad3a2SMark Johnston.Sh SEE ALSO
1884b4ad3a2SMark Johnston.Xr dtrace 1 ,
1894b4ad3a2SMark Johnston.Xr dtrace_ip 4 ,
190*7bda9663SMichael Tuexen.Xr dtrace_sctp 4 ,
1914b4ad3a2SMark Johnston.Xr dtrace_tcp 4 ,
192*7bda9663SMichael Tuexen.Xr dtrace_udplite 4 ,
1934b4ad3a2SMark Johnston.Xr udp 4 ,
1944b4ad3a2SMark Johnston.Xr SDT 9
1954b4ad3a2SMark Johnston.Sh HISTORY
1964b4ad3a2SMark JohnstonThe
1974b4ad3a2SMark Johnston.Nm udp
1984b4ad3a2SMark Johnstonprovider first appeared in
1994b4ad3a2SMark Johnston.Fx
2004b4ad3a2SMark Johnston10.0.
2014b4ad3a2SMark Johnston.Sh AUTHORS
2024b4ad3a2SMark JohnstonThis manual page was written by
2034b4ad3a2SMark Johnston.An Mark Johnston Aq Mt markj@FreeBSD.org .
204