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