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_ip(4) $ 65bf5ca77SDevin Teske# $Copyright: 2014-2018 Devin Teske. All rights reserved. $ 75bf5ca77SDevin Teske# 85bf5ca77SDevin Teske############################################################ DESCRIPTION 95bf5ca77SDevin Teske# 105bf5ca77SDevin Teske# Display interface name and bytes sent/received when IP I/O occurs 115bf5ca77SDevin Teske# 125bf5ca77SDevin Teske############################################################ PROBE 135bf5ca77SDevin Teske 145bf5ca77SDevin Teskecase "$PROFILE" in 155bf5ca77SDevin Teskeip) : ${PROBE:=ip:::send, ip:::receive} ;; 165bf5ca77SDevin Teske *) : ${PROBE:=ip:::${PROFILE#ip-}} 175bf5ca77SDevin Teskeesac 185bf5ca77SDevin Teske 195bf5ca77SDevin Teske############################################################ ACTIONS 205bf5ca77SDevin Teske 215bf5ca77SDevin Teskeexec 9<<EOF 225bf5ca77SDevin Teskethis string flow; 235bf5ca77SDevin Teskethis string if_name; 245bf5ca77SDevin Teskethis string local; 255bf5ca77SDevin Teskethis string remote; 265bf5ca77SDevin Teskethis u_char recv; 275bf5ca77SDevin Teskethis uint32_t length; 285bf5ca77SDevin Teske 295bf5ca77SDevin Teske$PROBE /* probe ID $ID */ 305bf5ca77SDevin Teske{${TRACE:+ 315bf5ca77SDevin Teske printf("<$ID>"); 325bf5ca77SDevin Teske} 335bf5ca77SDevin Teske /* 345bf5ca77SDevin Teske * dtrace_ip(4) 355bf5ca77SDevin Teske */ 365bf5ca77SDevin Teske this->recv = probename == "receive" ? 1 : 0; 375bf5ca77SDevin Teske this->flow = this->recv ? "<-" : "->"; 385bf5ca77SDevin Teske 395bf5ca77SDevin Teske /* 405bf5ca77SDevin Teske * ipinfo_t * 415bf5ca77SDevin Teske */ 425bf5ca77SDevin Teske this->length = (uint32_t)args[2]->ip_plength; 435bf5ca77SDevin Teske this->local = this->recv ? args[2]->ip_daddr : args[2]->ip_saddr; 445bf5ca77SDevin Teske this->remote = this->recv ? args[2]->ip_saddr : args[2]->ip_daddr; 455bf5ca77SDevin Teske 465bf5ca77SDevin Teske /* 475bf5ca77SDevin Teske * ifinfo_t * 485bf5ca77SDevin Teske */ 495bf5ca77SDevin Teske this->if_name = args[3]->if_name; 505bf5ca77SDevin Teske} 515bf5ca77SDevin TeskeEOF 525bf5ca77SDevin TeskeACTIONS=$( cat <&9 ) 535bf5ca77SDevin TeskeID=$(( $ID + 1 )) 545bf5ca77SDevin Teske 555bf5ca77SDevin Teske############################################################ EVENT DETAILS 565bf5ca77SDevin Teske 57*a061d970SDevin Teskeif [ ! "$CUSTOM_DETAILS" ]; then 585bf5ca77SDevin Teskeexec 9<<EOF 595bf5ca77SDevin Teske /* 605bf5ca77SDevin Teske * Print network I/O details 615bf5ca77SDevin Teske */ 625bf5ca77SDevin Teske printf("%s %s %s %s %u byte%s", 635bf5ca77SDevin Teske this->if_name, 645bf5ca77SDevin Teske this->local, 655bf5ca77SDevin Teske this->flow, 665bf5ca77SDevin Teske this->remote, 675bf5ca77SDevin Teske this->length, 685bf5ca77SDevin Teske this->length == 1 ? "" : "s"); 695bf5ca77SDevin TeskeEOF 705bf5ca77SDevin TeskeEVENT_DETAILS=$( cat <&9 ) 71*a061d970SDevin Teskefi 725bf5ca77SDevin Teske 735bf5ca77SDevin Teske################################################################################ 745bf5ca77SDevin Teske# END 755bf5ca77SDevin Teske################################################################################ 76