/[lwip]/lwip/src/include/lwip/tcp.h
ViewVC logotype

Diff of /lwip/src/include/lwip/tcp.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.19 by kieranm, Tue Jun 10 10:45:29 2003 UTC revision 1.20 by likewise, Fri Nov 14 13:17:24 2003 UTC
# Line 53  void             tcp_init    (void);  /* Line 53  void             tcp_init    (void);  /*
53             initialize TCP. */             initialize TCP. */
54  void             tcp_tmr     (void);  /* Must be called every  void             tcp_tmr     (void);  /* Must be called every
55             TCP_TMR_INTERVAL             TCP_TMR_INTERVAL
56             ms. (Typically 100 ms). */             ms. (Typically 250 ms). */
57  /* Application program's interface: */  /* Application program's interface: */
58  struct tcp_pcb * tcp_new     (void);  struct tcp_pcb * tcp_new     (void);
59  struct tcp_pcb * tcp_alloc   (u8_t prio);  struct tcp_pcb * tcp_alloc   (u8_t prio);
# Line 115  void             tcp_rexmit  (struct tcp Line 115  void             tcp_rexmit  (struct tcp
115  #define TCP_SEQ_GT(a,b)     ((s32_t)((a)-(b)) > 0)  #define TCP_SEQ_GT(a,b)     ((s32_t)((a)-(b)) > 0)
116  #define TCP_SEQ_GEQ(a,b)    ((s32_t)((a)-(b)) >= 0)  #define TCP_SEQ_GEQ(a,b)    ((s32_t)((a)-(b)) >= 0)
117    
118  #define TCP_FIN 0x01  #define TCP_FIN 0x01U
119  #define TCP_SYN 0x02  #define TCP_SYN 0x02U
120  #define TCP_RST 0x04  #define TCP_RST 0x04U
121  #define TCP_PSH 0x08  #define TCP_PSH 0x08U
122  #define TCP_ACK 0x10  #define TCP_ACK 0x10U
123  #define TCP_URG 0x20  #define TCP_URG 0x20U
124    #define TCP_ECE 0x40U
125    #define TCP_CWR 0x80U
126    
127  #define TCP_FLAGS 0x3f  #define TCP_FLAGS 0x3fU
128    
129  /* Length of the TCP header, excluding options. */  /* Length of the TCP header, excluding options. */
130  #define TCP_HLEN 20  #define TCP_HLEN 20
131    
132  #ifndef TCP_TMR_INTERVAL  #ifndef TCP_TMR_INTERVAL
133  #define TCP_TMR_INTERVAL       100  /* The TCP timer interval in  #define TCP_TMR_INTERVAL       250  /* The TCP timer interval in
134                                         milliseconds. */                                         milliseconds. */
135  #endif /* TCP_TMR_INTERVAL */  #endif /* TCP_TMR_INTERVAL */
136    
137  #ifndef TCP_FAST_INTERVAL  #ifndef TCP_FAST_INTERVAL
138  #define TCP_FAST_INTERVAL      200  /* the fine grained timeout in  #define TCP_FAST_INTERVAL      TCP_TMR_INTERVAL /* the fine grained timeout in
139                                         milliseconds */                                         milliseconds */
140  #endif /* TCP_FAST_INTERVAL */  #endif /* TCP_FAST_INTERVAL */
141    
142  #ifndef TCP_SLOW_INTERVAL  #ifndef TCP_SLOW_INTERVAL
143  #define TCP_SLOW_INTERVAL      500  /* the coarse grained timeout in  #define TCP_SLOW_INTERVAL      (2*TCP_TMR_INTERVAL)  /* the coarse grained timeout in
144                                         milliseconds */                                         milliseconds */
145  #endif /* TCP_SLOW_INTERVAL */  #endif /* TCP_SLOW_INTERVAL */
146    
# Line 149  void             tcp_rexmit  (struct tcp Line 151  void             tcp_rexmit  (struct tcp
151    
152  #define TCP_MSL 60000  /* The maximum segment lifetime in microseconds */  #define TCP_MSL 60000  /* The maximum segment lifetime in microseconds */
153    
154    /*
155     * User-settable options (used with setsockopt).
156     */
157    #define TCP_NODELAY        0x01    /* don't delay send to coalesce packets */
158    #define TCP_KEEPALIVE  0x02    /* send KEEPALIVE probes when idle for pcb->keepalive miliseconds */
159    
160    /* Keepalive values */
161    #define  TCP_KEEPDEFAULT   7200000                       /* KEEPALIVE timer in miliseconds */
162    #define  TCP_KEEPINTVL     75000                         /* Time between KEEPALIVE probes in miliseconds */
163    #define  TCP_KEEPCNT       9                             /* Counter for KEEPALIVE probes */
164    #define  TCP_MAXIDLE       TCP_KEEPCNT * TCP_KEEPINTVL   /* Maximum KEEPALIVE probe time */
165    
166    
167  #ifdef PACK_STRUCT_USE_INCLUDES  #ifdef PACK_STRUCT_USE_INCLUDES
168  #  include "arch/bpstruct.h"  #  include "arch/bpstruct.h"
169  #endif  #endif
# Line 158  struct tcp_hdr { Line 173  struct tcp_hdr {
173    PACK_STRUCT_FIELD(u16_t dest);    PACK_STRUCT_FIELD(u16_t dest);
174    PACK_STRUCT_FIELD(u32_t seqno);    PACK_STRUCT_FIELD(u32_t seqno);
175    PACK_STRUCT_FIELD(u32_t ackno);    PACK_STRUCT_FIELD(u32_t ackno);
176    PACK_STRUCT_FIELD(u16_t _offset_flags);    PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags);
177    PACK_STRUCT_FIELD(u16_t wnd);    PACK_STRUCT_FIELD(u16_t wnd);
178    PACK_STRUCT_FIELD(u16_t chksum);    PACK_STRUCT_FIELD(u16_t chksum);
179    PACK_STRUCT_FIELD(u16_t urgp);    PACK_STRUCT_FIELD(u16_t urgp);
# Line 168  PACK_STRUCT_END Line 183  PACK_STRUCT_END
183  #  include "arch/epstruct.h"  #  include "arch/epstruct.h"
184  #endif  #endif
185    
186  #define TCPH_OFFSET(hdr) (ntohs((hdr)->_offset_flags) >> 8)  #define TCPH_OFFSET(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 8)
187  #define TCPH_FLAGS(hdr) (ntohs((hdr)->_offset_flags) & 0xff)  #define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12)
188    #define TCPH_FLAGS(phdr)  (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS)
189  #define TCPH_OFFSET_SET(hdr, offset) (hdr)->_offset_flags = htons(((offset) << 8) | TCPH_FLAGS(hdr))  
190  #define TCPH_FLAGS_SET(hdr, flags) (hdr)->_offset_flags = htons((TCPH_OFFSET(hdr) << 8) | (flags))  #define TCPH_OFFSET_SET(phdr, offset) (phdr)->_hdrlen_rsvd_flags = htons(((offset) << 8) | TCPH_FLAGS(phdr))
191    #define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr))
192    #define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons((ntohs((phdr)->_hdrlen_rsvd_flags) & ~TCP_FLAGS) | (flags))
193    #define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (flags))
194    #define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (TCPH_FLAGS(phdr) & ~(flags)) )
195    
196  #define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & TCP_FIN || \  #define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & TCP_FIN || \
197            TCPH_FLAGS((seg)->tcphdr) & TCP_SYN)? 1: 0))            TCPH_FLAGS((seg)->tcphdr) & TCP_SYN)? 1: 0))
# Line 194  enum tcp_state { Line 213  enum tcp_state {
213    
214  /* the TCP protocol control block */  /* the TCP protocol control block */
215  struct tcp_pcb {  struct tcp_pcb {
216    /* Common members of all PCB types */
217      IP_PCB;
218    
219    /* Protocol specific PCB members */
220    
221    struct tcp_pcb *next;   /* for the linked list */    struct tcp_pcb *next;   /* for the linked list */
222    
223      enum tcp_state state;   /* TCP state */
224    
225    u8_t prio;    u8_t prio;
226    void *callback_arg;    void *callback_arg;
227    
   struct ip_addr local_ip;  
228    u16_t local_port;    u16_t local_port;
   enum tcp_state state;   /* TCP state */  
     
   struct ip_addr remote_ip;  
229    u16_t remote_port;    u16_t remote_port;
230        
231      u8_t flags;
232    #define TF_ACK_DELAY (u8_t)0x01U   /* Delayed ACK. */
233    #define TF_ACK_NOW   (u8_t)0x02U   /* Immediate ACK. */
234    #define TF_INFR      (u8_t)0x04U   /* In fast recovery. */
235    #define TF_RESET     (u8_t)0x08U   /* Connection was reset. */
236    #define TF_CLOSED    (u8_t)0x10U   /* Connection was sucessfully closed. */
237    #define TF_GOT_FIN   (u8_t)0x20U   /* Connection was closed by the remote end. */
238    #define TF_NODELAY   (u8_t)0x40U   /* Disable Nagle algorithm */
239    
240    /* receiver varables */    /* receiver varables */
241    u32_t rcv_nxt;   /* next seqno expected */    u32_t rcv_nxt;   /* next seqno expected */
242    u16_t rcv_wnd;   /* receiver window */    u16_t rcv_wnd;   /* receiver window */
# Line 217  struct tcp_pcb { Line 249  struct tcp_pcb {
249    u16_t rtime;    u16_t rtime;
250        
251    u16_t mss;   /* maximum segment size */    u16_t mss;   /* maximum segment size */
   
   u8_t flags;  
 #define TF_ACK_DELAY 0x01U   /* Delayed ACK. */  
 #define TF_ACK_NOW   0x02U   /* Immediate ACK. */  
 #define TF_INFR      0x04U   /* In fast recovery. */  
 #define TF_RESET     0x08U   /* Connection was reset. */  
 #define TF_CLOSED    0x10U   /* Connection was sucessfully closed. */  
 #define TF_GOT_FIN   0x20U   /* Connection was closed by the remote end. */  
252        
253    /* RTT estimation variables. */    /* RTT estimation variables. */
254    u16_t rttest; /* RTT estimate in 500ms ticks */    u16_t rttest; /* RTT estimate in 500ms ticks */
# Line 282  struct tcp_pcb { Line 306  struct tcp_pcb {
306    /* Function to be called whenever a fatal error occurs. */    /* Function to be called whenever a fatal error occurs. */
307    void (* errf)(void *arg, err_t err);    void (* errf)(void *arg, err_t err);
308  #endif /* LWIP_CALLBACK_API */  #endif /* LWIP_CALLBACK_API */
309    
310      /* idle time before KEEPALIVE is sent */
311      u32_t keepalive;
312      
313      /* KEEPALIVE counter */
314      u8_t keep_cnt;
315  };  };
316    
317  struct tcp_pcb_listen {    struct tcp_pcb_listen {  
318    /* Common members of all PCB types */
319      IP_PCB;
320    
321    /* Protocol specific PCB members */
322    struct tcp_pcb_listen *next;   /* for the linked list */    struct tcp_pcb_listen *next;   /* for the linked list */
   u8_t prio;  
   void *callback_arg;  
323        
   struct ip_addr local_ip;  
   u16_t local_port;  
324    /* Even if state is obviously LISTEN this is here for    /* Even if state is obviously LISTEN this is here for
325     * field compatibility with tpc_pcb to which it is cast sometimes     * field compatibility with tpc_pcb to which it is cast sometimes
326     * Until a cleaner solution emerges this is here.FIXME     * Until a cleaner solution emerges this is here.FIXME
327     */     */
328    enum tcp_state state;   /* TCP state */    enum tcp_state state;   /* TCP state */
329    
330      u8_t prio;
331      void *callback_arg;
332      
333      u16_t local_port;
334    
335  #if LWIP_CALLBACK_API  #if LWIP_CALLBACK_API
336    /* Function to call when a listener has been connected. */    /* Function to call when a listener has been connected. */
337    err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err);    err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err);
# Line 396  void tcp_rst(u32_t seqno, u32_t ackno, Line 431  void tcp_rst(u32_t seqno, u32_t ackno,
431    
432  u32_t tcp_next_iss(void);  u32_t tcp_next_iss(void);
433    
434    void tcp_keepalive(struct tcp_pcb *pcb);
435    
436  extern struct tcp_pcb *tcp_input_pcb;  extern struct tcp_pcb *tcp_input_pcb;
437  extern u32_t tcp_ticks;  extern u32_t tcp_ticks;
438    
# Line 406  void tcp_debug_print_state(enum tcp_stat Line 443  void tcp_debug_print_state(enum tcp_stat
443  void tcp_debug_print_pcbs(void);  void tcp_debug_print_pcbs(void);
444  int tcp_pcbs_sane(void);  int tcp_pcbs_sane(void);
445  #else  #else
446  #define tcp_pcbs_sane() 1  #  define tcp_debug_print(tcphdr)
447    #  define tcp_debug_print_flags(flags)
448    #  define tcp_debug_print_state(s)
449    #  define tcp_debug_print_pcbs()
450    #  define tcp_pcbs_sane() 1
451  #endif /* TCP_DEBUG */  #endif /* TCP_DEBUG */
452    
453  #if NO_SYS  #if NO_SYS

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.20

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26