Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  *      IP Virtual Server
0004  *      data structure and functionality definitions
0005  */
0006 
0007 #ifndef _IP_VS_H
0008 #define _IP_VS_H
0009 
0010 #include <linux/types.h>    /* For __beXX types in userland */
0011 
0012 #define IP_VS_VERSION_CODE  0x010201
0013 #define NVERSION(version)           \
0014     (version >> 16) & 0xFF,         \
0015     (version >> 8) & 0xFF,          \
0016     version & 0xFF
0017 
0018 /*
0019  *      Virtual Service Flags
0020  */
0021 #define IP_VS_SVC_F_PERSISTENT  0x0001      /* persistent port */
0022 #define IP_VS_SVC_F_HASHED  0x0002      /* hashed entry */
0023 #define IP_VS_SVC_F_ONEPACKET   0x0004      /* one-packet scheduling */
0024 #define IP_VS_SVC_F_SCHED1  0x0008      /* scheduler flag 1 */
0025 #define IP_VS_SVC_F_SCHED2  0x0010      /* scheduler flag 2 */
0026 #define IP_VS_SVC_F_SCHED3  0x0020      /* scheduler flag 3 */
0027 
0028 #define IP_VS_SVC_F_SCHED_SH_FALLBACK   IP_VS_SVC_F_SCHED1 /* SH fallback */
0029 #define IP_VS_SVC_F_SCHED_SH_PORT   IP_VS_SVC_F_SCHED2 /* SH use port */
0030 
0031 /*
0032  *      Destination Server Flags
0033  */
0034 #define IP_VS_DEST_F_AVAILABLE  0x0001      /* server is available */
0035 #define IP_VS_DEST_F_OVERLOAD   0x0002      /* server is overloaded */
0036 
0037 /*
0038  *      IPVS sync daemon states
0039  */
0040 #define IP_VS_STATE_NONE    0x0000      /* daemon is stopped */
0041 #define IP_VS_STATE_MASTER  0x0001      /* started as master */
0042 #define IP_VS_STATE_BACKUP  0x0002      /* started as backup */
0043 
0044 /*
0045  *      IPVS socket options
0046  */
0047 #define IP_VS_BASE_CTL      (64+1024+64)        /* base */
0048 
0049 #define IP_VS_SO_SET_NONE   IP_VS_BASE_CTL      /* just peek */
0050 #define IP_VS_SO_SET_INSERT (IP_VS_BASE_CTL+1)
0051 #define IP_VS_SO_SET_ADD    (IP_VS_BASE_CTL+2)
0052 #define IP_VS_SO_SET_EDIT   (IP_VS_BASE_CTL+3)
0053 #define IP_VS_SO_SET_DEL    (IP_VS_BASE_CTL+4)
0054 #define IP_VS_SO_SET_FLUSH  (IP_VS_BASE_CTL+5)
0055 #define IP_VS_SO_SET_LIST   (IP_VS_BASE_CTL+6)
0056 #define IP_VS_SO_SET_ADDDEST    (IP_VS_BASE_CTL+7)
0057 #define IP_VS_SO_SET_DELDEST    (IP_VS_BASE_CTL+8)
0058 #define IP_VS_SO_SET_EDITDEST   (IP_VS_BASE_CTL+9)
0059 #define IP_VS_SO_SET_TIMEOUT    (IP_VS_BASE_CTL+10)
0060 #define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11)
0061 #define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12)
0062 #define IP_VS_SO_SET_RESTORE    (IP_VS_BASE_CTL+13)
0063 #define IP_VS_SO_SET_SAVE       (IP_VS_BASE_CTL+14)
0064 #define IP_VS_SO_SET_ZERO   (IP_VS_BASE_CTL+15)
0065 #define IP_VS_SO_SET_MAX    IP_VS_SO_SET_ZERO
0066 
0067 #define IP_VS_SO_GET_VERSION    IP_VS_BASE_CTL
0068 #define IP_VS_SO_GET_INFO   (IP_VS_BASE_CTL+1)
0069 #define IP_VS_SO_GET_SERVICES   (IP_VS_BASE_CTL+2)
0070 #define IP_VS_SO_GET_SERVICE    (IP_VS_BASE_CTL+3)
0071 #define IP_VS_SO_GET_DESTS  (IP_VS_BASE_CTL+4)
0072 #define IP_VS_SO_GET_DEST   (IP_VS_BASE_CTL+5)  /* not used now */
0073 #define IP_VS_SO_GET_TIMEOUT    (IP_VS_BASE_CTL+6)
0074 #define IP_VS_SO_GET_DAEMON (IP_VS_BASE_CTL+7)
0075 #define IP_VS_SO_GET_MAX    IP_VS_SO_GET_DAEMON
0076 
0077 
0078 /*
0079  *      IPVS Connection Flags
0080  *      Only flags 0..15 are sent to backup server
0081  */
0082 #define IP_VS_CONN_F_FWD_MASK   0x0007      /* mask for the fwd methods */
0083 #define IP_VS_CONN_F_MASQ   0x0000      /* masquerading/NAT */
0084 #define IP_VS_CONN_F_LOCALNODE  0x0001      /* local node */
0085 #define IP_VS_CONN_F_TUNNEL 0x0002      /* tunneling */
0086 #define IP_VS_CONN_F_DROUTE 0x0003      /* direct routing */
0087 #define IP_VS_CONN_F_BYPASS 0x0004      /* cache bypass */
0088 #define IP_VS_CONN_F_SYNC   0x0020      /* entry created by sync */
0089 #define IP_VS_CONN_F_HASHED 0x0040      /* hashed entry */
0090 #define IP_VS_CONN_F_NOOUTPUT   0x0080      /* no output packets */
0091 #define IP_VS_CONN_F_INACTIVE   0x0100      /* not established */
0092 #define IP_VS_CONN_F_OUT_SEQ    0x0200      /* must do output seq adjust */
0093 #define IP_VS_CONN_F_IN_SEQ 0x0400      /* must do input seq adjust */
0094 #define IP_VS_CONN_F_SEQ_MASK   0x0600      /* in/out sequence mask */
0095 #define IP_VS_CONN_F_NO_CPORT   0x0800      /* no client port set yet */
0096 #define IP_VS_CONN_F_TEMPLATE   0x1000      /* template, not connection */
0097 #define IP_VS_CONN_F_ONE_PACKET 0x2000      /* forward only one packet */
0098 
0099 /* Initial bits allowed in backup server */
0100 #define IP_VS_CONN_F_BACKUP_MASK (IP_VS_CONN_F_FWD_MASK | \
0101                   IP_VS_CONN_F_NOOUTPUT | \
0102                   IP_VS_CONN_F_INACTIVE | \
0103                   IP_VS_CONN_F_SEQ_MASK | \
0104                   IP_VS_CONN_F_NO_CPORT | \
0105                   IP_VS_CONN_F_TEMPLATE \
0106                  )
0107 
0108 /* Bits allowed to update in backup server */
0109 #define IP_VS_CONN_F_BACKUP_UPD_MASK (IP_VS_CONN_F_INACTIVE | \
0110                       IP_VS_CONN_F_SEQ_MASK)
0111 
0112 /* Flags that are not sent to backup server start from bit 16 */
0113 #define IP_VS_CONN_F_NFCT   (1 << 16)   /* use netfilter conntrack */
0114 
0115 /* Connection flags from destination that can be changed by user space */
0116 #define IP_VS_CONN_F_DEST_MASK (IP_VS_CONN_F_FWD_MASK | \
0117                 IP_VS_CONN_F_ONE_PACKET | \
0118                 IP_VS_CONN_F_NFCT | \
0119                 0)
0120 
0121 #define IP_VS_SCHEDNAME_MAXLEN  16
0122 #define IP_VS_PENAME_MAXLEN 16
0123 #define IP_VS_IFNAME_MAXLEN 16
0124 
0125 #define IP_VS_PEDATA_MAXLEN     255
0126 
0127 /* Tunnel types */
0128 enum {
0129     IP_VS_CONN_F_TUNNEL_TYPE_IPIP = 0,  /* IPIP */
0130     IP_VS_CONN_F_TUNNEL_TYPE_GUE,       /* GUE */
0131     IP_VS_CONN_F_TUNNEL_TYPE_GRE,       /* GRE */
0132     IP_VS_CONN_F_TUNNEL_TYPE_MAX,
0133 };
0134 
0135 /* Tunnel encapsulation flags */
0136 #define IP_VS_TUNNEL_ENCAP_FLAG_NOCSUM      (0)
0137 #define IP_VS_TUNNEL_ENCAP_FLAG_CSUM        (1 << 0)
0138 #define IP_VS_TUNNEL_ENCAP_FLAG_REMCSUM     (1 << 1)
0139 
0140 /*
0141  *  The struct ip_vs_service_user and struct ip_vs_dest_user are
0142  *  used to set IPVS rules through setsockopt.
0143  */
0144 struct ip_vs_service_user {
0145     /* virtual service addresses */
0146     __u16       protocol;
0147     __be32          addr;       /* virtual ip address */
0148     __be16          port;
0149     __u32       fwmark;     /* firwall mark of service */
0150 
0151     /* virtual service options */
0152     char            sched_name[IP_VS_SCHEDNAME_MAXLEN];
0153     unsigned int        flags;      /* virtual service flags */
0154     unsigned int        timeout;    /* persistent timeout in sec */
0155     __be32          netmask;    /* persistent netmask */
0156 };
0157 
0158 
0159 struct ip_vs_dest_user {
0160     /* destination server address */
0161     __be32          addr;
0162     __be16          port;
0163 
0164     /* real server options */
0165     unsigned int        conn_flags; /* connection flags */
0166     int         weight;     /* destination weight */
0167 
0168     /* thresholds for active connections */
0169     __u32       u_threshold;    /* upper threshold */
0170     __u32       l_threshold;    /* lower threshold */
0171 };
0172 
0173 
0174 /*
0175  *  IPVS statistics object (for user space)
0176  */
0177 struct ip_vs_stats_user {
0178     __u32                   conns;          /* connections scheduled */
0179     __u32                   inpkts;         /* incoming packets */
0180     __u32                   outpkts;        /* outgoing packets */
0181     __u64                   inbytes;        /* incoming bytes */
0182     __u64                   outbytes;       /* outgoing bytes */
0183 
0184     __u32           cps;        /* current connection rate */
0185     __u32           inpps;      /* current in packet rate */
0186     __u32           outpps;     /* current out packet rate */
0187     __u32           inbps;      /* current in byte rate */
0188     __u32           outbps;     /* current out byte rate */
0189 };
0190 
0191 
0192 /* The argument to IP_VS_SO_GET_INFO */
0193 struct ip_vs_getinfo {
0194     /* version number */
0195     unsigned int        version;
0196 
0197     /* size of connection hash table */
0198     unsigned int        size;
0199 
0200     /* number of virtual services */
0201     unsigned int        num_services;
0202 };
0203 
0204 
0205 /* The argument to IP_VS_SO_GET_SERVICE */
0206 struct ip_vs_service_entry {
0207     /* which service: user fills in these */
0208     __u16       protocol;
0209     __be32          addr;       /* virtual address */
0210     __be16          port;
0211     __u32       fwmark;     /* firwall mark of service */
0212 
0213     /* service options */
0214     char            sched_name[IP_VS_SCHEDNAME_MAXLEN];
0215     unsigned int        flags;          /* virtual service flags */
0216     unsigned int        timeout;    /* persistent timeout */
0217     __be32          netmask;    /* persistent netmask */
0218 
0219     /* number of real servers */
0220     unsigned int        num_dests;
0221 
0222     /* statistics */
0223     struct ip_vs_stats_user stats;
0224 };
0225 
0226 
0227 struct ip_vs_dest_entry {
0228     __be32          addr;       /* destination address */
0229     __be16          port;
0230     unsigned int        conn_flags; /* connection flags */
0231     int         weight;     /* destination weight */
0232 
0233     __u32       u_threshold;    /* upper threshold */
0234     __u32       l_threshold;    /* lower threshold */
0235 
0236     __u32       activeconns;    /* active connections */
0237     __u32       inactconns; /* inactive connections */
0238     __u32       persistconns;   /* persistent connections */
0239 
0240     /* statistics */
0241     struct ip_vs_stats_user stats;
0242 };
0243 
0244 
0245 /* The argument to IP_VS_SO_GET_DESTS */
0246 struct ip_vs_get_dests {
0247     /* which service: user fills in these */
0248     __u16       protocol;
0249     __be32          addr;       /* virtual address */
0250     __be16          port;
0251     __u32       fwmark;     /* firwall mark of service */
0252 
0253     /* number of real servers */
0254     unsigned int        num_dests;
0255 
0256     /* the real servers */
0257     struct ip_vs_dest_entry entrytable[];
0258 };
0259 
0260 
0261 /* The argument to IP_VS_SO_GET_SERVICES */
0262 struct ip_vs_get_services {
0263     /* number of virtual services */
0264     unsigned int        num_services;
0265 
0266     /* service table */
0267     struct ip_vs_service_entry entrytable[];
0268 };
0269 
0270 
0271 /* The argument to IP_VS_SO_GET_TIMEOUT */
0272 struct ip_vs_timeout_user {
0273     int         tcp_timeout;
0274     int         tcp_fin_timeout;
0275     int         udp_timeout;
0276 };
0277 
0278 
0279 /* The argument to IP_VS_SO_GET_DAEMON */
0280 struct ip_vs_daemon_user {
0281     /* sync daemon state (master/backup) */
0282     int         state;
0283 
0284     /* multicast interface name */
0285     char            mcast_ifn[IP_VS_IFNAME_MAXLEN];
0286 
0287     /* SyncID we belong to */
0288     int         syncid;
0289 };
0290 
0291 /*
0292  *
0293  * IPVS Generic Netlink interface definitions
0294  *
0295  */
0296 
0297 /* Generic Netlink family info */
0298 
0299 #define IPVS_GENL_NAME      "IPVS"
0300 #define IPVS_GENL_VERSION   0x1
0301 
0302 struct ip_vs_flags {
0303     __u32 flags;
0304     __u32 mask;
0305 };
0306 
0307 /* Generic Netlink command attributes */
0308 enum {
0309     IPVS_CMD_UNSPEC = 0,
0310 
0311     IPVS_CMD_NEW_SERVICE,       /* add service */
0312     IPVS_CMD_SET_SERVICE,       /* modify service */
0313     IPVS_CMD_DEL_SERVICE,       /* delete service */
0314     IPVS_CMD_GET_SERVICE,       /* get service info */
0315 
0316     IPVS_CMD_NEW_DEST,      /* add destination */
0317     IPVS_CMD_SET_DEST,      /* modify destination */
0318     IPVS_CMD_DEL_DEST,      /* delete destination */
0319     IPVS_CMD_GET_DEST,      /* get destination info */
0320 
0321     IPVS_CMD_NEW_DAEMON,        /* start sync daemon */
0322     IPVS_CMD_DEL_DAEMON,        /* stop sync daemon */
0323     IPVS_CMD_GET_DAEMON,        /* get sync daemon status */
0324 
0325     IPVS_CMD_SET_CONFIG,        /* set config settings */
0326     IPVS_CMD_GET_CONFIG,        /* get config settings */
0327 
0328     IPVS_CMD_SET_INFO,      /* only used in GET_INFO reply */
0329     IPVS_CMD_GET_INFO,      /* get general IPVS info */
0330 
0331     IPVS_CMD_ZERO,          /* zero all counters and stats */
0332     IPVS_CMD_FLUSH,         /* flush services and dests */
0333 
0334     __IPVS_CMD_MAX,
0335 };
0336 
0337 #define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1)
0338 
0339 /* Attributes used in the first level of commands */
0340 enum {
0341     IPVS_CMD_ATTR_UNSPEC = 0,
0342     IPVS_CMD_ATTR_SERVICE,      /* nested service attribute */
0343     IPVS_CMD_ATTR_DEST,     /* nested destination attribute */
0344     IPVS_CMD_ATTR_DAEMON,       /* nested sync daemon attribute */
0345     IPVS_CMD_ATTR_TIMEOUT_TCP,  /* TCP connection timeout */
0346     IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,  /* TCP FIN wait timeout */
0347     IPVS_CMD_ATTR_TIMEOUT_UDP,  /* UDP timeout */
0348     __IPVS_CMD_ATTR_MAX,
0349 };
0350 
0351 #define IPVS_CMD_ATTR_MAX (__IPVS_CMD_ATTR_MAX - 1)
0352 
0353 /*
0354  * Attributes used to describe a service
0355  *
0356  * Used inside nested attribute IPVS_CMD_ATTR_SERVICE
0357  */
0358 enum {
0359     IPVS_SVC_ATTR_UNSPEC = 0,
0360     IPVS_SVC_ATTR_AF,       /* address family */
0361     IPVS_SVC_ATTR_PROTOCOL,     /* virtual service protocol */
0362     IPVS_SVC_ATTR_ADDR,     /* virtual service address */
0363     IPVS_SVC_ATTR_PORT,     /* virtual service port */
0364     IPVS_SVC_ATTR_FWMARK,       /* firewall mark of service */
0365 
0366     IPVS_SVC_ATTR_SCHED_NAME,   /* name of scheduler */
0367     IPVS_SVC_ATTR_FLAGS,        /* virtual service flags */
0368     IPVS_SVC_ATTR_TIMEOUT,      /* persistent timeout */
0369     IPVS_SVC_ATTR_NETMASK,      /* persistent netmask */
0370 
0371     IPVS_SVC_ATTR_STATS,        /* nested attribute for service stats */
0372 
0373     IPVS_SVC_ATTR_PE_NAME,      /* name of ct retriever */
0374 
0375     IPVS_SVC_ATTR_STATS64,      /* nested attribute for service stats */
0376 
0377     __IPVS_SVC_ATTR_MAX,
0378 };
0379 
0380 #define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
0381 
0382 /*
0383  * Attributes used to describe a destination (real server)
0384  *
0385  * Used inside nested attribute IPVS_CMD_ATTR_DEST
0386  */
0387 enum {
0388     IPVS_DEST_ATTR_UNSPEC = 0,
0389     IPVS_DEST_ATTR_ADDR,        /* real server address */
0390     IPVS_DEST_ATTR_PORT,        /* real server port */
0391 
0392     IPVS_DEST_ATTR_FWD_METHOD,  /* forwarding method */
0393     IPVS_DEST_ATTR_WEIGHT,      /* destination weight */
0394 
0395     IPVS_DEST_ATTR_U_THRESH,    /* upper threshold */
0396     IPVS_DEST_ATTR_L_THRESH,    /* lower threshold */
0397 
0398     IPVS_DEST_ATTR_ACTIVE_CONNS,    /* active connections */
0399     IPVS_DEST_ATTR_INACT_CONNS, /* inactive connections */
0400     IPVS_DEST_ATTR_PERSIST_CONNS,   /* persistent connections */
0401 
0402     IPVS_DEST_ATTR_STATS,       /* nested attribute for dest stats */
0403 
0404     IPVS_DEST_ATTR_ADDR_FAMILY, /* Address family of address */
0405 
0406     IPVS_DEST_ATTR_STATS64,     /* nested attribute for dest stats */
0407 
0408     IPVS_DEST_ATTR_TUN_TYPE,    /* tunnel type */
0409 
0410     IPVS_DEST_ATTR_TUN_PORT,    /* tunnel port */
0411 
0412     IPVS_DEST_ATTR_TUN_FLAGS,   /* tunnel flags */
0413 
0414     __IPVS_DEST_ATTR_MAX,
0415 };
0416 
0417 #define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
0418 
0419 /*
0420  * Attributes describing a sync daemon
0421  *
0422  * Used inside nested attribute IPVS_CMD_ATTR_DAEMON
0423  */
0424 enum {
0425     IPVS_DAEMON_ATTR_UNSPEC = 0,
0426     IPVS_DAEMON_ATTR_STATE,     /* sync daemon state (master/backup) */
0427     IPVS_DAEMON_ATTR_MCAST_IFN, /* multicast interface name */
0428     IPVS_DAEMON_ATTR_SYNC_ID,   /* SyncID we belong to */
0429     IPVS_DAEMON_ATTR_SYNC_MAXLEN,   /* UDP Payload Size */
0430     IPVS_DAEMON_ATTR_MCAST_GROUP,   /* IPv4 Multicast Address */
0431     IPVS_DAEMON_ATTR_MCAST_GROUP6,  /* IPv6 Multicast Address */
0432     IPVS_DAEMON_ATTR_MCAST_PORT,    /* Multicast Port (base) */
0433     IPVS_DAEMON_ATTR_MCAST_TTL, /* Multicast TTL */
0434     __IPVS_DAEMON_ATTR_MAX,
0435 };
0436 
0437 #define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1)
0438 
0439 /*
0440  * Attributes used to describe service or destination entry statistics
0441  *
0442  * Used inside nested attributes IPVS_SVC_ATTR_STATS, IPVS_DEST_ATTR_STATS,
0443  * IPVS_SVC_ATTR_STATS64 and IPVS_DEST_ATTR_STATS64.
0444  */
0445 enum {
0446     IPVS_STATS_ATTR_UNSPEC = 0,
0447     IPVS_STATS_ATTR_CONNS,      /* connections scheduled */
0448     IPVS_STATS_ATTR_INPKTS,     /* incoming packets */
0449     IPVS_STATS_ATTR_OUTPKTS,    /* outgoing packets */
0450     IPVS_STATS_ATTR_INBYTES,    /* incoming bytes */
0451     IPVS_STATS_ATTR_OUTBYTES,   /* outgoing bytes */
0452 
0453     IPVS_STATS_ATTR_CPS,        /* current connection rate */
0454     IPVS_STATS_ATTR_INPPS,      /* current in packet rate */
0455     IPVS_STATS_ATTR_OUTPPS,     /* current out packet rate */
0456     IPVS_STATS_ATTR_INBPS,      /* current in byte rate */
0457     IPVS_STATS_ATTR_OUTBPS,     /* current out byte rate */
0458     IPVS_STATS_ATTR_PAD,
0459     __IPVS_STATS_ATTR_MAX,
0460 };
0461 
0462 #define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1)
0463 
0464 /* Attributes used in response to IPVS_CMD_GET_INFO command */
0465 enum {
0466     IPVS_INFO_ATTR_UNSPEC = 0,
0467     IPVS_INFO_ATTR_VERSION,     /* IPVS version number */
0468     IPVS_INFO_ATTR_CONN_TAB_SIZE,   /* size of connection hash table */
0469     __IPVS_INFO_ATTR_MAX,
0470 };
0471 
0472 #define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1)
0473 
0474 #endif  /* _IP_VS_H */