/* $NetBSD: tcp.h,v 1.37 2021/02/03 18:13:13 roy Exp $ */
/*
* Copyright (c) 1982, 1986, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)tcp.h 8.1 (Berkeley) 6/10/93
*/
/*
* The TCP_INFO socket option comes from the Linux 2.6 TCP API, and permits
* the caller to query certain information about the state of a TCP
* connection. We provide an overlapping set of fields with the Linux
* implementation, but since this is a fixed size structure, room has been
* left for growth. In order to maximize potential future compatibility with
* the Linux API, the same variable names and order have been adopted, and
* padding left to make room for omitted fields in case they are added later.
*
* XXX: This is currently an unstable ABI/API, in that it is expected to
* change.
*/
struct tcp_info {
uint8_t tcpi_state; /* TCP FSM state. */
uint8_t __tcpi_ca_state;
uint8_t __tcpi_retransmits;
uint8_t __tcpi_probes;
uint8_t __tcpi_backoff;
uint8_t tcpi_options; /* Options enabled on conn. */
/*LINTED: non-portable bitfield*/
uint8_t tcpi_snd_wscale:4, /* RFC1323 send shift value. */
/*LINTED: non-portable bitfield*/
tcpi_rcv_wscale:4; /* RFC1323 recv shift value. */
uint32_t tcpi_rto; /* Retransmission timeout (usec). */
uint32_t __tcpi_ato;
uint32_t tcpi_snd_mss; /* Max segment size for send. */
uint32_t tcpi_rcv_mss; /* Max segment size for receive. */
/* Times; measurements in usecs. */
uint32_t __tcpi_last_data_sent;
uint32_t __tcpi_last_ack_sent; /* Also unimpl. on Linux? */
uint32_t tcpi_last_data_recv; /* Time since last recv data. */
uint32_t __tcpi_last_ack_recv;