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