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