home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / KERNEL-S / V1.0 / LINUX-1.0 / LINUX-1 / linux / net / inet / tcp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-02  |  4.0 KB  |  133 lines

  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 module.
  7.  *
  8.  * Version:    @(#)tcp.h    1.0.5    05/23/93
  9.  *
  10.  * Authors:    Ross Biro, <bir7@leland.Stanford.Edu>
  11.  *        Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  12.  *
  13.  *        This program is free software; you can redistribute it and/or
  14.  *        modify it under the terms of the GNU General Public License
  15.  *        as published by the Free Software Foundation; either version
  16.  *        2 of the License, or (at your option) any later version.
  17.  */
  18. #ifndef _TCP_H
  19. #define _TCP_H
  20.  
  21. #include <linux/tcp.h>
  22.  
  23. #define MAX_SYN_SIZE    44 + sizeof (struct sk_buff) + MAX_HEADER
  24. #define MAX_FIN_SIZE    40 + sizeof (struct sk_buff) + MAX_HEADER
  25. #define MAX_ACK_SIZE    40 + sizeof (struct sk_buff) + MAX_HEADER
  26. #define MAX_RESET_SIZE    40 + sizeof (struct sk_buff) + MAX_HEADER
  27. #define MAX_WINDOW    4096
  28. #define MIN_WINDOW    2048
  29. #define MAX_ACK_BACKLOG    2
  30. #define MIN_WRITE_SPACE    2048
  31. #define TCP_WINDOW_DIFF    2048
  32.  
  33. /* urg_data states */
  34. #define URG_VALID    0x0100
  35. #define URG_NOTYET    0x0200
  36. #define URG_READ    0x0400
  37.  
  38. #define TCP_RETR1    7    /*
  39.                  * This is howmany retries it does before it
  40.                  * tries to figure out if the gateway is
  41.                  * down.
  42.                  */
  43.  
  44. #define TCP_RETR2    15    /*
  45.                  * This should take at least
  46.                  * 90 minutes to time out.
  47.                  */
  48.  
  49. #define TCP_TIMEOUT_LEN    (15*60*HZ) /* should be about 15 mins        */
  50. #define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to sucessfully 
  51.                   * close the socket, about 60 seconds    */
  52. #define TCP_ACK_TIME    3000    /* time to delay before sending an ACK    */
  53. #define TCP_DONE_TIME    250    /* maximum time to wait before actually
  54.                  * destroying a socket            */
  55. #define TCP_WRITE_TIME    3000    /* initial time to wait for an ACK,
  56.                      * after last transmit            */
  57. #define TCP_CONNECT_TIME 2000    /* time to retransmit first SYN        */
  58. #define TCP_SYN_RETRIES    5    /* number of times to retry openning a
  59.                  * connection                 */
  60. #define TCP_PROBEWAIT_LEN 100    /* time to wait between probes when
  61.                  * I've got something to write and
  62.                  * there is no window            */
  63.  
  64. #define TCP_NO_CHECK    0    /* turn to one if you want the default
  65.                  * to be no checksum            */
  66.  
  67. #define TCP_WRITE_QUEUE_MAGIC 0xa5f23477
  68.  
  69. /*
  70.  *    TCP option
  71.  */
  72.  
  73. #define TCPOPT_NOP        1
  74. #define TCPOPT_EOL        0
  75. #define TCPOPT_MSS        2
  76.  
  77. /*
  78.  * The next routines deal with comparing 32 bit unsigned ints
  79.  * and worry about wraparound (automatic with unsigned arithmetic).
  80.  */
  81. static inline int before(unsigned long seq1, unsigned long seq2)
  82. {
  83.         return (long)(seq1-seq2) < 0;
  84. }
  85.  
  86. static inline int after(unsigned long seq1, unsigned long seq2)
  87. {
  88.     return (long)(seq1-seq2) > 0;
  89. }
  90.  
  91.  
  92. /* is s2<=s1<=s3 ? */
  93. static inline int between(unsigned long seq1, unsigned long seq2, unsigned long seq3)
  94. {
  95.     return (after(seq1+1, seq2) && before(seq1, seq3+1));
  96. }
  97.  
  98.  
  99. /*
  100.  * List all states of a TCP socket that can be viewed as a "connected"
  101.  * state.  This now includes TCP_SYN_RECV, although I am not yet fully
  102.  * convinced that this is the solution for the 'getpeername(2)'
  103.  * problem. Thanks to Stephen A. Wood <saw@cebaf.gov>  -FvK
  104.  */
  105. static inline const int
  106. tcp_connected(const int state)
  107. {
  108.   return(state == TCP_ESTABLISHED || state == TCP_CLOSE_WAIT ||
  109.      state == TCP_FIN_WAIT1   || state == TCP_FIN_WAIT2 ||
  110.      state == TCP_SYN_RECV);
  111. }
  112.  
  113.  
  114. extern struct proto tcp_prot;
  115.  
  116.  
  117. extern void    tcp_err(int err, unsigned char *header, unsigned long daddr,
  118.             unsigned long saddr, struct inet_protocol *protocol);
  119. extern void    tcp_shutdown (struct sock *sk, int how);
  120. extern int    tcp_rcv(struct sk_buff *skb, struct device *dev,
  121.             struct options *opt, unsigned long daddr,
  122.             unsigned short len, unsigned long saddr, int redo,
  123.             struct inet_protocol *protocol);
  124.  
  125. extern int    tcp_ioctl(struct sock *sk, int cmd, unsigned long arg);
  126.  
  127. extern void tcp_send_probe0(struct sock *sk);
  128. extern void tcp_enqueue_partial(struct sk_buff *, struct sock *);
  129. extern struct sk_buff * tcp_dequeue_partial(struct sock *);
  130.  
  131.  
  132. #endif    /* _TCP_H */
  133.