fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#!/usr/sbin/dtrace -Cqs
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * CDDL HEADER START
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna *
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 *
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 *
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 *
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * CDDL HEADER END
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna * Use is subject to license terms.
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#pragma D option dynvarsize=64m
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#define TH_RST 0x04
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#define MAX_RECORDS 10
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#define M_CTL 0x0d
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#define PRINT_MAIN_HEADER() \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (printf("\n%-25s %-6s %-25s %-6s %-10s %-10s %8s %8s\n", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna "LADDR", "LPORT", "RADDR", "RPORT", "ISS", "IRS", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna "SND_CNT", "RCV_CNT"))
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#define PRINT_RECORD_HEADER() \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (printf("%-20s %-20s %-3s %15s %15s %8s %8s %5s\n", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna "PROBENAME", "TIME", "S/R", "SEQ", "ACK", "DATALEN", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna "WND", "FLAGS"))
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#define PRINT_MAIN_HEADER_VALUES() \
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 iss[self->conn_id], irs[self->conn_id], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna send_count[self->conn_id], recv_count[self->conn_id]))
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#define PRINT_HEADER() \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_MAIN_HEADER(); PRINT_MAIN_HEADER_VALUES(); \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD_HEADER()
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna#define PRINT_RECORD(i) \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (printf("%-20s %-20Y %-3s %15d %15d %8d %8d %2x\n", \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna probe_name[self->conn_id, i], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna conn_time[self->conn_id, i], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna send_recv[self->conn_id, i], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna seqno[self->conn_id, i], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna ack[self->conn_id, i], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna datalen[self->conn_id, i], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna wnd[self->conn_id, i], \
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna flags[self->conn_id, i]))
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* extract connection details */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->mp = (mblk_t *)arg0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->mp = (this->mp->b_datap->db_type == M_CTL?
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->mp->b_cont : this->mp);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->tcpp = (tcp_t *)arg1;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->connp = (conn_t *)self->tcpp->tcp_connp;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->iph = (ipha_t *)this->mp->b_rptr;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->iph_length =
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (int)(((ipha_t *)self->iph)->ipha_version_and_hdr_length
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna & 0xF) << 2;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->tcph = (tcpha_t *)((char *)self->iph + this->iph_length);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->tcph_length =
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna (((tcph_t *)self->tcph)->th_offset_and_rsrvd[0] >>2) &(0xF << 2);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* ports */
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
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
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
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}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/first[self->conn_id] == 0/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* initialize counters - this is the first packet for this connection */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna pcount[self->conn_id] = -1;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna rollover[self->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna end_ptr[self->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna first[self->conn_id] = 1;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* connection info */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna laddr[self->conn_id] = self->i_laddr;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna faddr[self->conn_id] = self->i_faddr;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna lport[self->conn_id] = self->i_lport;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna fport[self->conn_id] = self->i_fport;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna iss[self->conn_id] = self->tcpp->tcp_iss;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna irs[self->conn_id] = self->tcpp->tcp_irs;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* counters, to keep track of how much info to dump */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna pcount[self->conn_id]++;
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 self->pcount = pcount[self->conn_id];
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna end_ptr[self->conn_id] = self->pcount;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id] = (rollover[self->conn_id]?
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna MAX_RECORDS : pcount[self->conn_id] + 1);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna conn_time[self->conn_id, self->pcount] = walltimestamp;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
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
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* flag 0x04 indicates a RST packet */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna flags[self->conn_id, self->pcount] = self->tcph->tha_flags;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->flags = self->tcph->tha_flags;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-send
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna send_count[self->conn_id]++;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna send_recv[self->conn_id, self->pcount] = "S";
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-recv
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna recv_count[self->conn_id]++;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna send_recv[self->conn_id, self->pcount] = "R";
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_HEADER();
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (end_ptr[self->conn_id] + MAX_RECORDS - num[self->conn_id]
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 10)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 9)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 8)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 7)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 6)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 5)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 4)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 3)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 2)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/(self->flags & TH_RST) && (num[self->conn_id] >= 1)/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna PRINT_RECORD(self->i);
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->i = (self->i + 1)%MAX_RECORDS;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->conn_id]--;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->reset = self->conn_id;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnatcp-trace-*
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna/self->reset/
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna pcount[self->reset] = -1;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna rollover[self->reset] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna end_ptr[self->reset] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[self->reset] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna self->reset = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishnaconn-destroy
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna{
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna /* clear old connection state */
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna this->conn_id = (uint64_t)arg0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna pcount[this->conn_id] = -1;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna rollover[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna end_ptr[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna num[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna first[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna laddr[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna faddr[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna lport[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna fport[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna iss[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna irs[this->conn_id] = 0;
fab254e2b865295c3dd79c791650a3161d99e196Aruna Ramakrishna}