linux/include/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
  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 */
  97struct ip_vs_service_user {
  98        /* virtual service addresses */
  99        __u16           protocol;
 100        __be32                  addr;           /* virtual ip address */
 101        __be16                  port;
 102        __u32           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
 112struct 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        __u32           u_threshold;    /* upper threshold */
 123        __u32           l_threshold;    /* lower threshold */
 124};
 125
 126
 127/*
 128 *      IPVS statistics object (for user space)
 129 */
 130struct 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 */
 147struct 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 */
 160struct ip_vs_service_entry {
 161        /* which service: user fills in these */
 162        __u16           protocol;
 163        __be32                  addr;           /* virtual address */
 164        __be16                  port;
 165        __u32           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
 181struct 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        __u32           u_threshold;    /* upper threshold */
 188        __u32           l_threshold;    /* lower threshold */
 189
 190        __u32           activeconns;    /* active connections */
 191        __u32           inactconns;     /* inactive connections */
 192        __u32           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 */
 200struct ip_vs_get_dests {
 201        /* which service: user fills in these */
 202        __u16           protocol;
 203        __be32                  addr;           /* virtual address */
 204        __be16                  port;
 205        __u32           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 */
 216struct 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 */
 226struct 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 */
 234struct 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
 256struct ip_vs_flags {
 257        __be32 flags;
 258        __be32 mask;
 259};
 260
 261/* Generic Netlink command attributes */
 262enum {
 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 */
 294enum {
 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 */
 312enum {
 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 */
 336enum {
 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 */
 362enum {
 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 */
 377enum {
 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 */
 396enum {
 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