fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * CDDL HEADER START
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * The contents of this file are subject to the terms of the
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * Common Development and Distribution License (the "License").
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * You may not use this file except in compliance with the License.
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * or http://www.opensolaris.org/os/licensing.
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * See the License for the specific language governing permissions
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * and limitations under the License.
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * When distributing Covered Code, include this CDDL HEADER in each
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * If applicable, add the following below this CDDL HEADER, with the
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * fields enclosed by brackets "[]" replaced with your own identifying
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * information: Portions Copyright [yyyy] [name of copyright owner]
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * CDDL HEADER END
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * Use is subject to license terms.
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (printf("\n%-25s %-6s %-25s %-6s %-10s %-10s %8s %8s\n", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna "LADDR", "LPORT", "RADDR", "RPORT", "ISS", "IRS", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (printf("%-20s %-20s %-3s %15s %15s %8s %8s %5s\n", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna "PROBENAME", "TIME", "S/R", "SEQ", "ACK", "DATALEN", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (printf("%-25s %-6d %-25s %-6d %-10d %-10d %8d %8d\n", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna laddr[self->conn_id], lport[self->conn_id], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna faddr[self->conn_id], fport[self->conn_id], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna send_count[self->conn_id], recv_count[self->conn_id]))
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_MAIN_HEADER(); PRINT_MAIN_HEADER_VALUES(); \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (printf("%-20s %-20Y %-3s %15d %15d %8d %8d %2x\n", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* extract connection details */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->mp = (this->mp->b_datap->db_type == M_CTL?
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->connp = (conn_t *)self->tcpp->tcp_connp;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (int)(((ipha_t *)self->iph)->ipha_version_and_hdr_length
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->tcph = (tcpha_t *)((char *)self->iph + this->iph_length);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (((tcph_t *)self->tcph)->th_offset_and_rsrvd[0] >>2) &(0xF << 2);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i_lport = ntohs(this->connp->u_port.tcpu_ports.tcpu_lport);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i_fport = ntohs(this->connp->u_port.tcpu_ports.tcpu_fport);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* IP addresses */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->i_fad = (in6_addr_t *)&this->connp->connua_v6addr.connua_faddr;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->i_lad = (in6_addr_t *)&this->connp->connua_v6addr.connua_laddr;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* the address would either be IPv6 or IPv4-mapped-IPv6 */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i_faddr = inet_ntop(AF_INET6, (void *)this->i_fad);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i_laddr = inet_ntop(AF_INET6, (void *)this->i_lad);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* create connection identifier, so we can track packets by conn */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->conn_id = (uint64_t)self->tcpp->tcp_connp;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* initialize counters - this is the first packet for this connection */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* connection info */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* counters, to keep track of how much info to dump */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna rollover[self->conn_id] |= pcount[self->conn_id]/MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna pcount[self->conn_id] = pcount[self->conn_id]%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id] = (rollover[self->conn_id]?
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna conn_time[self->conn_id, self->pcount] = walltimestamp;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* tcp state info */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna seqno[self->conn_id, self->pcount] = ntohl(self->tcph->tha_seq);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna ack[self->conn_id, self->pcount] = ntohl(self->tcph->tha_ack);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna datalen[self->conn_id, self->pcount] = ntohs(self->iph->ipha_length);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna wnd[self->conn_id, self->pcount] = ntohs(self->tcph->tha_win);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna probe_name[self->conn_id, self->pcount] = probename;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* flag 0x04 indicates a RST packet */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna flags[self->conn_id, self->pcount] = self->tcph->tha_flags;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna send_recv[self->conn_id, self->pcount] = "S";
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna send_recv[self->conn_id, self->pcount] = "R";
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (end_ptr[self->conn_id] + MAX_RECORDS - num[self->conn_id]
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 10)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 9)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 8)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 7)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 6)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 5)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 4)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 3)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 2)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 1)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* clear old connection state */