xref: /linux-6.15/include/uapi/linux/ip_vs.h (revision cd67cd5e)
1607ca46eSDavid Howells /*
2607ca46eSDavid Howells  *      IP Virtual Server
3607ca46eSDavid Howells  *      data structure and functionality definitions
4607ca46eSDavid Howells  */
5607ca46eSDavid Howells 
6607ca46eSDavid Howells #ifndef _IP_VS_H
7607ca46eSDavid Howells #define _IP_VS_H
8607ca46eSDavid Howells 
9607ca46eSDavid Howells #include <linux/types.h>	/* For __beXX types in userland */
10607ca46eSDavid Howells 
11607ca46eSDavid Howells #define IP_VS_VERSION_CODE	0x010201
12607ca46eSDavid Howells #define NVERSION(version)			\
13607ca46eSDavid Howells 	(version >> 16) & 0xFF,			\
14607ca46eSDavid Howells 	(version >> 8) & 0xFF,			\
15607ca46eSDavid Howells 	version & 0xFF
16607ca46eSDavid Howells 
17607ca46eSDavid Howells /*
18607ca46eSDavid Howells  *      Virtual Service Flags
19607ca46eSDavid Howells  */
20607ca46eSDavid Howells #define IP_VS_SVC_F_PERSISTENT	0x0001		/* persistent port */
21607ca46eSDavid Howells #define IP_VS_SVC_F_HASHED	0x0002		/* hashed entry */
22607ca46eSDavid Howells #define IP_VS_SVC_F_ONEPACKET	0x0004		/* one-packet scheduling */
23eba3b5a7SAlexander Frolkin #define IP_VS_SVC_F_SCHED1	0x0008		/* scheduler flag 1 */
24eba3b5a7SAlexander Frolkin #define IP_VS_SVC_F_SCHED2	0x0010		/* scheduler flag 2 */
25eba3b5a7SAlexander Frolkin #define IP_VS_SVC_F_SCHED3	0x0020		/* scheduler flag 3 */
26eba3b5a7SAlexander Frolkin 
27eba3b5a7SAlexander Frolkin #define IP_VS_SVC_F_SCHED_SH_FALLBACK	IP_VS_SVC_F_SCHED1 /* SH fallback */
28eba3b5a7SAlexander Frolkin #define IP_VS_SVC_F_SCHED_SH_PORT	IP_VS_SVC_F_SCHED2 /* SH use port */
29607ca46eSDavid Howells 
30607ca46eSDavid Howells /*
31607ca46eSDavid Howells  *      Destination Server Flags
32607ca46eSDavid Howells  */
33607ca46eSDavid Howells #define IP_VS_DEST_F_AVAILABLE	0x0001		/* server is available */
34607ca46eSDavid Howells #define IP_VS_DEST_F_OVERLOAD	0x0002		/* server is overloaded */
35607ca46eSDavid Howells 
36607ca46eSDavid Howells /*
37607ca46eSDavid Howells  *      IPVS sync daemon states
38607ca46eSDavid Howells  */
39607ca46eSDavid Howells #define IP_VS_STATE_NONE	0x0000		/* daemon is stopped */
40607ca46eSDavid Howells #define IP_VS_STATE_MASTER	0x0001		/* started as master */
41607ca46eSDavid Howells #define IP_VS_STATE_BACKUP	0x0002		/* started as backup */
42607ca46eSDavid Howells 
43607ca46eSDavid Howells /*
44607ca46eSDavid Howells  *      IPVS socket options
45607ca46eSDavid Howells  */
46607ca46eSDavid Howells #define IP_VS_BASE_CTL		(64+1024+64)		/* base */
47607ca46eSDavid Howells 
48607ca46eSDavid Howells #define IP_VS_SO_SET_NONE	IP_VS_BASE_CTL		/* just peek */
49607ca46eSDavid Howells #define IP_VS_SO_SET_INSERT	(IP_VS_BASE_CTL+1)
50607ca46eSDavid Howells #define IP_VS_SO_SET_ADD	(IP_VS_BASE_CTL+2)
51607ca46eSDavid Howells #define IP_VS_SO_SET_EDIT	(IP_VS_BASE_CTL+3)
52607ca46eSDavid Howells #define IP_VS_SO_SET_DEL	(IP_VS_BASE_CTL+4)
53607ca46eSDavid Howells #define IP_VS_SO_SET_FLUSH	(IP_VS_BASE_CTL+5)
54607ca46eSDavid Howells #define IP_VS_SO_SET_LIST	(IP_VS_BASE_CTL+6)
55607ca46eSDavid Howells #define IP_VS_SO_SET_ADDDEST	(IP_VS_BASE_CTL+7)
56607ca46eSDavid Howells #define IP_VS_SO_SET_DELDEST	(IP_VS_BASE_CTL+8)
57607ca46eSDavid Howells #define IP_VS_SO_SET_EDITDEST	(IP_VS_BASE_CTL+9)
58607ca46eSDavid Howells #define IP_VS_SO_SET_TIMEOUT	(IP_VS_BASE_CTL+10)
59607ca46eSDavid Howells #define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11)
60607ca46eSDavid Howells #define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12)
61607ca46eSDavid Howells #define IP_VS_SO_SET_RESTORE    (IP_VS_BASE_CTL+13)
62607ca46eSDavid Howells #define IP_VS_SO_SET_SAVE       (IP_VS_BASE_CTL+14)
63607ca46eSDavid Howells #define IP_VS_SO_SET_ZERO	(IP_VS_BASE_CTL+15)
64607ca46eSDavid Howells #define IP_VS_SO_SET_MAX	IP_VS_SO_SET_ZERO
65607ca46eSDavid Howells 
66607ca46eSDavid Howells #define IP_VS_SO_GET_VERSION	IP_VS_BASE_CTL
67607ca46eSDavid Howells #define IP_VS_SO_GET_INFO	(IP_VS_BASE_CTL+1)
68607ca46eSDavid Howells #define IP_VS_SO_GET_SERVICES	(IP_VS_BASE_CTL+2)
69607ca46eSDavid Howells #define IP_VS_SO_GET_SERVICE	(IP_VS_BASE_CTL+3)
70607ca46eSDavid Howells #define IP_VS_SO_GET_DESTS	(IP_VS_BASE_CTL+4)
71607ca46eSDavid Howells #define IP_VS_SO_GET_DEST	(IP_VS_BASE_CTL+5)	/* not used now */
72607ca46eSDavid Howells #define IP_VS_SO_GET_TIMEOUT	(IP_VS_BASE_CTL+6)
73607ca46eSDavid Howells #define IP_VS_SO_GET_DAEMON	(IP_VS_BASE_CTL+7)
74607ca46eSDavid Howells #define IP_VS_SO_GET_MAX	IP_VS_SO_GET_DAEMON
75607ca46eSDavid Howells 
76607ca46eSDavid Howells 
77607ca46eSDavid Howells /*
78607ca46eSDavid Howells  *      IPVS Connection Flags
79607ca46eSDavid Howells  *      Only flags 0..15 are sent to backup server
80607ca46eSDavid Howells  */
81607ca46eSDavid Howells #define IP_VS_CONN_F_FWD_MASK	0x0007		/* mask for the fwd methods */
82607ca46eSDavid Howells #define IP_VS_CONN_F_MASQ	0x0000		/* masquerading/NAT */
83607ca46eSDavid Howells #define IP_VS_CONN_F_LOCALNODE	0x0001		/* local node */
84607ca46eSDavid Howells #define IP_VS_CONN_F_TUNNEL	0x0002		/* tunneling */
85607ca46eSDavid Howells #define IP_VS_CONN_F_DROUTE	0x0003		/* direct routing */
86607ca46eSDavid Howells #define IP_VS_CONN_F_BYPASS	0x0004		/* cache bypass */
87607ca46eSDavid Howells #define IP_VS_CONN_F_SYNC	0x0020		/* entry created by sync */
88607ca46eSDavid Howells #define IP_VS_CONN_F_HASHED	0x0040		/* hashed entry */
89607ca46eSDavid Howells #define IP_VS_CONN_F_NOOUTPUT	0x0080		/* no output packets */
90607ca46eSDavid Howells #define IP_VS_CONN_F_INACTIVE	0x0100		/* not established */
91607ca46eSDavid Howells #define IP_VS_CONN_F_OUT_SEQ	0x0200		/* must do output seq adjust */
92607ca46eSDavid Howells #define IP_VS_CONN_F_IN_SEQ	0x0400		/* must do input seq adjust */
93607ca46eSDavid Howells #define IP_VS_CONN_F_SEQ_MASK	0x0600		/* in/out sequence mask */
94607ca46eSDavid Howells #define IP_VS_CONN_F_NO_CPORT	0x0800		/* no client port set yet */
95607ca46eSDavid Howells #define IP_VS_CONN_F_TEMPLATE	0x1000		/* template, not connection */
96607ca46eSDavid Howells #define IP_VS_CONN_F_ONE_PACKET	0x2000		/* forward only one packet */
97607ca46eSDavid Howells 
98607ca46eSDavid Howells /* Initial bits allowed in backup server */
99607ca46eSDavid Howells #define IP_VS_CONN_F_BACKUP_MASK (IP_VS_CONN_F_FWD_MASK | \
100607ca46eSDavid Howells 				  IP_VS_CONN_F_NOOUTPUT | \
101607ca46eSDavid Howells 				  IP_VS_CONN_F_INACTIVE | \
102607ca46eSDavid Howells 				  IP_VS_CONN_F_SEQ_MASK | \
103607ca46eSDavid Howells 				  IP_VS_CONN_F_NO_CPORT | \
104607ca46eSDavid Howells 				  IP_VS_CONN_F_TEMPLATE \
105607ca46eSDavid Howells 				 )
106607ca46eSDavid Howells 
107607ca46eSDavid Howells /* Bits allowed to update in backup server */
108607ca46eSDavid Howells #define IP_VS_CONN_F_BACKUP_UPD_MASK (IP_VS_CONN_F_INACTIVE | \
109607ca46eSDavid Howells 				      IP_VS_CONN_F_SEQ_MASK)
110607ca46eSDavid Howells 
111607ca46eSDavid Howells /* Flags that are not sent to backup server start from bit 16 */
112607ca46eSDavid Howells #define IP_VS_CONN_F_NFCT	(1 << 16)	/* use netfilter conntrack */
113607ca46eSDavid Howells 
114607ca46eSDavid Howells /* Connection flags from destination that can be changed by user space */
115607ca46eSDavid Howells #define IP_VS_CONN_F_DEST_MASK (IP_VS_CONN_F_FWD_MASK | \
116607ca46eSDavid Howells 				IP_VS_CONN_F_ONE_PACKET | \
117607ca46eSDavid Howells 				IP_VS_CONN_F_NFCT | \
118607ca46eSDavid Howells 				0)
119607ca46eSDavid Howells 
120607ca46eSDavid Howells #define IP_VS_SCHEDNAME_MAXLEN	16
121607ca46eSDavid Howells #define IP_VS_PENAME_MAXLEN	16
122607ca46eSDavid Howells #define IP_VS_IFNAME_MAXLEN	16
123607ca46eSDavid Howells 
124607ca46eSDavid Howells #define IP_VS_PEDATA_MAXLEN     255
125607ca46eSDavid Howells 
126607ca46eSDavid Howells /*
127607ca46eSDavid Howells  *	The struct ip_vs_service_user and struct ip_vs_dest_user are
128607ca46eSDavid Howells  *	used to set IPVS rules through setsockopt.
129607ca46eSDavid Howells  */
130607ca46eSDavid Howells struct ip_vs_service_user {
131607ca46eSDavid Howells 	/* virtual service addresses */
132607ca46eSDavid Howells 	__u16		protocol;
133607ca46eSDavid Howells 	__be32			addr;		/* virtual ip address */
134607ca46eSDavid Howells 	__be16			port;
135607ca46eSDavid Howells 	__u32		fwmark;		/* firwall mark of service */
136607ca46eSDavid Howells 
137607ca46eSDavid Howells 	/* virtual service options */
138607ca46eSDavid Howells 	char			sched_name[IP_VS_SCHEDNAME_MAXLEN];
139607ca46eSDavid Howells 	unsigned int		flags;		/* virtual service flags */
140607ca46eSDavid Howells 	unsigned int		timeout;	/* persistent timeout in sec */
141607ca46eSDavid Howells 	__be32			netmask;	/* persistent netmask */
142607ca46eSDavid Howells };
143607ca46eSDavid Howells 
144607ca46eSDavid Howells 
145607ca46eSDavid Howells struct ip_vs_dest_user {
146607ca46eSDavid Howells 	/* destination server address */
147607ca46eSDavid Howells 	__be32			addr;
148607ca46eSDavid Howells 	__be16			port;
149607ca46eSDavid Howells 
150607ca46eSDavid Howells 	/* real server options */
151607ca46eSDavid Howells 	unsigned int		conn_flags;	/* connection flags */
152607ca46eSDavid Howells 	int			weight;		/* destination weight */
153607ca46eSDavid Howells 
154607ca46eSDavid Howells 	/* thresholds for active connections */
155607ca46eSDavid Howells 	__u32		u_threshold;	/* upper threshold */
156607ca46eSDavid Howells 	__u32		l_threshold;	/* lower threshold */
157607ca46eSDavid Howells };
158607ca46eSDavid Howells 
159607ca46eSDavid Howells 
160607ca46eSDavid Howells /*
161607ca46eSDavid Howells  *	IPVS statistics object (for user space)
162607ca46eSDavid Howells  */
163607ca46eSDavid Howells struct ip_vs_stats_user {
164607ca46eSDavid Howells 	__u32                   conns;          /* connections scheduled */
165607ca46eSDavid Howells 	__u32                   inpkts;         /* incoming packets */
166607ca46eSDavid Howells 	__u32                   outpkts;        /* outgoing packets */
167607ca46eSDavid Howells 	__u64                   inbytes;        /* incoming bytes */
168607ca46eSDavid Howells 	__u64                   outbytes;       /* outgoing bytes */
169607ca46eSDavid Howells 
170607ca46eSDavid Howells 	__u32			cps;		/* current connection rate */
171607ca46eSDavid Howells 	__u32			inpps;		/* current in packet rate */
172607ca46eSDavid Howells 	__u32			outpps;		/* current out packet rate */
173607ca46eSDavid Howells 	__u32			inbps;		/* current in byte rate */
174607ca46eSDavid Howells 	__u32			outbps;		/* current out byte rate */
175607ca46eSDavid Howells };
176607ca46eSDavid Howells 
177607ca46eSDavid Howells 
178607ca46eSDavid Howells /* The argument to IP_VS_SO_GET_INFO */
179607ca46eSDavid Howells struct ip_vs_getinfo {
180607ca46eSDavid Howells 	/* version number */
181607ca46eSDavid Howells 	unsigned int		version;
182607ca46eSDavid Howells 
183607ca46eSDavid Howells 	/* size of connection hash table */
184607ca46eSDavid Howells 	unsigned int		size;
185607ca46eSDavid Howells 
186607ca46eSDavid Howells 	/* number of virtual services */
187607ca46eSDavid Howells 	unsigned int		num_services;
188607ca46eSDavid Howells };
189607ca46eSDavid Howells 
190607ca46eSDavid Howells 
191607ca46eSDavid Howells /* The argument to IP_VS_SO_GET_SERVICE */
192607ca46eSDavid Howells struct ip_vs_service_entry {
193607ca46eSDavid Howells 	/* which service: user fills in these */
194607ca46eSDavid Howells 	__u16		protocol;
195607ca46eSDavid Howells 	__be32			addr;		/* virtual address */
196607ca46eSDavid Howells 	__be16			port;
197607ca46eSDavid Howells 	__u32		fwmark;		/* firwall mark of service */
198607ca46eSDavid Howells 
199607ca46eSDavid Howells 	/* service options */
200607ca46eSDavid Howells 	char			sched_name[IP_VS_SCHEDNAME_MAXLEN];
201607ca46eSDavid Howells 	unsigned int		flags;          /* virtual service flags */
202607ca46eSDavid Howells 	unsigned int		timeout;	/* persistent timeout */
203607ca46eSDavid Howells 	__be32			netmask;	/* persistent netmask */
204607ca46eSDavid Howells 
205607ca46eSDavid Howells 	/* number of real servers */
206607ca46eSDavid Howells 	unsigned int		num_dests;
207607ca46eSDavid Howells 
208607ca46eSDavid Howells 	/* statistics */
209607ca46eSDavid Howells 	struct ip_vs_stats_user stats;
210607ca46eSDavid Howells };
211607ca46eSDavid Howells 
212607ca46eSDavid Howells 
213607ca46eSDavid Howells struct ip_vs_dest_entry {
214607ca46eSDavid Howells 	__be32			addr;		/* destination address */
215607ca46eSDavid Howells 	__be16			port;
216607ca46eSDavid Howells 	unsigned int		conn_flags;	/* connection flags */
217607ca46eSDavid Howells 	int			weight;		/* destination weight */
218607ca46eSDavid Howells 
219607ca46eSDavid Howells 	__u32		u_threshold;	/* upper threshold */
220607ca46eSDavid Howells 	__u32		l_threshold;	/* lower threshold */
221607ca46eSDavid Howells 
222607ca46eSDavid Howells 	__u32		activeconns;	/* active connections */
223607ca46eSDavid Howells 	__u32		inactconns;	/* inactive connections */
224607ca46eSDavid Howells 	__u32		persistconns;	/* persistent connections */
225607ca46eSDavid Howells 
226607ca46eSDavid Howells 	/* statistics */
227607ca46eSDavid Howells 	struct ip_vs_stats_user stats;
228607ca46eSDavid Howells };
229607ca46eSDavid Howells 
230607ca46eSDavid Howells 
231607ca46eSDavid Howells /* The argument to IP_VS_SO_GET_DESTS */
232607ca46eSDavid Howells struct ip_vs_get_dests {
233607ca46eSDavid Howells 	/* which service: user fills in these */
234607ca46eSDavid Howells 	__u16		protocol;
235607ca46eSDavid Howells 	__be32			addr;		/* virtual address */
236607ca46eSDavid Howells 	__be16			port;
237607ca46eSDavid Howells 	__u32		fwmark;		/* firwall mark of service */
238607ca46eSDavid Howells 
239607ca46eSDavid Howells 	/* number of real servers */
240607ca46eSDavid Howells 	unsigned int		num_dests;
241607ca46eSDavid Howells 
242607ca46eSDavid Howells 	/* the real servers */
243607ca46eSDavid Howells 	struct ip_vs_dest_entry	entrytable[0];
244607ca46eSDavid Howells };
245607ca46eSDavid Howells 
246607ca46eSDavid Howells 
247607ca46eSDavid Howells /* The argument to IP_VS_SO_GET_SERVICES */
248607ca46eSDavid Howells struct ip_vs_get_services {
249607ca46eSDavid Howells 	/* number of virtual services */
250607ca46eSDavid Howells 	unsigned int		num_services;
251607ca46eSDavid Howells 
252607ca46eSDavid Howells 	/* service table */
253607ca46eSDavid Howells 	struct ip_vs_service_entry entrytable[0];
254607ca46eSDavid Howells };
255607ca46eSDavid Howells 
256607ca46eSDavid Howells 
257607ca46eSDavid Howells /* The argument to IP_VS_SO_GET_TIMEOUT */
258607ca46eSDavid Howells struct ip_vs_timeout_user {
259607ca46eSDavid Howells 	int			tcp_timeout;
260607ca46eSDavid Howells 	int			tcp_fin_timeout;
261607ca46eSDavid Howells 	int			udp_timeout;
262607ca46eSDavid Howells };
263607ca46eSDavid Howells 
264607ca46eSDavid Howells 
265607ca46eSDavid Howells /* The argument to IP_VS_SO_GET_DAEMON */
266607ca46eSDavid Howells struct ip_vs_daemon_user {
267607ca46eSDavid Howells 	/* sync daemon state (master/backup) */
268607ca46eSDavid Howells 	int			state;
269607ca46eSDavid Howells 
270607ca46eSDavid Howells 	/* multicast interface name */
271607ca46eSDavid Howells 	char			mcast_ifn[IP_VS_IFNAME_MAXLEN];
272607ca46eSDavid Howells 
273607ca46eSDavid Howells 	/* SyncID we belong to */
274607ca46eSDavid Howells 	int			syncid;
275607ca46eSDavid Howells };
276607ca46eSDavid Howells 
277607ca46eSDavid Howells /*
278607ca46eSDavid Howells  *
279607ca46eSDavid Howells  * IPVS Generic Netlink interface definitions
280607ca46eSDavid Howells  *
281607ca46eSDavid Howells  */
282607ca46eSDavid Howells 
283607ca46eSDavid Howells /* Generic Netlink family info */
284607ca46eSDavid Howells 
285607ca46eSDavid Howells #define IPVS_GENL_NAME		"IPVS"
286607ca46eSDavid Howells #define IPVS_GENL_VERSION	0x1
287607ca46eSDavid Howells 
288607ca46eSDavid Howells struct ip_vs_flags {
2890a925864SJulian Anastasov 	__u32 flags;
2900a925864SJulian Anastasov 	__u32 mask;
291607ca46eSDavid Howells };
292607ca46eSDavid Howells 
293607ca46eSDavid Howells /* Generic Netlink command attributes */
294607ca46eSDavid Howells enum {
295607ca46eSDavid Howells 	IPVS_CMD_UNSPEC = 0,
296607ca46eSDavid Howells 
297607ca46eSDavid Howells 	IPVS_CMD_NEW_SERVICE,		/* add service */
298607ca46eSDavid Howells 	IPVS_CMD_SET_SERVICE,		/* modify service */
299607ca46eSDavid Howells 	IPVS_CMD_DEL_SERVICE,		/* delete service */
300607ca46eSDavid Howells 	IPVS_CMD_GET_SERVICE,		/* get service info */
301607ca46eSDavid Howells 
302607ca46eSDavid Howells 	IPVS_CMD_NEW_DEST,		/* add destination */
303607ca46eSDavid Howells 	IPVS_CMD_SET_DEST,		/* modify destination */
304607ca46eSDavid Howells 	IPVS_CMD_DEL_DEST,		/* delete destination */
305607ca46eSDavid Howells 	IPVS_CMD_GET_DEST,		/* get destination info */
306607ca46eSDavid Howells 
307607ca46eSDavid Howells 	IPVS_CMD_NEW_DAEMON,		/* start sync daemon */
308607ca46eSDavid Howells 	IPVS_CMD_DEL_DAEMON,		/* stop sync daemon */
309607ca46eSDavid Howells 	IPVS_CMD_GET_DAEMON,		/* get sync daemon status */
310607ca46eSDavid Howells 
311607ca46eSDavid Howells 	IPVS_CMD_SET_CONFIG,		/* set config settings */
312607ca46eSDavid Howells 	IPVS_CMD_GET_CONFIG,		/* get config settings */
313607ca46eSDavid Howells 
314607ca46eSDavid Howells 	IPVS_CMD_SET_INFO,		/* only used in GET_INFO reply */
315607ca46eSDavid Howells 	IPVS_CMD_GET_INFO,		/* get general IPVS info */
316607ca46eSDavid Howells 
317607ca46eSDavid Howells 	IPVS_CMD_ZERO,			/* zero all counters and stats */
318607ca46eSDavid Howells 	IPVS_CMD_FLUSH,			/* flush services and dests */
319607ca46eSDavid Howells 
320607ca46eSDavid Howells 	__IPVS_CMD_MAX,
321607ca46eSDavid Howells };
322607ca46eSDavid Howells 
323607ca46eSDavid Howells #define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1)
324607ca46eSDavid Howells 
325607ca46eSDavid Howells /* Attributes used in the first level of commands */
326607ca46eSDavid Howells enum {
327607ca46eSDavid Howells 	IPVS_CMD_ATTR_UNSPEC = 0,
328607ca46eSDavid Howells 	IPVS_CMD_ATTR_SERVICE,		/* nested service attribute */
329607ca46eSDavid Howells 	IPVS_CMD_ATTR_DEST,		/* nested destination attribute */
330607ca46eSDavid Howells 	IPVS_CMD_ATTR_DAEMON,		/* nested sync daemon attribute */
331607ca46eSDavid Howells 	IPVS_CMD_ATTR_TIMEOUT_TCP,	/* TCP connection timeout */
332607ca46eSDavid Howells 	IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,	/* TCP FIN wait timeout */
333607ca46eSDavid Howells 	IPVS_CMD_ATTR_TIMEOUT_UDP,	/* UDP timeout */
334607ca46eSDavid Howells 	__IPVS_CMD_ATTR_MAX,
335607ca46eSDavid Howells };
336607ca46eSDavid Howells 
337120c9794SJulian Anastasov #define IPVS_CMD_ATTR_MAX (__IPVS_CMD_ATTR_MAX - 1)
338607ca46eSDavid Howells 
339607ca46eSDavid Howells /*
340607ca46eSDavid Howells  * Attributes used to describe a service
341607ca46eSDavid Howells  *
342607ca46eSDavid Howells  * Used inside nested attribute IPVS_CMD_ATTR_SERVICE
343607ca46eSDavid Howells  */
344607ca46eSDavid Howells enum {
345607ca46eSDavid Howells 	IPVS_SVC_ATTR_UNSPEC = 0,
346607ca46eSDavid Howells 	IPVS_SVC_ATTR_AF,		/* address family */
347607ca46eSDavid Howells 	IPVS_SVC_ATTR_PROTOCOL,		/* virtual service protocol */
348607ca46eSDavid Howells 	IPVS_SVC_ATTR_ADDR,		/* virtual service address */
349607ca46eSDavid Howells 	IPVS_SVC_ATTR_PORT,		/* virtual service port */
350607ca46eSDavid Howells 	IPVS_SVC_ATTR_FWMARK,		/* firewall mark of service */
351607ca46eSDavid Howells 
352607ca46eSDavid Howells 	IPVS_SVC_ATTR_SCHED_NAME,	/* name of scheduler */
353607ca46eSDavid Howells 	IPVS_SVC_ATTR_FLAGS,		/* virtual service flags */
354607ca46eSDavid Howells 	IPVS_SVC_ATTR_TIMEOUT,		/* persistent timeout */
355607ca46eSDavid Howells 	IPVS_SVC_ATTR_NETMASK,		/* persistent netmask */
356607ca46eSDavid Howells 
357607ca46eSDavid Howells 	IPVS_SVC_ATTR_STATS,		/* nested attribute for service stats */
358607ca46eSDavid Howells 
359607ca46eSDavid Howells 	IPVS_SVC_ATTR_PE_NAME,		/* name of ct retriever */
360607ca46eSDavid Howells 
361*cd67cd5eSJulian Anastasov 	IPVS_SVC_ATTR_STATS64,		/* nested attribute for service stats */
362*cd67cd5eSJulian Anastasov 
363607ca46eSDavid Howells 	__IPVS_SVC_ATTR_MAX,
364607ca46eSDavid Howells };
365607ca46eSDavid Howells 
366607ca46eSDavid Howells #define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
367607ca46eSDavid Howells 
368607ca46eSDavid Howells /*
369607ca46eSDavid Howells  * Attributes used to describe a destination (real server)
370607ca46eSDavid Howells  *
371607ca46eSDavid Howells  * Used inside nested attribute IPVS_CMD_ATTR_DEST
372607ca46eSDavid Howells  */
373607ca46eSDavid Howells enum {
374607ca46eSDavid Howells 	IPVS_DEST_ATTR_UNSPEC = 0,
375607ca46eSDavid Howells 	IPVS_DEST_ATTR_ADDR,		/* real server address */
376607ca46eSDavid Howells 	IPVS_DEST_ATTR_PORT,		/* real server port */
377607ca46eSDavid Howells 
378607ca46eSDavid Howells 	IPVS_DEST_ATTR_FWD_METHOD,	/* forwarding method */
379607ca46eSDavid Howells 	IPVS_DEST_ATTR_WEIGHT,		/* destination weight */
380607ca46eSDavid Howells 
381607ca46eSDavid Howells 	IPVS_DEST_ATTR_U_THRESH,	/* upper threshold */
382607ca46eSDavid Howells 	IPVS_DEST_ATTR_L_THRESH,	/* lower threshold */
383607ca46eSDavid Howells 
384607ca46eSDavid Howells 	IPVS_DEST_ATTR_ACTIVE_CONNS,	/* active connections */
385607ca46eSDavid Howells 	IPVS_DEST_ATTR_INACT_CONNS,	/* inactive connections */
386607ca46eSDavid Howells 	IPVS_DEST_ATTR_PERSIST_CONNS,	/* persistent connections */
387607ca46eSDavid Howells 
388607ca46eSDavid Howells 	IPVS_DEST_ATTR_STATS,		/* nested attribute for dest stats */
3896cff339bSAlex Gartrell 
3906cff339bSAlex Gartrell 	IPVS_DEST_ATTR_ADDR_FAMILY,	/* Address family of address */
3916cff339bSAlex Gartrell 
392*cd67cd5eSJulian Anastasov 	IPVS_DEST_ATTR_STATS64,		/* nested attribute for dest stats */
393*cd67cd5eSJulian Anastasov 
394607ca46eSDavid Howells 	__IPVS_DEST_ATTR_MAX,
395607ca46eSDavid Howells };
396607ca46eSDavid Howells 
397607ca46eSDavid Howells #define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
398607ca46eSDavid Howells 
399607ca46eSDavid Howells /*
400607ca46eSDavid Howells  * Attributes describing a sync daemon
401607ca46eSDavid Howells  *
402607ca46eSDavid Howells  * Used inside nested attribute IPVS_CMD_ATTR_DAEMON
403607ca46eSDavid Howells  */
404607ca46eSDavid Howells enum {
405607ca46eSDavid Howells 	IPVS_DAEMON_ATTR_UNSPEC = 0,
406607ca46eSDavid Howells 	IPVS_DAEMON_ATTR_STATE,		/* sync daemon state (master/backup) */
407607ca46eSDavid Howells 	IPVS_DAEMON_ATTR_MCAST_IFN,	/* multicast interface name */
408607ca46eSDavid Howells 	IPVS_DAEMON_ATTR_SYNC_ID,	/* SyncID we belong to */
409607ca46eSDavid Howells 	__IPVS_DAEMON_ATTR_MAX,
410607ca46eSDavid Howells };
411607ca46eSDavid Howells 
412607ca46eSDavid Howells #define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1)
413607ca46eSDavid Howells 
414607ca46eSDavid Howells /*
415607ca46eSDavid Howells  * Attributes used to describe service or destination entry statistics
416607ca46eSDavid Howells  *
417*cd67cd5eSJulian Anastasov  * Used inside nested attributes IPVS_SVC_ATTR_STATS, IPVS_DEST_ATTR_STATS,
418*cd67cd5eSJulian Anastasov  * IPVS_SVC_ATTR_STATS64 and IPVS_DEST_ATTR_STATS64.
419607ca46eSDavid Howells  */
420607ca46eSDavid Howells enum {
421607ca46eSDavid Howells 	IPVS_STATS_ATTR_UNSPEC = 0,
422607ca46eSDavid Howells 	IPVS_STATS_ATTR_CONNS,		/* connections scheduled */
423607ca46eSDavid Howells 	IPVS_STATS_ATTR_INPKTS,		/* incoming packets */
424607ca46eSDavid Howells 	IPVS_STATS_ATTR_OUTPKTS,	/* outgoing packets */
425607ca46eSDavid Howells 	IPVS_STATS_ATTR_INBYTES,	/* incoming bytes */
426607ca46eSDavid Howells 	IPVS_STATS_ATTR_OUTBYTES,	/* outgoing bytes */
427607ca46eSDavid Howells 
428607ca46eSDavid Howells 	IPVS_STATS_ATTR_CPS,		/* current connection rate */
429607ca46eSDavid Howells 	IPVS_STATS_ATTR_INPPS,		/* current in packet rate */
430607ca46eSDavid Howells 	IPVS_STATS_ATTR_OUTPPS,		/* current out packet rate */
431607ca46eSDavid Howells 	IPVS_STATS_ATTR_INBPS,		/* current in byte rate */
432607ca46eSDavid Howells 	IPVS_STATS_ATTR_OUTBPS,		/* current out byte rate */
433607ca46eSDavid Howells 	__IPVS_STATS_ATTR_MAX,
434607ca46eSDavid Howells };
435607ca46eSDavid Howells 
436607ca46eSDavid Howells #define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1)
437607ca46eSDavid Howells 
438607ca46eSDavid Howells /* Attributes used in response to IPVS_CMD_GET_INFO command */
439607ca46eSDavid Howells enum {
440607ca46eSDavid Howells 	IPVS_INFO_ATTR_UNSPEC = 0,
441607ca46eSDavid Howells 	IPVS_INFO_ATTR_VERSION,		/* IPVS version number */
442607ca46eSDavid Howells 	IPVS_INFO_ATTR_CONN_TAB_SIZE,	/* size of connection hash table */
443607ca46eSDavid Howells 	__IPVS_INFO_ATTR_MAX,
444607ca46eSDavid Howells };
445607ca46eSDavid Howells 
446607ca46eSDavid Howells #define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1)
447607ca46eSDavid Howells 
448607ca46eSDavid Howells #endif	/* _IP_VS_H */
449