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# $FreeBSD$ 85bf5ca77SDevin Teske# 95bf5ca77SDevin Teske############################################################ DESCRIPTION 105bf5ca77SDevin Teske# 115bf5ca77SDevin Teske# Display local/remote UDP addresses/ports and bytes sent/received for UDP I/O 125bf5ca77SDevin Teske# 135bf5ca77SDevin Teske############################################################ PROBE 145bf5ca77SDevin Teske 155bf5ca77SDevin Teskecase "$PROFILE" in 165bf5ca77SDevin Teskeudp) : ${PROBE:=udp:::send, udp:::receive} ;; 175bf5ca77SDevin Teske *) : ${PROBE:=udp:::${PROFILE#udp-}} 185bf5ca77SDevin Teskeesac 195bf5ca77SDevin Teske 205bf5ca77SDevin Teske############################################################ GLOBALS 215bf5ca77SDevin Teske 225bf5ca77SDevin Teske# 235bf5ca77SDevin Teske# This profile does not support these dwatch features 245bf5ca77SDevin Teske# NB: They are disabled here so they have no effect when profile is loaded 255bf5ca77SDevin Teske# 265bf5ca77SDevin Teskeunset EXECNAME # -k name 275bf5ca77SDevin Teskeunset EXECREGEX # -z regex 285bf5ca77SDevin Teskeunset GROUP # -g group 295bf5ca77SDevin Teskeunset PID # -p pid 305bf5ca77SDevin Teskeunset PSARGS # affects -d 315bf5ca77SDevin Teskeunset PSTREE # -R 325bf5ca77SDevin Teskeunset USER # -u user 335bf5ca77SDevin Teske 345bf5ca77SDevin Teske############################################################ ACTIONS 355bf5ca77SDevin Teske 365bf5ca77SDevin Teskeexec 9<<EOF 375bf5ca77SDevin Teskethis string flow; 385bf5ca77SDevin Teskethis string local; 395bf5ca77SDevin Teskethis string remote; 405bf5ca77SDevin Teskethis u_char local6; 415bf5ca77SDevin Teskethis u_char recv; 425bf5ca77SDevin Teskethis u_char remote6; 435bf5ca77SDevin Teskethis uint16_t length; 445bf5ca77SDevin Teskethis uint16_t lport; 455bf5ca77SDevin Teskethis uint16_t rport; 465bf5ca77SDevin Teske 475bf5ca77SDevin Teske$PROBE /* probe ID $ID */ 485bf5ca77SDevin Teske{${TRACE:+ 495bf5ca77SDevin Teske printf("<$ID>"); 505bf5ca77SDevin Teske} 515bf5ca77SDevin Teske /* 525bf5ca77SDevin Teske * dtrace_udp(4) 535bf5ca77SDevin Teske */ 545bf5ca77SDevin Teske this->recv = probename == "receive" ? 1 : 0; 555bf5ca77SDevin Teske this->flow = this->recv ? "<-" : "->"; 565bf5ca77SDevin Teske 575bf5ca77SDevin Teske /* 585bf5ca77SDevin Teske * ipinfo_t * 595bf5ca77SDevin Teske */ 605bf5ca77SDevin Teske this->local = this->recv ? args[2]->ip_daddr : args[2]->ip_saddr; 615bf5ca77SDevin Teske this->remote = this->recv ? args[2]->ip_saddr : args[2]->ip_daddr; 625bf5ca77SDevin Teske 635bf5ca77SDevin Teske /* 645bf5ca77SDevin Teske * udpinfo_t * 655bf5ca77SDevin Teske */ 665bf5ca77SDevin Teske this->length = (uint16_t)args[4]->udp_length; 675bf5ca77SDevin Teske this->lport = this->recv ? args[4]->udp_dport : args[4]->udp_sport; 685bf5ca77SDevin Teske this->rport = this->recv ? args[4]->udp_sport : args[4]->udp_dport; 695bf5ca77SDevin Teske 705bf5ca77SDevin Teske /* 715bf5ca77SDevin Teske * IPv6 support 725bf5ca77SDevin Teske */ 735bf5ca77SDevin Teske this->local6 = strstr(this->local, ":") != NULL ? 1 : 0; 745bf5ca77SDevin Teske this->remote6 = strstr(this->remote, ":") != NULL ? 1 : 0; 755bf5ca77SDevin Teske this->local = strjoin(strjoin(this->local6 ? "[" : "", 765bf5ca77SDevin Teske this->local), this->local6 ? "]" : ""); 775bf5ca77SDevin Teske this->remote = strjoin(strjoin(this->remote6 ? "[" : "", 785bf5ca77SDevin Teske this->remote), this->remote6 ? "]" : ""); 795bf5ca77SDevin Teske} 805bf5ca77SDevin TeskeEOF 815bf5ca77SDevin TeskeACTIONS=$( cat <&9 ) 825bf5ca77SDevin TeskeID=$(( $ID + 1 )) 835bf5ca77SDevin Teske 845bf5ca77SDevin Teske############################################################ EVENT TAG 855bf5ca77SDevin Teske 865bf5ca77SDevin Teskeexec 9<<EOF 875bf5ca77SDevin Teske printf("%s: ", "$PROFILE"); 885bf5ca77SDevin TeskeEOF 895bf5ca77SDevin TeskeEVENT_TAG=$( cat <&9 ) 905bf5ca77SDevin Teske 915bf5ca77SDevin Teske############################################################ EVENT DETAILS 925bf5ca77SDevin Teske 93*a061d970SDevin Teskeif [ ! "$CUSTOM_DETAILS" ]; then 945bf5ca77SDevin Teskeexec 9<<EOF 955bf5ca77SDevin Teske /* 965bf5ca77SDevin Teske * Print network I/O details 975bf5ca77SDevin Teske */ 985bf5ca77SDevin Teske printf("%s:%u %s %s:%u %d byte%s", 995bf5ca77SDevin Teske this->local, this->lport, 1005bf5ca77SDevin Teske this->flow, 1015bf5ca77SDevin Teske this->remote, this->rport, 1025bf5ca77SDevin Teske this->length, 1035bf5ca77SDevin Teske this->length == 1 ? "" : "s"); 1045bf5ca77SDevin TeskeEOF 1055bf5ca77SDevin TeskeEVENT_DETAILS=$( cat <&9 ) 106*a061d970SDevin Teskefi 1075bf5ca77SDevin Teske 1085bf5ca77SDevin Teske################################################################################ 1095bf5ca77SDevin Teske# END 1105bf5ca77SDevin Teske################################################################################ 111