linux/include/uapi/linux/ip_vs.h
<<
>>
Prefs
   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 */
 124struct 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
 139struct 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 */
 157struct 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 */
 173struct 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 */
 186struct 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
 207struct 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 */
 226struct 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 */
 242struct 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 */
 252struct 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 */
 260struct 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
 282struct ip_vs_flags {
 283        __be32 flags;
 284        __be32 mask;
 285};
 286
 287/* Generic Netlink command attributes */
 288enum {
 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 */
 320enum {
 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 */
 338enum {
 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 */
 365enum {
 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 */
 391enum {
 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 */
 406enum {
 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 */
 425enum {
 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 */
 435