1
2
3
4
5
6#ifndef _IP_VS_H
7#define _IP_VS_H
8
9#include <linux/types.h>
10
11#define IP_VS_VERSION_CODE 0x010201
12#define NVERSION(version) \
13 (version >> 16) & 0xFF, \
14 (version >> 8) & 0xFF, \
15 version & 0xFF
16
17
18
19
20#define IP_VS_SVC_F_PERSISTENT 0x0001
21#define IP_VS_SVC_F_HASHED 0x0002
22#define IP_VS_SVC_F_ONEPACKET 0x0004
23
24
25
26
27#define IP_VS_DEST_F_AVAILABLE 0x0001
28#define IP_VS_DEST_F_OVERLOAD 0x0002
29
30
31
32
33#define IP_VS_STATE_NONE 0x0000
34#define IP_VS_STATE_MASTER 0x0001
35#define IP_VS_STATE_BACKUP 0x0002
36
37
38
39
40#define IP_VS_BASE_CTL (64+1024+64)
41
42#define IP_VS_SO_SET_NONE IP_VS_BASE_CTL
43#define IP_VS_SO_SET_INSERT (IP_VS_BASE_CTL+1)
44#define IP_VS_SO_SET_ADD (IP_VS_BASE_CTL+2)
45#define IP_VS_SO_SET_EDIT (IP_VS_BASE_CTL+3)
46#define IP_VS_SO_SET_DEL (IP_VS_BASE_CTL+4)
47#define IP_VS_SO_SET_FLUSH (IP_VS_BASE_CTL+5)
48#define IP_VS_SO_SET_LIST (IP_VS_BASE_CTL+6)
49#define IP_VS_SO_SET_ADDDEST (IP_VS_BASE_CTL+7)
50#define IP_VS_SO_SET_DELDEST (IP_VS_BASE_CTL+8)
51#define IP_VS_SO_SET_EDITDEST (IP_VS_BASE_CTL+9)
52#define IP_VS_SO_SET_TIMEOUT (IP_VS_BASE_CTL+10)
53#define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11)
54#define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12)
55#define IP_VS_SO_SET_RESTORE (IP_VS_BASE_CTL+13)
56#define IP_VS_SO_SET_SAVE (IP_VS_BASE_CTL+14)
57#define IP_VS_SO_SET_ZERO (IP_VS_BASE_CTL+15)
58#define IP_VS_SO_SET_MAX IP_VS_SO_SET_ZERO
59
60#define IP_VS_SO_GET_VERSION IP_VS_BASE_CTL
61#define IP_VS_SO_GET_INFO (IP_VS_BASE_CTL+1)
62#define IP_VS_SO_GET_SERVICES (IP_VS_BASE_CTL+2)
63#define IP_VS_SO_GET_SERVICE (IP_VS_BASE_CTL+3)
64#define IP_VS_SO_GET_DESTS (IP_VS_BASE_CTL+4)
65#define IP_VS_SO_GET_DEST (IP_VS_BASE_CTL+5)
66#define IP_VS_SO_GET_TIMEOUT (IP_VS_BASE_CTL+6)
67#define IP_VS_SO_GET_DAEMON (IP_VS_BASE_CTL+7)
68#define IP_VS_SO_GET_MAX IP_VS_SO_GET_DAEMON
69
70
71
72
73
74
75#define IP_VS_CONN_F_FWD_MASK 0x0007
76#define IP_VS_CONN_F_MASQ 0x0000
77#define IP_VS_CONN_F_LOCALNODE 0x0001
78#define IP_VS_CONN_F_TUNNEL 0x0002
79#define IP_VS_CONN_F_DROUTE 0x0003
80#define IP_VS_CONN_F_BYPASS 0x0004
81#define IP_VS_CONN_F_SYNC 0x0020
82#define IP_VS_CONN_F_HASHED 0x0040
83#define IP_VS_CONN_F_NOOUTPUT 0x0080
84#define IP_VS_CONN_F_INACTIVE 0x0100
85#define IP_VS_CONN_F_OUT_SEQ 0x0200
86#define IP_VS_CONN_F_IN_SEQ 0x0400
87#define IP_VS_CONN_F_SEQ_MASK 0x0600
88#define IP_VS_CONN_F_NO_CPORT 0x0800
89#define IP_VS_CONN_F_TEMPLATE 0x1000
90#define IP_VS_CONN_F_ONE_PACKET 0x2000
91
92
93#define IP_VS_CONN_F_BACKUP_MASK (IP_VS_CONN_F_FWD_MASK | \
94 IP_VS_CONN_F_NOOUTPUT | \
95 IP_VS_CONN_F_INACTIVE | \
96 IP_VS_CONN_F_SEQ_MASK | \
97 IP_VS_CONN_F_NO_CPORT | \
98 IP_VS_CONN_F_TEMPLATE \
99 )
100
101
102#define IP_VS_CONN_F_BACKUP_UPD_MASK (IP_VS_CONN_F_INACTIVE | \
103 IP_VS_CONN_F_SEQ_MASK)
104
105
106#define IP_VS_CONN_F_NFCT (1 << 16)
107
108
109#define IP_VS_CONN_F_DEST_MASK (IP_VS_CONN_F_FWD_MASK | \
110 IP_VS_CONN_F_ONE_PACKET | \
111 IP_VS_CONN_F_NFCT | \
112 0)
113
114#define IP_VS_SCHEDNAME_MAXLEN 16
115#define IP_VS_PENAME_MAXLEN 16
116#define IP_VS_IFNAME_MAXLEN 16
117
118#define IP_VS_PEDATA_MAXLEN 255
119
120
121
122
123
124struct ip_vs_service_user {
125
126 __u16 protocol;
127 __be32 addr;
128 __be16 port;
129 __u32 fwmark;
130
131
132 char sched_name[IP_VS_SCHEDNAME_MAXLEN];
133 unsigned int flags;
134 unsigned int timeout;
135 __be32 netmask;
136};
137
138
139struct ip_vs_dest_user {
140
141 __be32 addr;
142 __be16 port;
143
144
145 unsigned int conn_flags;
146 int weight;
147
148
149 __u32 u_threshold;
150 __u32 l_threshold;
151};
152
153
154
155
156
157struct ip_vs_stats_user {
158 __u32 conns;
159 __u32 inpkts;
160 __u32 outpkts;
161 __u64 inbytes;
162 __u64 outbytes;
163
164 __u32 cps;
165 __u32 inpps;
166 __u32 outpps;
167 __u32 inbps;
168 __u32 outbps;
169};
170
171
172
173struct ip_vs_getinfo {
174
175 unsigned int version;
176
177
178 unsigned int size;
179
180
181 unsigned int num_services;
182};
183
184
185
186struct ip_vs_service_entry {
187
188 __u16 protocol;
189 __be32 addr;
190 __be16 port;
191 __u32 fwmark;
192
193
194 char sched_name[IP_VS_SCHEDNAME_MAXLEN];
195 unsigned int flags;
196 unsigned int timeout;
197 __be32 netmask;
198
199
200 unsigned int num_dests;
201
202
203 struct ip_vs_stats_user stats;
204};
205
206
207struct ip_vs_dest_entry {
208 __be32 addr;
209 __be16 port;
210 unsigned int conn_flags;
211 int weight;
212
213 __u32 u_threshold;
214 __u32 l_threshold;
215
216 __u32 activeconns;
217 __u32 inactconns;
218 __u32 persistconns;
219
220
221 struct ip_vs_stats_user stats;
222};
223
224
225
226struct ip_vs_get_dests {
227
228 __u16 protocol;
229 __be32 addr;
230 __be16 port;
231 __u32 fwmark;
232
233
234 unsigned int num_dests;
235
236
237 struct ip_vs_dest_entry entrytable[0];
238};
239
240
241
242struct ip_vs_get_services {
243
244 unsigned int num_services;
245
246
247 struct ip_vs_service_entry entrytable[0];
248};
249
250
251
252struct ip_vs_timeout_user {
253 int tcp_timeout;
254 int tcp_fin_timeout;
255 int udp_timeout;
256};
257
258
259
260struct ip_vs_daemon_user {
261
262 int state;
263
264
265 char mcast_ifn[IP_VS_IFNAME_MAXLEN];
266
267
268 int syncid;
269};
270
271
272
273
274
275
276
277
278
279#define IPVS_GENL_NAME "IPVS"
280#define IPVS_GENL_VERSION 0x1
281
282struct ip_vs_flags {
283 __be32 flags;
284 __be32 mask;
285};
286
287
288enum {
289 IPVS_CMD_UNSPEC = 0,
290
291 IPVS_CMD_NEW_SERVICE,
292 IPVS_CMD_SET_SERVICE,
293 IPVS_CMD_DEL_SERVICE,
294 IPVS_CMD_GET_SERVICE,
295
296 IPVS_CMD_NEW_DEST,
297 IPVS_CMD_SET_DEST,
298 IPVS_CMD_DEL_DEST,
299 IPVS_CMD_GET_DEST,
300
301 IPVS_CMD_NEW_DAEMON,
302 IPVS_CMD_DEL_DAEMON,
303 IPVS_CMD_GET_DAEMON,
304
305 IPVS_CMD_SET_CONFIG,
306 IPVS_CMD_GET_CONFIG,
307
308 IPVS_CMD_SET_INFO,
309 IPVS_CMD_GET_INFO,
310
311 IPVS_CMD_ZERO,
312 IPVS_CMD_FLUSH,
313
314 __IPVS_CMD_MAX,
315};
316
317#define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1)
318
319
320enum {
321 IPVS_CMD_ATTR_UNSPEC = 0,
322 IPVS_CMD_ATTR_SERVICE,
323 IPVS_CMD_ATTR_DEST,
324 IPVS_CMD_ATTR_DAEMON,
325 IPVS_CMD_ATTR_TIMEOUT_TCP,
326 IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,
327 IPVS_CMD_ATTR_TIMEOUT_UDP,
328 __IPVS_CMD_ATTR_MAX,
329};
330
331#define IPVS_CMD_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
332
333
334
335
336
337
338enum {
339 IPVS_SVC_ATTR_UNSPEC = 0,
340 IPVS_SVC_ATTR_AF,
341 IPVS_SVC_ATTR_PROTOCOL,
342 IPVS_SVC_ATTR_ADDR,
343 IPVS_SVC_ATTR_PORT,
344 IPVS_SVC_ATTR_FWMARK,
345
346 IPVS_SVC_ATTR_SCHED_NAME,
347 IPVS_SVC_ATTR_FLAGS,
348 IPVS_SVC_ATTR_TIMEOUT,
349 IPVS_SVC_ATTR_NETMASK,
350
351 IPVS_SVC_ATTR_STATS,
352
353 IPVS_SVC_ATTR_PE_NAME,
354
355 __IPVS_SVC_ATTR_MAX,
356};
357
358#define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
359
360
361
362
363
364
365enum {
366 IPVS_DEST_ATTR_UNSPEC = 0,
367 IPVS_DEST_ATTR_ADDR,
368 IPVS_DEST_ATTR_PORT,
369
370 IPVS_DEST_ATTR_FWD_METHOD,
371 IPVS_DEST_ATTR_WEIGHT,
372
373 IPVS_DEST_ATTR_U_THRESH,
374 IPVS_DEST_ATTR_L_THRESH,
375
376 IPVS_DEST_ATTR_ACTIVE_CONNS,
377 IPVS_DEST_ATTR_INACT_CONNS,
378 IPVS_DEST_ATTR_PERSIST_CONNS,
379
380 IPVS_DEST_ATTR_STATS,
381 __IPVS_DEST_ATTR_MAX,
382};
383
384#define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
385
386
387
388
389
390
391enum {
392 IPVS_DAEMON_ATTR_UNSPEC = 0,
393 IPVS_DAEMON_ATTR_STATE,
394 IPVS_DAEMON_ATTR_MCAST_IFN,
395 IPVS_DAEMON_ATTR_SYNC_ID,
396 __IPVS_DAEMON_ATTR_MAX,
397};
398
399#define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1)
400
401
402
403
404
405
406enum {
407 IPVS_STATS_ATTR_UNSPEC = 0,
408 IPVS_STATS_ATTR_CONNS,
409 IPVS_STATS_ATTR_INPKTS,
410 IPVS_STATS_ATTR_OUTPKTS,
411 IPVS_STATS_ATTR_INBYTES,
412 IPVS_STATS_ATTR_OUTBYTES,
413
414 IPVS_STATS_ATTR_CPS,
415 IPVS_STATS_ATTR_INPPS,
416 IPVS_STATS_ATTR_OUTPPS,
417 IPVS_STATS_ATTR_INBPS,
418 IPVS_STATS_ATTR_OUTBPS,
419 __IPVS_STATS_ATTR_MAX,
420};
421
422#define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1)
423
424
425enum {
426 IPVS_INFO_ATTR_UNSPEC = 0,
427 IPVS_INFO_ATTR_VERSION,
428 IPVS_INFO_ATTR_CONN_TAB_SIZE,
429 __IPVS_INFO_ATTR_MAX,
430};
431
432#define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1)
433
434#endif
435