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 library ip.d 25 #pragma D depends_on module kernel 26 #pragma D depends_on module siftr 27 #pragma D depends_on provider tcp 28 29 /* 30 * Convert a SIFTR direction value to a string 31 */ 32 #pragma D binding "1.12.1" SIFTR_IN 33 inline int SIFTR_IN = 0; 34 #pragma D binding "1.12.1" SIFTR_OUT 35 inline int SIFTR_OUT = 1; 36 37 /* SIFTR direction strings. */ 38 #pragma D binding "1.12.1" siftr_dir_string 39 inline string siftr_dir_string[uint8_t direction] = 40 direction == SIFTR_IN ? "in" : 41 direction == SIFTR_OUT ? "out" : 42 "unknown" ; 43 44 typedef struct siftrinfo { 45 struct timeval tval; 46 uint8_t direction; 47 uint8_t ipver; 48 uint16_t lport; 49 uint16_t rport; 50 string laddr; 51 string raddr; 52 uint32_t snd_cwnd; 53 uint32_t snd_wnd; 54 uint32_t rcv_wnd; 55 uint32_t t_flags2; 56 uint32_t snd_ssthresh; 57 int conn_state; 58 uint32_t mss; 59 uint32_t srtt; 60 u_char sack_enabled; 61 u_char snd_scale; 62 u_char rcv_scale; 63 u_int t_flags; 64 uint32_t rto; 65 u_int snd_buf_hiwater; 66 u_int snd_buf_cc; 67 u_int rcv_buf_hiwater; 68 u_int rcv_buf_cc; 69 u_int sent_inflight_bytes; 70 int t_segqlen; 71 u_int flowid; 72 u_int flowtype; 73 } siftrinfo_t; 74 75 #pragma D binding "1.12.1" translator 76 translator siftrinfo_t < struct pkt_node *p > { 77 direction = p == NULL ? 0 : p->direction; 78 ipver = p == NULL ? 0 : p->ipver; 79 lport = p == NULL ? 0 : ntohs(p->lport); 80 rport = p == NULL ? 0 : ntohs(p->fport); 81 laddr = p == NULL ? "<unknown>" : 82 p->ipver == INP_IPV4 ? 83 inet_ntoa(&p->laddr.id46_addr.ia46_addr4.s_addr) : 84 inet_ntoa6(&p->laddr.id6_addr); 85 raddr = p == NULL ? "<unknown>" : 86 p->ipver == INP_IPV4 ? 87 inet_ntoa(&p->faddr.id46_addr.ia46_addr4.s_addr) : 88 inet_ntoa6(&p->faddr.id6_addr); 89 snd_cwnd = p == NULL ? 0 : p->snd_cwnd; 90 snd_wnd = p == NULL ? 0 : p->snd_wnd; 91 rcv_wnd = p == NULL ? 0 : p->rcv_wnd; 92 t_flags2 = p == NULL ? 0 : p->t_flags2; 93 snd_ssthresh = p == NULL ? 0 : p->snd_ssthresh; 94 conn_state = p == NULL ? 0 : p->conn_state; 95 mss = p == NULL ? 0 : p->mss; 96 srtt = p == NULL ? 0 : p->srtt; 97 sack_enabled = p == NULL ? 0 : p->sack_enabled; 98 snd_scale = p == NULL ? 0 : p->snd_scale; 99 rcv_scale = p == NULL ? 0 : p->rcv_scale; 100 t_flags = p == NULL ? 0 : p->t_flags; 101 rto = p == NULL ? 0 : p->rto; 102 snd_buf_hiwater = p == NULL ? 0 : p->snd_buf_hiwater; 103 snd_buf_cc = p == NULL ? 0 : p->snd_buf_cc; 104 rcv_buf_hiwater = p == NULL ? 0 : p->rcv_buf_hiwater; 105 rcv_buf_cc = p == NULL ? 0 : p->rcv_buf_cc; 106 sent_inflight_bytes = p == NULL ? 0 : p->sent_inflight_bytes; 107 t_segqlen = p == NULL ? 0 : p->t_segqlen; 108 flowid = p == NULL ? 0 : p->flowid; 109 flowtype = p == NULL ? 0 : p->flowtype; 110 }; 111