1*e137d3e0Schristos #!/usr/sbin/dtrace -Cs
2*e137d3e0Schristos /*
3*e137d3e0Schristos  * tcpsnoop.d - snoop TCP network packets by process.
4*e137d3e0Schristos  *              Written using DTrace (Solaris 10 3/05)
5*e137d3e0Schristos  *
6*e137d3e0Schristos  * This analyses TCP network packets and prints the responsible PID and UID,
7*e137d3e0Schristos  * plus standard details such as IP address and port. This captures traffic
8*e137d3e0Schristos  * of newly created TCP connections that were established while this program
9*e137d3e0Schristos  * was running. It can help identify which processes is causing TCP traffic.
10*e137d3e0Schristos  *
11*e137d3e0Schristos  * WARNING: This script may only work on Solaris 10 3/05, since it uses the
12*e137d3e0Schristos  * fbt provider to trace the raw operation of a specific version of the kernel.
13*e137d3e0Schristos  * In the future, a 'stable' network provider should exist which will allow
14*e137d3e0Schristos  * this to be written for that and subsequent versions of the kernel. In the
15*e137d3e0Schristos  * meantime, check for other versions of this script in the /Net directory,
16*e137d3e0Schristos  * and read the Notes/ALLfbt_notes.txt for more background on fbt.
17*e137d3e0Schristos  *
18*e137d3e0Schristos  * $Id: tcpsnoop.d,v 1.1.1.1 2015/09/30 22:01:09 christos Exp $
19*e137d3e0Schristos  *
20*e137d3e0Schristos  * USAGE:       tcpsnoop.d
21*e137d3e0Schristos  *
22*e137d3e0Schristos  * FIELDS:
23*e137d3e0Schristos  *		UID     	user ID
24*e137d3e0Schristos  *		PID     	process ID
25*e137d3e0Schristos  *		CMD     	command
26*e137d3e0Schristos  *		LADDR		local IP address
27*e137d3e0Schristos  *		RADDR		remote IP address
28*e137d3e0Schristos  *		LPORT		local port number
29*e137d3e0Schristos  *		RPORT		remote port number
30*e137d3e0Schristos  *		DR      	direction
31*e137d3e0Schristos  *		SIZE    	packet size, bytes
32*e137d3e0Schristos  *
33*e137d3e0Schristos  * SEE ALSO: snoop -rS
34*e137d3e0Schristos  *
35*e137d3e0Schristos  * COPYRIGHT: Copyright (c) 2005, 2006 Brendan Gregg.
36*e137d3e0Schristos  *
37*e137d3e0Schristos  * CDDL HEADER START
38*e137d3e0Schristos  *
39*e137d3e0Schristos  *  The contents of this file are subject to the terms of the
40*e137d3e0Schristos  *  Common Development and Distribution License, Version 1.0 only
41*e137d3e0Schristos  *  (the "License").  You may not use this file except in compliance
42*e137d3e0Schristos  *  with the License.
43*e137d3e0Schristos  *
44*e137d3e0Schristos  *  You can obtain a copy of the license at Docs/cddl1.txt
45*e137d3e0Schristos  *  or http://www.opensolaris.org/os/licensing.
46*e137d3e0Schristos  *  See the License for the specific language governing permissions
47*e137d3e0Schristos  *  and limitations under the License.
48*e137d3e0Schristos  *
49*e137d3e0Schristos  * CDDL HEADER END
50*e137d3e0Schristos  *
51*e137d3e0Schristos  * Author: Brendan Gregg  [Sydney, Australia]
52*e137d3e0Schristos  *
53*e137d3e0Schristos  * TODO: IPv6
54*e137d3e0Schristos  *
55*e137d3e0Schristos  * 09-Jul-2004  Brendan Gregg   Created this.
56*e137d3e0Schristos  * 12-Mar-2005     "      "	Changed probes, size info now printed.
57*e137d3e0Schristos  * 02-Jul-2005     "      "	Many more probes. Renamed "tcpsnoop.d".
58*e137d3e0Schristos  * 03-Dec-2005	   "	  "	Fixed tcp_accept_finish bug, now 100% correct
59*e137d3e0Schristos  *				execname. Thanks Kias Belgaied for expertise.
60*e137d3e0Schristos  * 20-Apr-2006	   "	  "	Fixed SS_TCP_FAST_ACCEPT bug in build 31+.
61*e137d3e0Schristos  * 20-Apr-2006	   "	  "	Last update.
62*e137d3e0Schristos  */
63*e137d3e0Schristos 
64*e137d3e0Schristos #pragma D option quiet
65*e137d3e0Schristos #pragma D option switchrate=10hz
66*e137d3e0Schristos 
67*e137d3e0Schristos #include <sys/file.h>
68*e137d3e0Schristos #include <inet/common.h>
69*e137d3e0Schristos #include <sys/byteorder.h>
70*e137d3e0Schristos 
71*e137d3e0Schristos /*
72*e137d3e0Schristos  * Print header
73*e137d3e0Schristos  */
74*e137d3e0Schristos dtrace:::BEGIN
75*e137d3e0Schristos {
76*e137d3e0Schristos 	/* print main headers */
77*e137d3e0Schristos 	printf("%5s %6s %-15s %5s %2s %-15s %5s %5s %s\n",
78*e137d3e0Schristos 	    "UID", "PID", "LADDR", "LPORT", "DR", "RADDR", "RPORT",
79*e137d3e0Schristos 	    "SIZE", "CMD");
80*e137d3e0Schristos }
81*e137d3e0Schristos 
82*e137d3e0Schristos /*
83*e137d3e0Schristos  * TCP Process inbound connections
84*e137d3e0Schristos  *
85*e137d3e0Schristos  * 0x00200000 has been hardcoded. It was SS_TCP_FAST_ACCEPT, but was
86*e137d3e0Schristos  * renamed to SS_DIRECT around build 31.
87*e137d3e0Schristos  */
88*e137d3e0Schristos fbt:sockfs:sotpi_accept:entry
89*e137d3e0Schristos /(arg1 & FREAD) && (arg1 & FWRITE) && (args[0]->so_state & 0x00200000)/
90*e137d3e0Schristos {
91*e137d3e0Schristos 	self->sop = args[0];
92*e137d3e0Schristos }
93*e137d3e0Schristos 
94*e137d3e0Schristos fbt:sockfs:sotpi_create:return
95*e137d3e0Schristos /self->sop/
96*e137d3e0Schristos {
97*e137d3e0Schristos 	self->nsop = (struct sonode *)arg1;
98*e137d3e0Schristos }
99*e137d3e0Schristos 
100*e137d3e0Schristos fbt:sockfs:sotpi_accept:return
101*e137d3e0Schristos /self->nsop/
102*e137d3e0Schristos {
103*e137d3e0Schristos 	this->tcpp = (tcp_t *)self->nsop->so_priv;
104*e137d3e0Schristos 	self->connp = (conn_t *)this->tcpp->tcp_connp;
105*e137d3e0Schristos 	tname[(int)self->connp] = execname;
106*e137d3e0Schristos 	tpid[(int)self->connp] = pid;
107*e137d3e0Schristos 	tuid[(int)self->connp] = uid;
108*e137d3e0Schristos }
109*e137d3e0Schristos 
110*e137d3e0Schristos fbt:sockfs:sotpi_accept:return
111*e137d3e0Schristos {
112*e137d3e0Schristos 	self->nsop = 0;
113*e137d3e0Schristos 	self->sop = 0;
114*e137d3e0Schristos }
115*e137d3e0Schristos 
116*e137d3e0Schristos /*
117*e137d3e0Schristos  * TCP Process outbound connections
118*e137d3e0Schristos  */
119*e137d3e0Schristos fbt:ip:tcp_connect:entry
120*e137d3e0Schristos {
121*e137d3e0Schristos 	this->tcpp = (tcp_t *)arg0;
122*e137d3e0Schristos 	self->connp = (conn_t *)this->tcpp->tcp_connp;
123*e137d3e0Schristos 	tname[(int)self->connp] = execname;
124*e137d3e0Schristos 	tpid[(int)self->connp] = pid;
125*e137d3e0Schristos 	tuid[(int)self->connp] = uid;
126*e137d3e0Schristos }
127*e137d3e0Schristos 
128*e137d3e0Schristos /*
129*e137d3e0Schristos  * TCP Data translations
130*e137d3e0Schristos  */
131*e137d3e0Schristos fbt:sockfs:sotpi_accept:return,
132*e137d3e0Schristos fbt:ip:tcp_connect:return
133*e137d3e0Schristos /self->connp/
134*e137d3e0Schristos {
135*e137d3e0Schristos 	/* fetch ports */
136*e137d3e0Schristos #if defined(_BIG_ENDIAN)
137*e137d3e0Schristos 	self->lport = self->connp->u_port.tcpu_ports.tcpu_lport;
138*e137d3e0Schristos 	self->fport = self->connp->u_port.tcpu_ports.tcpu_fport;
139*e137d3e0Schristos #else
140*e137d3e0Schristos 	self->lport = BSWAP_16(self->connp->u_port.tcpu_ports.tcpu_lport);
141*e137d3e0Schristos 	self->fport = BSWAP_16(self->connp->u_port.tcpu_ports.tcpu_fport);
142*e137d3e0Schristos #endif
143*e137d3e0Schristos 
144*e137d3e0Schristos 	/* fetch IPv4 addresses */
145*e137d3e0Schristos 	this->fad12 =
146*e137d3e0Schristos 	    (int)self->connp->connua_v6addr.connua_faddr._S6_un._S6_u8[12];
147*e137d3e0Schristos 	this->fad13 =
148*e137d3e0Schristos 	    (int)self->connp->connua_v6addr.connua_faddr._S6_un._S6_u8[13];
149*e137d3e0Schristos 	this->fad14 =
150*e137d3e0Schristos 	    (int)self->connp->connua_v6addr.connua_faddr._S6_un._S6_u8[14];
151*e137d3e0Schristos 	this->fad15 =
152*e137d3e0Schristos 	    (int)self->connp->connua_v6addr.connua_faddr._S6_un._S6_u8[15];
153*e137d3e0Schristos 	this->lad12 =
154*e137d3e0Schristos 	    (int)self->connp->connua_v6addr.connua_laddr._S6_un._S6_u8[12];
155*e137d3e0Schristos 	this->lad13 =
156*e137d3e0Schristos 	    (int)self->connp->connua_v6addr.connua_laddr._S6_un._S6_u8[13];
157*e137d3e0Schristos 	this->lad14 =
158*e137d3e0Schristos 	    (int)self->connp->connua_v6addr.connua_laddr._S6_un._S6_u8[14];
159*e137d3e0Schristos 	this->lad15 =
160*e137d3e0Schristos 	    (int)self->connp->connua_v6addr.connua_laddr._S6_un._S6_u8[15];
161*e137d3e0Schristos 
162*e137d3e0Schristos 	/* convert type for use with lltostr() */
163*e137d3e0Schristos 	this->fad12 = this->fad12 < 0 ? 256 + this->fad12 : this->fad12;
164*e137d3e0Schristos 	this->fad13 = this->fad13 < 0 ? 256 + this->fad13 : this->fad13;
165*e137d3e0Schristos 	this->fad14 = this->fad14 < 0 ? 256 + this->fad14 : this->fad14;
166*e137d3e0Schristos 	this->fad15 = this->fad15 < 0 ? 256 + this->fad15 : this->fad15;
167*e137d3e0Schristos 	this->lad12 = this->lad12 < 0 ? 256 + this->lad12 : this->lad12;
168*e137d3e0Schristos 	this->lad13 = this->lad13 < 0 ? 256 + this->lad13 : this->lad13;
169*e137d3e0Schristos 	this->lad14 = this->lad14 < 0 ? 256 + this->lad14 : this->lad14;
170*e137d3e0Schristos 	this->lad15 = this->lad15 < 0 ? 256 + this->lad15 : this->lad15;
171*e137d3e0Schristos 
172*e137d3e0Schristos 	/* stringify addresses */
173*e137d3e0Schristos 	self->faddr = strjoin(lltostr(this->fad12), ".");
174*e137d3e0Schristos 	self->faddr = strjoin(self->faddr, strjoin(lltostr(this->fad13), "."));
175*e137d3e0Schristos 	self->faddr = strjoin(self->faddr, strjoin(lltostr(this->fad14), "."));
176*e137d3e0Schristos 	self->faddr = strjoin(self->faddr, lltostr(this->fad15 + 0));
177*e137d3e0Schristos 	self->laddr = strjoin(lltostr(this->lad12), ".");
178*e137d3e0Schristos 	self->laddr = strjoin(self->laddr, strjoin(lltostr(this->lad13), "."));
179*e137d3e0Schristos 	self->laddr = strjoin(self->laddr, strjoin(lltostr(this->lad14), "."));
180*e137d3e0Schristos 	self->laddr = strjoin(self->laddr, lltostr(this->lad15 + 0));
181*e137d3e0Schristos 
182*e137d3e0Schristos 	/* fix direction and save values */
183*e137d3e0Schristos 	tladdr[(int)self->connp] = self->laddr;
184*e137d3e0Schristos 	tfaddr[(int)self->connp] = self->faddr;
185*e137d3e0Schristos 	tlport[(int)self->connp] = self->lport;
186*e137d3e0Schristos 	tfport[(int)self->connp] = self->fport;
187*e137d3e0Schristos 
188*e137d3e0Schristos 	/* all systems go */
189*e137d3e0Schristos 	tok[(int)self->connp] = 1;
190*e137d3e0Schristos }
191*e137d3e0Schristos 
192*e137d3e0Schristos /*
193*e137d3e0Schristos  * TCP Clear connp
194*e137d3e0Schristos  */
195*e137d3e0Schristos fbt:ip:tcp_get_conn:return
196*e137d3e0Schristos {
197*e137d3e0Schristos 	/* Q_TO_CONN */
198*e137d3e0Schristos 	this->connp = (conn_t *)arg1;
199*e137d3e0Schristos 	tok[(int)this->connp] = 0;
200*e137d3e0Schristos 	tpid[(int)this->connp] = 0;
201*e137d3e0Schristos 	tuid[(int)this->connp] = 0;
202*e137d3e0Schristos 	tname[(int)this->connp] = 0;
203*e137d3e0Schristos }
204*e137d3e0Schristos 
205*e137d3e0Schristos /*
206*e137d3e0Schristos  * TCP Process "port closed"
207*e137d3e0Schristos  */
208*e137d3e0Schristos fbt:ip:tcp_xmit_early_reset:entry
209*e137d3e0Schristos {
210*e137d3e0Schristos 	this->queuep = (queue_t *)`tcp_g_q; /* ` */
211*e137d3e0Schristos 	this->connp = (conn_t *)this->queuep->q_ptr;
212*e137d3e0Schristos 	this->tcpp = (tcp_t *)this->connp->conn_tcp;
213*e137d3e0Schristos 
214*e137d3e0Schristos 	/* split addresses */
215*e137d3e0Schristos 	this->ipha = (ipha_t *)args[1]->b_rptr;
216*e137d3e0Schristos 	this->fad15 = (this->ipha->ipha_src & 0xff000000) >> 24;
217*e137d3e0Schristos 	this->fad14 = (this->ipha->ipha_src & 0x00ff0000) >> 16;
218*e137d3e0Schristos 	this->fad13 = (this->ipha->ipha_src & 0x0000ff00) >> 8;
219*e137d3e0Schristos 	this->fad12 = (this->ipha->ipha_src & 0x000000ff);
220*e137d3e0Schristos 	this->lad15 = (this->ipha->ipha_dst & 0xff000000) >> 24;
221*e137d3e0Schristos 	this->lad14 = (this->ipha->ipha_dst & 0x00ff0000) >> 16;
222*e137d3e0Schristos 	this->lad13 = (this->ipha->ipha_dst & 0x0000ff00) >> 8;
223*e137d3e0Schristos 	this->lad12 = (this->ipha->ipha_dst & 0x000000ff);
224*e137d3e0Schristos 
225*e137d3e0Schristos 	/* stringify addresses */
226*e137d3e0Schristos 	self->faddr = strjoin(lltostr(this->fad12), ".");
227*e137d3e0Schristos 	self->faddr = strjoin(self->faddr, strjoin(lltostr(this->fad13), "."));
228*e137d3e0Schristos 	self->faddr = strjoin(self->faddr, strjoin(lltostr(this->fad14), "."));
229*e137d3e0Schristos 	self->faddr = strjoin(self->faddr, lltostr(this->fad15 + 0));
230*e137d3e0Schristos 	self->laddr = strjoin(lltostr(this->lad12), ".");
231*e137d3e0Schristos 	self->laddr = strjoin(self->laddr, strjoin(lltostr(this->lad13), "."));
232*e137d3e0Schristos 	self->laddr = strjoin(self->laddr, strjoin(lltostr(this->lad14), "."));
233*e137d3e0Schristos 	self->laddr = strjoin(self->laddr, lltostr(this->lad15 + 0));
234*e137d3e0Schristos 
235*e137d3e0Schristos 	self->reset = 1;
236*e137d3e0Schristos }
237*e137d3e0Schristos 
238*e137d3e0Schristos /*
239*e137d3e0Schristos  * TCP Fetch "port closed" ports
240*e137d3e0Schristos  */
241*e137d3e0Schristos fbt:ip:tcp_xchg:entry
242*e137d3e0Schristos /self->reset/
243*e137d3e0Schristos {
244*e137d3e0Schristos #if defined(_BIG_ENDIAN)
245*e137d3e0Schristos 	self->lport = (uint16_t)arg0;
246*e137d3e0Schristos 	self->fport = (uint16_t)arg1;
247*e137d3e0Schristos #else
248*e137d3e0Schristos 	self->lport = BSWAP_16((uint16_t)arg0);
249*e137d3e0Schristos 	self->fport = BSWAP_16((uint16_t)arg1);
250*e137d3e0Schristos #endif
251*e137d3e0Schristos 	self->lport = BE16_TO_U16(arg0);
252*e137d3e0Schristos 	self->fport = BE16_TO_U16(arg1);
253*e137d3e0Schristos }
254*e137d3e0Schristos 
255*e137d3e0Schristos /*
256*e137d3e0Schristos  * TCP Print "port closed"
257*e137d3e0Schristos  */
258*e137d3e0Schristos fbt:ip:tcp_xmit_early_reset:return
259*e137d3e0Schristos {
260*e137d3e0Schristos 	self->name = "<closed>";
261*e137d3e0Schristos 	self->pid = 0;
262*e137d3e0Schristos 	self->uid = 0;
263*e137d3e0Schristos 	self->size = 54;	/* should check trailers */
264*e137d3e0Schristos 	self->dir = "<-";
265*e137d3e0Schristos 	printf("%5d %6d %-15s %5d %2s %-15s %5d %5d %s\n",
266*e137d3e0Schristos 	    self->uid, self->pid, self->laddr, self->lport, self->dir,
267*e137d3e0Schristos 	    self->faddr, self->fport, self->size, self->name);
268*e137d3e0Schristos 	self->dir = "->";
269*e137d3e0Schristos 	printf("%5d %6d %-15s %5d %2s %-15s %5d %5d %s\n",
270*e137d3e0Schristos 	    self->uid, self->pid, self->laddr, self->lport, self->dir,
271*e137d3e0Schristos 	    self->faddr, self->fport, self->size, self->name);
272*e137d3e0Schristos 	self->reset = 0;
273*e137d3e0Schristos 	self->size = 0;
274*e137d3e0Schristos 	self->name = 0;
275*e137d3e0Schristos }
276*e137d3e0Schristos 
277*e137d3e0Schristos /*
278*e137d3e0Schristos  * TCP Process Write
279*e137d3e0Schristos  */
280*e137d3e0Schristos fbt:ip:tcp_send_data:entry
281*e137d3e0Schristos {
282*e137d3e0Schristos 	self->conn_p = (conn_t *)args[0]->tcp_connp;
283*e137d3e0Schristos }
284*e137d3e0Schristos 
285*e137d3e0Schristos fbt:ip:tcp_send_data:entry
286*e137d3e0Schristos /tok[(int)self->conn_p]/
287*e137d3e0Schristos {
288*e137d3e0Schristos 	self->dir = "->";
289*e137d3e0Schristos 	self->size = msgdsize(args[2]) + 14;	/* should check trailers */
290*e137d3e0Schristos 	self->uid = tuid[(int)self->conn_p];
291*e137d3e0Schristos 	self->laddr = tladdr[(int)self->conn_p];
292*e137d3e0Schristos 	self->faddr = tfaddr[(int)self->conn_p];
293*e137d3e0Schristos 	self->lport = tlport[(int)self->conn_p];
294*e137d3e0Schristos 	self->fport = tfport[(int)self->conn_p];
295*e137d3e0Schristos 	self->ok = 2;
296*e137d3e0Schristos 
297*e137d3e0Schristos 	/* follow inetd -> in.* transitions */
298*e137d3e0Schristos 	self->name = pid && (tname[(int)self->conn_p] == "inetd") ?
299*e137d3e0Schristos 	    execname : tname[(int)self->conn_p];
300*e137d3e0Schristos 	self->pid = pid && (tname[(int)self->conn_p] == "inetd") ?
301*e137d3e0Schristos 	    pid : tpid[(int)self->conn_p];
302*e137d3e0Schristos 	tname[(int)self->conn_p] = self->name;
303*e137d3e0Schristos 	tpid[(int)self->conn_p] = self->pid;
304*e137d3e0Schristos }
305*e137d3e0Schristos 
306*e137d3e0Schristos /*
307*e137d3e0Schristos  * TCP Process Read
308*e137d3e0Schristos  */
309*e137d3e0Schristos fbt:ip:tcp_rput_data:entry
310*e137d3e0Schristos {
311*e137d3e0Schristos 	self->conn_p = (conn_t *)arg0;
312*e137d3e0Schristos 	self->size = msgdsize(args[1]) + 14;	/* should check trailers */
313*e137d3e0Schristos }
314*e137d3e0Schristos 
315*e137d3e0Schristos fbt:ip:tcp_rput_data:entry
316*e137d3e0Schristos /tok[(int)self->conn_p]/
317*e137d3e0Schristos {
318*e137d3e0Schristos 	self->dir = "<-";
319*e137d3e0Schristos 	self->uid = tuid[(int)self->conn_p];
320*e137d3e0Schristos 	self->laddr = tladdr[(int)self->conn_p];
321*e137d3e0Schristos 	self->faddr = tfaddr[(int)self->conn_p];
322*e137d3e0Schristos 	self->lport = tlport[(int)self->conn_p];
323*e137d3e0Schristos 	self->fport = tfport[(int)self->conn_p];
324*e137d3e0Schristos 	self->ok = 2;
325*e137d3e0Schristos 
326*e137d3e0Schristos 	/* follow inetd -> in.* transitions */
327*e137d3e0Schristos 	self->name = pid && (tname[(int)self->conn_p] == "inetd") ?
328*e137d3e0Schristos 	    execname : tname[(int)self->conn_p];
329*e137d3e0Schristos 	self->pid = pid && (tname[(int)self->conn_p] == "inetd") ?
330*e137d3e0Schristos 	    pid : tpid[(int)self->conn_p];
331*e137d3e0Schristos 	tname[(int)self->conn_p] = self->name;
332*e137d3e0Schristos 	tpid[(int)self->conn_p] = self->pid;
333*e137d3e0Schristos }
334*e137d3e0Schristos 
335*e137d3e0Schristos /*
336*e137d3e0Schristos  * TCP Complete printing outbound handshake
337*e137d3e0Schristos  */
338*e137d3e0Schristos fbt:ip:tcp_connect:return
339*e137d3e0Schristos /self->connp/
340*e137d3e0Schristos {
341*e137d3e0Schristos 	self->name = tname[(int)self->connp];
342*e137d3e0Schristos 	self->pid = tpid[(int)self->connp];
343*e137d3e0Schristos 	self->uid = tuid[(int)self->connp];
344*e137d3e0Schristos 	self->size = 54;	/* should check trailers */
345*e137d3e0Schristos 	self->dir = "->";
346*e137d3e0Schristos 	/* this packet occured before connp was fully established */
347*e137d3e0Schristos 	printf("%5d %6d %-15s %5d %2s %-15s %5d %5d %s\n",
348*e137d3e0Schristos 	    self->uid, self->pid, self->laddr, self->lport, self->dir,
349*e137d3e0Schristos 	    self->faddr, self->fport, self->size, self->name);
350*e137d3e0Schristos }
351*e137d3e0Schristos 
352*e137d3e0Schristos /*
353*e137d3e0Schristos  * TCP Complete printing inbound handshake
354*e137d3e0Schristos  */
355*e137d3e0Schristos fbt:sockfs:sotpi_accept:return
356*e137d3e0Schristos /self->connp/
357*e137d3e0Schristos {
358*e137d3e0Schristos 	self->name = tname[(int)self->connp];
359*e137d3e0Schristos 	self->pid = tpid[(int)self->connp];
360*e137d3e0Schristos 	self->uid = tuid[(int)self->connp];
361*e137d3e0Schristos 	self->size = 54;	/* should check trailers */
362*e137d3e0Schristos 	/* these packets occured before connp was fully established */
363*e137d3e0Schristos 	self->dir = "<-";
364*e137d3e0Schristos 	printf("%5d %6d %-15s %5d %2s %-15s %5d %5d %s\n",
365*e137d3e0Schristos 	    self->uid, self->pid, self->laddr, self->lport, self->dir,
366*e137d3e0Schristos 	    self->faddr, self->fport, self->size, self->name);
367*e137d3e0Schristos 	self->dir = "->";
368*e137d3e0Schristos 	printf("%5d %6d %-15s %5d %2s %-15s %5d %5d %s\n",
369*e137d3e0Schristos 	    self->uid, self->pid, self->laddr, self->lport, self->dir,
370*e137d3e0Schristos 	    self->faddr, self->fport, self->size, self->name);
371*e137d3e0Schristos 	self->dir = "<-";
372*e137d3e0Schristos 	printf("%5d %6d %-15s %5d %2s %-15s %5d %5d %s\n",
373*e137d3e0Schristos 	    self->uid, self->pid, self->laddr, self->lport, self->dir,
374*e137d3e0Schristos 	    self->faddr, self->fport, self->size, self->name);
375*e137d3e0Schristos }
376*e137d3e0Schristos 
377*e137d3e0Schristos /*
378*e137d3e0Schristos  * Print output
379*e137d3e0Schristos  */
380*e137d3e0Schristos fbt:ip:tcp_send_data:entry,
381*e137d3e0Schristos fbt:ip:tcp_rput_data:entry
382*e137d3e0Schristos /self->ok == 2/
383*e137d3e0Schristos {
384*e137d3e0Schristos 	/* print output line */
385*e137d3e0Schristos 	printf("%5d %6d %-15s %5d %2s %-15s %5d %5d %s\n",
386*e137d3e0Schristos 	    self->uid, self->pid, self->laddr, self->lport, self->dir,
387*e137d3e0Schristos 	    self->faddr, self->fport, self->size, self->name);
388*e137d3e0Schristos }
389*e137d3e0Schristos 
390*e137d3e0Schristos /*
391*e137d3e0Schristos  * TCP Clear connect variables
392*e137d3e0Schristos  */
393*e137d3e0Schristos fbt:sockfs:sotpi_accept:return,
394*e137d3e0Schristos fbt:ip:tcp_connect:return
395*e137d3e0Schristos /self->connp/
396*e137d3e0Schristos {
397*e137d3e0Schristos 	self->faddr = 0;
398*e137d3e0Schristos 	self->laddr = 0;
399*e137d3e0Schristos 	self->fport = 0;
400*e137d3e0Schristos 	self->lport = 0;
401*e137d3e0Schristos 	self->connp = 0;
402*e137d3e0Schristos 	self->name = 0;
403*e137d3e0Schristos 	self->pid = 0;
404*e137d3e0Schristos 	self->uid = 0;
405*e137d3e0Schristos }
406*e137d3e0Schristos 
407*e137d3e0Schristos /*
408*e137d3e0Schristos  * TCP Clear r/w variables
409*e137d3e0Schristos  */
410*e137d3e0Schristos fbt:ip:tcp_send_data:entry,
411*e137d3e0Schristos fbt:ip:tcp_rput_data:entry
412*e137d3e0Schristos {
413*e137d3e0Schristos 	self->ok = 0;
414*e137d3e0Schristos 	self->dir = 0;
415*e137d3e0Schristos 	self->uid = 0;
416*e137d3e0Schristos 	self->pid = 0;
417*e137d3e0Schristos 	self->size = 0;
418*e137d3e0Schristos 	self->name = 0;
419*e137d3e0Schristos 	self->lport = 0;
420*e137d3e0Schristos 	self->fport = 0;
421*e137d3e0Schristos 	self->laddr = 0;
422*e137d3e0Schristos 	self->faddr = 0;
423*e137d3e0Schristos 	self->conn_p = 0;
424*e137d3e0Schristos }
425