Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux...
[platform/adaptation/renesas_rcar/renesas_kernel.git] / include / linux / ip_vs.h
1 /*
2  *      IP Virtual Server
3  *      data structure and functionality definitions
4  */
5
6 #ifndef _IP_VS_H
7 #define _IP_VS_H
8
9 #include <linux/types.h>        /* For __beXX types in userland */
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  *      Virtual Service Flags
19  */
20 #define IP_VS_SVC_F_PERSISTENT  0x0001          /* persistent port */
21 #define IP_VS_SVC_F_HASHED      0x0002          /* hashed entry */
22 #define IP_VS_SVC_F_ONEPACKET   0x0004          /* one-packet scheduling */
23
24 /*
25  *      Destination Server Flags
26  */
27 #define IP_VS_DEST_F_AVAILABLE  0x0001          /* server is available */
28 #define IP_VS_DEST_F_OVERLOAD   0x0002          /* server is overloaded */
29
30 /*
31  *      IPVS sync daemon states
32  */
33 #define IP_VS_STATE_NONE        0x0000          /* daemon is stopped */
34 #define IP_VS_STATE_MASTER      0x0001          /* started as master */
35 #define IP_VS_STATE_BACKUP      0x0002          /* started as backup */
36
37 /*
38  *      IPVS socket options
39  */
40 #define IP_VS_BASE_CTL          (64+1024+64)            /* base */
41
42 #define IP_VS_SO_SET_NONE       IP_VS_BASE_CTL          /* just peek */
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)      /* not used now */
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  *      IPVS Connection Flags
73  *      Only flags 0..15 are sent to backup server
74  */
75 #define IP_VS_CONN_F_FWD_MASK   0x0007          /* mask for the fwd methods */
76 #define IP_VS_CONN_F_MASQ       0x0000          /* masquerading/NAT */
77 #define IP_VS_CONN_F_LOCALNODE  0x0001          /* local node */
78 #define IP_VS_CONN_F_TUNNEL     0x0002          /* tunneling */
79 #define IP_VS_CONN_F_DROUTE     0x0003          /* direct routing */
80 #define IP_VS_CONN_F_BYPASS     0x0004          /* cache bypass */
81 #define IP_VS_CONN_F_SYNC       0x0020          /* entry created by sync */
82 #define IP_VS_CONN_F_HASHED     0x0040          /* hashed entry */
83 #define IP_VS_CONN_F_NOOUTPUT   0x0080          /* no output packets */
84 #define IP_VS_CONN_F_INACTIVE   0x0100          /* not established */
85 #define IP_VS_CONN_F_OUT_SEQ    0x0200          /* must do output seq adjust */
86 #define IP_VS_CONN_F_IN_SEQ     0x0400          /* must do input seq adjust */
87 #define IP_VS_CONN_F_SEQ_MASK   0x0600          /* in/out sequence mask */
88 #define IP_VS_CONN_F_NO_CPORT   0x0800          /* no client port set yet */
89 #define IP_VS_CONN_F_TEMPLATE   0x1000          /* template, not connection */
90 #define IP_VS_CONN_F_ONE_PACKET 0x2000          /* forward only one packet */
91
92 /* Initial bits allowed in backup server */
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 /* Bits allowed to update in backup server */
102 #define IP_VS_CONN_F_BACKUP_UPD_MASK (IP_VS_CONN_F_INACTIVE | \
103                                       IP_VS_CONN_F_SEQ_MASK)
104
105 /* Flags that are not sent to backup server start from bit 16 */
106 #define IP_VS_CONN_F_NFCT       (1 << 16)       /* use netfilter conntrack */
107
108 /* Connection flags from destination that can be changed by user space */
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  *      The struct ip_vs_service_user and struct ip_vs_dest_user are
122  *      used to set IPVS rules through setsockopt.
123  */
124 struct ip_vs_service_user {
125         /* virtual service addresses */
126         __u16           protocol;
127         __be32                  addr;           /* virtual ip address */
128         __be16                  port;
129         __u32           fwmark;         /* firwall mark of service */
130
131         /* virtual service options */
132         char                    sched_name[IP_VS_SCHEDNAME_MAXLEN];
133         unsigned int            flags;          /* virtual service flags */
134         unsigned int            timeout;        /* persistent timeout in sec */
135         __be32                  netmask;        /* persistent netmask */
136 };
137
138
139 struct ip_vs_dest_user {
140         /* destination server address */
141         __be32                  addr;
142         __be16                  port;
143
144         /* real server options */
145         unsigned int            conn_flags;     /* connection flags */
146         int                     weight;         /* destination weight */
147
148         /* thresholds for active connections */
149         __u32           u_threshold;    /* upper threshold */
150         __u32           l_threshold;    /* lower threshold */
151 };
152
153
154 /*
155  *      IPVS statistics object (for user space)
156  */
157 struct ip_vs_stats_user {
158         __u32                   conns;          /* connections scheduled */
159         __u32                   inpkts;         /* incoming packets */
160         __u32                   outpkts;        /* outgoing packets */
161         __u64                   inbytes;        /* incoming bytes */
162         __u64                   outbytes;       /* outgoing bytes */
163
164         __u32                   cps;            /* current connection rate */
165         __u32                   inpps;          /* current in packet rate */
166         __u32                   outpps;         /* current out packet rate */
167         __u32                   inbps;          /* current in byte rate */
168         __u32                   outbps;         /* current out byte rate */
169 };
170
171
172 /* The argument to IP_VS_SO_GET_INFO */
173 struct ip_vs_getinfo {
174         /* version number */
175         unsigned int            version;
176
177         /* size of connection hash table */
178         unsigned int            size;
179
180         /* number of virtual services */
181         unsigned int            num_services;
182 };
183
184
185 /* The argument to IP_VS_SO_GET_SERVICE */
186 struct ip_vs_service_entry {
187         /* which service: user fills in these */
188         __u16           protocol;
189         __be32                  addr;           /* virtual address */
190         __be16                  port;
191         __u32           fwmark;         /* firwall mark of service */
192
193         /* service options */
194         char                    sched_name[IP_VS_SCHEDNAME_MAXLEN];
195         unsigned int            flags;          /* virtual service flags */
196         unsigned int            timeout;        /* persistent timeout */
197         __be32                  netmask;        /* persistent netmask */
198
199         /* number of real servers */
200         unsigned int            num_dests;
201
202         /* statistics */
203         struct ip_vs_stats_user stats;
204 };
205
206
207 struct ip_vs_dest_entry {
208         __be32                  addr;           /* destination address */
209         __be16                  port;
210         unsigned int            conn_flags;     /* connection flags */
211         int                     weight;         /* destination weight */
212
213         __u32           u_threshold;    /* upper threshold */
214         __u32           l_threshold;    /* lower threshold */
215
216         __u32           activeconns;    /* active connections */
217         __u32           inactconns;     /* inactive connections */
218         __u32           persistconns;   /* persistent connections */
219
220         /* statistics */
221         struct ip_vs_stats_user stats;
222 };
223
224
225 /* The argument to IP_VS_SO_GET_DESTS */
226 struct ip_vs_get_dests {
227         /* which service: user fills in these */
228         __u16           protocol;
229         __be32                  addr;           /* virtual address */
230         __be16                  port;
231         __u32           fwmark;         /* firwall mark of service */
232
233         /* number of real servers */
234         unsigned int            num_dests;
235
236         /* the real servers */
237         struct ip_vs_dest_entry entrytable[0];
238 };
239
240
241 /* The argument to IP_VS_SO_GET_SERVICES */
242 struct ip_vs_get_services {
243         /* number of virtual services */
244         unsigned int            num_services;
245
246         /* service table */
247         struct ip_vs_service_entry entrytable[0];
248 };
249
250
251 /* The argument to IP_VS_SO_GET_TIMEOUT */
252 struct ip_vs_timeout_user {
253         int                     tcp_timeout;
254         int                     tcp_fin_timeout;
255         int                     udp_timeout;
256 };
257
258
259 /* The argument to IP_VS_SO_GET_DAEMON */
260 struct ip_vs_daemon_user {
261         /* sync daemon state (master/backup) */
262         int                     state;
263
264         /* multicast interface name */
265         char                    mcast_ifn[IP_VS_IFNAME_MAXLEN];
266
267         /* SyncID we belong to */
268         int                     syncid;
269 };
270
271 /*
272  *
273  * IPVS Generic Netlink interface definitions
274  *
275  */
276
277 /* Generic Netlink family info */
278
279 #define IPVS_GENL_NAME          "IPVS"
280 #define IPVS_GENL_VERSION       0x1
281
282 struct ip_vs_flags {
283         __be32 flags;
284         __be32 mask;
285 };
286
287 /* Generic Netlink command attributes */
288 enum {
289         IPVS_CMD_UNSPEC = 0,
290
291         IPVS_CMD_NEW_SERVICE,           /* add service */
292         IPVS_CMD_SET_SERVICE,           /* modify service */
293         IPVS_CMD_DEL_SERVICE,           /* delete service */
294         IPVS_CMD_GET_SERVICE,           /* get service info */
295
296         IPVS_CMD_NEW_DEST,              /* add destination */
297         IPVS_CMD_SET_DEST,              /* modify destination */
298         IPVS_CMD_DEL_DEST,              /* delete destination */
299         IPVS_CMD_GET_DEST,              /* get destination info */
300
301         IPVS_CMD_NEW_DAEMON,            /* start sync daemon */
302         IPVS_CMD_DEL_DAEMON,            /* stop sync daemon */
303         IPVS_CMD_GET_DAEMON,            /* get sync daemon status */
304
305         IPVS_CMD_SET_CONFIG,            /* set config settings */
306         IPVS_CMD_GET_CONFIG,            /* get config settings */
307
308         IPVS_CMD_SET_INFO,              /* only used in GET_INFO reply */
309         IPVS_CMD_GET_INFO,              /* get general IPVS info */
310
311         IPVS_CMD_ZERO,                  /* zero all counters and stats */
312         IPVS_CMD_FLUSH,                 /* flush services and dests */
313
314         __IPVS_CMD_MAX,
315 };
316
317 #define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1)
318
319 /* Attributes used in the first level of commands */
320 enum {
321         IPVS_CMD_ATTR_UNSPEC = 0,
322         IPVS_CMD_ATTR_SERVICE,          /* nested service attribute */
323         IPVS_CMD_ATTR_DEST,             /* nested destination attribute */
324         IPVS_CMD_ATTR_DAEMON,           /* nested sync daemon attribute */
325         IPVS_CMD_ATTR_TIMEOUT_TCP,      /* TCP connection timeout */
326         IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,  /* TCP FIN wait timeout */
327         IPVS_CMD_ATTR_TIMEOUT_UDP,      /* UDP timeout */
328         __IPVS_CMD_ATTR_MAX,
329 };
330
331 #define IPVS_CMD_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
332
333 /*
334  * Attributes used to describe a service
335  *
336  * Used inside nested attribute IPVS_CMD_ATTR_SERVICE
337  */
338 enum {
339         IPVS_SVC_ATTR_UNSPEC = 0,
340         IPVS_SVC_ATTR_AF,               /* address family */
341         IPVS_SVC_ATTR_PROTOCOL,         /* virtual service protocol */
342         IPVS_SVC_ATTR_ADDR,             /* virtual service address */
343         IPVS_SVC_ATTR_PORT,             /* virtual service port */
344         IPVS_SVC_ATTR_FWMARK,           /* firewall mark of service */
345
346         IPVS_SVC_ATTR_SCHED_NAME,       /* name of scheduler */
347         IPVS_SVC_ATTR_FLAGS,            /* virtual service flags */
348         IPVS_SVC_ATTR_TIMEOUT,          /* persistent timeout */
349         IPVS_SVC_ATTR_NETMASK,          /* persistent netmask */
350
351         IPVS_SVC_ATTR_STATS,            /* nested attribute for service stats */
352
353         IPVS_SVC_ATTR_PE_NAME,          /* name of ct retriever */
354
355         __IPVS_SVC_ATTR_MAX,
356 };
357
358 #define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
359
360 /*
361  * Attributes used to describe a destination (real server)
362  *
363  * Used inside nested attribute IPVS_CMD_ATTR_DEST
364  */
365 enum {
366         IPVS_DEST_ATTR_UNSPEC = 0,
367         IPVS_DEST_ATTR_ADDR,            /* real server address */
368         IPVS_DEST_ATTR_PORT,            /* real server port */
369
370         IPVS_DEST_ATTR_FWD_METHOD,      /* forwarding method */
371         IPVS_DEST_ATTR_WEIGHT,          /* destination weight */
372
373         IPVS_DEST_ATTR_U_THRESH,        /* upper threshold */
374         IPVS_DEST_ATTR_L_THRESH,        /* lower threshold */
375
376         IPVS_DEST_ATTR_ACTIVE_CONNS,    /* active connections */
377         IPVS_DEST_ATTR_INACT_CONNS,     /* inactive connections */
378         IPVS_DEST_ATTR_PERSIST_CONNS,   /* persistent connections */
379
380         IPVS_DEST_ATTR_STATS,           /* nested attribute for dest stats */
381         __IPVS_DEST_ATTR_MAX,
382 };
383
384 #define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
385
386 /*
387  * Attributes describing a sync daemon
388  *
389  * Used inside nested attribute IPVS_CMD_ATTR_DAEMON
390  */
391 enum {
392         IPVS_DAEMON_ATTR_UNSPEC = 0,
393         IPVS_DAEMON_ATTR_STATE,         /* sync daemon state (master/backup) */
394         IPVS_DAEMON_ATTR_MCAST_IFN,     /* multicast interface name */
395         IPVS_DAEMON_ATTR_SYNC_ID,       /* SyncID we belong to */
396         __IPVS_DAEMON_ATTR_MAX,
397 };
398
399 #define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1)
400
401 /*
402  * Attributes used to describe service or destination entry statistics
403  *
404  * Used inside nested attributes IPVS_SVC_ATTR_STATS and IPVS_DEST_ATTR_STATS
405  */
406 enum {
407         IPVS_STATS_ATTR_UNSPEC = 0,
408         IPVS_STATS_ATTR_CONNS,          /* connections scheduled */
409         IPVS_STATS_ATTR_INPKTS,         /* incoming packets */
410         IPVS_STATS_ATTR_OUTPKTS,        /* outgoing packets */
411         IPVS_STATS_ATTR_INBYTES,        /* incoming bytes */
412         IPVS_STATS_ATTR_OUTBYTES,       /* outgoing bytes */
413
414         IPVS_STATS_ATTR_CPS,            /* current connection rate */
415         IPVS_STATS_ATTR_INPPS,          /* current in packet rate */
416         IPVS_STATS_ATTR_OUTPPS,         /* current out packet rate */
417         IPVS_STATS_ATTR_INBPS,          /* current in byte rate */
418         IPVS_STATS_ATTR_OUTBPS,         /* current out byte rate */
419         __IPVS_STATS_ATTR_MAX,
420 };
421
422 #define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1)
423
424 /* Attributes used in response to IPVS_CMD_GET_INFO command */
425 enum {
426         IPVS_INFO_ATTR_UNSPEC = 0,
427         IPVS_INFO_ATTR_VERSION,         /* IPVS version number */
428         IPVS_INFO_ATTR_CONN_TAB_SIZE,   /* size of connection hash table */
429         __IPVS_INFO_ATTR_MAX,
430 };
431
432 #define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1)
433
434 #endif  /* _IP_VS_H */