亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ip_vs_core.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * IPVS         An implementation of the IP virtual server support for the *              LINUX operating system.  IPVS is now implemented as a module *              over the Netfilter framework. IPVS can be used to build a *              high-performance and highly available server based on a *              cluster of servers. * * Version:     $Id: ip_vs_core.c,v 1.34 2003/05/10 03:05:23 wensong Exp $ * * Authors:     Wensong Zhang <wensong@linuxvirtualserver.org> *              Peter Kese <peter.kese@ijs.si> *              Julian Anastasov <ja@ssi.bg> * *              This program is free software; you can redistribute it and/or *              modify it under the terms of the GNU General Public License *              as published by the Free Software Foundation; either version *              2 of the License, or (at your option) any later version. * * The IPVS code for kernel 2.2 was done by Wensong Zhang and Peter Kese, * with changes/fixes from Julian Anastasov, Lars Marowsky-Bree, Horms * and others. * * Changes: *	Paul `Rusty' Russell		properly handle non-linear skbs * */#include <linux/module.h>#include <linux/kernel.h>#include <linux/ip.h>#include <linux/tcp.h>#include <linux/icmp.h>#include <net/ip.h>#include <net/tcp.h>#include <net/udp.h>#include <net/icmp.h>                   /* for icmp_send */#include <net/route.h>#include <linux/netfilter.h>#include <linux/netfilter_ipv4.h>#include <net/ip_vs.h>EXPORT_SYMBOL(register_ip_vs_scheduler);EXPORT_SYMBOL(unregister_ip_vs_scheduler);EXPORT_SYMBOL(ip_vs_skb_replace);EXPORT_SYMBOL(ip_vs_proto_name);EXPORT_SYMBOL(ip_vs_conn_new);EXPORT_SYMBOL(ip_vs_conn_in_get);EXPORT_SYMBOL(ip_vs_conn_out_get);#ifdef CONFIG_IP_VS_PROTO_TCPEXPORT_SYMBOL(ip_vs_tcp_conn_listen);#endifEXPORT_SYMBOL(ip_vs_conn_put);#ifdef CONFIG_IP_VS_DEBUGEXPORT_SYMBOL(ip_vs_get_debug_level);#endifEXPORT_SYMBOL(check_for_ip_vs_out);EXPORT_SYMBOL(ip_vs_make_skb_writable);/* ID used in ICMP lookups */#define icmp_id(icmph)          (((icmph)->un).echo.id)const char *ip_vs_proto_name(unsigned proto){	static char buf[20];	switch (proto) {	case IPPROTO_IP:		return "IP";	case IPPROTO_UDP:		return "UDP";	case IPPROTO_TCP:		return "TCP";	case IPPROTO_ICMP:		return "ICMP";	default:		sprintf(buf, "IP_%d", proto);		return buf;	}}void ip_vs_init_hash_table(struct list_head *table, int rows){	while (--rows >= 0)		INIT_LIST_HEAD(&table[rows]);}static inline voidip_vs_in_stats(struct ip_vs_conn *cp, struct sk_buff *skb){	struct ip_vs_dest *dest = cp->dest;	if (dest && (dest->flags & IP_VS_DEST_F_AVAILABLE)) {		spin_lock(&dest->stats.lock);		dest->stats.inpkts++;		dest->stats.inbytes += skb->len;		spin_unlock(&dest->stats.lock);		spin_lock(&dest->svc->stats.lock);		dest->svc->stats.inpkts++;		dest->svc->stats.inbytes += skb->len;		spin_unlock(&dest->svc->stats.lock);		spin_lock(&ip_vs_stats.lock);		ip_vs_stats.inpkts++;		ip_vs_stats.inbytes += skb->len;		spin_unlock(&ip_vs_stats.lock);	}}static inline voidip_vs_out_stats(struct ip_vs_conn *cp, struct sk_buff *skb){	struct ip_vs_dest *dest = cp->dest;	if (dest && (dest->flags & IP_VS_DEST_F_AVAILABLE)) {		spin_lock(&dest->stats.lock);		dest->stats.outpkts++;		dest->stats.outbytes += skb->len;		spin_unlock(&dest->stats.lock);		spin_lock(&dest->svc->stats.lock);		dest->svc->stats.outpkts++;		dest->svc->stats.outbytes += skb->len;		spin_unlock(&dest->svc->stats.lock);		spin_lock(&ip_vs_stats.lock);		ip_vs_stats.outpkts++;		ip_vs_stats.outbytes += skb->len;		spin_unlock(&ip_vs_stats.lock);	}}static inline voidip_vs_conn_stats(struct ip_vs_conn *cp, struct ip_vs_service *svc){	spin_lock(&cp->dest->stats.lock);	cp->dest->stats.conns++;	spin_unlock(&cp->dest->stats.lock);	spin_lock(&svc->stats.lock);	svc->stats.conns++;	spin_unlock(&svc->stats.lock);	spin_lock(&ip_vs_stats.lock);	ip_vs_stats.conns++;	spin_unlock(&ip_vs_stats.lock);}static inline intip_vs_set_state(struct ip_vs_conn *cp, int direction,		const struct sk_buff *skb,		struct ip_vs_protocol *pp){	if (unlikely(!pp->state_transition))		return 0;	return pp->state_transition(cp, direction, skb, pp);}int ip_vs_make_skb_writable(struct sk_buff **pskb, int writable_len){	struct sk_buff *skb = *pskb;	/* skb is already used, better copy skb and its payload */	if (unlikely(skb_shared(skb) || skb->sk))		goto copy_skb;	/* skb data is already used, copy it */	if (unlikely(skb_cloned(skb)))		goto copy_data;	return pskb_may_pull(skb, writable_len);  copy_data:	if (unlikely(writable_len > skb->len))		return 0;	return !pskb_expand_head(skb, 0, 0, GFP_ATOMIC);  copy_skb:	if (unlikely(writable_len > skb->len))		return 0;	skb = skb_copy(skb, GFP_ATOMIC);	if (!skb)		return 0;	BUG_ON(skb_is_nonlinear(skb));	/* Rest of kernel will get very unhappy if we pass it a	   suddenly-orphaned skbuff */	if ((*pskb)->sk)		skb_set_owner_w(skb, (*pskb)->sk);	kfree_skb(*pskb);	*pskb = skb;	return 1;}/* *  IPVS persistent scheduling function *  It creates a connection entry according to its template if exists, *  or selects a server and creates a connection entry plus a template. *  Locking: we are svc user (svc->refcnt), so we hold all dests too *  Protocols supported: TCP, UDP */static struct ip_vs_conn *ip_vs_sched_persist(struct ip_vs_service *svc,		    const struct sk_buff *skb,		    __u16 ports[2]){	struct ip_vs_conn *cp = NULL;	struct iphdr *iph = skb->nh.iph;	struct ip_vs_dest *dest;	struct ip_vs_conn *ct;	__u16  dport;	 /* destination port to forward */	__u32  snet;	 /* source network of the client, after masking */	/* Mask saddr with the netmask to adjust template granularity */	snet = iph->saddr & svc->netmask;	IP_VS_DBG(6, "p-schedule: src %u.%u.%u.%u:%u dest %u.%u.%u.%u:%u "		  "mnet %u.%u.%u.%u\n",		  NIPQUAD(iph->saddr), ntohs(ports[0]),		  NIPQUAD(iph->daddr), ntohs(ports[1]),		  NIPQUAD(snet));	/*	 * As far as we know, FTP is a very complicated network protocol, and	 * it uses control connection and data connections. For active FTP,	 * FTP server initialize data connection to the client, its source port	 * is often 20. For passive FTP, FTP server tells the clients the port	 * that it passively listens to,  and the client issues the data	 * connection. In the tunneling or direct routing mode, the load	 * balancer is on the client-to-server half of connection, the port	 * number is unknown to the load balancer. So, a conn template like	 * <caddr, 0, vaddr, 0, daddr, 0> is created for persistent FTP	 * service, and a template like <caddr, 0, vaddr, vport, daddr, dport>	 * is created for other persistent services.	 */	if (ports[1] == svc->port) {		/* Check if a template already exists */		if (svc->port != FTPPORT)			ct = ip_vs_conn_in_get(iph->protocol, snet, 0,					       iph->daddr, ports[1]);		else			ct = ip_vs_conn_in_get(iph->protocol, snet, 0,					       iph->daddr, 0);		if (!ct || !ip_vs_check_template(ct)) {			/*			 * No template found or the dest of the connection			 * template is not available.			 */			dest = svc->scheduler->schedule(svc, skb);			if (dest == NULL) {				IP_VS_DBG(1, "p-schedule: no dest found.\n");				return NULL;			}			/*			 * Create a template like <protocol,caddr,0,			 * vaddr,vport,daddr,dport> for non-ftp service,			 * and <protocol,caddr,0,vaddr,0,daddr,0>			 * for ftp service.			 */			if (svc->port != FTPPORT)				ct = ip_vs_conn_new(iph->protocol,						    snet, 0,						    iph->daddr,						    ports[1],						    dest->addr, dest->port,						    0,						    dest);			else				ct = ip_vs_conn_new(iph->protocol,						    snet, 0,						    iph->daddr, 0,						    dest->addr, 0,						    0,						    dest);			if (ct == NULL)				return NULL;			ct->timeout = svc->timeout;		} else {			/* set destination with the found template */			dest = ct->dest;		}		dport = dest->port;	} else {		/*		 * Note: persistent fwmark-based services and persistent		 * port zero service are handled here.		 * fwmark template: <IPPROTO_IP,caddr,0,fwmark,0,daddr,0>		 * port zero template: <protocol,caddr,0,vaddr,0,daddr,0>		 */		if (svc->fwmark)			ct = ip_vs_conn_in_get(IPPROTO_IP, snet, 0,					       htonl(svc->fwmark), 0);		else			ct = ip_vs_conn_in_get(iph->protocol, snet, 0,					       iph->daddr, 0);		if (!ct || !ip_vs_check_template(ct)) {			/*			 * If it is not persistent port zero, return NULL,			 * otherwise create a connection template.			 */			if (svc->port)				return NULL;			dest = svc->scheduler->schedule(svc, skb);			if (dest == NULL) {				IP_VS_DBG(1, "p-schedule: no dest found.\n");				return NULL;			}			/*			 * Create a template according to the service			 */			if (svc->fwmark)				ct = ip_vs_conn_new(IPPROTO_IP,						    snet, 0,						    htonl(svc->fwmark), 0,						    dest->addr, 0,						    0,						    dest);			else				ct = ip_vs_conn_new(iph->protocol,						    snet, 0,						    iph->daddr, 0,						    dest->addr, 0,						    0,						    dest);			if (ct == NULL)				return NULL;			ct->timeout = svc->timeout;		} else {			/* set destination with the found template */			dest = ct->dest;		}		dport = ports[1];	}	/*	 *    Create a new connection according to the template	 */	cp = ip_vs_conn_new(iph->protocol,			    iph->saddr, ports[0],			    iph->daddr, ports[1],			    dest->addr, dport,			    0,			    dest);	if (cp == NULL) {		ip_vs_conn_put(ct);		return NULL;	}	/*	 *    Add its control	 */	ip_vs_control_add(cp, ct);	ip_vs_conn_put(ct);	ip_vs_conn_stats(cp, svc);	return cp;}/* *  IPVS main scheduling function *  It selects a server according to the virtual service, and *  creates a connection entry. *  Protocols supported: TCP, UDP */struct ip_vs_conn *ip_vs_schedule(struct ip_vs_service *svc, const struct sk_buff *skb){	struct ip_vs_conn *cp = NULL;	struct iphdr *iph = skb->nh.iph;	struct ip_vs_dest *dest;	__u16 ports[2];	if (skb_copy_bits(skb, iph->ihl*4, ports, sizeof(ports)) < 0)		return NULL;	/*	 *    Persistent service	 */	if (svc->flags & IP_VS_SVC_F_PERSISTENT)		return ip_vs_sched_persist(svc, skb, ports);	/*	 *    Non-persistent service	 */	if (!svc->fwmark && ports[1] != svc->port) {		if (!svc->port)			IP_VS_ERR("Schedule: port zero only supported "				  "in persistent services, "				  "check your ipvs configuration\n");		return NULL;	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费高清电影| 国产午夜精品在线观看| 99精品欧美一区二区三区小说| 韩国一区二区三区| 九九视频精品免费| 国产一区二区在线看| 国产一区二三区| 国产成人精品一区二| 国产成人免费网站| 成人午夜视频在线观看| 成人午夜精品在线| 99久久综合色| 日本精品免费观看高清观看| 欧美羞羞免费网站| 欧美一级二级三级蜜桃| 精品国产污网站| 国产精品国产三级国产aⅴ无密码| 中文字幕成人av| 亚洲老妇xxxxxx| 美女一区二区三区| 国产成人免费视频| 99久久精品国产一区二区三区| 91一区在线观看| 91精品国产91久久久久久最新毛片| 日韩一区二区三区四区| 国产欧美日韩在线看| 夜夜嗨av一区二区三区网页| 日韩av在线发布| 粉嫩在线一区二区三区视频| 91久久奴性调教| 欧美成人在线直播| 中文字幕在线免费不卡| 石原莉奈在线亚洲三区| 成人一区二区三区中文字幕| 欧美日韩不卡一区二区| 国产欧美精品在线观看| 亚洲综合自拍偷拍| 国产精品综合二区| 欧美伊人久久久久久久久影院| 久久免费看少妇高潮| 亚洲自拍偷拍av| 成人午夜电影小说| 日韩一二三四区| 亚洲综合在线第一页| 成人夜色视频网站在线观看| 91精品免费在线| 亚洲色图清纯唯美| 国产精品18久久久久久久久久久久| 欧洲一区二区三区在线| 国产网站一区二区三区| 男男视频亚洲欧美| 在线免费观看日本一区| 中文字幕高清一区| 狠狠色狠狠色合久久伊人| 欧美日本韩国一区二区三区视频| 国产精品毛片a∨一区二区三区| 蜜桃视频在线观看一区二区| 欧美日韩亚洲综合一区 | 欧美日韩国产一级片| 日本一区二区三区免费乱视频| 日韩中文字幕91| 欧美乱妇23p| 亚洲桃色在线一区| 成人免费看片app下载| 精品国产乱码久久久久久图片| 午夜激情综合网| 欧美视频一二三区| 亚洲成av人片一区二区三区| 99精品视频在线播放观看| 中文字幕一区视频| 波多野结衣中文一区| 国产网站一区二区| 国产成人精品亚洲777人妖| 2021久久国产精品不只是精品| 精品制服美女丁香| 精品国产91九色蝌蚪| 国产一区久久久| 久久欧美中文字幕| www.日韩av| 亚洲人成在线播放网站岛国| 色综合久久88色综合天天| 亚洲色图欧美偷拍| 欧美午夜一区二区三区| 亚洲韩国精品一区| 91精品国产一区二区| 激情综合网av| 欧美国产日韩亚洲一区| 北条麻妃国产九九精品视频| 亚洲欧美激情小说另类| 在线视频一区二区免费| 日日骚欧美日韩| 精品久久久网站| av电影天堂一区二区在线观看| 最新不卡av在线| 欧美日韩国产影片| 国产精品2024| 亚洲成人综合网站| 精品盗摄一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 亚洲精品视频在线观看网站| 欧美日韩一区成人| 国产一区二区三区av电影| 亚洲日本韩国一区| 欧美一区二区三区免费观看视频| 国产成人亚洲综合a∨婷婷图片| 一区二区三区不卡视频| 日韩精品一区在线观看| av不卡在线观看| 麻豆精品视频在线观看免费| 国产精品狼人久久影院观看方式| 欧美日韩综合不卡| 成人黄页毛片网站| 蜜臀精品一区二区三区在线观看 | 亚洲国产视频a| 精品成人一区二区三区四区| 94-欧美-setu| 国产在线精品不卡| 午夜成人免费电影| 亚洲欧洲av另类| 久久青草国产手机看片福利盒子| 在线观看成人免费视频| 国产精品一区不卡| 午夜影院久久久| 综合激情网...| 久久夜色精品国产噜噜av| 精品视频一区三区九区| av成人免费在线| 国产精品69毛片高清亚洲| 日韩国产欧美在线视频| 亚洲激情在线激情| 中日韩av电影| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 不卡一区二区三区四区| 久久机这里只有精品| 一区二区日韩av| 亚洲欧美乱综合| 中文字幕永久在线不卡| 国产日韩三级在线| 精品理论电影在线观看| 91精品国产欧美一区二区| 欧美性淫爽ww久久久久无| 99久久精品久久久久久清纯| 成熟亚洲日本毛茸茸凸凹| 国产精品影视天天线| 黄一区二区三区| 精品一区二区三区蜜桃| 六月婷婷色综合| 黄页视频在线91| 激情文学综合丁香| 国产一区二区三区综合| 国模大尺度一区二区三区| 国产一二三精品| 国产福利电影一区二区三区| 国产乱码一区二区三区| 国产寡妇亲子伦一区二区| 国产a精品视频| 丁香五精品蜜臀久久久久99网站 | 色综合一区二区三区| 91偷拍与自偷拍精品| 色综合天天综合网天天看片| 一本一本大道香蕉久在线精品 | 国产精品久久久久久久裸模 | 日韩精品福利网| 日本视频中文字幕一区二区三区| 免费在线观看一区| 韩国欧美国产1区| 成人免费看的视频| 色天天综合色天天久久| 欧美精选一区二区| 精品成a人在线观看| 国产精品久久影院| 亚洲午夜激情网页| 久久9热精品视频| hitomi一区二区三区精品| 色婷婷久久久综合中文字幕| 欧美精品一卡两卡| 久久久综合网站| 一区二区三区精品久久久| 日韩av中文字幕一区二区三区| 国产精品一二三四五| 91小视频在线| 日韩精品在线一区| 日韩美女视频19| 日本怡春院一区二区| 国产成a人无v码亚洲福利| 欧美性videosxxxxx| 精品福利一区二区三区免费视频| 国产精品久久久久一区| 日韩精品欧美精品| 成人午夜碰碰视频| 91精品国产综合久久久久久漫画| 久久久久久久网| 午夜成人免费视频| 99久久国产综合色|国产精品| 欧美日韩午夜精品| 国产精品乱码一区二三区小蝌蚪| 亚洲aaa精品| 波多野结衣精品在线| 日韩视频一区在线观看| 一区二区不卡在线播放|