xref: /freebsd/cddl/usr.sbin/dwatch/libexec/udplite (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1*7bda9663SMichael Tuexen# -*- tab-width: 4 -*- ;; Emacs
2*7bda9663SMichael Tuexen# vi: set filetype=sh tabstop=8 shiftwidth=8 noexpandtab :: Vi/ViM
3*7bda9663SMichael Tuexen############################################################ IDENT(1)
4*7bda9663SMichael Tuexen#
5*7bda9663SMichael Tuexen# $Title: dwatch(8) module for dtrace_udplite(4) $
6*7bda9663SMichael Tuexen# $Copyright: 2014-2018 Devin Teske. All rights reserved. $
7*7bda9663SMichael Tuexen#
8*7bda9663SMichael Tuexen############################################################ DESCRIPTION
9*7bda9663SMichael Tuexen#
10*7bda9663SMichael Tuexen# Display local/remote UDP addresses/ports and bytes sent/received for UDP I/O
11*7bda9663SMichael Tuexen#
12*7bda9663SMichael Tuexen############################################################ PROBE
13*7bda9663SMichael Tuexen
14*7bda9663SMichael Tuexencase "$PROFILE" in
15*7bda9663SMichael Tuexenudplite) : ${PROBE:=udplite:::send, udplite:::receive} ;;
16*7bda9663SMichael Tuexen  *) : ${PROBE:=udplite:::${PROFILE#udplite-}}
17*7bda9663SMichael Tuexenesac
18*7bda9663SMichael Tuexen
19*7bda9663SMichael Tuexen############################################################ ACTIONS
20*7bda9663SMichael Tuexen
21*7bda9663SMichael Tuexenexec 9<<EOF
22*7bda9663SMichael Tuexenthis string	flow;
23*7bda9663SMichael Tuexenthis string	local;
24*7bda9663SMichael Tuexenthis string	remote;
25*7bda9663SMichael Tuexenthis u_char	local6;
26*7bda9663SMichael Tuexenthis u_char	recv;
27*7bda9663SMichael Tuexenthis u_char	remote6;
28*7bda9663SMichael Tuexenthis uint16_t	coverage;
29*7bda9663SMichael Tuexenthis uint16_t	lport;
30*7bda9663SMichael Tuexenthis uint16_t	rport;
31*7bda9663SMichael Tuexen
32*7bda9663SMichael Tuexen$PROBE /* probe ID $ID */
33*7bda9663SMichael Tuexen{${TRACE:+
34*7bda9663SMichael Tuexen	printf("<$ID>");
35*7bda9663SMichael Tuexen}
36*7bda9663SMichael Tuexen	/*
37*7bda9663SMichael Tuexen	 * dtrace_udplite(4)
38*7bda9663SMichael Tuexen	 */
39*7bda9663SMichael Tuexen	this->recv = probename == "receive" ? 1 : 0;
40*7bda9663SMichael Tuexen	this->flow = this->recv ? "<-" : "->";
41*7bda9663SMichael Tuexen
42*7bda9663SMichael Tuexen	/*
43*7bda9663SMichael Tuexen	 * ipinfo_t *
44*7bda9663SMichael Tuexen	 */
45*7bda9663SMichael Tuexen	this->local  = this->recv ? args[2]->ip_daddr : args[2]->ip_saddr;
46*7bda9663SMichael Tuexen	this->remote = this->recv ? args[2]->ip_saddr : args[2]->ip_daddr;
47*7bda9663SMichael Tuexen
48*7bda9663SMichael Tuexen	/*
49*7bda9663SMichael Tuexen	 * udpliteinfo_t *
50*7bda9663SMichael Tuexen	 */
51*7bda9663SMichael Tuexen	this->coverage = (uint16_t)args[4]->udplite_coverage;
52*7bda9663SMichael Tuexen	this->lport  = this->recv ? args[4]->udplite_dport : args[4]->udplite_sport;
53*7bda9663SMichael Tuexen	this->rport  = this->recv ? args[4]->udplite_sport : args[4]->udplite_dport;
54*7bda9663SMichael Tuexen
55*7bda9663SMichael Tuexen	/*
56*7bda9663SMichael Tuexen	 * IPv6 support
57*7bda9663SMichael Tuexen	 */
58*7bda9663SMichael Tuexen	this->local6 = strstr(this->local, ":") != NULL ? 1 : 0;
59*7bda9663SMichael Tuexen	this->remote6 = strstr(this->remote, ":") != NULL ? 1 : 0;
60*7bda9663SMichael Tuexen	this->local = strjoin(strjoin(this->local6 ? "[" : "",
61*7bda9663SMichael Tuexen		this->local), this->local6 ? "]" : "");
62*7bda9663SMichael Tuexen	this->remote = strjoin(strjoin(this->remote6 ? "[" : "",
63*7bda9663SMichael Tuexen		this->remote), this->remote6 ? "]" : "");
64*7bda9663SMichael Tuexen}
65*7bda9663SMichael TuexenEOF
66*7bda9663SMichael TuexenACTIONS=$( cat <&9 )
67*7bda9663SMichael TuexenID=$(( $ID + 1 ))
68*7bda9663SMichael Tuexen
69*7bda9663SMichael Tuexen############################################################ EVENT DETAILS
70*7bda9663SMichael Tuexen
71*7bda9663SMichael Tuexenif [ ! "$CUSTOM_DETAILS" ]; then
72*7bda9663SMichael Tuexenexec 9<<EOF
73*7bda9663SMichael Tuexen	/*
74*7bda9663SMichael Tuexen	 * Print network I/O details
75*7bda9663SMichael Tuexen	 */
76*7bda9663SMichael Tuexen	printf("%s:%u %s %s:%u %d byte%s",
77*7bda9663SMichael Tuexen		this->local, this->lport,
78*7bda9663SMichael Tuexen		this->flow,
79*7bda9663SMichael Tuexen		this->remote, this->rport,
80*7bda9663SMichael Tuexen		this->coverage,
81*7bda9663SMichael Tuexen		this->coverage == 1 ? "" : "s");
82*7bda9663SMichael TuexenEOF
83*7bda9663SMichael TuexenEVENT_DETAILS=$( cat <&9 )
84*7bda9663SMichael Tuexenfi
85*7bda9663SMichael Tuexen
86*7bda9663SMichael Tuexen################################################################################
87*7bda9663SMichael Tuexen# END
88*7bda9663SMichael Tuexen################################################################################
89