⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ip_vs.h

📁 Linux Kernel 2.6.9 for OMAP1710
💻 H
📖 第 1 页 / 共 2 页
字号:
/* *      IP Virtual Server *      data structure and functionality definitions */#ifndef _IP_VS_H#define _IP_VS_H#include <asm/types.h>		/* For __uXX types */#define IP_VS_VERSION_CODE	0x010200#define NVERSION(version)			\	(version >> 16) & 0xFF,			\	(version >> 8) & 0xFF,			\	version & 0xFF/* *      Virtual Service Flags */#define IP_VS_SVC_F_PERSISTENT	0x0001		/* persistent port */#define IP_VS_SVC_F_HASHED	0x0002		/* hashed entry *//* *      Destination Server Flags */#define IP_VS_DEST_F_AVAILABLE	0x0001		/* server is available */#define IP_VS_DEST_F_OVERLOAD	0x0002		/* server is overloaded *//* *      IPVS sync daemon states */#define IP_VS_STATE_NONE	0x0000		/* daemon is stopped */#define IP_VS_STATE_MASTER	0x0001		/* started as master */#define IP_VS_STATE_BACKUP	0x0002		/* started as backup *//* *      IPVS socket options */#define IP_VS_BASE_CTL		(64+1024+64)		/* base */#define IP_VS_SO_SET_NONE	IP_VS_BASE_CTL		/* just peek */#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)#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)#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)#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#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)#define IP_VS_SO_GET_DESTS	(IP_VS_BASE_CTL+4)#define IP_VS_SO_GET_DEST	(IP_VS_BASE_CTL+5)	/* not used now */#define IP_VS_SO_GET_TIMEOUT	(IP_VS_BASE_CTL+6)#define IP_VS_SO_GET_DAEMON	(IP_VS_BASE_CTL+7)#define IP_VS_SO_GET_MAX	IP_VS_SO_GET_DAEMON/* *      IPVS Connection Flags */#define IP_VS_CONN_F_FWD_MASK	0x0007		/* mask for the fwd methods */#define IP_VS_CONN_F_MASQ	0x0000		/* masquerading/NAT */#define IP_VS_CONN_F_LOCALNODE	0x0001		/* local node */#define IP_VS_CONN_F_TUNNEL	0x0002		/* tunneling */#define IP_VS_CONN_F_DROUTE	0x0003		/* direct routing */#define IP_VS_CONN_F_BYPASS	0x0004		/* cache bypass */#define IP_VS_CONN_F_SYNC	0x0020		/* entry created by sync */#define IP_VS_CONN_F_HASHED	0x0040		/* hashed entry */#define IP_VS_CONN_F_NOOUTPUT	0x0080		/* no output packets */#define IP_VS_CONN_F_INACTIVE	0x0100		/* not established */#define IP_VS_CONN_F_OUT_SEQ	0x0200		/* must do output seq adjust */#define IP_VS_CONN_F_IN_SEQ	0x0400		/* must do input seq adjust */#define IP_VS_CONN_F_SEQ_MASK	0x0600		/* in/out sequence mask */#define IP_VS_CONN_F_NO_CPORT	0x0800		/* no client port set yet *//* Move it to better place one day, for now keep it unique */#define NFC_IPVS_PROPERTY	0x10000#define IP_VS_SCHEDNAME_MAXLEN	16#define IP_VS_IFNAME_MAXLEN	16/* *	The struct ip_vs_service_user and struct ip_vs_dest_user are *	used to set IPVS rules through setsockopt. */struct ip_vs_service_user {	/* virtual service addresses */	u_int16_t		protocol;	u_int32_t		addr;		/* virtual ip address */	u_int16_t		port;	u_int32_t		fwmark;		/* firwall mark of service */	/* virtual service options */	char			sched_name[IP_VS_SCHEDNAME_MAXLEN];	unsigned		flags;		/* virtual service flags */	unsigned		timeout;	/* persistent timeout in sec */	u_int32_t		netmask;	/* persistent netmask */};struct ip_vs_dest_user {	/* destination server address */	u_int32_t		addr;	u_int16_t		port;	/* real server options */	unsigned		conn_flags;	/* connection flags */	int			weight;		/* destination weight */	/* thresholds for active connections */	u_int32_t		u_threshold;	/* upper threshold */	u_int32_t		l_threshold;	/* lower threshold */};/* *	IPVS statistics object (for user space) */struct ip_vs_stats_user{	__u32                   conns;          /* connections scheduled */	__u32                   inpkts;         /* incoming packets */	__u32                   outpkts;        /* outgoing packets */	__u64                   inbytes;        /* incoming bytes */	__u64                   outbytes;       /* outgoing bytes */	__u32			cps;		/* current connection rate */	__u32			inpps;		/* current in packet rate */	__u32			outpps;		/* current out packet rate */	__u32			inbps;		/* current in byte rate */	__u32			outbps;		/* current out byte rate */};/* The argument to IP_VS_SO_GET_INFO */struct ip_vs_getinfo {	/* version number */	unsigned int		version;	/* size of connection hash table */	unsigned int		size;	/* number of virtual services */	unsigned int		num_services;};/* The argument to IP_VS_SO_GET_SERVICE */struct ip_vs_service_entry {	/* which service: user fills in these */	u_int16_t		protocol;	u_int32_t		addr;		/* virtual address */	u_int16_t		port;	u_int32_t		fwmark;		/* firwall mark of service */	/* service options */	char			sched_name[IP_VS_SCHEDNAME_MAXLEN];	unsigned		flags;          /* virtual service flags */	unsigned		timeout;	/* persistent timeout */	u_int32_t		netmask;	/* persistent netmask */	/* number of real servers */	unsigned int		num_dests;	/* statistics */	struct ip_vs_stats_user stats;};struct ip_vs_dest_entry {	u_int32_t		addr;		/* destination address */	u_int16_t		port;	unsigned		conn_flags;	/* connection flags */	int			weight;		/* destination weight */	u_int32_t		u_threshold;	/* upper threshold */	u_int32_t		l_threshold;	/* lower threshold */	u_int32_t		activeconns;	/* active connections */	u_int32_t		inactconns;	/* inactive connections */	u_int32_t		persistconns;	/* persistent connections */	/* statistics */	struct ip_vs_stats_user stats;};/* The argument to IP_VS_SO_GET_DESTS */struct ip_vs_get_dests {	/* which service: user fills in these */	u_int16_t		protocol;	u_int32_t		addr;		/* virtual address */	u_int16_t		port;	u_int32_t		fwmark;		/* firwall mark of service */	/* number of real servers */	unsigned int		num_dests;	/* the real servers */	struct ip_vs_dest_entry	entrytable[0];};/* The argument to IP_VS_SO_GET_SERVICES */struct ip_vs_get_services {	/* number of virtual services */	unsigned int		num_services;	/* service table */	struct ip_vs_service_entry entrytable[0];};/* The argument to IP_VS_SO_GET_TIMEOUT */struct ip_vs_timeout_user {	int			tcp_timeout;	int			tcp_fin_timeout;	int			udp_timeout;};/* The argument to IP_VS_SO_GET_DAEMON */struct ip_vs_daemon_user {	/* sync daemon state (master/backup) */	int			state;	/* multicast interface name */	char			mcast_ifn[IP_VS_IFNAME_MAXLEN];	/* SyncID we belong to */	int			syncid;};#ifdef __KERNEL__#include <linux/config.h>#include <linux/list.h>                 /* for struct list_head */#include <linux/spinlock.h>             /* for struct rwlock_t */#include <linux/skbuff.h>               /* for struct sk_buff */#include <linux/ip.h>                   /* for struct iphdr */#include <asm/atomic.h>                 /* for struct atomic_t */#include <linux/netdevice.h>		/* for struct neighbour */#include <net/dst.h>			/* for struct dst_entry */#include <net/tcp.h>#include <net/udp.h>#include <linux/compiler.h>#ifdef CONFIG_IP_VS_DEBUGextern int ip_vs_get_debug_level(void);#define IP_VS_DBG(level, msg...)			\    do {						\	    if (level <= ip_vs_get_debug_level())	\		    printk(KERN_DEBUG "IPVS: " msg);	\    } while (0)#define IP_VS_DBG_RL(msg...)				\    do {						\	    if (net_ratelimit())			\		    printk(KERN_DEBUG "IPVS: " msg);	\    } while (0)#define IP_VS_DBG_PKT(level, pp, skb, ofs, msg)		\    do {						\	    if (level <= ip_vs_get_debug_level())	\		pp->debug_packet(pp, skb, ofs, msg);	\    } while (0)#define IP_VS_DBG_RL_PKT(level, pp, skb, ofs, msg)	\    do {						\	    if (level <= ip_vs_get_debug_level() &&	\		net_ratelimit())			\		pp->debug_packet(pp, skb, ofs, msg);	\    } while (0)#else	/* NO DEBUGGING at ALL */#define IP_VS_DBG(level, msg...)  do {} while (0)#define IP_VS_DBG_RL(msg...)  do {} while (0)#define IP_VS_DBG_PKT(level, pp, skb, ofs, msg)		do {} while (0)#define IP_VS_DBG_RL_PKT(level, pp, skb, ofs, msg)	do {} while (0)#endif#define IP_VS_BUG() BUG()#define IP_VS_ERR(msg...) printk(KERN_ERR "IPVS: " msg)#define IP_VS_INFO(msg...) printk(KERN_INFO "IPVS: " msg)#define IP_VS_WARNING(msg...) \	printk(KERN_WARNING "IPVS: " msg)#define IP_VS_ERR_RL(msg...)				\    do {						\	    if (net_ratelimit())			\		    printk(KERN_ERR "IPVS: " msg);	\    } while (0)#ifdef CONFIG_IP_VS_DEBUG#define EnterFunction(level)						\    do {								\	    if (level <= ip_vs_get_debug_level())			\		    printk(KERN_DEBUG "Enter: %s, %s line %i\n",	\			   __FUNCTION__, __FILE__, __LINE__);		\    } while (0)#define LeaveFunction(level)                                            \    do {                                                                \	    if (level <= ip_vs_get_debug_level())                       \			printk(KERN_DEBUG "Leave: %s, %s line %i\n",    \			       __FUNCTION__, __FILE__, __LINE__);       \    } while (0)#else#define EnterFunction(level)   do {} while (0)#define LeaveFunction(level)   do {} while (0)#endif#define	IP_VS_WAIT_WHILE(expr)	while (expr) { cpu_relax(); }/* *      The port number of FTP service (in network order). */#define FTPPORT  __constant_htons(21)#define FTPDATA  __constant_htons(20)/* *      IPVS sysctl variables under the /proc/sys/net/ipv4/vs/ */#define NET_IPV4_VS              21enum {	NET_IPV4_VS_DEBUG_LEVEL=1,	NET_IPV4_VS_AMEMTHRESH=2,	NET_IPV4_VS_AMDROPRATE=3,	NET_IPV4_VS_DROP_ENTRY=4,	NET_IPV4_VS_DROP_PACKET=5,	NET_IPV4_VS_SECURE_TCP=6,	NET_IPV4_VS_TO_ES=7,	NET_IPV4_VS_TO_SS=8,	NET_IPV4_VS_TO_SR=9,	NET_IPV4_VS_TO_FW=10,	NET_IPV4_VS_TO_TW=11,	NET_IPV4_VS_TO_CL=12,	NET_IPV4_VS_TO_CW=13,	NET_IPV4_VS_TO_LA=14,	NET_IPV4_VS_TO_LI=15,	NET_IPV4_VS_TO_SA=16,	NET_IPV4_VS_TO_UDP=17,	NET_IPV4_VS_TO_ICMP=18,	NET_IPV4_VS_LBLC_EXPIRE=19,	NET_IPV4_VS_LBLCR_EXPIRE=20,	NET_IPV4_VS_CACHE_BYPASS=22,	NET_IPV4_VS_EXPIRE_NODEST_CONN=23,	NET_IPV4_VS_SYNC_THRESHOLD=24,	NET_IPV4_VS_NAT_ICMP_SEND=25,	NET_IPV4_VS_LAST};/* *      TCP State Values */enum {	IP_VS_TCP_S_NONE = 0,	IP_VS_TCP_S_ESTABLISHED,	IP_VS_TCP_S_SYN_SENT,	IP_VS_TCP_S_SYN_RECV,	IP_VS_TCP_S_FIN_WAIT,	IP_VS_TCP_S_TIME_WAIT,	IP_VS_TCP_S_CLOSE,	IP_VS_TCP_S_CLOSE_WAIT,	IP_VS_TCP_S_LAST_ACK,	IP_VS_TCP_S_LISTEN,	IP_VS_TCP_S_SYNACK,	IP_VS_TCP_S_LAST};/* *	UDP State Values */enum {	IP_VS_UDP_S_NORMAL,	IP_VS_UDP_S_LAST,};/* *	ICMP State Values */enum {	IP_VS_ICMP_S_NORMAL,	IP_VS_ICMP_S_LAST,};/* *	Delta sequence info structure *	Each ip_vs_conn has 2 (output AND input seq. changes). *      Only used in the VS/NAT. */struct ip_vs_seq {	__u32			init_seq;	/* Add delta from this seq */	__u32			delta;		/* Delta in sequence numbers */	__u32			previous_delta;	/* Delta in sequence numbers						   before last resized pkt */};/* *	IPVS statistics object */struct ip_vs_stats{	__u32                   conns;          /* connections scheduled */	__u32                   inpkts;         /* incoming packets */	__u32                   outpkts;        /* outgoing packets */	__u64                   inbytes;        /* incoming bytes */	__u64                   outbytes;       /* outgoing bytes */	__u32			cps;		/* current connection rate */	__u32			inpps;		/* current in packet rate */	__u32			outpps;		/* current out packet rate */	__u32			inbps;		/* current in byte rate */	__u32			outbps;		/* current out byte rate */	spinlock_t              lock;           /* spin lock */};struct ip_vs_conn;struct ip_vs_app;struct ip_vs_protocol {	struct ip_vs_protocol	*next;	char			*name;	__u16			protocol;	int			dont_defrag;	atomic_t		appcnt;		/* counter of proto app incs */	int			*timeout_table;	/* protocol timeout table */	void (*init)(struct ip_vs_protocol *pp);	void (*exit)(struct ip_vs_protocol *pp);	int (*conn_schedule)(struct sk_buff *skb,			     struct ip_vs_protocol *pp,			     int *verdict, struct ip_vs_conn **cpp);	struct ip_vs_conn *	(*conn_in_get)(const struct sk_buff *skb,		       struct ip_vs_protocol *pp,		       const struct iphdr *iph,		       unsigned int proto_off,		       int inverse);	struct ip_vs_conn *	(*conn_out_get)(const struct sk_buff *skb,			struct ip_vs_protocol *pp,			const struct iphdr *iph,			unsigned int proto_off,			int inverse);	int (*snat_handler)(struct sk_buff **pskb,			    struct ip_vs_protocol *pp, struct ip_vs_conn *cp);	int (*dnat_handler)(struct sk_buff **pskb,			    struct ip_vs_protocol *pp, struct ip_vs_conn *cp);	int (*csum_check)(struct sk_buff *skb, struct ip_vs_protocol *pp);	const char *(*state_name)(int state);	int (*state_transition)(struct ip_vs_conn *cp, int direction,				const struct sk_buff *skb,				struct ip_vs_protocol *pp);	int (*register_app)(struct ip_vs_app *inc);	void (*unregister_app)(struct ip_vs_app *inc);	int (*app_conn_bind)(struct ip_vs_conn *cp);	void (*debug_packet)(struct ip_vs_protocol *pp,			     const struct sk_buff *skb,			     int offset,			     const char *msg);	void (*timeout_change)(struct ip_vs_protocol *pp, int flags);	int (*set_state_timeout)(struct ip_vs_protocol *pp, char *sname, int to);};extern struct ip_vs_protocol * ip_vs_proto_get(unsigned short proto);/* *	IP_VS structure allocated for each dynamically scheduled connection */struct ip_vs_conn {	struct list_head        c_list;         /* hashed list heads */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -