Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


ip_vs.h
001: /*
002:  *      IP Virtual Server
003:  *      data structure and functionality definitions
004:  */
005: 
006: #ifndef _IP_VS_H
007: #define _IP_VS_H
008: 
009: #include <linux/types.h>        /* For __beXX types in userland */
010: 
011: #define IP_VS_VERSION_CODE      0x010201
012: #define NVERSION(version)                       \
013:         (version >> 16) & 0xFF,                 \
014:         (version >> 8) & 0xFF,                  \
015:         version & 0xFF
016: 
017: /*
018:  *      Virtual Service Flags
019:  */
020: #define IP_VS_SVC_F_PERSISTENT  0x0001          /* persistent port */
021: #define IP_VS_SVC_F_HASHED      0x0002          /* hashed entry */
022: #define IP_VS_SVC_F_ONEPACKET   0x0004          /* one-packet scheduling */
023: 
024: /*
025:  *      Destination Server Flags
026:  */
027: #define IP_VS_DEST_F_AVAILABLE  0x0001          /* server is available */
028: #define IP_VS_DEST_F_OVERLOAD   0x0002          /* server is overloaded */
029: 
030: /*
031:  *      IPVS sync daemon states
032:  */
033: #define IP_VS_STATE_NONE        0x0000          /* daemon is stopped */
034: #define IP_VS_STATE_MASTER      0x0001          /* started as master */
035: #define IP_VS_STATE_BACKUP      0x0002          /* started as backup */
036: 
037: /*
038:  *      IPVS socket options
039:  */
040: #define IP_VS_BASE_CTL          (64+1024+64)            /* base */
041: 
042: #define IP_VS_SO_SET_NONE       IP_VS_BASE_CTL          /* just peek */
043: #define IP_VS_SO_SET_INSERT     (IP_VS_BASE_CTL+1)
044: #define IP_VS_SO_SET_ADD        (IP_VS_BASE_CTL+2)
045: #define IP_VS_SO_SET_EDIT       (IP_VS_BASE_CTL+3)
046: #define IP_VS_SO_SET_DEL        (IP_VS_BASE_CTL+4)
047: #define IP_VS_SO_SET_FLUSH      (IP_VS_BASE_CTL+5)
048: #define IP_VS_SO_SET_LIST       (IP_VS_BASE_CTL+6)
049: #define IP_VS_SO_SET_ADDDEST    (IP_VS_BASE_CTL+7)
050: #define IP_VS_SO_SET_DELDEST    (IP_VS_BASE_CTL+8)
051: #define IP_VS_SO_SET_EDITDEST   (IP_VS_BASE_CTL+9)
052: #define IP_VS_SO_SET_TIMEOUT    (IP_VS_BASE_CTL+10)
053: #define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11)
054: #define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12)
055: #define IP_VS_SO_SET_RESTORE    (IP_VS_BASE_CTL+13)
056: #define IP_VS_SO_SET_SAVE       (IP_VS_BASE_CTL+14)
057: #define IP_VS_SO_SET_ZERO       (IP_VS_BASE_CTL+15)
058: #define IP_VS_SO_SET_MAX        IP_VS_SO_SET_ZERO
059: 
060: #define IP_VS_SO_GET_VERSION    IP_VS_BASE_CTL
061: #define IP_VS_SO_GET_INFO       (IP_VS_BASE_CTL+1)
062: #define IP_VS_SO_GET_SERVICES   (IP_VS_BASE_CTL+2)
063: #define IP_VS_SO_GET_SERVICE    (IP_VS_BASE_CTL+3)
064: #define IP_VS_SO_GET_DESTS      (IP_VS_BASE_CTL+4)
065: #define IP_VS_SO_GET_DEST       (IP_VS_BASE_CTL+5)      /* not used now */
066: #define IP_VS_SO_GET_TIMEOUT    (IP_VS_BASE_CTL+6)
067: #define IP_VS_SO_GET_DAEMON     (IP_VS_BASE_CTL+7)
068: #define IP_VS_SO_GET_MAX        IP_VS_SO_GET_DAEMON
069: 
070: 
071: /*
072:  *      IPVS Connection Flags
073:  *      Only flags 0..15 are sent to backup server
074:  */
075: #define IP_VS_CONN_F_FWD_MASK   0x0007          /* mask for the fwd methods */
076: #define IP_VS_CONN_F_MASQ       0x0000          /* masquerading/NAT */
077: #define IP_VS_CONN_F_LOCALNODE  0x0001          /* local node */
078: #define IP_VS_CONN_F_TUNNEL     0x0002          /* tunneling */
079: #define IP_VS_CONN_F_DROUTE     0x0003          /* direct routing */
080: #define IP_VS_CONN_F_BYPASS     0x0004          /* cache bypass */
081: #define IP_VS_CONN_F_SYNC       0x0020          /* entry created by sync */
082: #define IP_VS_CONN_F_HASHED     0x0040          /* hashed entry */
083: #define IP_VS_CONN_F_NOOUTPUT   0x0080          /* no output packets */
084: #define IP_VS_CONN_F_INACTIVE   0x0100          /* not established */
085: #define IP_VS_CONN_F_OUT_SEQ    0x0200          /* must do output seq adjust */
086: #define IP_VS_CONN_F_IN_SEQ     0x0400          /* must do input seq adjust */
087: #define IP_VS_CONN_F_SEQ_MASK   0x0600          /* in/out sequence mask */
088: #define IP_VS_CONN_F_NO_CPORT   0x0800          /* no client port set yet */
089: #define IP_VS_CONN_F_TEMPLATE   0x1000          /* template, not connection */
090: #define IP_VS_CONN_F_ONE_PACKET 0x2000          /* forward only one packet */
091: 
092: #define IP_VS_CONN_F_BACKUP_MASK (IP_VS_CONN_F_FWD_MASK | \
093:                                   IP_VS_CONN_F_NOOUTPUT | \
094:                                   IP_VS_CONN_F_INACTIVE | \
095:                                   IP_VS_CONN_F_SEQ_MASK | \
096:                                   IP_VS_CONN_F_NO_CPORT | \
097:                                   IP_VS_CONN_F_TEMPLATE \
098:                                  )
099: 
100: /* Flags that are not sent to backup server start from bit 16 */
101: #define IP_VS_CONN_F_NFCT       (1 << 16)       /* use netfilter conntrack */
102: 
103: /* Connection flags from destination that can be changed by user space */
104: #define IP_VS_CONN_F_DEST_MASK (IP_VS_CONN_F_FWD_MASK | \
105:                                 IP_VS_CONN_F_ONE_PACKET | \
106:                                 IP_VS_CONN_F_NFCT | \
107:                                 0)
108: 
109: #define IP_VS_SCHEDNAME_MAXLEN  16
110: #define IP_VS_PENAME_MAXLEN     16
111: #define IP_VS_IFNAME_MAXLEN     16
112: 
113: #define IP_VS_PEDATA_MAXLEN     255
114: 
115: /*
116:  *      The struct ip_vs_service_user and struct ip_vs_dest_user are
117:  *      used to set IPVS rules through setsockopt.
118:  */
119: struct ip_vs_service_user {
120:         /* virtual service addresses */
121:         __u16           protocol;
122:         __be32                  addr;           /* virtual ip address */
123:         __be16                  port;
124:         __u32           fwmark;         /* firwall mark of service */
125: 
126:         /* virtual service options */
127:         char                    sched_name[IP_VS_SCHEDNAME_MAXLEN];
128:         unsigned                flags;          /* virtual service flags */
129:         unsigned                timeout;        /* persistent timeout in sec */
130:         __be32                  netmask;        /* persistent netmask */
131: };
132: 
133: 
134: struct ip_vs_dest_user {
135:         /* destination server address */
136:         __be32                  addr;
137:         __be16                  port;
138: 
139:         /* real server options */
140:         unsigned                conn_flags;     /* connection flags */
141:         int                     weight;         /* destination weight */
142: 
143:         /* thresholds for active connections */
144:         __u32           u_threshold;    /* upper threshold */
145:         __u32           l_threshold;    /* lower threshold */
146: };
147: 
148: 
149: /*
150:  *      IPVS statistics object (for user space)
151:  */
152: struct ip_vs_stats_user {
153:         __u32                   conns;          /* connections scheduled */
154:         __u32                   inpkts;         /* incoming packets */
155:         __u32                   outpkts;        /* outgoing packets */
156:         __u64                   inbytes;        /* incoming bytes */
157:         __u64                   outbytes;       /* outgoing bytes */
158: 
159:         __u32                   cps;            /* current connection rate */
160:         __u32                   inpps;          /* current in packet rate */
161:         __u32                   outpps;         /* current out packet rate */
162:         __u32                   inbps;          /* current in byte rate */
163:         __u32                   outbps;         /* current out byte rate */
164: };
165: 
166: 
167: /* The argument to IP_VS_SO_GET_INFO */
168: struct ip_vs_getinfo {
169:         /* version number */
170:         unsigned int            version;
171: 
172:         /* size of connection hash table */
173:         unsigned int            size;
174: 
175:         /* number of virtual services */
176:         unsigned int            num_services;
177: };
178: 
179: 
180: /* The argument to IP_VS_SO_GET_SERVICE */
181: struct ip_vs_service_entry {
182:         /* which service: user fills in these */
183:         __u16           protocol;
184:         __be32                  addr;           /* virtual address */
185:         __be16                  port;
186:         __u32           fwmark;         /* firwall mark of service */
187: 
188:         /* service options */
189:         char                    sched_name[IP_VS_SCHEDNAME_MAXLEN];
190:         unsigned                flags;          /* virtual service flags */
191:         unsigned                timeout;        /* persistent timeout */
192:         __be32                  netmask;        /* persistent netmask */
193: 
194:         /* number of real servers */
195:         unsigned int            num_dests;
196: 
197:         /* statistics */
198:         struct ip_vs_stats_user stats;
199: };
200: 
201: 
202: struct ip_vs_dest_entry {
203:         __be32                  addr;           /* destination address */
204:         __be16                  port;
205:         unsigned                conn_flags;     /* connection flags */
206:         int                     weight;         /* destination weight */
207: 
208:         __u32           u_threshold;    /* upper threshold */
209:         __u32           l_threshold;    /* lower threshold */
210: 
211:         __u32           activeconns;    /* active connections */
212:         __u32           inactconns;     /* inactive connections */
213:         __u32           persistconns;   /* persistent connections */
214: 
215:         /* statistics */
216:         struct ip_vs_stats_user stats;
217: };
218: 
219: 
220: /* The argument to IP_VS_SO_GET_DESTS */
221: struct ip_vs_get_dests {
222:         /* which service: user fills in these */
223:         __u16           protocol;
224:         __be32                  addr;           /* virtual address */
225:         __be16                  port;
226:         __u32           fwmark;         /* firwall mark of service */
227: 
228:         /* number of real servers */
229:         unsigned int            num_dests;
230: 
231:         /* the real servers */
232:         struct ip_vs_dest_entry entrytable[0];
233: };
234: 
235: 
236: /* The argument to IP_VS_SO_GET_SERVICES */
237: struct ip_vs_get_services {
238:         /* number of virtual services */
239:         unsigned int            num_services;
240: 
241:         /* service table */
242:         struct ip_vs_service_entry entrytable[0];
243: };
244: 
245: 
246: /* The argument to IP_VS_SO_GET_TIMEOUT */
247: struct ip_vs_timeout_user {
248:         int                     tcp_timeout;
249:         int                     tcp_fin_timeout;
250:         int                     udp_timeout;
251: };
252: 
253: 
254: /* The argument to IP_VS_SO_GET_DAEMON */
255: struct ip_vs_daemon_user {
256:         /* sync daemon state (master/backup) */
257:         int                     state;
258: 
259:         /* multicast interface name */
260:         char                    mcast_ifn[IP_VS_IFNAME_MAXLEN];
261: 
262:         /* SyncID we belong to */
263:         int                     syncid;
264: };
265: 
266: /*
267:  *
268:  * IPVS Generic Netlink interface definitions
269:  *
270:  */
271: 
272: /* Generic Netlink family info */
273: 
274: #define IPVS_GENL_NAME          "IPVS"
275: #define IPVS_GENL_VERSION       0x1
276: 
277: struct ip_vs_flags {
278:         __be32 flags;
279:         __be32 mask;
280: };
281: 
282: /* Generic Netlink command attributes */
283: enum {
284:         IPVS_CMD_UNSPEC = 0,
285: 
286:         IPVS_CMD_NEW_SERVICE,           /* add service */
287:         IPVS_CMD_SET_SERVICE,           /* modify service */
288:         IPVS_CMD_DEL_SERVICE,           /* delete service */
289:         IPVS_CMD_GET_SERVICE,           /* get service info */
290: 
291:         IPVS_CMD_NEW_DEST,              /* add destination */
292:         IPVS_CMD_SET_DEST,              /* modify destination */
293:         IPVS_CMD_DEL_DEST,              /* delete destination */
294:         IPVS_CMD_GET_DEST,              /* get destination info */
295: 
296:         IPVS_CMD_NEW_DAEMON,            /* start sync daemon */
297:         IPVS_CMD_DEL_DAEMON,            /* stop sync daemon */
298:         IPVS_CMD_GET_DAEMON,            /* get sync daemon status */
299: 
300:         IPVS_CMD_SET_CONFIG,            /* set config settings */
301:         IPVS_CMD_GET_CONFIG,            /* get config settings */
302: 
303:         IPVS_CMD_SET_INFO,              /* only used in GET_INFO reply */
304:         IPVS_CMD_GET_INFO,              /* get general IPVS info */
305: 
306:         IPVS_CMD_ZERO,                  /* zero all counters and stats */
307:         IPVS_CMD_FLUSH,                 /* flush services and dests */
308: 
309:         __IPVS_CMD_MAX,
310: };
311: 
312: #define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1)
313: 
314: /* Attributes used in the first level of commands */
315: enum {
316:         IPVS_CMD_ATTR_UNSPEC = 0,
317:         IPVS_CMD_ATTR_SERVICE,          /* nested service attribute */
318:         IPVS_CMD_ATTR_DEST,             /* nested destination attribute */
319:         IPVS_CMD_ATTR_DAEMON,           /* nested sync daemon attribute */
320:         IPVS_CMD_ATTR_TIMEOUT_TCP,      /* TCP connection timeout */
321:         IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,  /* TCP FIN wait timeout */
322:         IPVS_CMD_ATTR_TIMEOUT_UDP,      /* UDP timeout */
323:         __IPVS_CMD_ATTR_MAX,
324: };
325: 
326: #define IPVS_CMD_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
327: 
328: /*
329:  * Attributes used to describe a service
330:  *
331:  * Used inside nested attribute IPVS_CMD_ATTR_SERVICE
332:  */
333: enum {
334:         IPVS_SVC_ATTR_UNSPEC = 0,
335:         IPVS_SVC_ATTR_AF,               /* address family */
336:         IPVS_SVC_ATTR_PROTOCOL,         /* virtual service protocol */
337:         IPVS_SVC_ATTR_ADDR,             /* virtual service address */
338:         IPVS_SVC_ATTR_PORT,             /* virtual service port */
339:         IPVS_SVC_ATTR_FWMARK,           /* firewall mark of service */
340: 
341:         IPVS_SVC_ATTR_SCHED_NAME,       /* name of scheduler */
342:         IPVS_SVC_ATTR_FLAGS,            /* virtual service flags */
343:         IPVS_SVC_ATTR_TIMEOUT,          /* persistent timeout */
344:         IPVS_SVC_ATTR_NETMASK,          /* persistent netmask */
345: 
346:         IPVS_SVC_ATTR_STATS,            /* nested attribute for service stats */
347: 
348:         IPVS_SVC_ATTR_PE_NAME,          /* name of ct retriever */
349: 
350:         __IPVS_SVC_ATTR_MAX,
351: };
352: 
353: #define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
354: 
355: /*
356:  * Attributes used to describe a destination (real server)
357:  *
358:  * Used inside nested attribute IPVS_CMD_ATTR_DEST
359:  */
360: enum {
361:         IPVS_DEST_ATTR_UNSPEC = 0,
362:         IPVS_DEST_ATTR_ADDR,            /* real server address */
363:         IPVS_DEST_ATTR_PORT,            /* real server port */
364: 
365:         IPVS_DEST_ATTR_FWD_METHOD,      /* forwarding method */
366:         IPVS_DEST_ATTR_WEIGHT,          /* destination weight */
367: 
368:         IPVS_DEST_ATTR_U_THRESH,        /* upper threshold */
369:         IPVS_DEST_ATTR_L_THRESH,        /* lower threshold */
370: 
371:         IPVS_DEST_ATTR_ACTIVE_CONNS,    /* active connections */
372:         IPVS_DEST_ATTR_INACT_CONNS,     /* inactive connections */
373:         IPVS_DEST_ATTR_PERSIST_CONNS,   /* persistent connections */
374: 
375:         IPVS_DEST_ATTR_STATS,           /* nested attribute for dest stats */
376:         __IPVS_DEST_ATTR_MAX,
377: };
378: 
379: #define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
380: 
381: /*
382:  * Attributes describing a sync daemon
383:  *
384:  * Used inside nested attribute IPVS_CMD_ATTR_DAEMON
385:  */
386: enum {
387:         IPVS_DAEMON_ATTR_UNSPEC = 0,
388:         IPVS_DAEMON_ATTR_STATE,         /* sync daemon state (master/backup) */
389:         IPVS_DAEMON_ATTR_MCAST_IFN,     /* multicast interface name */
390:         IPVS_DAEMON_ATTR_SYNC_ID,       /* SyncID we belong to */
391:         __IPVS_DAEMON_ATTR_MAX,
392: };
393: 
394: #define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1)
395: 
396: /*
397:  * Attributes used to describe service or destination entry statistics
398:  *
399:  * Used inside nested attributes IPVS_SVC_ATTR_STATS and IPVS_DEST_ATTR_STATS
400:  */
401: enum {
402:         IPVS_STATS_ATTR_UNSPEC = 0,
403:         IPVS_STATS_ATTR_CONNS,          /* connections scheduled */
404:         IPVS_STATS_ATTR_INPKTS,         /* incoming packets */
405:         IPVS_STATS_ATTR_OUTPKTS,        /* outgoing packets */
406:         IPVS_STATS_ATTR_INBYTES,        /* incoming bytes */
407:         IPVS_STATS_ATTR_OUTBYTES,       /* outgoing bytes */
408: 
409:         IPVS_STATS_ATTR_CPS,            /* current connection rate */
410:         IPVS_STATS_ATTR_INPPS,          /* current in packet rate */
411:         IPVS_STATS_ATTR_OUTPPS,         /* current out packet rate */
412:         IPVS_STATS_ATTR_INBPS,          /* current in byte rate */
413:         IPVS_STATS_ATTR_OUTBPS,         /* current out byte rate */
414:         __IPVS_STATS_ATTR_MAX,
415: };
416: 
417: #define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1)
418: 
419: /* Attributes used in response to IPVS_CMD_GET_INFO command */
420: enum {
421:         IPVS_INFO_ATTR_UNSPEC = 0,
422:         IPVS_INFO_ATTR_VERSION,         /* IPVS version number */
423:         IPVS_INFO_ATTR_CONN_TAB_SIZE,   /* size of connection hash table */
424:         __IPVS_INFO_ATTR_MAX,
425: };
426: 
427: #define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1)
428: 
429: #endif  /* _IP_VS_H */
430: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/