1 #ifndef _NX_VS_NETWORK_H
2 #define _NX_VS_NETWORK_H
4 #include "vserver/network.h"
5 #include "vserver/debug.h"
8 #define get_nx_info(i) __get_nx_info(i,__FILE__,__LINE__)
10 static inline struct nx_info *__get_nx_info(struct nx_info *nxi,
11 const char *_file, int _line)
16 vxlprintk(VXD_CBIT(nid, 2), "get_nx_info(%p[#%d.%d])",
17 nxi, nxi?nxi->nx_id:0, nxi?atomic_read(&nxi->nx_usecnt):0,
20 atomic_inc(&nxi->nx_usecnt);
25 extern void free_nx_info(struct nx_info *);
27 #define put_nx_info(i) __put_nx_info(i,__FILE__,__LINE__)
29 static inline void __put_nx_info(struct nx_info *nxi, const char *_file, int _line)
34 vxlprintk(VXD_CBIT(nid, 2), "put_nx_info(%p[#%d.%d])",
35 nxi, nxi?nxi->nx_id:0, nxi?atomic_read(&nxi->nx_usecnt):0,
38 if (atomic_dec_and_test(&nxi->nx_usecnt))
43 #define init_nx_info(p,i) __init_nx_info(p,i,__FILE__,__LINE__)
45 static inline void __init_nx_info(struct nx_info **nxp, struct nx_info *nxi,
46 const char *_file, int _line)
49 vxlprintk(VXD_CBIT(nid, 3),
50 "init_nx_info(%p[#%d.%d])",
51 nxi, nxi?nxi->nx_id:0,
52 nxi?atomic_read(&nxi->nx_usecnt):0,
55 atomic_inc(&nxi->nx_usecnt);
61 #define set_nx_info(p,i) __set_nx_info(p,i,__FILE__,__LINE__)
63 static inline void __set_nx_info(struct nx_info **nxp, struct nx_info *nxi,
64 const char *_file, int _line)
71 vxlprintk(VXD_CBIT(nid, 3), "set_nx_info(%p[#%d.%d])",
72 nxi, nxi?nxi->nx_id:0,
73 nxi?atomic_read(&nxi->nx_usecnt):0,
76 atomic_inc(&nxi->nx_usecnt);
81 #define clr_nx_info(p) __clr_nx_info(p,__FILE__,__LINE__)
83 static inline void __clr_nx_info(struct nx_info **nxp,
84 const char *_file, int _line)
88 nxo = xchg(nxp, NULL);
92 vxlprintk(VXD_CBIT(nid, 3), "clr_nx_info(%p[#%d.%d])",
93 nxo, nxo?nxo->nx_id:0,
94 nxo?atomic_read(&nxo->nx_usecnt):0,
97 if (atomic_dec_and_test(&nxo->nx_usecnt))
102 #define claim_nx_info(v,p) __claim_nx_info(v,p,__FILE__,__LINE__)
104 static inline void __claim_nx_info(struct nx_info *nxi,
105 struct task_struct *task, const char *_file, int _line)
107 vxlprintk(VXD_CBIT(nid, 3), "claim_nx_info(%p[#%d.%d.%d]) %p",
108 nxi, nxi?nxi->nx_id:0,
109 nxi?atomic_read(&nxi->nx_usecnt):0,
110 nxi?atomic_read(&nxi->nx_tasks):0,
113 atomic_inc(&nxi->nx_tasks);
117 extern void unhash_nx_info(struct nx_info *);
119 #define release_nx_info(v,p) __release_nx_info(v,p,__FILE__,__LINE__)
121 static inline void __release_nx_info(struct nx_info *nxi,
122 struct task_struct *task, const char *_file, int _line)
124 vxlprintk(VXD_CBIT(nid, 3), "release_nx_info(%p[#%d.%d.%d]) %p",
125 nxi, nxi?nxi->nx_id:0,
126 nxi?atomic_read(&nxi->nx_usecnt):0,
127 nxi?atomic_read(&nxi->nx_tasks):0,
132 if (atomic_dec_and_test(&nxi->nx_tasks))
137 #define task_get_nx_info(i) __task_get_nx_info(i,__FILE__,__LINE__)
139 static __inline__ struct nx_info *__task_get_nx_info(struct task_struct *p,
140 const char *_file, int _line)
145 vxlprintk(VXD_CBIT(nid, 5), "task_get_nx_info(%p)",
147 nxi = __get_nx_info(p->nx_info, _file, _line);
153 #define nx_task_nid(t) ((t)->nid)
155 #define nx_current_nid() nx_task_nid(current)
157 #define current_nx_info() (current->nx_info)
160 #define nx_check(c,m) __nx_check(nx_current_nid(),c,m)
162 #define nx_weak_check(c,m) ((m) ? nx_check(c,m) : 1)
165 #define __nx_state(v) ((v) ? ((v)->nx_state) : 0)
167 #define nx_info_state(v,m) (__nx_state(v) & (m))
170 #define __nx_flags(v) ((v) ? (v)->nx_flags : 0)
172 #define nx_current_flags() __nx_flags(current->nx_info)
174 #define nx_info_flags(v,m,f) \
175 vx_check_flags(__nx_flags(v),(m),(f))
177 #define task_nx_flags(t,m,f) \
178 ((t) && nx_info_flags((t)->nx_info, (m), (f)))
180 #define nx_flags(m,f) nx_info_flags(current->nx_info,(m),(f))
185 #define __nx_ncaps(v) ((v) ? (v)->nx_ncaps : 0)
187 #define nx_current_ncaps() __nx_ncaps(current->nx_info)
189 #define nx_info_ncaps(v,c) (__nx_ncaps(v) & (c))
191 #define nx_ncaps(c) nx_info_ncaps(current->nx_info,(c))
194 static inline int addr_in_nx_info(struct nx_info *nxi, uint32_t addr)
202 if (n && (nxi->ipv4[0] == 0))
204 for (i=0; i<n; i++) {
205 if (nxi->ipv4[i] == addr)
211 static inline void exit_nx_info(struct task_struct *p)
214 release_nx_info(p->nx_info, p);
219 #warning duplicate inclusion