1 #ifndef _NX_VS_NETWORK_H
2 #define _NX_VS_NETWORK_H
4 #include "vserver/context.h"
5 #include "vserver/network.h"
6 #include "vserver/base.h"
7 #include "vserver/debug.h"
10 #define get_nx_info(i) __get_nx_info(i,__FILE__,__LINE__)
12 static inline struct nx_info *__get_nx_info(struct nx_info *nxi,
13 const char *_file, int _line)
18 vxlprintk(VXD_CBIT(nid, 2), "get_nx_info(%p[#%d.%d])",
19 nxi, nxi?nxi->nx_id:0, nxi?atomic_read(&nxi->nx_usecnt):0,
22 atomic_inc(&nxi->nx_usecnt);
27 extern void free_nx_info(struct nx_info *);
29 #define put_nx_info(i) __put_nx_info(i,__FILE__,__LINE__)
31 static inline void __put_nx_info(struct nx_info *nxi, const char *_file, int _line)
36 vxlprintk(VXD_CBIT(nid, 2), "put_nx_info(%p[#%d.%d])",
37 nxi, nxi?nxi->nx_id:0, nxi?atomic_read(&nxi->nx_usecnt):0,
40 if (atomic_dec_and_test(&nxi->nx_usecnt))
45 #define init_nx_info(p,i) __init_nx_info(p,i,__FILE__,__LINE__)
47 static inline void __init_nx_info(struct nx_info **nxp, struct nx_info *nxi,
48 const char *_file, int _line)
51 vxlprintk(VXD_CBIT(nid, 3),
52 "init_nx_info(%p[#%d.%d])",
53 nxi, nxi?nxi->nx_id:0,
54 nxi?atomic_read(&nxi->nx_usecnt):0,
57 atomic_inc(&nxi->nx_usecnt);
63 #define set_nx_info(p,i) __set_nx_info(p,i,__FILE__,__LINE__)
65 static inline void __set_nx_info(struct nx_info **nxp, struct nx_info *nxi,
66 const char *_file, int _line)
73 vxlprintk(VXD_CBIT(nid, 3), "set_nx_info(%p[#%d.%d])",
74 nxi, nxi?nxi->nx_id:0,
75 nxi?atomic_read(&nxi->nx_usecnt):0,
78 atomic_inc(&nxi->nx_usecnt);
83 #define clr_nx_info(p) __clr_nx_info(p,__FILE__,__LINE__)
85 static inline void __clr_nx_info(struct nx_info **nxp,
86 const char *_file, int _line)
90 nxo = xchg(nxp, NULL);
94 vxlprintk(VXD_CBIT(nid, 3), "clr_nx_info(%p[#%d.%d])",
95 nxo, nxo?nxo->nx_id:0,
96 nxo?atomic_read(&nxo->nx_usecnt):0,
99 if (atomic_dec_and_test(&nxo->nx_usecnt))
104 #define claim_nx_info(v,p) __claim_nx_info(v,p,__FILE__,__LINE__)
106 static inline void __claim_nx_info(struct nx_info *nxi,
107 struct task_struct *task, const char *_file, int _line)
109 vxlprintk(VXD_CBIT(nid, 3), "claim_nx_info(%p[#%d.%d.%d]) %p",
110 nxi, nxi?nxi->nx_id:0,
111 nxi?atomic_read(&nxi->nx_usecnt):0,
112 nxi?atomic_read(&nxi->nx_tasks):0,
115 atomic_inc(&nxi->nx_tasks);
119 extern void unhash_nx_info(struct nx_info *);
121 #define release_nx_info(v,p) __release_nx_info(v,p,__FILE__,__LINE__)
123 static inline void __release_nx_info(struct nx_info *nxi,
124 struct task_struct *task, const char *_file, int _line)
126 vxlprintk(VXD_CBIT(nid, 3), "release_nx_info(%p[#%d.%d.%d]) %p",
127 nxi, nxi?nxi->nx_id:0,
128 nxi?atomic_read(&nxi->nx_usecnt):0,
129 nxi?atomic_read(&nxi->nx_tasks):0,
134 if (atomic_dec_and_test(&nxi->nx_tasks))
139 #define task_get_nx_info(i) __task_get_nx_info(i,__FILE__,__LINE__)
141 static __inline__ struct nx_info *__task_get_nx_info(struct task_struct *p,
142 const char *_file, int _line)
147 vxlprintk(VXD_CBIT(nid, 5), "task_get_nx_info(%p)",
149 nxi = __get_nx_info(p->nx_info, _file, _line);
157 static inline int addr_in_nx_info(struct nx_info *nxi, uint32_t addr)
165 if (n && (nxi->ipv4[0] == 0))
167 for (i=0; i<n; i++) {
168 if (nxi->ipv4[i] == addr)
174 static inline void exit_nx_info(struct task_struct *p)
177 release_nx_info(p->nx_info, p);
182 #warning duplicate inclusion