9173bfe26f2e5f5590e055c550c74c9b1c103650
[linux-2.6.git] / include / linux / vs_socket.h
1 #ifndef _VX_VS_SOCKET_H
2 #define _VX_VS_SOCKET_H
3
4 #include "vserver/debug.h"
5
6
7 /* socket accounting */
8
9 #include <linux/socket.h>
10
11 static inline int vx_sock_type(int family)
12 {
13         int type = 4;
14
15         if (family > 0 && family < 3)
16                 type = family;
17         else if (family == PF_INET6)
18                 type = 3;
19         return type;
20 }
21
22 #define vx_acc_sock(v,f,p,s) \
23         __vx_acc_sock((v), (f), (p), (s), __FILE__, __LINE__)
24
25 static inline void __vx_acc_sock(struct vx_info *vxi,
26         int family, int pos, int size, char *file, int line)
27 {
28         if (vxi) {
29                 int type = vx_sock_type(family);
30
31                 atomic_inc(&vxi->cacct.sock[type][pos].count);
32                 atomic_add(size, &vxi->cacct.sock[type][pos].total);
33         }
34 }
35
36 #define vx_sock_recv(sk,s) \
37         vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 0, (s))
38 #define vx_sock_send(sk,s) \
39         vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 1, (s))
40 #define vx_sock_fail(sk,s) \
41         vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 2, (s))
42
43
44 #define sock_vx_init(s) do {            \
45         (s)->sk_xid = 0;                \
46         (s)->sk_vx_info = NULL;         \
47         } while (0)
48
49 #define sock_nx_init(s) do {            \
50         (s)->sk_nid = 0;                \
51         (s)->sk_nx_info = NULL;         \
52         } while (0)
53
54
55 #else
56 #warning duplicate inclusion
57 #endif