/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ***   To edit the content of this header, modify the corresponding
 ***   source file (e.g. under external/kernel-headers/original/) then
 ***   run bionic/libc/kernel/tools/update_all.py
 ***
 ***   Any manual change here will be lost the next time this script will
 ***   be run. You've been warned!
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef _IP_VS_H
#define _IP_VS_H
#include <linux/types.h>
#define IP_VS_VERSION_CODE 0x010201
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define NVERSION(version)   (version >> 16) & 0xFF,   (version >> 8) & 0xFF,   version & 0xFF
#define IP_VS_SVC_F_PERSISTENT 0x0001
#define IP_VS_SVC_F_HASHED 0x0002
#define IP_VS_SVC_F_ONEPACKET 0x0004
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_SVC_F_SCHED1 0x0008
#define IP_VS_SVC_F_SCHED2 0x0010
#define IP_VS_SVC_F_SCHED3 0x0020
#define IP_VS_SVC_F_SCHED_SH_FALLBACK IP_VS_SVC_F_SCHED1
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_SVC_F_SCHED_SH_PORT IP_VS_SVC_F_SCHED2
#define IP_VS_DEST_F_AVAILABLE 0x0001
#define IP_VS_DEST_F_OVERLOAD 0x0002
#define IP_VS_STATE_NONE 0x0000
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_STATE_MASTER 0x0001
#define IP_VS_STATE_BACKUP 0x0002
#define IP_VS_BASE_CTL (64+1024+64)
#define IP_VS_SO_SET_NONE IP_VS_BASE_CTL
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_SO_SET_INSERT (IP_VS_BASE_CTL+1)
#define IP_VS_SO_SET_ADD (IP_VS_BASE_CTL+2)
#define IP_VS_SO_SET_EDIT (IP_VS_BASE_CTL+3)
#define IP_VS_SO_SET_DEL (IP_VS_BASE_CTL+4)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_SO_SET_FLUSH (IP_VS_BASE_CTL+5)
#define IP_VS_SO_SET_LIST (IP_VS_BASE_CTL+6)
#define IP_VS_SO_SET_ADDDEST (IP_VS_BASE_CTL+7)
#define IP_VS_SO_SET_DELDEST (IP_VS_BASE_CTL+8)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_SO_SET_EDITDEST (IP_VS_BASE_CTL+9)
#define IP_VS_SO_SET_TIMEOUT (IP_VS_BASE_CTL+10)
#define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11)
#define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_SO_SET_RESTORE (IP_VS_BASE_CTL+13)
#define IP_VS_SO_SET_SAVE (IP_VS_BASE_CTL+14)
#define IP_VS_SO_SET_ZERO (IP_VS_BASE_CTL+15)
#define IP_VS_SO_SET_MAX IP_VS_SO_SET_ZERO
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_SO_GET_VERSION IP_VS_BASE_CTL
#define IP_VS_SO_GET_INFO (IP_VS_BASE_CTL+1)
#define IP_VS_SO_GET_SERVICES (IP_VS_BASE_CTL+2)
#define IP_VS_SO_GET_SERVICE (IP_VS_BASE_CTL+3)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_SO_GET_DESTS (IP_VS_BASE_CTL+4)
#define IP_VS_SO_GET_DEST (IP_VS_BASE_CTL+5)
#define IP_VS_SO_GET_TIMEOUT (IP_VS_BASE_CTL+6)
#define IP_VS_SO_GET_DAEMON (IP_VS_BASE_CTL+7)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_SO_GET_MAX IP_VS_SO_GET_DAEMON
#define IP_VS_CONN_F_FWD_MASK 0x0007
#define IP_VS_CONN_F_MASQ 0x0000
#define IP_VS_CONN_F_LOCALNODE 0x0001
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_CONN_F_TUNNEL 0x0002
#define IP_VS_CONN_F_DROUTE 0x0003
#define IP_VS_CONN_F_BYPASS 0x0004
#define IP_VS_CONN_F_SYNC 0x0020
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_CONN_F_HASHED 0x0040
#define IP_VS_CONN_F_NOOUTPUT 0x0080
#define IP_VS_CONN_F_INACTIVE 0x0100
#define IP_VS_CONN_F_OUT_SEQ 0x0200
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_CONN_F_IN_SEQ 0x0400
#define IP_VS_CONN_F_SEQ_MASK 0x0600
#define IP_VS_CONN_F_NO_CPORT 0x0800
#define IP_VS_CONN_F_TEMPLATE 0x1000
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_CONN_F_ONE_PACKET 0x2000
#define IP_VS_CONN_F_BACKUP_MASK (IP_VS_CONN_F_FWD_MASK |   IP_VS_CONN_F_NOOUTPUT |   IP_VS_CONN_F_INACTIVE |   IP_VS_CONN_F_SEQ_MASK |   IP_VS_CONN_F_NO_CPORT |   IP_VS_CONN_F_TEMPLATE   )
#define IP_VS_CONN_F_BACKUP_UPD_MASK (IP_VS_CONN_F_INACTIVE |   IP_VS_CONN_F_SEQ_MASK)
#define IP_VS_CONN_F_NFCT (1 << 16)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_CONN_F_DEST_MASK (IP_VS_CONN_F_FWD_MASK |   IP_VS_CONN_F_ONE_PACKET |   IP_VS_CONN_F_NFCT |   0)
#define IP_VS_SCHEDNAME_MAXLEN 16
#define IP_VS_PENAME_MAXLEN 16
#define IP_VS_IFNAME_MAXLEN 16
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IP_VS_PEDATA_MAXLEN 255
struct ip_vs_service_user {
 __u16 protocol;
 __be32 addr;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __be16 port;
 __u32 fwmark;
 char sched_name[IP_VS_SCHEDNAME_MAXLEN];
 unsigned int flags;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 unsigned int timeout;
 __be32 netmask;
};
struct ip_vs_dest_user {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __be32 addr;
 __be16 port;
 unsigned int conn_flags;
 int weight;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __u32 u_threshold;
 __u32 l_threshold;
};
struct ip_vs_stats_user {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __u32 conns;
 __u32 inpkts;
 __u32 outpkts;
 __u64 inbytes;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __u64 outbytes;
 __u32 cps;
 __u32 inpps;
 __u32 outpps;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __u32 inbps;
 __u32 outbps;
};
struct ip_vs_getinfo {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 unsigned int version;
 unsigned int size;
 unsigned int num_services;
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct ip_vs_service_entry {
 __u16 protocol;
 __be32 addr;
 __be16 port;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __u32 fwmark;
 char sched_name[IP_VS_SCHEDNAME_MAXLEN];
 unsigned int flags;
 unsigned int timeout;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __be32 netmask;
 unsigned int num_dests;
 struct ip_vs_stats_user stats;
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct ip_vs_dest_entry {
 __be32 addr;
 __be16 port;
 unsigned int conn_flags;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 int weight;
 __u32 u_threshold;
 __u32 l_threshold;
 __u32 activeconns;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __u32 inactconns;
 __u32 persistconns;
 struct ip_vs_stats_user stats;
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct ip_vs_get_dests {
 __u16 protocol;
 __be32 addr;
 __be16 port;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __u32 fwmark;
 unsigned int num_dests;
 struct ip_vs_dest_entry entrytable[0];
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct ip_vs_get_services {
 unsigned int num_services;
 struct ip_vs_service_entry entrytable[0];
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct ip_vs_timeout_user {
 int tcp_timeout;
 int tcp_fin_timeout;
 int udp_timeout;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
struct ip_vs_daemon_user {
 int state;
 char mcast_ifn[IP_VS_IFNAME_MAXLEN];
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 int syncid;
};
#define IPVS_GENL_NAME "IPVS"
#define IPVS_GENL_VERSION 0x1
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct ip_vs_flags {
 __u32 flags;
 __u32 mask;
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
enum {
 IPVS_CMD_UNSPEC = 0,
 IPVS_CMD_NEW_SERVICE,
 IPVS_CMD_SET_SERVICE,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_CMD_DEL_SERVICE,
 IPVS_CMD_GET_SERVICE,
 IPVS_CMD_NEW_DEST,
 IPVS_CMD_SET_DEST,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_CMD_DEL_DEST,
 IPVS_CMD_GET_DEST,
 IPVS_CMD_NEW_DAEMON,
 IPVS_CMD_DEL_DAEMON,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_CMD_GET_DAEMON,
 IPVS_CMD_SET_CONFIG,
 IPVS_CMD_GET_CONFIG,
 IPVS_CMD_SET_INFO,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_CMD_GET_INFO,
 IPVS_CMD_ZERO,
 IPVS_CMD_FLUSH,
 __IPVS_CMD_MAX,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
#define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1)
enum {
 IPVS_CMD_ATTR_UNSPEC = 0,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_CMD_ATTR_SERVICE,
 IPVS_CMD_ATTR_DEST,
 IPVS_CMD_ATTR_DAEMON,
 IPVS_CMD_ATTR_TIMEOUT_TCP,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,
 IPVS_CMD_ATTR_TIMEOUT_UDP,
 __IPVS_CMD_ATTR_MAX,
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IPVS_CMD_ATTR_MAX (__IPVS_CMD_ATTR_MAX - 1)
enum {
 IPVS_SVC_ATTR_UNSPEC = 0,
 IPVS_SVC_ATTR_AF,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_SVC_ATTR_PROTOCOL,
 IPVS_SVC_ATTR_ADDR,
 IPVS_SVC_ATTR_PORT,
 IPVS_SVC_ATTR_FWMARK,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_SVC_ATTR_SCHED_NAME,
 IPVS_SVC_ATTR_FLAGS,
 IPVS_SVC_ATTR_TIMEOUT,
 IPVS_SVC_ATTR_NETMASK,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_SVC_ATTR_STATS,
 IPVS_SVC_ATTR_PE_NAME,
 __IPVS_SVC_ATTR_MAX,
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
enum {
 IPVS_DEST_ATTR_UNSPEC = 0,
 IPVS_DEST_ATTR_ADDR,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_DEST_ATTR_PORT,
 IPVS_DEST_ATTR_FWD_METHOD,
 IPVS_DEST_ATTR_WEIGHT,
 IPVS_DEST_ATTR_U_THRESH,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_DEST_ATTR_L_THRESH,
 IPVS_DEST_ATTR_ACTIVE_CONNS,
 IPVS_DEST_ATTR_INACT_CONNS,
 IPVS_DEST_ATTR_PERSIST_CONNS,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_DEST_ATTR_STATS,
 __IPVS_DEST_ATTR_MAX,
};
#define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
enum {
 IPVS_DAEMON_ATTR_UNSPEC = 0,
 IPVS_DAEMON_ATTR_STATE,
 IPVS_DAEMON_ATTR_MCAST_IFN,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_DAEMON_ATTR_SYNC_ID,
 __IPVS_DAEMON_ATTR_MAX,
};
#define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
enum {
 IPVS_STATS_ATTR_UNSPEC = 0,
 IPVS_STATS_ATTR_CONNS,
 IPVS_STATS_ATTR_INPKTS,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_STATS_ATTR_OUTPKTS,
 IPVS_STATS_ATTR_INBYTES,
 IPVS_STATS_ATTR_OUTBYTES,
 IPVS_STATS_ATTR_CPS,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_STATS_ATTR_INPPS,
 IPVS_STATS_ATTR_OUTPPS,
 IPVS_STATS_ATTR_INBPS,
 IPVS_STATS_ATTR_OUTBPS,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 __IPVS_STATS_ATTR_MAX,
};
#define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1)
enum {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 IPVS_INFO_ATTR_UNSPEC = 0,
 IPVS_INFO_ATTR_VERSION,
 IPVS_INFO_ATTR_CONN_TAB_SIZE,
 __IPVS_INFO_ATTR_MAX,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
#define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1)
#endif
