xref: /freebsd/cddl/usr.sbin/dwatch/libexec/udp (revision d0b2dbfa)
15bf5ca77SDevin Teske# -*- tab-width: 4 -*- ;; Emacs
25bf5ca77SDevin Teske# vi: set filetype=sh tabstop=8 shiftwidth=8 noexpandtab :: Vi/ViM
35bf5ca77SDevin Teske############################################################ IDENT(1)
45bf5ca77SDevin Teske#
55bf5ca77SDevin Teske# $Title: dwatch(8) module for dtrace_udp(4) $
65bf5ca77SDevin Teske# $Copyright: 2014-2018 Devin Teske. All rights reserved. $
75bf5ca77SDevin Teske#
85bf5ca77SDevin Teske############################################################ DESCRIPTION
95bf5ca77SDevin Teske#
105bf5ca77SDevin Teske# Display local/remote UDP addresses/ports and bytes sent/received for UDP I/O
115bf5ca77SDevin Teske#
125bf5ca77SDevin Teske############################################################ PROBE
135bf5ca77SDevin Teske
145bf5ca77SDevin Teskecase "$PROFILE" in
155bf5ca77SDevin Teskeudp) : ${PROBE:=udp:::send, udp:::receive} ;;
165bf5ca77SDevin Teske  *) : ${PROBE:=udp:::${PROFILE#udp-}}
175bf5ca77SDevin Teskeesac
185bf5ca77SDevin Teske
195bf5ca77SDevin Teske############################################################ ACTIONS
205bf5ca77SDevin Teske
215bf5ca77SDevin Teskeexec 9<<EOF
225bf5ca77SDevin Teskethis string	flow;
235bf5ca77SDevin Teskethis string	local;
245bf5ca77SDevin Teskethis string	remote;
255bf5ca77SDevin Teskethis u_char	local6;
265bf5ca77SDevin Teskethis u_char	recv;
275bf5ca77SDevin Teskethis u_char	remote6;
285bf5ca77SDevin Teskethis uint16_t	length;
295bf5ca77SDevin Teskethis uint16_t	lport;
305bf5ca77SDevin Teskethis uint16_t	rport;
315bf5ca77SDevin Teske
325bf5ca77SDevin Teske$PROBE /* probe ID $ID */
335bf5ca77SDevin Teske{${TRACE:+
345bf5ca77SDevin Teske	printf("<$ID>");
355bf5ca77SDevin Teske}
365bf5ca77SDevin Teske	/*
375bf5ca77SDevin Teske	 * dtrace_udp(4)
385bf5ca77SDevin Teske	 */
395bf5ca77SDevin Teske	this->recv = probename == "receive" ? 1 : 0;
405bf5ca77SDevin Teske	this->flow = this->recv ? "<-" : "->";
415bf5ca77SDevin Teske
425bf5ca77SDevin Teske	/*
435bf5ca77SDevin Teske	 * ipinfo_t *
445bf5ca77SDevin Teske	 */
455bf5ca77SDevin Teske	this->local  = this->recv ? args[2]->ip_daddr : args[2]->ip_saddr;
465bf5ca77SDevin Teske	this->remote = this->recv ? args[2]->ip_saddr : args[2]->ip_daddr;
475bf5ca77SDevin Teske
485bf5ca77SDevin Teske	/*
495bf5ca77SDevin Teske	 * udpinfo_t *
505bf5ca77SDevin Teske	 */
515bf5ca77SDevin Teske	this->length = (uint16_t)args[4]->udp_length;
525bf5ca77SDevin Teske	this->lport  = this->recv ? args[4]->udp_dport : args[4]->udp_sport;
535bf5ca77SDevin Teske	this->rport  = this->recv ? args[4]->udp_sport : args[4]->udp_dport;
545bf5ca77SDevin Teske
555bf5ca77SDevin Teske	/*
565bf5ca77SDevin Teske	 * IPv6 support
575bf5ca77SDevin Teske	 */
585bf5ca77SDevin Teske	this->local6 = strstr(this->local, ":") != NULL ? 1 : 0;
595bf5ca77SDevin Teske	this->remote6 = strstr(this->remote, ":") != NULL ? 1 : 0;
605bf5ca77SDevin Teske	this->local = strjoin(strjoin(this->local6 ? "[" : "",
615bf5ca77SDevin Teske		this->local), this->local6 ? "]" : "");
625bf5ca77SDevin Teske	this->remote = strjoin(strjoin(this->remote6 ? "[" : "",
635bf5ca77SDevin Teske		this->remote), this->remote6 ? "]" : "");
645bf5ca77SDevin Teske}
655bf5ca77SDevin TeskeEOF
665bf5ca77SDevin TeskeACTIONS=$( cat <&9 )
675bf5ca77SDevin TeskeID=$(( $ID + 1 ))
685bf5ca77SDevin Teske
695bf5ca77SDevin Teske############################################################ EVENT DETAILS
705bf5ca77SDevin Teske
71a061d970SDevin Teskeif [ ! "$CUSTOM_DETAILS" ]; then
725bf5ca77SDevin Teskeexec 9<<EOF
735bf5ca77SDevin Teske	/*
745bf5ca77SDevin Teske	 * Print network I/O details
755bf5ca77SDevin Teske	 */
765bf5ca77SDevin Teske	printf("%s:%u %s %s:%u %d byte%s",
775bf5ca77SDevin Teske		this->local, this->lport,
785bf5ca77SDevin Teske		this->flow,
795bf5ca77SDevin Teske		this->remote, this->rport,
805bf5ca77SDevin Teske		this->length,
815bf5ca77SDevin Teske		this->length == 1 ? "" : "s");
825bf5ca77SDevin TeskeEOF
835bf5ca77SDevin TeskeEVENT_DETAILS=$( cat <&9 )
84a061d970SDevin Teskefi
855bf5ca77SDevin Teske
865bf5ca77SDevin Teske################################################################################
875bf5ca77SDevin Teske# END
885bf5ca77SDevin Teske################################################################################
89