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