linux-old/include/linux/tcp.h
<<
>>
Prefs
   1/*
   2 * INET         An implementation of the TCP/IP protocol suite for the LINUX
   3 *              operating system.  INET is implemented using the  BSD Socket
   4 *              interface as the means of communication with the user level.
   5 *
   6 *              Definitions for the TCP protocol.
   7 *
   8 * Version:     @(#)tcp.h       1.0.2   04/28/93
   9 *
  10 * Author:      Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  11 *
  12 *              This program is free software; you can redistribute it and/or
  13 *              modify it under the terms of the GNU General Public License
  14 *              as published by the Free Software Foundation; either version
  15 *              2 of the License, or (at your option) any later version.
  16 */
  17#ifndef _LINUX_TCP_H
  18#define _LINUX_TCP_H
  19
  20#include <linux/types.h>
  21#include <asm/byteorder.h>
  22
  23struct tcphdr {
  24        __u16   source;
  25        __u16   dest;
  26        __u32   seq;
  27        __u32   ack_seq;
  28#if defined(__LITTLE_ENDIAN_BITFIELD)
  29        __u16   res1:4,
  30                doff:4,
  31                fin:1,
  32                syn:1,
  33                rst:1,
  34                psh:1,
  35                ack:1,
  36                urg:1,
  37                ece:1,
  38                cwr:1;
  39#elif defined(__BIG_ENDIAN_BITFIELD)
  40        __u16   doff:4,
  41                res1:4,
  42                cwr:1,
  43                ece:1,
  44                urg:1,
  45                ack:1,
  46                psh:1,
  47                rst:1,
  48                syn:1,
  49                fin:1;
  50#else
  51#error  "Adjust your <asm/byteorder.h> defines"
  52#endif  
  53        __u16   window;
  54        __u16   check;
  55        __u16   urg_ptr;
  56};
  57
  58
  59enum {
  60  TCP_ESTABLISHED = 1,
  61  TCP_SYN_SENT,
  62  TCP_SYN_RECV,
  63  TCP_FIN_WAIT1,
  64  TCP_FIN_WAIT2,
  65  TCP_TIME_WAIT,
  66  TCP_CLOSE,
  67  TCP_CLOSE_WAIT,
  68  TCP_LAST_ACK,
  69  TCP_LISTEN,
  70  TCP_CLOSING,   /* now a valid state */
  71
  72  TCP_MAX_STATES /* Leave at the end! */
  73};
  74
  75#define TCP_STATE_MASK  0xF
  76#define TCP_ACTION_FIN  (1 << 7)
  77
  78enum {
  79  TCPF_ESTABLISHED = (1 << 1),
  80  TCPF_SYN_SENT  = (1 << 2),
  81  TCPF_SYN_RECV  = (1 << 3),
  82  TCPF_FIN_WAIT1 = (1 << 4),
  83  TCPF_FIN_WAIT2 = (1 << 5),
  84  TCPF_TIME_WAIT = (1 << 6),
  85  TCPF_CLOSE     = (1 << 7),
  86  TCPF_CLOSE_WAIT = (1 << 8),
  87  TCPF_LAST_ACK  = (1 << 9),
  88  TCPF_LISTEN    = (1 << 10),
  89  TCPF_CLOSING   = (1 << 11) 
  90};
  91
  92/*
  93 *      The union cast uses a gcc extension to avoid aliasing problems
  94 *  (union is compatible to any of its members)
  95 *  This means this part of the code is -fstrict-aliasing safe now.
  96 */
  97union tcp_word_hdr { 
  98        struct tcphdr hdr;
  99        __u32             words[5];
 100}; 
 101
 102#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) 
 103
 104enum { 
 105        TCP_FLAG_CWR = __constant_htonl(0x00800000), 
 106        TCP_FLAG_ECE = __constant_htonl(0x00400000), 
 107        TCP_FLAG_URG = __constant_htonl(0x00200000), 
 108        TCP_FLAG_ACK = __constant_htonl(0x00100000), 
 109        TCP_FLAG_PSH = __constant_htonl(0x00080000), 
 110        TCP_FLAG_RST = __constant_htonl(0x00040000), 
 111        TCP_FLAG_SYN = __constant_htonl(0x00020000), 
 112        TCP_FLAG_FIN = __constant_htonl(0x00010000),
 113        TCP_RESERVED_BITS = __constant_htonl(0x0F000000),
 114        TCP_DATA_OFFSET = __constant_htonl(0xF0000000)
 115}; 
 116
 117/* TCP socket options */
 118#define TCP_NODELAY             1       /* Turn off Nagle's algorithm. */
 119#define TCP_MAXSEG              2       /* Limit MSS */
 120#define TCP_CORK                3       /* Never send partially complete segments */
 121#define TCP_KEEPIDLE            4       /* Start keeplives after this period */
 122#define TCP_KEEPINTVL           5       /* Interval between keepalives */
 123#define TCP_KEEPCNT             6       /* Number of keepalives before death */
 124#define TCP_SYNCNT              7       /* Number of SYN retransmits */
 125#define TCP_LINGER2             8       /* Life time of orphaned FIN-WAIT-2 state */
 126#define TCP_DEFER_ACCEPT        9       /* Wake up listener only when data arrive */
 127#define TCP_WINDOW_CLAMP        10      /* Bound advertised window */
 128#define TCP_INFO                11      /* Information about this connection. */
 129#define TCP_QUICKACK            12      /* Block/reenable quick acks */
 130
 131#define TCPI_OPT_TIMESTAMPS     1
 132#define TCPI_OPT_SACK           2
 133#define TCPI_OPT_WSCALE         4
 134#define TCPI_OPT_ECN            8
 135
 136enum tcp_ca_state
 137{
 138        TCP_CA_Open = 0,
 139#define TCPF_CA_Open    (1<<TCP_CA_Open)
 140        TCP_CA_Disorder = 1,
 141#define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
 142        TCP_CA_CWR = 2,
 143#define TCPF_CA_CWR     (1<<TCP_CA_CWR)
 144        TCP_CA_Recovery = 3,
 145#define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
 146        TCP_CA_Loss = 4
 147#define TCPF_CA_Loss    (1<<TCP_CA_Loss)
 148};
 149
 150struct tcp_info
 151{
 152        __u8    tcpi_state;
 153        __u8    tcpi_ca_state;
 154        __u8    tcpi_retransmits;
 155        __u8    tcpi_probes;
 156        __u8    tcpi_backoff;
 157        __u8    tcpi_options;
 158        __u8    tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
 159
 160        __u32   tcpi_rto;
 161        __u32   tcpi_ato;
 162        __u32   tcpi_snd_mss;
 163        __u32   tcpi_rcv_mss;
 164
 165        __u32   tcpi_unacked;
 166        __u32   tcpi_sacked;
 167        __u32   tcpi_lost;
 168        __u32   tcpi_retrans;
 169        __u32   tcpi_fackets;
 170
 171        /* Times. */
 172        __u32   tcpi_last_data_sent;
 173        __u32   tcpi_last_ack_sent;     /* Not remembered, sorry. */
 174        __u32   tcpi_last_data_recv;
 175        __u32   tcpi_last_ack_recv;
 176
 177        /* Metrics. */
 178        __u32   tcpi_pmtu;
 179        __u32   tcpi_rcv_ssthresh;
 180        __u32   tcpi_rtt;
 181        __u32   tcpi_rttvar;
 182        __u32   tcpi_snd_ssthresh;
 183        __u32   tcpi_snd_cwnd;
 184        __u32   tcpi_advmss;
 185        __u32   tcpi_reordering;
 186};
 187
 188#endif  /* _LINUX_TCP_H */
 189
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.