[NET] Rename open_request to request_sock
[safe/jmp/linux-2.6] / include / net / request_sock.h
1 /*
2  * NET          Generic infrastructure for Network protocols.
3  *
4  *              Definitions for request_sock 
5  *
6  * Authors:     Arnaldo Carvalho de Melo <acme@conectiva.com.br>
7  *
8  *              From code originally in include/net/tcp.h
9  *
10  *              This program is free software; you can redistribute it and/or
11  *              modify it under the terms of the GNU General Public License
12  *              as published by the Free Software Foundation; either version
13  *              2 of the License, or (at your option) any later version.
14  */
15 #ifndef _REQUEST_SOCK_H
16 #define _REQUEST_SOCK_H
17
18 #include <linux/slab.h>
19 #include <linux/types.h>
20 #include <net/sock.h>
21
22 struct request_sock;
23 struct sk_buff;
24 struct dst_entry;
25 struct proto;
26
27 struct request_sock_ops {
28         int             family;
29         kmem_cache_t    *slab;
30         int             obj_size;
31         int             (*rtx_syn_ack)(struct sock *sk,
32                                        struct request_sock *req,
33                                        struct dst_entry *dst);
34         void            (*send_ack)(struct sk_buff *skb,
35                                     struct request_sock *req);
36         void            (*send_reset)(struct sk_buff *skb);
37         void            (*destructor)(struct request_sock *req);
38 };
39
40 /* struct request_sock - mini sock to represent a connection request
41  */
42 struct request_sock {
43         struct request_sock             *dl_next; /* Must be first member! */
44         u16                             mss;
45         u8                              retrans;
46         u8                              __pad;
47         /* The following two fields can be easily recomputed I think -AK */
48         u32                             window_clamp; /* window clamp at creation time */
49         u32                             rcv_wnd;          /* rcv_wnd offered first time */
50         u32                             ts_recent;
51         unsigned long                   expires;
52         struct request_sock_ops         *rsk_ops;
53         struct sock                     *sk;
54 };
55
56 static inline struct request_sock *reqsk_alloc(struct request_sock_ops *ops)
57 {
58         struct request_sock *req = kmem_cache_alloc(ops->slab, SLAB_ATOMIC);
59
60         if (req != NULL)
61                 req->rsk_ops = ops;
62
63         return req;
64 }
65
66 static inline void __reqsk_free(struct request_sock *req)
67 {
68         kmem_cache_free(req->rsk_ops->slab, req);
69 }
70
71 static inline void reqsk_free(struct request_sock *req)
72 {
73         req->rsk_ops->destructor(req);
74         __reqsk_free(req);
75 }
76
77 #endif /* _REQUEST_SOCK_H */