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