#!/usr/sbin/dtrace -s #pragma D option quiet #pragma D option switchrate=10Hz #pragma D option temporal dtrace:::BEGIN { printf(" %30s %-6s %30s %-6s %-9s\n", "LADDR", "LPORT", "RADDR", "RPORT", "DELTA(us)"); } int last[uint64_t]; tcp:::state-change { this->delta = last[args[1]->cs_cid] != 0 ? (timestamp - last[args[1]->cs_cid]) / 1000 : 0; last[args[1]->cs_cid] = timestamp; printf(" %30s %-6u %30s %-6u %-9u %s -> %s\n", args[3]->tcps_laddr, args[3]->tcps_lport, args[3]->tcps_raddr, args[3]->tcps_rport, this->delta, tcp_state_string[args[5]->tcps_state], tcp_state_string[args[3]->tcps_state]); } tcp:::state-change /args[3]->tcps_state == TCPS_CLOSING || args[3]->tcps_state == TCPS_FIN_WAIT_2 || args[3]->tcps_state == TCPS_LAST_ACK/ { last[args[1]->cs_cid] = 0; }