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

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

?? ipchains_core.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* Minor modifications to fit on compatibility framework:   Rusty.Russell@rustcorp.com.au*//* * This code is heavily based on the code on the old ip_fw.c code; see below for * copyrights and attributions of the old code.  This code is basically GPL. * * 15-Aug-1997: Major changes to allow graphs for firewall rules. *              Paul Russell <Paul.Russell@rustcorp.com.au> and *		Michael Neuling <Michael.Neuling@rustcorp.com.au> * 24-Aug-1997: Generalised protocol handling (not just TCP/UDP/ICMP). *              Added explicit RETURN from chains. *              Removed TOS mangling (done in ipchains 1.0.1). *              Fixed read & reset bug by reworking proc handling. *              Paul Russell <Paul.Russell@rustcorp.com.au> * 28-Sep-1997: Added packet marking for net sched code. *              Removed fw_via comparisons: all done on device name now, *              similar to changes in ip_fw.c in DaveM's CVS970924 tree. *              Paul Russell <Paul.Russell@rustcorp.com.au> * 2-Nov-1997:  Moved types across to __u16, etc. *              Added inverse flags. *              Fixed fragment bug (in args to port_match). *              Changed mark to only one flag (MARKABS). * 21-Nov-1997: Added ability to test ICMP code. * 19-Jan-1998: Added wildcard interfaces. * 6-Feb-1998:  Merged 2.0 and 2.1 versions. *              Initialised ip_masq for 2.0.x version. *              Added explicit NETLINK option for 2.1.x version. *              Added packet and byte counters for policy matches. * 26-Feb-1998: Fixed race conditions, added SMP support. * 18-Mar-1998: Fix SMP, fix race condition fix. * 1-May-1998:  Remove caching of device pointer. * 12-May-1998: Allow tiny fragment case for TCP/UDP. * 15-May-1998: Treat short packets as fragments, don't just block. * 3-Jan-1999:  Fixed serious procfs security hole -- users should never *              be allowed to view the chains! *              Marc Santoro <ultima@snicker.emoti.com> * 29-Jan-1999: Locally generated bogus IPs dealt with, rather than crash *              during dump_packet. --RR. * 19-May-1999: Star Wars: The Phantom Menace opened.  Rule num *		printed in log (modified from Michael Hasenstein's patch). *		Added SYN in log message. --RR * 23-Jul-1999: Fixed small fragment security exposure opened on 15-May-1998. *              John McDonald <jm@dataprotect.com> *              Thomas Lopatic <tl@dataprotect.com> *//* * * The origina Linux port was done Alan Cox, with changes/fixes from * Pauline Middlelink, Jos Vos, Thomas Quinot, Wouter Gadeyne, Juan * Jose Ciarlante, Bernd Eckenfels, Keith Owens and others. * * Copyright from the original FreeBSD version follows: * * Copyright (c) 1993 Daniel Boulet * Copyright (c) 1994 Ugen J.S.Antsilevich * * Redistribution and use in source forms, with and without modification, * are permitted provided that this entire comment appears intact. * * Redistribution in binary form may occur without any restrictions. * Obviously, it would be nice if you gave credit where credit is due * but requiring it would be too onerous. * * This software is provided ``AS IS'' without any warranties of any kind.  */#include <linux/config.h>#include <asm/uaccess.h>#include <asm/system.h>#include <linux/types.h>#include <linux/sched.h>#include <linux/string.h>#include <linux/errno.h>#include <linux/module.h>#include <linux/socket.h>#include <linux/sockios.h>#include <linux/in.h>#include <linux/inet.h>#include <linux/netdevice.h>#include <linux/icmp.h>#include <linux/udp.h>#include <net/ip.h>#include <net/protocol.h>#include <net/route.h>#include <net/tcp.h>#include <net/udp.h>#include <net/sock.h>#include <net/icmp.h>#include <linux/netlink.h>#include <linux/netfilter.h>#include <linux/netfilter_ipv4/compat_firewall.h>#include <linux/netfilter_ipv4/ipchains_core.h>#include <linux/netfilter_ipv4/ip_nat_core.h>#include <net/checksum.h>#include <linux/proc_fs.h>#include <linux/stat.h>MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR("Rusty Russell <rusty@rustcorp.com.au>");MODULE_DESCRIPTION("ipchains backwards compatibility layer");/* Understanding locking in this code: (thanks to Alan Cox for using * little words to explain this to me). -- PR * * In UP, there can be two packets traversing the chains: * 1) A packet from the current userspace context * 2) A packet off the bh handlers (timer or net). * * For SMP (kernel v2.1+), multiply this by # CPUs. * * [Note that this in not correct for 2.2 - because the socket code always *  uses lock_kernel() to serialize, and bottom halves (timers and net_bhs) *  only run on one CPU at a time.  This will probably change for 2.3. *  It is still good to use spinlocks because that avoids the global cli() *  for updating the tables, which is rather costly in SMP kernels -AK] * * This means counters and backchains can get corrupted if no precautions * are taken. * * To actually alter a chain on UP, we need only do a cli(), as this will * stop a bh handler firing, as we are in the current userspace context * (coming from a setsockopt()). * * On SMP, we need a write_lock_irqsave(), which is a simple cli() in * UP. * * For backchains and counters, we use an array, indexed by * [smp_processor_id()*2 + !in_interrupt()]; the array is of * size [NR_CPUS*2].  For v2.0, NR_CPUS is effectively 1.  So, * confident of uniqueness, we modify counters even though we only * have a read lock (to read the counters, you need a write lock, * though).  *//* Why I didn't use straight locking... -- PR * * The backchains can be separated out of the ip_chains structure, and * allocated as needed inside ip_fw_check(). * * The counters, however, can't.  Trying to lock these means blocking * interrupts every time we want to access them.  This would suck HARD * performance-wise.  Not locking them leads to possible corruption, * made worse on 32-bit machines (counters are 64-bit).  *//*#define DEBUG_IP_FIREWALL*//*#define DEBUG_ALLOW_ALL*/ /* Useful for remote debugging *//*#define DEBUG_IP_FIREWALL_USER*//*#define DEBUG_IP_FIREWALL_LOCKING*/#if defined(CONFIG_NETLINK_DEV) || defined(CONFIG_NETLINK_DEV_MODULE)static struct sock *ipfwsk;#endif#ifdef CONFIG_SMP#define SLOT_NUMBER() (smp_processor_id()*2 + !in_interrupt())#else /* !SMP */#define SLOT_NUMBER() (!in_interrupt())#endif /* CONFIG_SMP */#define NUM_SLOTS (NR_CPUS*2)#define SIZEOF_STRUCT_IP_CHAIN (sizeof(struct ip_chain) \				+ NUM_SLOTS*sizeof(struct ip_reent))#define SIZEOF_STRUCT_IP_FW_KERNEL (sizeof(struct ip_fwkernel) \				    + NUM_SLOTS*sizeof(struct ip_counters))#ifdef DEBUG_IP_FIREWALL_LOCKINGstatic unsigned int fwc_rlocks, fwc_wlocks;#define FWC_DEBUG_LOCK(d)			\do {						\	FWC_DONT_HAVE_LOCK(d);			\	d |= (1 << SLOT_NUMBER());		\} while (0)#define FWC_DEBUG_UNLOCK(d)			\do {						\	FWC_HAVE_LOCK(d);			\	d &= ~(1 << SLOT_NUMBER());		\} while (0)#define FWC_DONT_HAVE_LOCK(d)					\do {								\	if ((d) & (1 << SLOT_NUMBER()))				\		printk("%s:%i: Got lock on %i already!\n", 	\		       __FILE__, __LINE__, SLOT_NUMBER());	\} while(0)#define FWC_HAVE_LOCK(d)				\do {							\	if (!((d) & (1 << SLOT_NUMBER())))		\	printk("%s:%i:No lock on %i!\n", 		\	       __FILE__, __LINE__, SLOT_NUMBER());	\} while (0)#else#define FWC_DEBUG_LOCK(d) do { } while(0)#define FWC_DEBUG_UNLOCK(d) do { } while(0)#define FWC_DONT_HAVE_LOCK(d) do { } while(0)#define FWC_HAVE_LOCK(d) do { } while(0)#endif /*DEBUG_IP_FIRWALL_LOCKING*/#define FWC_READ_LOCK(l) do { FWC_DEBUG_LOCK(fwc_rlocks); read_lock(l); } while (0)#define FWC_WRITE_LOCK(l) do { FWC_DEBUG_LOCK(fwc_wlocks); write_lock(l); } while (0)#define FWC_READ_LOCK_IRQ(l,f) do { FWC_DEBUG_LOCK(fwc_rlocks); read_lock_irqsave(l,f); } while (0)#define FWC_WRITE_LOCK_IRQ(l,f) do { FWC_DEBUG_LOCK(fwc_wlocks); write_lock_irqsave(l,f); } while (0)#define FWC_READ_UNLOCK(l) do { FWC_DEBUG_UNLOCK(fwc_rlocks); read_unlock(l); } while (0)#define FWC_WRITE_UNLOCK(l) do { FWC_DEBUG_UNLOCK(fwc_wlocks); write_unlock(l); } while (0)#define FWC_READ_UNLOCK_IRQ(l,f) do { FWC_DEBUG_UNLOCK(fwc_rlocks); read_unlock_irqrestore(l,f); } while (0)#define FWC_WRITE_UNLOCK_IRQ(l,f) do { FWC_DEBUG_UNLOCK(fwc_wlocks); write_unlock_irqrestore(l,f); } while (0)struct ip_chain;struct ip_counters{	__u64 pcnt, bcnt;			/* Packet and byte counters */};struct ip_fwkernel{	struct ip_fw ipfw;	struct ip_fwkernel *next;	/* where to go next if current					 * rule doesn't match */	struct ip_chain *branch;	/* which branch to jump to if					 * current rule matches */	int simplebranch;		/* Use this if branch == NULL */	struct ip_counters counters[0]; /* Actually several of these */};struct ip_reent{	struct ip_chain *prevchain;	/* Pointer to referencing chain */	struct ip_fwkernel *prevrule;	/* Pointer to referencing rule */	struct ip_counters counters;};struct ip_chain{	ip_chainlabel label;	    /* Defines the label for each block */ 	struct ip_chain *next;	    /* Pointer to next block */	struct ip_fwkernel *chain;  /* Pointer to first rule in block */	__u32 refcount; 	    /* Number of refernces to block */	int policy;		    /* Default rule for chain.  Only *				     * used in built in chains */	struct ip_reent reent[0];   /* Actually several of these */};/* *	Implement IP packet firewall */#ifdef DEBUG_IP_FIREWALL#define dprintf(format, args...)  printk(format , ## args)#else#define dprintf(format, args...)#endif#ifdef DEBUG_IP_FIREWALL_USER#define duprintf(format, args...) printk(format , ## args)#else#define duprintf(format, args...)#endif/* Lock around ip_fw_chains linked list structure */rwlock_t ip_fw_lock = RW_LOCK_UNLOCKED;/* Head of linked list of fw rules */static struct ip_chain *ip_fw_chains;#define IP_FW_INPUT_CHAIN ip_fw_chains#define IP_FW_FORWARD_CHAIN (ip_fw_chains->next)#define IP_FW_OUTPUT_CHAIN (ip_fw_chains->next->next)/* Returns 1 if the port is matched by the range, 0 otherwise */extern inline int port_match(__u16 min, __u16 max, __u16 port,			     int frag, int invert){	if (frag) /* Fragments fail ANY port test. */		return (min == 0 && max == 0xFFFF);	else return (port >= min && port <= max) ^ invert;}/* Returns whether matches rule or not. */static int ip_rule_match(struct ip_fwkernel *f,			 const char *ifname,			 struct sk_buff **pskb,			 char tcpsyn,			 __u16 src_port, __u16 dst_port,			 char isfrag){	struct iphdr *ip = (*pskb)->nh.iph;#define FWINV(bool,invflg) ((bool) ^ !!(f->ipfw.fw_invflg & invflg))	/*	 *	This is a bit simpler as we don't have to walk	 *	an interface chain as you do in BSD - same logic	 *	however.	 */	if (FWINV((ip->saddr&f->ipfw.fw_smsk.s_addr) != f->ipfw.fw_src.s_addr,		  IP_FW_INV_SRCIP)	    || FWINV((ip->daddr&f->ipfw.fw_dmsk.s_addr)!=f->ipfw.fw_dst.s_addr,		     IP_FW_INV_DSTIP)) {		dprintf("Source or dest mismatch.\n");		dprintf("SRC: %u. Mask: %u. Target: %u.%s\n", ip->saddr,			f->ipfw.fw_smsk.s_addr, f->ipfw.fw_src.s_addr,			f->ipfw.fw_invflg & IP_FW_INV_SRCIP ? " (INV)" : "");		dprintf("DST: %u. Mask: %u. Target: %u.%s\n", ip->daddr,			f->ipfw.fw_dmsk.s_addr, f->ipfw.fw_dst.s_addr,			f->ipfw.fw_invflg & IP_FW_INV_DSTIP ? " (INV)" : "");		return 0;	}	/*	 *	Look for a VIA device match	 */	if (f->ipfw.fw_flg & IP_FW_F_WILDIF) {	    if (FWINV(strncmp(ifname, f->ipfw.fw_vianame,			      strlen(f->ipfw.fw_vianame)) != 0,		      IP_FW_INV_VIA)) {		dprintf("Wildcard interface mismatch.%s\n",			f->ipfw.fw_invflg & IP_FW_INV_VIA ? " (INV)" : "");		return 0;	/* Mismatch */	    }	}	else if (FWINV(strcmp(ifname, f->ipfw.fw_vianame) != 0,		       IP_FW_INV_VIA)) {	    dprintf("Interface name does not match.%s\n",		    f->ipfw.fw_invflg & IP_FW_INV_VIA		    ? " (INV)" : "");	    return 0;	/* Mismatch */	}	/*	 *	Ok the chain addresses match.	 */	/* If we have a fragment rule but the packet is not a fragment	 * the we return zero */	if (FWINV((f->ipfw.fw_flg&IP_FW_F_FRAG) && !isfrag, IP_FW_INV_FRAG)) {		dprintf("Fragment rule but not fragment.%s\n",			f->ipfw.fw_invflg & IP_FW_INV_FRAG ? " (INV)" : "");		return 0;	}	/* Fragment NEVER passes a SYN test, even an inverted one. */	if (FWINV((f->ipfw.fw_flg&IP_FW_F_TCPSYN) && !tcpsyn, IP_FW_INV_SYN)	    || (isfrag && (f->ipfw.fw_flg&IP_FW_F_TCPSYN))) {		dprintf("Rule requires SYN and packet has no SYN.%s\n",			f->ipfw.fw_invflg & IP_FW_INV_SYN ? " (INV)" : "");		return 0;	}	if (f->ipfw.fw_proto) {		/*		 *	Specific firewall - packet's protocol		 *	must match firewall's.		 */		if (FWINV(ip->protocol!=f->ipfw.fw_proto, IP_FW_INV_PROTO)) {			dprintf("Packet protocol %hi does not match %hi.%s\n",				ip->protocol, f->ipfw.fw_proto,				f->ipfw.fw_invflg&IP_FW_INV_PROTO ? " (INV)":"");			return 0;		}		/* For non TCP/UDP/ICMP, port range is max anyway. */		if (!port_match(f->ipfw.fw_spts[0],				f->ipfw.fw_spts[1],				src_port, isfrag,				!!(f->ipfw.fw_invflg&IP_FW_INV_SRCPT))		    || !port_match(f->ipfw.fw_dpts[0],				   f->ipfw.fw_dpts[1],				   dst_port, isfrag,				   !!(f->ipfw.fw_invflg				      &IP_FW_INV_DSTPT))) {		    dprintf("Port match failed.\n");		    return 0;		}	}	dprintf("Match succeeded.\n");	return 1;}static const char *branchname(struct ip_chain *branch,int simplebranch){	if (branch)		return branch->label;	switch (simplebranch)	{	case FW_BLOCK: return IP_FW_LABEL_BLOCK;	case FW_ACCEPT: return IP_FW_LABEL_ACCEPT;	case FW_REJECT: return IP_FW_LABEL_REJECT;	case FW_REDIRECT: return IP_FW_LABEL_REDIRECT;	case FW_MASQUERADE: return IP_FW_LABEL_MASQUERADE;	case FW_SKIP: return "-";	case FW_SKIP+1: return IP_FW_LABEL_RETURN;	default:		return "UNKNOWN";	}}/* * VERY ugly piece of code which actually * makes kernel printf for matching packets... */static void dump_packet(struct sk_buff **pskb,			const char *ifname,			struct ip_fwkernel *f,			const ip_chainlabel chainlabel,			__u16 src_port,			__u16 dst_port,			unsigned int count,			int syn){	__u32 *opt = (__u32 *) ((*pskb)->nh.iph + 1);	int opti;	if (f) {		printk(KERN_INFO "Packet log: %s ",chainlabel);		printk("%s ",branchname(f->branch,f->simplebranch));		if (f->simplebranch==FW_REDIRECT)			printk("%d ",f->ipfw.fw_redirpt);	}	printk("%s PROTO=%d %u.%u.%u.%u:%hu %u.%u.%u.%u:%hu"	       " L=%hu S=0x%2.2hX I=%hu F=0x%4.4hX T=%hu",	       ifname, (*pskb)->nh.iph->protocol,	       NIPQUAD((*pskb)->nh.iph->saddr),	       src_port,	       NIPQUAD((*pskb)->nh.iph->daddr),	       dst_port,	       ntohs((*pskb)->nh.iph->tot_len),	       (*pskb)->nh.iph->tos,	       ntohs((*pskb)->nh.iph->id),	       ntohs((*pskb)->nh.iph->frag_off),	       (*pskb)->nh.iph->ttl);	for (opti = 0; opti < ((*pskb)->nh.iph->ihl - sizeof(struct iphdr) / 4); opti++)		printk(" O=0x%8.8X", *opt++);	printk(" %s(#%d)\n", syn ? "SYN " : /* "PENANCE" */ "", count);}/* function for checking chain labels for user space. */static int check_label(ip_chainlabel label){	unsigned int i;	/* strlen must be < IP_FW_MAX_LABEL_LENGTH. */	for (i = 0; i < IP_FW_MAX_LABEL_LENGTH + 1; i++)		if (label[i] == '\0') return 1;	return 0;}/*	This function returns a pointer to the first chain with a label *	that matches the one given. */static struct ip_chain *find_label(ip_chainlabel label){	struct ip_chain *tmp;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久这里只有精品视频网| 26uuu精品一区二区在线观看| 日本午夜精品一区二区三区电影 | 亚洲bt欧美bt精品| 久久亚洲捆绑美女| 在线观看视频一区| 国产超碰在线一区| 首页亚洲欧美制服丝腿| 亚洲免费色视频| 久久噜噜亚洲综合| 欧美精品乱码久久久久久| 99久久精品国产麻豆演员表| 六月丁香综合在线视频| 亚洲伦理在线免费看| 国产午夜三级一区二区三| 欧美久久久久久久久久| 91色综合久久久久婷婷| 国产成人av网站| 激情久久久久久久久久久久久久久久| 一片黄亚洲嫩模| 日本一二三不卡| 久久先锋影音av| 精品国产电影一区二区| 69精品人人人人| 色综合视频在线观看| 成人免费视频一区| 国产成人啪午夜精品网站男同| 偷拍一区二区三区四区| 一区二区三区蜜桃| 亚洲精品免费在线播放| 亚洲色图制服诱惑| 中文字幕亚洲成人| 亚洲国产精品二十页| 欧美国产97人人爽人人喊| 精品国产乱码久久久久久1区2区| 91精品国模一区二区三区| 欧美日韩视频一区二区| 欧美日韩一区二区三区四区五区| 91成人看片片| 色94色欧美sute亚洲线路一久| 91在线小视频| 色先锋资源久久综合| 色婷婷精品大在线视频| 91精品91久久久中77777| 色偷偷久久人人79超碰人人澡| 9l国产精品久久久久麻豆| 成人精品视频一区二区三区| 99re热这里只有精品免费视频| 成人av集中营| 91理论电影在线观看| 91欧美一区二区| 91国偷自产一区二区三区观看| 色诱视频网站一区| 欧美日韩精品一区二区天天拍小说 | 91年精品国产| 在线观看精品一区| 欧美肥妇bbw| 精品日韩99亚洲| 国产欧美精品国产国产专区| 中文字幕欧美区| 亚洲视频 欧洲视频| 午夜伊人狠狠久久| 久久99热国产| 国产成人aaa| 91社区在线播放| 91精品国产乱| 国产欧美日韩精品一区| 亚洲视频一二三区| 日韩精品三区四区| 国产一区二区三区精品欧美日韩一区二区三区| 欧美疯狂性受xxxxx喷水图片| 欧美亚洲高清一区| 亚洲精品在线网站| 亚洲欧洲av在线| 日欧美一区二区| 国产高清精品在线| 欧美伊人久久久久久久久影院| 欧美一级日韩免费不卡| 国产亚洲美州欧州综合国| 最近日韩中文字幕| 蜜臀久久99精品久久久久宅男| 国产成人av自拍| 欧美日韩国产高清一区| 久久亚洲一级片| 亚洲成在线观看| 成人高清免费在线播放| 欧美日韩视频在线观看一区二区三区 | 91国偷自产一区二区开放时间 | 成人av在线影院| 欧美日产国产精品| 中文字幕av资源一区| 婷婷成人激情在线网| 成人午夜视频福利| 日韩亚洲国产中文字幕欧美| 国产精品久久久久精k8 | 免费人成精品欧美精品| 成人av资源网站| 欧美mv日韩mv| 亚洲午夜在线电影| 风间由美一区二区三区在线观看| 欧美无砖专区一中文字| 国产清纯美女被跳蛋高潮一区二区久久w | 狠狠网亚洲精品| 欧美丝袜丝nylons| 亚洲国产精品成人综合色在线婷婷| 午夜精品视频一区| 91在线无精精品入口| 国产日韩av一区| 久久av资源站| 7777精品伊人久久久大香线蕉最新版| 国产精品久99| 国产一区二区三区视频在线播放| 欧美日韩高清一区二区不卡| 中文字幕一区免费在线观看| 裸体健美xxxx欧美裸体表演| 欧美性videosxxxxx| 国产精品免费久久久久| 国产精品一区二区91| 日韩美女在线视频| 天堂va蜜桃一区二区三区漫画版| 91国产福利在线| 成人欧美一区二区三区小说| 成人精品鲁一区一区二区| 久久美女高清视频| 欧美日本一区二区在线观看| 亚洲天天做日日做天天谢日日欢| 国产高清久久久| 国产欧美精品在线观看| 国产精品综合二区| 久久午夜老司机| 国产一区二区三区四区五区美女| 精品国产伦理网| 国产一区在线观看视频| 久久免费看少妇高潮| 国产乱码精品一区二区三区av | 日本一区二区三区四区在线视频| 美女精品一区二区| 日韩欧美一区在线| 老司机一区二区| 亚洲精品一区在线观看| 国产精品主播直播| 欧美极品美女视频| 99这里都是精品| 亚洲黄色免费网站| 欧美日韩免费高清一区色橹橹| 亚洲在线中文字幕| 欧美精品日日鲁夜夜添| 日韩电影在线观看一区| 欧美一级二级三级乱码| 精品一区二区三区免费视频| 久久久久九九视频| 成人免费视频网站在线观看| 国产精品高清亚洲| 日本韩国一区二区| 日韩在线a电影| 精品国偷自产国产一区| 国产精品亚洲人在线观看| 中文在线免费一区三区高中清不卡| 99久久精品99国产精品| 亚洲人成亚洲人成在线观看图片| 欧美视频中文一区二区三区在线观看| 亚洲国产人成综合网站| 日韩视频国产视频| 国产成人久久精品77777最新版本| 国产欧美精品一区二区色综合 | 一区二区三国产精华液| 91精品国产综合久久久久久久 | 欧美亚洲另类激情小说| 日本中文字幕不卡| 中文字幕av在线一区二区三区| 91色九色蝌蚪| 久久精品国产澳门| 中文字幕亚洲电影| 777午夜精品免费视频| 国产又黄又大久久| 亚洲欧洲综合另类在线| 日韩一级二级三级精品视频| 丁香啪啪综合成人亚洲小说| 亚洲影视在线播放| 26uuu欧美| 在线亚洲+欧美+日本专区| 久久国产生活片100| 亚洲婷婷在线视频| 精品欧美一区二区三区精品久久| 99精品黄色片免费大全| 麻豆精品在线播放| 亚洲三级电影全部在线观看高清| 666欧美在线视频| av网站免费线看精品| 日韩精品色哟哟| 国产精品夫妻自拍| 日韩一区二区在线免费观看| 91免费看片在线观看| 卡一卡二国产精品| 亚洲成人av中文| 1区2区3区国产精品| 精品国产凹凸成av人导航| 一本色道综合亚洲| 懂色av一区二区三区免费看| 日本不卡视频在线|