1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 *
21 * $FreeBSD$
22 */
23
24#pragma D depends_on module kernel
25#pragma D depends_on module siftr
26#pragma D depends_on provider tcp
27
28/*
29 * Convert a SIFTR direction value to a string
30 */
31#pragma D binding "1.12.1" SIFTR_IN
32inline int SIFTR_IN =	1;
33#pragma D binding "1.12.1" SIFTR_OUT
34inline int SIFTR_OUT =	2;
35
36/* SIFTR direction strings. */
37#pragma D binding "1.12.1" siftr_dir_string
38inline string siftr_dir_string[uint8_t direction] =
39	direction == SIFTR_IN ?	"in" :
40	direction == SIFTR_OUT ? "out" :
41	"unknown" ;
42
43typedef struct siftrinfo {
44	struct timeval		tval;
45	uint8_t			direction;
46	uint8_t			ipver;
47	uint32_t		hash;
48	uint16_t		tcp_localport;
49	uint16_t		tcp_foreignport;
50	uint64_t		snd_cwnd;
51	u_long			snd_wnd;
52	u_long			rcv_wnd;
53	u_long			snd_bwnd;
54	u_long			snd_ssthresh;
55	int			conn_state;
56	u_int			max_seg_size;
57	int			smoothed_rtt;
58	u_char			sack_enabled;
59	u_char			snd_scale;
60	u_char			rcv_scale;
61	u_int			flags;
62	int			rxt_length;
63	u_int			snd_buf_hiwater;
64	u_int			snd_buf_cc;
65	u_int			rcv_buf_hiwater;
66	u_int			rcv_buf_cc;
67	u_int			sent_inflight_bytes;
68	int			t_segqlen;
69	u_int			flowid;
70	u_int			flowtype;
71} siftrinfo_t;
72
73#pragma D binding "1.12.1" translator
74translator siftrinfo_t < struct pkt_node *p > {
75	direction = 		p == NULL ? 0 : p->direction;
76	ipver =			p == NULL ? 0 : p->ipver;
77	hash = 			p == NULL ? 0 : p->hash;
78	tcp_localport =		p == NULL ? 0 : ntohs(p->tcp_localport);
79	tcp_foreignport =	p == NULL ? 0 : ntohs(p->tcp_foreignport);
80	snd_cwnd =		p == NULL ? 0 : p->snd_cwnd;
81	snd_wnd =		p == NULL ? 0 : p->snd_wnd;
82	rcv_wnd =		p == NULL ? 0 : p->rcv_wnd;
83	snd_bwnd =		p == NULL ? 0 : p->snd_bwnd;
84	snd_ssthresh =		p == NULL ? 0 : p->snd_ssthresh;
85	conn_state =		p == NULL ? 0 : p->conn_state;
86	max_seg_size = 		p == NULL ? 0 : p->max_seg_size;
87	smoothed_rtt =		p == NULL ? 0 : p->smoothed_rtt;
88	sack_enabled = 		p == NULL ? 0 : p->sack_enabled;
89	snd_scale =		p == NULL ? 0 : p->snd_scale;
90	rcv_scale =		p == NULL ? 0 : p->rcv_scale;
91	flags =			p == NULL ? 0 : p->flags;
92	rxt_length = 		p == NULL ? 0 : p->rxt_length;
93	snd_buf_hiwater =	p == NULL ? 0 : p->snd_buf_hiwater;
94	snd_buf_cc = 		p == NULL ? 0 : p->snd_buf_cc;
95	rcv_buf_hiwater = 	p == NULL ? 0 : p->rcv_buf_hiwater;
96	rcv_buf_cc = 		p == NULL ? 0 : p->rcv_buf_cc;
97	sent_inflight_bytes = 	p == NULL ? 0 : p->sent_inflight_bytes;
98	t_segqlen =		p == NULL ? 0 : p->t_segqlen;
99	flowid = 		p == NULL ? 0 : p->flowid;
100	flowtype = 		p == NULL ? 0 : p->flowtype;
101};
102