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

📄 tcpsp.h

📁 在传输层实现了资源的负载平衡 实现了集群
💻 H
字号:
/* * TCPSP -	TCP Splicing * * Copyright (C) 2002 Wensong Zhang <wensong@linux-vs.org> * * tcpsp.h:	main structure definitions and function prototypes */#ifndef _TCPSP_H#define _TCPSP_H#include <asm/types.h>          /* For __uXX types */#define TCPSP_VERSION_CODE            0x000005#define NVERSION(version)                       \	(version >> 16) & 0xFF,                 \	(version >> 8) & 0xFF,                  \	version & 0xFF/* *      TCPSP socket options */#define TCPSP_BASE_CTL		(64+1024+64+64+64)	/* base */#define TCPSP_SO_SET_NONE	TCPSP_BASE_CTL	        /* just peek */#define TCPSP_SO_SET_ADD	(TCPSP_BASE_CTL+1)#define TCPSP_SO_SET_MAX	TCPSP_SO_SET_ADD#define TCPSP_SO_GET_VERSION	TCPSP_BASE_CTL#define TCPSP_SO_GET_INFO	(TCPSP_BASE_CTL+1)#define TCPSP_SO_GET_MAX	TCPSP_SO_GET_INFO/* The argument to TCPSP_SO_SET_ADD */typedef struct splice_conn_s {	int s1;	int s2;	/* the number of bytes written to s2 */	int n;} splice_conn_t;/* *      TCPSP Connection Flags */#define TCPSP_CONN_F_FWD_MASK         0x0007    /* mask for the fwd methods */#define TCPSP_CONN_F_MASQ	      0x0000    /* masquerading */#define TCPSP_CONN_F_LOCALNODE	      0x0001    /* local node */#define TCPSP_CONN_F_TUNNEL	      0x0002    /* tunneling */#define TCPSP_CONN_F_DROUTE           0x0003    /* direct routing */#define TCPSP_CONN_F_BYPASS           0x0004    /* cache bypass */#define TCPSP_CONN_F_HASHED	      0x0040	/* hashed entry */#define TCPSP_CONN_F_NOOUTPUT         0x0080    /* no output packets */#define TCPSP_CONN_F_INACTIVE         0x0100    /* not established */#define TCPSP_CONN_F_OUT_SEQ          0x0200    /* must do output seq adjust */#define TCPSP_CONN_F_IN_SEQ           0x0400    /* must do input seq adjust */#define TCPSP_CONN_F_SEQ_MASK         0x0600    /* in/out sequence mask */#define TCPSP_CONN_F_NO_CPORT         0x0800    /* no client port set yet */#define TCPSP_SCHEDNAME_MAXLEN         16#define TCPSP_IFNAME_MAXLEN            16#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 <net/route.h>			/* for ip_route_output */#include <net/tcp.h>#include <net/udp.h>#ifdef CONFIG_TCPSP_DEBUGextern int tcpsp_get_debug_level(void);#define TCPSP_DBG(level, msg...)			\    do {						\	    if (level <= tcpsp_get_debug_level())	\		    printk(KERN_DEBUG "TCPSP: " msg);	\    } while (0)#define TCPSP_DBG_RL(msg...)				\    do {						\	    if (net_ratelimit())			\		    printk(KERN_DEBUG "TCPSP: " msg);	\    } while (0)#else	/* NO DEBUGGING at ALL */#define TCPSP_DBG(level, msg...)  do {} while (0)#define TCPSP_DBG_RL(msg...)  do {} while (0)#endif#define TCPSP_BUG() BUG()#define TCPSP_ERR(msg...) printk(KERN_ERR "TCPSP: " msg)#define TCPSP_INFO(msg...) printk(KERN_INFO "TCPSP: " msg)#define TCPSP_WARNING(msg...) \	printk(KERN_WARNING "TCPSP: " msg)#define TCPSP_ERR_RL(msg...)				\    do {						\	    if (net_ratelimit())			\		    printk(KERN_ERR "TCPSP: " msg);	\    } while (0)#ifdef CONFIG_TCPSP_DEBUG#define EnterFunction(level)						\    do {								\	    if (level <= tcpsp_get_debug_level())			\		    printk(KERN_DEBUG "Enter: %s, %s line %i\n",	\			   __FUNCTION__, __FILE__, __LINE__);		\    } while (0)#define LeaveFunction(level)                                            \    do {                                                                \	    if (level <= tcpsp_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/* *      TCPSP State Values */enum {	TCPSP_S_NONE = 0,	TCPSP_S_ESTABLISHED,	TCPSP_S_SYN_SENT,	TCPSP_S_SYN_RECV,	TCPSP_S_FIN_WAIT,	TCPSP_S_TIME_WAIT,	TCPSP_S_CLOSE,	TCPSP_S_CLOSE_WAIT,	TCPSP_S_LAST_ACK,	TCPSP_S_LISTEN,	TCPSP_S_SYNACK,	TCPSP_S_LAST};struct tcpsp_timeout_table {	atomic_t refcnt;	int scale;	int timeout[TCPSP_S_LAST+1];};struct conn_tuple {	__u32                   laddr;		/* locate address */	__u32                   raddr;          /* remote address */	__u16                   lport;	__u16                   rport;	/* sequence numbers at the spliced point */	__u32			splice_iss;	/* initial send sequence */	__u32			splice_irs;	/* initial receive sequence */	/* tcp timestamps at the spliced point*/	__u32			splice_tsv;	/* timestamp value */	__u32			splice_tse;	/* timestamp echo reply */	char			timestamp_ok;};/* direction definition */#define FROM_FIRST_CONN		0#define FROM_SECOND_CONN	1/* *	TCP splicing connection */struct tcpsp_conn {	struct list_head        f_list;		/* first hash table */	struct list_head        s_list;		/* second hash table */	atomic_t                refcnt;		/* reference count */	/* two sockets/connections */	struct socket		*socket[2];	atomic_t		need_rst;	/* need resetting socks */	struct conn_tuple	conn[2];	/* two spliced connections */	/* Flags and state transition */	spinlock_t              lock;           /* lock for state transition */	volatile __u16          flags;          /* status flags */	volatile __u16          state;          /* state info */	/* timeout */	volatile unsigned long  timeout;	struct tcpsp_timeout_table *timeout_table;	struct timer_list       timer;		/* expiration timer */	/* packet transmitter */	int (*packet_xmit)(struct sk_buff *skb);};/* *      TCPSP core functions *      (from tcpsp_core.c) */extern const char *tcpsp_proto_name(unsigned proto);/* *     tcpsp_conn handling functions *     (from tcpsp_conn.c) */extern struct tcpsp_timeout_table tcpsp_timeout_tbl;/* TCPSP connection entry hash table */#ifndef CONFIG_TCPSP_TAB_BITS#define CONFIG_TCPSP_TAB_BITS   8#endif#define TCPSP_CONN_TAB_BITS     CONFIG_TCPSP_TAB_BITS#define TCPSP_CONN_TAB_SIZE     (1 << TCPSP_CONN_TAB_BITS)#define TCPSP_CONN_TAB_MASK     (TCPSP_CONN_TAB_SIZE - 1)extern struct tcpsp_conn *tcpsp_conn_get(__u32 saddr, __u16 sport, __u32 daddr, __u16 dport, int *dir);/* put back the conn without restarting its timer */static inline void __tcpsp_conn_put(struct tcpsp_conn *cp){	atomic_dec(&cp->refcnt);}extern void tcpsp_conn_put(struct tcpsp_conn *cp);extern struct tcpsp_conn *tcpsp_conn_new(struct socket *sock1, struct socket *sock2, int n);#define tcpsp_conn_expire_now(cp)  cp->timer.function((unsigned long)cp)extern const char * tcpsp_state_name(int state);extern int tcpsp_set_state(struct tcpsp_conn *cp, int direction,			   struct iphdr *iph, struct tcphdr *th);extern int tcpsp_conn_init(void);extern void tcpsp_conn_cleanup(void);/* *      TCPSP control data and functions *      (from tcpsp_ctl.c) */extern int tcpsp_control_init(void);extern void tcpsp_control_cleanup(void);#endif /* __KERNEL__ */#endif	/* _TCPSP_H */

⌨️ 快捷键说明

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