tcp.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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. #include <linux/types.h>
  20. #include <asm/byteorder.h>
  21. struct tcphdr {
  22. __u16 source;
  23. __u16 dest;
  24. __u32 seq;
  25. __u32 ack_seq;
  26. #if defined(__LITTLE_ENDIAN_BITFIELD)
  27. __u16 res1:4,
  28. doff:4,
  29. fin:1,
  30. syn:1,
  31. rst:1,
  32. psh:1,
  33. ack:1,
  34. urg:1,
  35. ece:1,
  36. cwr:1;
  37. #elif defined(__BIG_ENDIAN_BITFIELD)
  38. __u16 doff:4,
  39. res1:4,
  40. cwr:1,
  41. ece:1,
  42. urg:1,
  43. ack:1,
  44. psh:1,
  45. rst:1,
  46. syn:1,
  47. fin:1;
  48. #else
  49. #error "Adjust your <asm/byteorder.h> defines"
  50. #endif
  51. __u16 window;
  52. __u16 check;
  53. __u16 urg_ptr;
  54. };
  55. enum {
  56.   TCP_ESTABLISHED = 1,
  57.   TCP_SYN_SENT,
  58.   TCP_SYN_RECV,
  59.   TCP_FIN_WAIT1,
  60.   TCP_FIN_WAIT2,
  61.   TCP_TIME_WAIT,
  62.   TCP_CLOSE,
  63.   TCP_CLOSE_WAIT,
  64.   TCP_LAST_ACK,
  65.   TCP_LISTEN,
  66.   TCP_CLOSING,  /* now a valid state */
  67.   TCP_MAX_STATES /* Leave at the end! */
  68. };
  69. #define TCP_STATE_MASK 0xF
  70. #define TCP_ACTION_FIN (1 << 7)
  71. enum {
  72.   TCPF_ESTABLISHED = (1 << 1),
  73.   TCPF_SYN_SENT  = (1 << 2),
  74.   TCPF_SYN_RECV  = (1 << 3),
  75.   TCPF_FIN_WAIT1 = (1 << 4),
  76.   TCPF_FIN_WAIT2 = (1 << 5),
  77.   TCPF_TIME_WAIT = (1 << 6),
  78.   TCPF_CLOSE     = (1 << 7),
  79.   TCPF_CLOSE_WAIT = (1 << 8),
  80.   TCPF_LAST_ACK  = (1 << 9),
  81.   TCPF_LISTEN    = (1 << 10),
  82.   TCPF_CLOSING   = (1 << 11) 
  83. };
  84. /*
  85.  * The union cast uses a gcc extension to avoid aliasing problems
  86.  *  (union is compatible to any of its members)
  87.  *  This means this part of the code is -fstrict-aliasing safe now.
  88.  */
  89. union tcp_word_hdr { 
  90. struct tcphdr hdr;
  91. __u32    words[5];
  92. }; 
  93. #define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) 
  94. enum { 
  95. TCP_FLAG_CWR = __constant_htonl(0x00800000), 
  96. TCP_FLAG_ECE = __constant_htonl(0x00400000), 
  97. TCP_FLAG_URG = __constant_htonl(0x00200000), 
  98. TCP_FLAG_ACK = __constant_htonl(0x00100000), 
  99. TCP_FLAG_PSH = __constant_htonl(0x00080000), 
  100. TCP_FLAG_RST = __constant_htonl(0x00040000), 
  101. TCP_FLAG_SYN = __constant_htonl(0x00020000), 
  102. TCP_FLAG_FIN = __constant_htonl(0x00010000),
  103. TCP_RESERVED_BITS = __constant_htonl(0x0F000000),
  104. TCP_DATA_OFFSET = __constant_htonl(0xF0000000)
  105. }; 
  106. /* TCP socket options */
  107. #define TCP_NODELAY 1 /* Turn off Nagle's algorithm. */
  108. #define TCP_MAXSEG 2 /* Limit MSS */
  109. #define TCP_CORK 3 /* Never send partially complete segments */
  110. #define TCP_KEEPIDLE 4 /* Start keeplives after this period */
  111. #define TCP_KEEPINTVL 5 /* Interval between keepalives */
  112. #define TCP_KEEPCNT 6 /* Number of keepalives before death */
  113. #define TCP_SYNCNT 7 /* Number of SYN retransmits */
  114. #define TCP_LINGER2 8 /* Life time of orphaned FIN-WAIT-2 state */
  115. #define TCP_DEFER_ACCEPT 9 /* Wake up listener only when data arrive */
  116. #define TCP_WINDOW_CLAMP 10 /* Bound advertised window */
  117. #define TCP_INFO 11 /* Information about this connection. */
  118. #define TCP_QUICKACK 12 /* Block/reenable quick acks */
  119. #define TCPI_OPT_TIMESTAMPS 1
  120. #define TCPI_OPT_SACK 2
  121. #define TCPI_OPT_WSCALE 4
  122. #define TCPI_OPT_ECN 8
  123. enum tcp_ca_state
  124. {
  125. TCP_CA_Open = 0,
  126. #define TCPF_CA_Open (1<<TCP_CA_Open)
  127. TCP_CA_Disorder = 1,
  128. #define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
  129. TCP_CA_CWR = 2,
  130. #define TCPF_CA_CWR (1<<TCP_CA_CWR)
  131. TCP_CA_Recovery = 3,
  132. #define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
  133. TCP_CA_Loss = 4
  134. #define TCPF_CA_Loss (1<<TCP_CA_Loss)
  135. };
  136. struct tcp_info
  137. {
  138. __u8 tcpi_state;
  139. __u8 tcpi_ca_state;
  140. __u8 tcpi_retransmits;
  141. __u8 tcpi_probes;
  142. __u8 tcpi_backoff;
  143. __u8 tcpi_options;
  144. __u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
  145. __u32 tcpi_rto;
  146. __u32 tcpi_ato;
  147. __u32 tcpi_snd_mss;
  148. __u32 tcpi_rcv_mss;
  149. __u32 tcpi_unacked;
  150. __u32 tcpi_sacked;
  151. __u32 tcpi_lost;
  152. __u32 tcpi_retrans;
  153. __u32 tcpi_fackets;
  154. /* Times. */
  155. __u32 tcpi_last_data_sent;
  156. __u32 tcpi_last_ack_sent;     /* Not remembered, sorry. */
  157. __u32 tcpi_last_data_recv;
  158. __u32 tcpi_last_ack_recv;
  159. /* Metrics. */
  160. __u32 tcpi_pmtu;
  161. __u32 tcpi_rcv_ssthresh;
  162. __u32 tcpi_rtt;
  163. __u32 tcpi_rttvar;
  164. __u32 tcpi_snd_ssthresh;
  165. __u32 tcpi_snd_cwnd;
  166. __u32 tcpi_advmss;
  167. __u32 tcpi_reordering;
  168. };
  169. #endif /* _LINUX_TCP_H */