Changeset View
Changeset View
Standalone View
Standalone View
cddl/usr.sbin/dwatch/libexec/ip
- This file was added.
Property | Old Value | New Value |
---|---|---|
svn:keywords | null | FreeBSD=%H \ No newline at end of property |
# -*- tab-width: 4 -*- ;; Emacs | |||||
# vi: set filetype=sh tabstop=8 shiftwidth=8 noexpandtab :: Vi/ViM | |||||
############################################################ IDENT(1) | |||||
# | |||||
# $Title: dwatch(8) module for dtrace_ip(4) $ | |||||
# $Copyright: 2014-2018 Devin Teske. All rights reserved. $ | |||||
# $FreeBSD$ | |||||
# | |||||
############################################################ DESCRIPTION | |||||
# | |||||
# Display interface name and bytes sent/received when IP I/O occurs | |||||
# | |||||
############################################################ PROBE | |||||
case "$PROFILE" in | |||||
ip) : ${PROBE:=ip:::send, ip:::receive} ;; | |||||
*) : ${PROBE:=ip:::${PROFILE#ip-}} | |||||
esac | |||||
############################################################ GLOBALS | |||||
# | |||||
# This profile does not support these dwatch features | |||||
# NB: They are disabled here so they have no effect when profile is loaded | |||||
# | |||||
unset EXECNAME # -k name | |||||
unset EXECREGEX # -z regex | |||||
unset GROUP # -g group | |||||
unset PID # -p pid | |||||
unset PSARGS # affects -d | |||||
unset PSTREE # -R | |||||
unset USER # -u user | |||||
############################################################ ACTIONS | |||||
exec 9<<EOF | |||||
this string flow; | |||||
this string if_name; | |||||
this string local; | |||||
this string remote; | |||||
this u_char recv; | |||||
this uint32_t length; | |||||
$PROBE /* probe ID $ID */ | |||||
{${TRACE:+ | |||||
printf("<$ID>"); | |||||
} | |||||
/* | |||||
* dtrace_ip(4) | |||||
*/ | |||||
this->recv = probename == "receive" ? 1 : 0; | |||||
this->flow = this->recv ? "<-" : "->"; | |||||
/* | |||||
* ipinfo_t * | |||||
*/ | |||||
this->length = (uint32_t)args[2]->ip_plength; | |||||
this->local = this->recv ? args[2]->ip_daddr : args[2]->ip_saddr; | |||||
this->remote = this->recv ? args[2]->ip_saddr : args[2]->ip_daddr; | |||||
/* | |||||
* ifinfo_t * | |||||
*/ | |||||
this->if_name = args[3]->if_name; | |||||
} | |||||
EOF | |||||
ACTIONS=$( cat <&9 ) | |||||
ID=$(( $ID + 1 )) | |||||
############################################################ EVENT TAG | |||||
exec 9<<EOF | |||||
printf("%s: ", "$PROFILE"); | |||||
EOF | |||||
EVENT_TAG=$( cat <&9 ) | |||||
############################################################ EVENT DETAILS | |||||
exec 9<<EOF | |||||
/* | |||||
* Print network I/O details | |||||
*/ | |||||
printf("%s %s %s %s %u byte%s", | |||||
this->if_name, | |||||
this->local, | |||||
this->flow, | |||||
this->remote, | |||||
this->length, | |||||
this->length == 1 ? "" : "s"); | |||||
EOF | |||||
EVENT_DETAILS=$( cat <&9 ) | |||||
################################################################################ | |||||
# END | |||||
################################################################################ |