Merge to Fedora kernel-2.6.18-1.2255_FC5-vs2.0.2.2-rc9 patched with stable patch...
[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 #include <linux/vserver/cacct.h>
11
12 static inline int vx_sock_type(int family)
13 {
14         switch (family) {
15         case PF_UNSPEC:
16                 return VXA_SOCK_UNSPEC;
17         case PF_UNIX:
18                 return VXA_SOCK_UNIX;
19         case PF_INET:
20                 return VXA_SOCK_INET;
21         case PF_INET6:
22                 return VXA_SOCK_INET6;
23         case PF_PACKET:
24                 return VXA_SOCK_PACKET;
25         default:
26                 return VXA_SOCK_OTHER;
27         }
28 }
29
30 #define vx_acc_sock(v,f,p,s) \
31         __vx_acc_sock((v), (f), (p), (s), __FILE__, __LINE__)
32
33 static inline void __vx_acc_sock(struct vx_info *vxi,
34         int family, int pos, int size, char *file, int line)
35 {
36         if (vxi) {
37                 int type = vx_sock_type(family);
38
39                 atomic_inc(&vxi->cacct.sock[type][pos].count);
40                 atomic_add(size, &vxi->cacct.sock[type][pos].total);
41         }
42 }
43
44 #define vx_sock_recv(sk,s) \
45         vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 0, (s))
46 #define vx_sock_send(sk,s) \
47         vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 1, (s))
48 #define vx_sock_fail(sk,s) \
49         vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 2, (s))
50
51
52 #define sock_vx_init(s) do {            \
53         (s)->sk_xid = 0;                \
54         (s)->sk_vx_info = NULL;         \
55         } while (0)
56
57 #define sock_nx_init(s) do {            \
58         (s)->sk_nid = 0;                \
59         (s)->sk_nx_info = NULL;         \
60         } while (0)
61
62
63 #else
64 #warning duplicate inclusion
65 #endif