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

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

?? ip_vs_core.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	dest = svc->scheduler->schedule(svc, skb);	if (dest == NULL) {		IP_VS_DBG(1, "Schedule: no dest found.\n");		return NULL;	}	/*	 *    Create a connection entry.	 */	cp = ip_vs_conn_new(iph->protocol,			    iph->saddr, ports[0],			    iph->daddr, ports[1],			    dest->addr, dest->port?dest->port:ports[1],			    0,			    dest);	if (cp == NULL)		return NULL;	IP_VS_DBG(6, "Schedule fwd:%c c:%u.%u.%u.%u:%u v:%u.%u.%u.%u:%u "		  "d:%u.%u.%u.%u:%u flg:%X cnt:%d\n",		  ip_vs_fwd_tag(cp),		  NIPQUAD(cp->caddr), ntohs(cp->cport),		  NIPQUAD(cp->vaddr), ntohs(cp->vport),		  NIPQUAD(cp->daddr), ntohs(cp->dport),		  cp->flags, atomic_read(&cp->refcnt));	ip_vs_conn_stats(cp, svc);	return cp;}/* *  Pass or drop the packet. *  Called by ip_vs_in, when the virtual service is available but *  no destination is available for a new connection. */int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,		struct ip_vs_protocol *pp){	__u16 ports[2];	struct iphdr *iph = skb->nh.iph;	if (skb_copy_bits(skb, iph->ihl*4, ports, sizeof(ports)) < 0) {		ip_vs_service_put(svc);		return NF_DROP;	}	/* if it is fwmark-based service, the cache_bypass sysctl is up	   and the destination is RTN_UNICAST (and not local), then create	   a cache_bypass connection entry */	if (sysctl_ip_vs_cache_bypass && svc->fwmark	    && (inet_addr_type(iph->daddr) == RTN_UNICAST)) {		int ret, cs;		struct ip_vs_conn *cp;		ip_vs_service_put(svc);		/* create a new connection entry */		IP_VS_DBG(6, "ip_vs_leave: create a cache_bypass entry\n");		cp = ip_vs_conn_new(iph->protocol,				    iph->saddr, ports[0],				    iph->daddr, ports[1],				    0, 0,				    IP_VS_CONN_F_BYPASS,				    NULL);		if (cp == NULL)			return NF_DROP;		/* statistics */		ip_vs_in_stats(cp, skb);		/* set state */		cs = ip_vs_set_state(cp, IP_VS_DIR_INPUT, skb, pp);		/* transmit the first SYN packet */		ret = cp->packet_xmit(skb, cp, pp);		/* do not touch skb anymore */		atomic_inc(&cp->in_pkts);		ip_vs_conn_put(cp);		return ret;	}	/*	 * When the virtual ftp service is presented, packets destined	 * for other services on the VIP may get here (except services	 * listed in the ipvs table), pass the packets, because it is	 * not ipvs job to decide to drop the packets.	 */	if ((svc->port == FTPPORT) && (ports[1] != FTPPORT)) {		ip_vs_service_put(svc);		return NF_ACCEPT;	}	ip_vs_service_put(svc);	/*	 * Notify the client that the destination is unreachable, and	 * release the socket buffer.	 * Since it is in IP layer, the TCP socket is not actually	 * created, the TCP RST packet cannot be sent, instead that	 * ICMP_PORT_UNREACH is sent here no matter it is TCP/UDP. --WZ	 */	icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);	return NF_DROP;}/* *      It is hooked before NF_IP_PRI_NAT_SRC at the NF_IP_POST_ROUTING *      chain, and is used for VS/NAT. *      It detects packets for VS/NAT connections and sends the packets *      immediately. This can avoid that iptable_nat mangles the packets *      for VS/NAT. */static unsigned int ip_vs_post_routing(unsigned int hooknum,				       struct sk_buff **pskb,				       const struct net_device *in,				       const struct net_device *out,				       int (*okfn)(struct sk_buff *)){	if (!((*pskb)->nfcache & NFC_IPVS_PROPERTY))		return NF_ACCEPT;	/* The packet was sent from IPVS, exit this chain */	(*okfn)(*pskb);	return NF_STOLEN;}u16 ip_vs_checksum_complete(struct sk_buff *skb, int offset){	return (u16) csum_fold(skb_checksum(skb, offset, skb->len - offset, 0));}static inline struct sk_buff *ip_vs_gather_frags(struct sk_buff *skb){	skb = ip_defrag(skb);	if (skb)		ip_send_check(skb->nh.iph);	return skb;}/* * Packet has been made sufficiently writable in caller * - inout: 1=in->out, 0=out->in */void ip_vs_nat_icmp(struct sk_buff *skb, struct ip_vs_protocol *pp,		    struct ip_vs_conn *cp, int inout){	struct iphdr *iph	 = skb->nh.iph;	unsigned int icmp_offset = iph->ihl*4;	struct icmphdr *icmph	 = (struct icmphdr *)(skb->nh.raw + icmp_offset);	struct iphdr *ciph	 = (struct iphdr *)(icmph + 1);	if (inout) {		iph->saddr = cp->vaddr;		ip_send_check(iph);		ciph->daddr = cp->vaddr;		ip_send_check(ciph);	} else {		iph->daddr = cp->daddr;		ip_send_check(iph);		ciph->saddr = cp->daddr;		ip_send_check(ciph);	}	/* the TCP/UDP port */	if (IPPROTO_TCP == ciph->protocol || IPPROTO_UDP == ciph->protocol) {		__u16 *ports = (void *)ciph + ciph->ihl*4;		if (inout)			ports[1] = cp->vport;		else			ports[0] = cp->dport;	}	/* And finally the ICMP checksum */	icmph->checksum = 0;	icmph->checksum = ip_vs_checksum_complete(skb, icmp_offset);	skb->ip_summed = CHECKSUM_UNNECESSARY;	if (inout)		IP_VS_DBG_PKT(11, pp, skb, (void *)ciph - (void *)iph,			"Forwarding altered outgoing ICMP");	else		IP_VS_DBG_PKT(11, pp, skb, (void *)ciph - (void *)iph,			"Forwarding altered incoming ICMP");}/* *	Handle ICMP messages in the inside-to-outside direction (outgoing). *	Find any that might be relevant, check against existing connections, *	forward to the right destination host if relevant. *	Currently handles error types - unreachable, quench, ttl exceeded. *	(Only used in VS/NAT) */static int ip_vs_out_icmp(struct sk_buff **pskb, int *related){	struct sk_buff *skb = *pskb;	struct iphdr *iph;	struct icmphdr	icmph;	struct iphdr	ciph;	/* The ip header contained within the ICMP */	struct ip_vs_conn *cp;	struct ip_vs_protocol *pp;	unsigned int offset, ihl, verdict;	*related = 1;	/* reassemble IP fragments */	if (skb->nh.iph->frag_off & __constant_htons(IP_MF|IP_OFFSET)) {		skb = ip_vs_gather_frags(skb);		if (!skb)			return NF_STOLEN;		*pskb = skb;	}	iph = skb->nh.iph;	offset = ihl = iph->ihl * 4;	if (skb_copy_bits(skb, offset, &icmph, sizeof(icmph)) < 0)		return NF_DROP;	IP_VS_DBG(12, "Outgoing ICMP (%d,%d) %u.%u.%u.%u->%u.%u.%u.%u\n",		  icmph.type, ntohs(icmp_id(&icmph)),		  NIPQUAD(iph->saddr), NIPQUAD(iph->daddr));	/*	 * Work through seeing if this is for us.	 * These checks are supposed to be in an order that means easy	 * things are checked first to speed up processing.... however	 * this means that some packets will manage to get a long way	 * down this stack and then be rejected, but that's life.	 */	if ((icmph.type != ICMP_DEST_UNREACH) &&	    (icmph.type != ICMP_SOURCE_QUENCH) &&	    (icmph.type != ICMP_TIME_EXCEEDED)) {		*related = 0;		return NF_ACCEPT;	}	/* Now find the contained IP header */	offset += sizeof(icmph);	if (skb_copy_bits(skb, offset, &ciph, sizeof(ciph)) < 0)		return NF_ACCEPT; /* The packet looks wrong, ignore */	pp = ip_vs_proto_get(ciph.protocol);	if (!pp)		return NF_ACCEPT;	/* Is the embedded protocol header present? */	if (unlikely(ciph.frag_off & __constant_htons(IP_OFFSET) &&		     pp->dont_defrag))		return NF_ACCEPT;	IP_VS_DBG_PKT(11, pp, skb, offset, "Checking outgoing ICMP for");	offset += ciph.ihl * 4;	/* The embedded headers contain source and dest in reverse order */	cp = pp->conn_out_get(skb, pp, &ciph, offset, 1);	if (!cp)		return NF_ACCEPT;	verdict = NF_DROP;	if (IP_VS_FWD_METHOD(cp) != 0) {		IP_VS_ERR("shouldn't reach here, because the box is on the"			  "half connection in the tun/dr module.\n");	}	/* Ensure the checksum is correct */	if (skb->ip_summed != CHECKSUM_UNNECESSARY &&	    ip_vs_checksum_complete(skb, ihl)) {		/* Failed checksum! */		IP_VS_DBG(1, "Forward ICMP: failed checksum from %d.%d.%d.%d!\n",			  NIPQUAD(iph->saddr));		goto out;	}	if (IPPROTO_TCP == ciph.protocol || IPPROTO_UDP == ciph.protocol)		offset += 2 * sizeof(__u16);	if (!ip_vs_make_skb_writable(pskb, offset))		goto out;	skb = *pskb;	ip_vs_nat_icmp(skb, pp, cp, 1);	/* do the statistics and put it back */	ip_vs_out_stats(cp, skb);	skb->nfcache |= NFC_IPVS_PROPERTY;	verdict = NF_ACCEPT;  out:	__ip_vs_conn_put(cp);	return verdict;}static inline int is_tcp_reset(const struct sk_buff *skb){	struct tcphdr tcph;	if (skb_copy_bits(skb, skb->nh.iph->ihl * 4, &tcph, sizeof(tcph)) < 0)		return 0;	return tcph.rst;}/* *	It is hooked at the NF_IP_FORWARD chain, used only for VS/NAT. *	Check if outgoing packet belongs to the established ip_vs_conn, *      rewrite addresses of the packet and send it on its way... */static unsigned intip_vs_out(unsigned int hooknum, struct sk_buff **pskb,	  const struct net_device *in, const struct net_device *out,	  int (*okfn)(struct sk_buff *)){	struct sk_buff  *skb = *pskb;	struct iphdr	*iph;	struct ip_vs_protocol *pp;	struct ip_vs_conn *cp;	int ihl;	EnterFunction(11);	if (skb->nfcache & NFC_IPVS_PROPERTY)		return NF_ACCEPT;	if (skb->ip_summed == CHECKSUM_HW) {		if (skb_checksum_help(pskb, (out == NULL)))			return NF_DROP;		if (skb != *pskb)			skb = *pskb;	}	iph = skb->nh.iph;	if (unlikely(iph->protocol == IPPROTO_ICMP)) {		int related, verdict = ip_vs_out_icmp(pskb, &related);		if (related)			return verdict;		skb = *pskb;		iph = skb->nh.iph;	}	pp = ip_vs_proto_get(iph->protocol);	if (unlikely(!pp))		return NF_ACCEPT;	/* reassemble IP fragments */	if (unlikely(iph->frag_off & __constant_htons(IP_MF|IP_OFFSET) &&		     !pp->dont_defrag)) {		skb = ip_vs_gather_frags(skb);		if (!skb)			return NF_STOLEN;		iph = skb->nh.iph;		*pskb = skb;	}	ihl = iph->ihl << 2;	/*	 * Check if the packet belongs to an existing entry	 */	cp = pp->conn_out_get(skb, pp, iph, ihl, 0);	if (unlikely(!cp)) {		if (sysctl_ip_vs_nat_icmp_send &&		    (pp->protocol == IPPROTO_TCP ||		     pp->protocol == IPPROTO_UDP)) {			__u16 ports[2];			if (skb_copy_bits(skb, ihl, ports, sizeof(ports)) < 0)				return NF_ACCEPT;	/* Not for me */			if (ip_vs_lookup_real_service(iph->protocol,						      iph->saddr, ports[0])) {				/*				 * Notify the real server: there is no				 * existing entry if it is not RST				 * packet or not TCP packet.				 */				if (iph->protocol != IPPROTO_TCP				    || !is_tcp_reset(skb)) {					icmp_send(skb,ICMP_DEST_UNREACH,						  ICMP_PORT_UNREACH, 0);					return NF_DROP;				}			}		}		IP_VS_DBG_PKT(12, pp, skb, 0,			      "packet continues traversal as normal");		return NF_ACCEPT;	}	IP_VS_DBG_PKT(11, pp, skb, 0, "Outgoing packet");	if (!ip_vs_make_skb_writable(pskb, ihl))		goto drop;	/* mangle the packet */	if (pp->snat_handler && !pp->snat_handler(pskb, pp, cp))		goto drop;	skb = *pskb;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜国产精品一区| 三级欧美韩日大片在线看| 欧美电视剧在线观看完整版| 在线观看免费视频综合| jiyouzz国产精品久久| 国产一区二区三区日韩| 久久er精品视频| 黄色日韩网站视频| 国产高清无密码一区二区三区| 韩国精品在线观看| 国产一区二区免费看| 国产经典欧美精品| av中文一区二区三区| 99久久99久久综合| 欧美色爱综合网| 日韩一二三四区| 久久久国产精品麻豆| 国产精品美女久久久久久 | 日韩精品午夜视频| 日产国产高清一区二区三区 | 国产精品18久久久久久vr| 国产精品羞羞答答xxdd | 亚洲高清中文字幕| 久久国产精品一区二区| 国产91丝袜在线观看| 色菇凉天天综合网| 精品av综合导航| 亚洲视频一区二区免费在线观看| 亚洲综合免费观看高清完整版| 久久精工是国产品牌吗| 成人黄色小视频在线观看| 在线播放视频一区| 亚洲欧洲精品一区二区三区不卡| 五月婷婷欧美视频| 成年人网站91| 2024国产精品| 亚洲一区二区三区免费视频| 精品一区二区国语对白| 色先锋久久av资源部| 精品久久99ma| 亚洲成av人片一区二区梦乃| 国产凹凸在线观看一区二区| 欧美浪妇xxxx高跟鞋交| 国产精品无码永久免费888| 亚洲韩国一区二区三区| 国产在线精品一区在线观看麻豆| 欧美日韩国产在线播放网站| 中文字幕精品三区| 亚洲国产精品ⅴa在线观看| 亚洲成av人综合在线观看| 国产传媒欧美日韩成人| 91麻豆精品国产无毒不卡在线观看| 中文字幕中文字幕中文字幕亚洲无线| 日韩成人一级片| 在线观看日韩国产| 国产精品二区一区二区aⅴ污介绍| 久久99国产精品免费| 欧美日韩的一区二区| 亚洲欧美另类久久久精品| 国产精品一区二区在线观看网站| 337p亚洲精品色噜噜狠狠| 亚洲午夜一二三区视频| 91啪九色porn原创视频在线观看| 国产亚洲欧美色| 国产成人亚洲综合a∨婷婷| 精品国产亚洲一区二区三区在线观看| 日本亚洲欧美天堂免费| 欧美日韩亚洲综合| 香蕉成人伊视频在线观看| 在线精品亚洲一区二区不卡| 亚洲精品成a人| 欧美综合一区二区| 亚洲第一狼人社区| 欧美精品国产精品| 日产欧产美韩系列久久99| 91精品国产综合久久精品图片| 亚洲成年人影院| 欧美丰满一区二区免费视频 | 99久久伊人久久99| 国产精品天天看| 成人午夜大片免费观看| 国产精品嫩草99a| 91蝌蚪国产九色| 亚洲五月六月丁香激情| 91精品一区二区三区久久久久久 | 亚洲国产精品精华液ab| 久久国产麻豆精品| 国产免费久久精品| 91在线视频官网| 香蕉久久夜色精品国产使用方法| 欧美一区二区三区日韩| 久草精品在线观看| 中文字幕一区二区三区不卡在线 | 国产精品欧美精品| 色婷婷久久久久swag精品| 亚洲福利视频一区二区| 欧美一级理论片| 成人黄色网址在线观看| 亚洲一区二区影院| 久久亚洲综合色| 91亚洲大成网污www| 日韩av成人高清| 国产精品视频麻豆| 欧美日韩三级一区| 成人综合婷婷国产精品久久免费| 亚洲理论在线观看| 337p日本欧洲亚洲大胆色噜噜| 91首页免费视频| 久久国产麻豆精品| 亚洲一区二区三区国产| 久久久久久久久97黄色工厂| 欧洲av一区二区嗯嗯嗯啊| 国产精品一区二区91| 亚洲国产毛片aaaaa无费看| 久久久亚洲午夜电影| 欧美三级电影在线看| 风间由美中文字幕在线看视频国产欧美| 亚洲在线中文字幕| 国产精品久久网站| 欧美成人综合网站| 欧美亚洲愉拍一区二区| 国产乱人伦精品一区二区在线观看 | 日韩不卡一区二区三区| 国产精品毛片久久久久久| 日韩视频免费观看高清完整版在线观看| a亚洲天堂av| 国产在线不卡一区| 日韩成人一级大片| 亚洲国产精品久久人人爱蜜臀| 欧美国产精品v| 欧美va天堂va视频va在线| 在线看日本不卡| 在线视频欧美精品| 99精品久久久久久| 99久久久精品| 成人美女在线视频| 国产高清成人在线| 久久99久久精品| 蜜桃av噜噜一区| 麻豆国产欧美一区二区三区| 亚洲一区二区精品3399| 樱花草国产18久久久久| 亚洲日本乱码在线观看| 国产精品久久久久影院老司| 久久久国产一区二区三区四区小说| 精品欧美一区二区久久| 欧美岛国在线观看| 精品免费视频一区二区| 91精品国产综合久久精品app| 欧美日韩不卡一区二区| 欧美日本免费一区二区三区| 精品视频在线视频| 在线综合+亚洲+欧美中文字幕| 欧美亚洲国产一区在线观看网站| 日本高清不卡一区| 欧美精品粉嫩高潮一区二区| 欧美日韩成人综合天天影院| 9191久久久久久久久久久| 91精品国产综合久久精品| 精品日韩av一区二区| 国产人妖乱国产精品人妖| 国产精品动漫网站| 亚洲成av人片一区二区三区| 天天av天天翘天天综合网 | 亚洲aⅴ怡春院| 日本女优在线视频一区二区 | 久久精品视频免费| 国产精品三级av在线播放| 国产精品国产自产拍在线| 一区二区三区四区在线免费观看| 亚洲一区二区三区精品在线| 免费成人av在线播放| 国产suv精品一区二区三区| 91美女蜜桃在线| 日韩丝袜美女视频| 中文字幕一区二区三区视频| 一区二区三区在线免费观看| 偷窥国产亚洲免费视频| 国产一区视频导航| 色8久久人人97超碰香蕉987| 这里是久久伊人| 中文字幕在线不卡国产视频| 亚洲不卡一区二区三区| 国产成人亚洲综合a∨婷婷| 一本久久a久久免费精品不卡| 欧美一区二区三区在线电影| 国产精品免费人成网站| 日日夜夜一区二区| 91在线porny国产在线看| 91精品国产色综合久久ai换脸| 国产视频不卡一区| 日韩成人精品在线| 91国内精品野花午夜精品| 日韩区在线观看| 亚洲色图丝袜美腿| 国产在线国偷精品产拍免费yy| 欧美中文字幕一区| 国产精品视频一区二区三区不卡| 手机精品视频在线观看| 99re视频精品|