1*5bf5ca77SDevin Teske# -*- tab-width: 4 -*- ;; Emacs 2*5bf5ca77SDevin Teske# vi: set filetype=sh tabstop=8 shiftwidth=8 noexpandtab :: Vi/ViM 3*5bf5ca77SDevin Teske############################################################ IDENT(1) 4*5bf5ca77SDevin Teske# 5*5bf5ca77SDevin Teske# $Title: dwatch(8) module for dtrace_udp(4) $ 6*5bf5ca77SDevin Teske# $Copyright: 2014-2018 Devin Teske. All rights reserved. $ 7*5bf5ca77SDevin Teske# $FreeBSD$ 8*5bf5ca77SDevin Teske# 9*5bf5ca77SDevin Teske############################################################ DESCRIPTION 10*5bf5ca77SDevin Teske# 11*5bf5ca77SDevin Teske# Display local/remote UDP addresses/ports and bytes sent/received for UDP I/O 12*5bf5ca77SDevin Teske# 13*5bf5ca77SDevin Teske############################################################ PROBE 14*5bf5ca77SDevin Teske 15*5bf5ca77SDevin Teskecase "$PROFILE" in 16*5bf5ca77SDevin Teskeudp) : ${PROBE:=udp:::send, udp:::receive} ;; 17*5bf5ca77SDevin Teske *) : ${PROBE:=udp:::${PROFILE#udp-}} 18*5bf5ca77SDevin Teskeesac 19*5bf5ca77SDevin Teske 20*5bf5ca77SDevin Teske############################################################ GLOBALS 21*5bf5ca77SDevin Teske 22*5bf5ca77SDevin Teske# 23*5bf5ca77SDevin Teske# This profile does not support these dwatch features 24*5bf5ca77SDevin Teske# NB: They are disabled here so they have no effect when profile is loaded 25*5bf5ca77SDevin Teske# 26*5bf5ca77SDevin Teskeunset EXECNAME # -k name 27*5bf5ca77SDevin Teskeunset EXECREGEX # -z regex 28*5bf5ca77SDevin Teskeunset GROUP # -g group 29*5bf5ca77SDevin Teskeunset PID # -p pid 30*5bf5ca77SDevin Teskeunset PSARGS # affects -d 31*5bf5ca77SDevin Teskeunset PSTREE # -R 32*5bf5ca77SDevin Teskeunset USER # -u user 33*5bf5ca77SDevin Teske 34*5bf5ca77SDevin Teske############################################################ ACTIONS 35*5bf5ca77SDevin Teske 36*5bf5ca77SDevin Teskeexec 9<<EOF 37*5bf5ca77SDevin Teskethis string flow; 38*5bf5ca77SDevin Teskethis string local; 39*5bf5ca77SDevin Teskethis string remote; 40*5bf5ca77SDevin Teskethis u_char local6; 41*5bf5ca77SDevin Teskethis u_char recv; 42*5bf5ca77SDevin Teskethis u_char remote6; 43*5bf5ca77SDevin Teskethis uint16_t length; 44*5bf5ca77SDevin Teskethis uint16_t lport; 45*5bf5ca77SDevin Teskethis uint16_t rport; 46*5bf5ca77SDevin Teske 47*5bf5ca77SDevin Teske$PROBE /* probe ID $ID */ 48*5bf5ca77SDevin Teske{${TRACE:+ 49*5bf5ca77SDevin Teske printf("<$ID>"); 50*5bf5ca77SDevin Teske} 51*5bf5ca77SDevin Teske /* 52*5bf5ca77SDevin Teske * dtrace_udp(4) 53*5bf5ca77SDevin Teske */ 54*5bf5ca77SDevin Teske this->recv = probename == "receive" ? 1 : 0; 55*5bf5ca77SDevin Teske this->flow = this->recv ? "<-" : "->"; 56*5bf5ca77SDevin Teske 57*5bf5ca77SDevin Teske /* 58*5bf5ca77SDevin Teske * ipinfo_t * 59*5bf5ca77SDevin Teske */ 60*5bf5ca77SDevin Teske this->local = this->recv ? args[2]->ip_daddr : args[2]->ip_saddr; 61*5bf5ca77SDevin Teske this->remote = this->recv ? args[2]->ip_saddr : args[2]->ip_daddr; 62*5bf5ca77SDevin Teske 63*5bf5ca77SDevin Teske /* 64*5bf5ca77SDevin Teske * udpinfo_t * 65*5bf5ca77SDevin Teske */ 66*5bf5ca77SDevin Teske this->length = (uint16_t)args[4]->udp_length; 67*5bf5ca77SDevin Teske this->lport = this->recv ? args[4]->udp_dport : args[4]->udp_sport; 68*5bf5ca77SDevin Teske this->rport = this->recv ? args[4]->udp_sport : args[4]->udp_dport; 69*5bf5ca77SDevin Teske 70*5bf5ca77SDevin Teske /* 71*5bf5ca77SDevin Teske * IPv6 support 72*5bf5ca77SDevin Teske */ 73*5bf5ca77SDevin Teske this->local6 = strstr(this->local, ":") != NULL ? 1 : 0; 74*5bf5ca77SDevin Teske this->remote6 = strstr(this->remote, ":") != NULL ? 1 : 0; 75*5bf5ca77SDevin Teske this->local = strjoin(strjoin(this->local6 ? "[" : "", 76*5bf5ca77SDevin Teske this->local), this->local6 ? "]" : ""); 77*5bf5ca77SDevin Teske this->remote = strjoin(strjoin(this->remote6 ? "[" : "", 78*5bf5ca77SDevin Teske this->remote), this->remote6 ? "]" : ""); 79*5bf5ca77SDevin Teske} 80*5bf5ca77SDevin TeskeEOF 81*5bf5ca77SDevin TeskeACTIONS=$( cat <&9 ) 82*5bf5ca77SDevin TeskeID=$(( $ID + 1 )) 83*5bf5ca77SDevin Teske 84*5bf5ca77SDevin Teske############################################################ EVENT TAG 85*5bf5ca77SDevin Teske 86*5bf5ca77SDevin Teskeexec 9<<EOF 87*5bf5ca77SDevin Teske printf("%s: ", "$PROFILE"); 88*5bf5ca77SDevin TeskeEOF 89*5bf5ca77SDevin TeskeEVENT_TAG=$( cat <&9 ) 90*5bf5ca77SDevin Teske 91*5bf5ca77SDevin Teske############################################################ EVENT DETAILS 92*5bf5ca77SDevin Teske 93*5bf5ca77SDevin Teskeexec 9<<EOF 94*5bf5ca77SDevin Teske /* 95*5bf5ca77SDevin Teske * Print network I/O details 96*5bf5ca77SDevin Teske */ 97*5bf5ca77SDevin Teske printf("%s:%u %s %s:%u %d byte%s", 98*5bf5ca77SDevin Teske this->local, this->lport, 99*5bf5ca77SDevin Teske this->flow, 100*5bf5ca77SDevin Teske this->remote, this->rport, 101*5bf5ca77SDevin Teske this->length, 102*5bf5ca77SDevin Teske this->length == 1 ? "" : "s"); 103*5bf5ca77SDevin TeskeEOF 104*5bf5ca77SDevin TeskeEVENT_DETAILS=$( cat <&9 ) 105*5bf5ca77SDevin Teske 106*5bf5ca77SDevin Teske################################################################################ 107*5bf5ca77SDevin Teske# END 108*5bf5ca77SDevin Teske################################################################################ 109