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

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

?? ixp4xx.c

?? linux下基于加密芯片的加密設備
?? C
字號:
/* * An OCF module that uses Intels IXP CryptACC API to do the crypto. * This driver requires the IXP400 Access Library that is available * from Intel in order to operate. * * Copyright (C) 2004 David McCullough <davidm@snapgear.com> * All rights reserved. * * LICENSE TERMS * * The free distribution and use of this software in both source and binary * form is allowed (with or without changes) provided that: * *   1. distributions of this source code include the above copyright *      notice, this list of conditions and the following disclaimer; * *   2. distributions in binary form include the above copyright *      notice, this list of conditions and the following disclaimer *      in the documentation and/or other associated materials; * *   3. the copyright holder's name is not used to endorse products *      built using this software without specific written permission. * * ALTERNATIVELY, provided that this notice is retained in full, this product * may be distributed under the terms of the GNU General Public License (GPL), * in which case the provisions of the GPL apply INSTEAD OF those given above. * * DISCLAIMER * * This software is provided 'as is' with no explicit or implied warranties * in respect of its properties, including, but not limited to, correctness * and/or fitness for purpose. * --------------------------------------------------------------------------- * * NOTES: *     The IXP driver is creating/destroying a context for every packet. *     At first glance this would seem like a bad idea,  but it isn't. * *     First some details,  the CryptACC engine allows 10000 contexts. *     It we allocate a context for the life of a session we are limited to *     10000 sessions,  where as the current implementation is only limited *     to 10000 outstanding requests at anyone point in time,  and new ones *     will become available quite quickly. * *     Second,  you cannot change a context from encoding to decoding after *     registration (well it wasn't working for me so I assumed you *     couldn't).  Thus we really need 2 contexts (encode/decode),  reducing *     out sessions to 5000, a number which is not all that large IMO. * *     Third,  after benchmarking the "single" context for the life of a *     session the drop in throughput was insignificant.  The largest drop I *     saw was 1.7%,  but there were also increases as well,  so it seems to *     me that there is no significant difference. * */#include <linux/config.h>#include <linux/module.h>#include <linux/init.h>#include <linux/list.h>#include <linux/slab.h>#include <linux/sched.h>#include <linux/wait.h>#include <linux/crypto.h>#include <asm/scatterlist.h>#include <cryptodev.h>#include <uio.h>#include <IxTypes.h>#include <IxOsBuffMgt.h>#include <IxNpeDl.h>#include <IxCryptoAcc.h>#include <IxQMgr.h>#include <IxOsServices.h>#include <IxOsCacheMMU.h>struct ixp_data {	int					 ixp_cipher_alg;	int					 ixp_auth_alg;	struct cryptop		*ixp_crp;	UINT32				 ixp_ctx_id;	IxCryptoAccCtx		 ixp_ctx;	IX_MBUF				 ixp_mbuf;	int					 ixp_mbuf_len;	unsigned char		*ixp_iv;	IX_MBUF				 ixp_pri_mbuf;	IX_MBUF				 ixp_sec_mbuf;};static int32_t			 ixp_id = -1;static struct ixp_data **ixp_sessions = NULL;static u_int32_t		 ixp_sesnum = 0;static int ixp_process(void *, struct cryptop *, int);static int ixp_newsession(void *, u_int32_t *, struct cryptoini *);static int ixp_freesession(void *, u_int64_t);static int debug = 0;MODULE_PARM(debug, "i");MODULE_PARM_DESC(debug, "Enable debug");/* * Generate a new software session. */static intixp_newsession(void *arg, u_int32_t *sid, struct cryptoini *cri){	struct ixp_data *ixp;	u_int32_t i;	dprintk("%s()\n", __FUNCTION__);	if (sid == NULL || cri == NULL) {		dprintk("%s,%d - EINVAL\n", __FILE__, __LINE__);		return EINVAL;	}	if (ixp_sessions) {		for (i = 1; i < ixp_sesnum; i++)			if (ixp_sessions[i] == NULL)				break;	} else		i = 1;		/* NB: to silence compiler warning */	if (ixp_sessions == NULL || i == ixp_sesnum) {		struct ixp_data **ixpd;		if (ixp_sessions == NULL) {			i = 1; /* We leave ixp_sessions[0] empty */			ixp_sesnum = CRYPTO_SW_SESSIONS;		} else			ixp_sesnum *= 2;		ixpd = kmalloc(ixp_sesnum * sizeof(struct ixp_data *), GFP_ATOMIC);		if (ixpd == NULL) {			/* Reset session number */			if (ixp_sesnum == CRYPTO_SW_SESSIONS)				ixp_sesnum = 0;			else				ixp_sesnum /= 2;			dprintk("%s,%d: ENOBUFS\n", __FILE__, __LINE__);			return ENOBUFS;		}		memset(ixpd, 0, ixp_sesnum * sizeof(struct ixp_data *));		/* Copy existing sessions */		if (ixp_sessions) {			memcpy(ixpd, ixp_sessions,			    (ixp_sesnum / 2) * sizeof(struct ixp_data *));			kfree(ixp_sessions);		}		ixp_sessions = ixpd;	}	ixp_sessions[i] = (struct ixp_data *) kmalloc(sizeof(struct ixp_data),			GFP_ATOMIC);	if (ixp_sessions[i] == NULL) {		ixp_freesession(NULL, i);		dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);		return ENOBUFS;	}	*sid = i;	ixp = ixp_sessions[i];	memset(ixp, 0, sizeof(*ixp));	ixp->ixp_cipher_alg = -1;	ixp->ixp_auth_alg = -1;	ixp->ixp_ctx_id = -1;	while (cri) {		switch (cri->cri_alg) {		case CRYPTO_DES_CBC:			ixp->ixp_cipher_alg = cri->cri_alg;			ixp->ixp_ctx.cipherCtx.cipherAlgo = IX_CRYPTO_ACC_CIPHER_DES;			ixp->ixp_ctx.cipherCtx.cipherMode = IX_CRYPTO_ACC_MODE_CBC;			ixp->ixp_ctx.cipherCtx.cipherKeyLen = cri->cri_klen / 8;			ixp->ixp_ctx.cipherCtx.cipherBlockLen = 8;			ixp->ixp_ctx.cipherCtx.cipherInitialVectorLen = 8;			memcpy(ixp->ixp_ctx.cipherCtx.key.cipherKey,					cri->cri_key, cri->cri_klen / 8);			break;		case CRYPTO_3DES_CBC:			ixp->ixp_cipher_alg = cri->cri_alg;			ixp->ixp_ctx.cipherCtx.cipherAlgo = IX_CRYPTO_ACC_CIPHER_3DES;			ixp->ixp_ctx.cipherCtx.cipherMode = IX_CRYPTO_ACC_MODE_CBC;			ixp->ixp_ctx.cipherCtx.cipherKeyLen = cri->cri_klen / 8;			ixp->ixp_ctx.cipherCtx.cipherBlockLen = 8;			ixp->ixp_ctx.cipherCtx.cipherInitialVectorLen = 8;			memcpy(ixp->ixp_ctx.cipherCtx.key.cipherKey,					cri->cri_key, cri->cri_klen / 8);			break;		case CRYPTO_RIJNDAEL128_CBC:			ixp->ixp_cipher_alg = cri->cri_alg;			ixp->ixp_ctx.cipherCtx.cipherAlgo = IX_CRYPTO_ACC_CIPHER_AES;			ixp->ixp_ctx.cipherCtx.cipherMode = IX_CRYPTO_ACC_MODE_CBC;			ixp->ixp_ctx.cipherCtx.cipherKeyLen = cri->cri_klen / 8;			ixp->ixp_ctx.cipherCtx.cipherBlockLen = 16;			ixp->ixp_ctx.cipherCtx.cipherInitialVectorLen = 16;			memcpy(ixp->ixp_ctx.cipherCtx.key.cipherKey,					cri->cri_key, cri->cri_klen / 8);			break;		case CRYPTO_MD5_HMAC:			ixp->ixp_auth_alg = cri->cri_alg;			ixp->ixp_ctx.authCtx.authAlgo = IX_CRYPTO_ACC_AUTH_MD5;			ixp->ixp_ctx.authCtx.authDigestLen = 0;			ixp->ixp_ctx.authCtx.aadLen = 0;			ixp->ixp_ctx.authCtx.authKeyLen = cri->cri_klen / 8;			memcpy(ixp->ixp_ctx.authCtx.key.authKey,					cri->cri_key, cri->cri_klen / 8);			break;		case CRYPTO_SHA1_HMAC:			ixp->ixp_auth_alg = cri->cri_alg;			ixp->ixp_ctx.authCtx.authAlgo = IX_CRYPTO_ACC_AUTH_SHA1;			ixp->ixp_ctx.authCtx.authDigestLen = 0;			ixp->ixp_ctx.authCtx.aadLen = 0;			ixp->ixp_ctx.authCtx.authKeyLen = cri->cri_klen / 8;			memcpy(ixp->ixp_ctx.authCtx.key.authKey,					cri->cri_key, cri->cri_klen / 8);			break;		default:			printk("ixp: unknown algo 0x%x\n", cri->cri_alg);			ixp_freesession(NULL, i);			return EINVAL;		}		cri = cri->cri_next;	}	return 0;}/* * Free a session. */static intixp_freesession(void *arg, u_int64_t tid){	u_int32_t sid = CRYPTO_SESID2LID(tid);	dprintk("%s()\n", __FUNCTION__);	if (sid > ixp_sesnum || ixp_sessions == NULL ||			ixp_sessions[sid] == NULL) {		dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);		return EINVAL;	}	/* Silently accept and return */	if (sid == 0)		return 0;	if (ixp_sessions[sid]) {		if (ixp_sessions[sid]->ixp_ctx_id != -1) {			ixCryptoAccCtxUnregister(ixp_sessions[sid]->ixp_ctx_id);			ixp_sessions[sid]->ixp_ctx_id = -1;		}		kfree(ixp_sessions[sid]);	}	ixp_sessions[sid] = NULL;	return 0;}static voidixp_register_cb(UINT32 ctx_id, IX_MBUF *bufp, IxCryptoAccStatus status){	int i;	struct ixp_data *ixp;	dprintk("%s()\n", __FUNCTION__);	for (i = 0; i < ixp_sesnum; i++) {		ixp = ixp_sessions[i];		if (ixp && ixp->ixp_ctx_id == ctx_id)			break;	}	if (i >= ixp_sesnum) {		printk("ixp: invalid context id 0x%x\n", ctx_id);		return;	}	if (IX_CRYPTO_ACC_STATUS_WAIT == status) {		printk("ixp: register not finished yet!\n");		return;	}	if (IX_CRYPTO_ACC_STATUS_SUCCESS != status) {		printk("ixp: register failed 0x%x\n", status);		ixp->ixp_crp->crp_etype = EINVAL;		crypto_done(ixp->ixp_crp);		return;	}	status = ixCryptoAccAuthCryptPerform(			ixp->ixp_ctx_id,			&ixp->ixp_mbuf,			NULL,			0,			ixp->ixp_mbuf_len,			0,			ixp->ixp_mbuf_len,			ixp->ixp_mbuf_len,			ixp->ixp_iv);	if (IX_CRYPTO_ACC_STATUS_SUCCESS != status) {		printk("ixp: ixCryptoAccAuthCryptPerform failed 0x%x\n", status);		ixp->ixp_crp->crp_etype = EINVAL;		crypto_done(ixp->ixp_crp);	}}static voidixp_perform_cb(	UINT32 ctx_id,	IX_MBUF *sbufp,	IX_MBUF *dbufp,	IxCryptoAccStatus status){	int i;	struct ixp_data *ixp;	dprintk("%s()\n", __FUNCTION__);	if (sbufp == NULL) {		printk("ixp: error ixp_perform_cb(0x%x, %p, %p, 0x%x)\n",				ctx_id, sbufp, dbufp, status);		return;	}	for (i = 0; i < ixp_sesnum; i++) {		ixp = ixp_sessions[i];		if (ixp && ixp->ixp_ctx_id == ctx_id)			break;	}	if (i >= ixp_sesnum) {		printk("ixp: ixp_perform_cb invalid context id 0x%x\n", ctx_id);		return;	}	if (IX_CRYPTO_ACC_STATUS_SUCCESS != status) {		printk("ixp: perform failed 0x%x\n", status);		ixp->ixp_crp->crp_etype = EINVAL;	}	/*	 * DAVIDM this doesn't work, most likely because we are in the callback	 * and it hasn't been removed from the queue yet. Do it later when we	 * get another request or close the session.	 * ixCryptoAccCtxUnregister(ctx_id);	 */	crypto_done(ixp->ixp_crp);}/* * Process a software request. */static intixp_process(void *arg, struct cryptop *crp, int hint){	struct cryptodesc *crd1, *crd2;	struct ixp_data *ixp;	unsigned int lid;	struct uio *uiop;	IX_MBUF *pri = NULL, *sec = NULL;	int status;	dprintk("%s()\n", __FUNCTION__);	/* Sanity check */	if (crp == NULL) {		dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);		return EINVAL;	}	crp->crp_etype = 0;	if (crp->crp_desc == NULL || crp->crp_buf == NULL) {		dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);		crp->crp_etype = EINVAL;		goto done;	}	lid = crp->crp_sid & 0xffffffff;	if (lid >= ixp_sesnum || lid == 0 || ixp_sessions == NULL ||			ixp_sessions[lid] == NULL) {		crp->crp_etype = ENOENT;		dprintk("%s,%d: ENOENT\n", __FILE__, __LINE__);		goto done;	}	ixp = ixp_sessions[lid];	ixp->ixp_iv = NULL;	crd1 = crp->crp_desc;	crd2 = crd1->crd_next;	/* swap crd1/2 so 1 is the cipher */	if (crd2 && crd1->crd_alg == ixp->ixp_auth_alg) {		crd2 = crd1;		crd1 = crd2->crd_next;	}	if (crd1->crd_alg == ixp->ixp_cipher_alg) {		if (crd2 && crd2->crd_alg != ixp->ixp_auth_alg) {			crp->crp_etype = ENOENT;			dprintk("%s,%d: ENOENT\n", __FILE__, __LINE__);			goto done;		}		if (crd1->crd_flags & CRD_F_ENCRYPT)			ixp->ixp_ctx.operation = crd2 ? IX_CRYPTO_ACC_OP_ENCRYPT_AUTH :												IX_CRYPTO_ACC_OP_ENCRYPT;		else			ixp->ixp_ctx.operation = crd2 ? IX_CRYPTO_ACC_OP_AUTH_DECRYPT :												IX_CRYPTO_ACC_OP_DECRYPT;		if (crd1->crd_flags & CRD_F_IV_EXPLICIT)			/* copy in IV ??? */;		if (crd2) {			pri = &ixp->ixp_pri_mbuf;			sec = &ixp->ixp_sec_mbuf;		}		ixp->ixp_iv = crd1->crd_iv;	} else if (crd1->crd_alg == ixp->ixp_auth_alg) {		ixp->ixp_ctx.operation = IX_CRYPTO_ACC_OP_AUTH_CALC;		/* or is it ixp->ixp_ctx.operation = IX_CRYPTO_ACC_OP_AUTH_CHECK; */		pri = &ixp->ixp_pri_mbuf;		sec = &ixp->ixp_sec_mbuf;	} else {		crp->crp_etype = ENOENT;		dprintk("%s,%d: ENOENT\n", __FILE__, __LINE__);		goto done;	}	if (crp->crp_flags & CRYPTO_F_IMBUF) {		printk("ixp: CRYPTO_F_IMBUF not implemented");		crp->crp_etype = ENOENT;		goto done;	} else if (crp->crp_flags & CRYPTO_F_IOV) {		uiop = (struct uio *) crp->crp_buf;		if (uiop->uio_iovcnt != 1) {			/*			 * DAVIDM fix this limitation one day by using			 * a buffer pool and chaining,  it is not currently			 * needed for user space acceleration			 */			printk("ixp: Cannot handle more than 1 iovec yet !\n");			crp->crp_etype = ENOENT;			goto done;		}		ixp->ixp_mbuf.m_len = uiop->uio_iov[0].iov_len;		ixp->ixp_mbuf.m_data = uiop->uio_iov[0].iov_base;		ixp->ixp_mbuf_len = uiop->uio_iov[0].iov_len;	} else /* contig buffer */ {		ixp->ixp_mbuf.m_len  = crp->crp_ilen;		ixp->ixp_mbuf.m_data = crp->crp_buf;		ixp->ixp_mbuf_len    = crp->crp_olen;	}	ixp->ixp_crp = crp;	/* if we were previously registered,  unregister */	if (ixp->ixp_ctx_id != -1)		ixCryptoAccCtxUnregister(ixp->ixp_ctx_id);	ixp->ixp_ctx_id = -1;	status = ixCryptoAccCtxRegister(					&ixp->ixp_ctx,					pri, sec,					ixp_register_cb,					ixp_perform_cb,					&ixp->ixp_ctx_id);	if (IX_CRYPTO_ACC_STATUS_EXCEED_MAX_TUNNELS == status) {		printk("ixp: ixCryptoAccCtxRegister failed (out of tunnels)\n");		ixp->ixp_ctx_id = -1;		return ERESTART;	}	if (IX_CRYPTO_ACC_STATUS_SUCCESS != status) {		printk("ixp: ixCryptoAccCtxRegister failed %d\n", status);		crp->crp_etype = ENOENT;		ixp->ixp_ctx_id = -1;		goto done;	}	return 0;done:	crypto_done(crp);	return 0;}static intixp_init(void){	dprintk("%s(%p)\n", __FUNCTION__, ixp_init);	ixp_id = crypto_get_driverid(0);	if (ixp_id < 0)		panic("IXP/OCF crypto device cannot initialize!");	crypto_register(ixp_id, CRYPTO_DES_CBC,	    0, 0, ixp_newsession, ixp_freesession, ixp_process, NULL);#define	REGISTER(alg) \	crypto_register(ixp_id,alg,0,0,NULL,NULL,NULL,NULL)	REGISTER(CRYPTO_3DES_CBC);	REGISTER(CRYPTO_RIJNDAEL128_CBC);	REGISTER(CRYPTO_MD5_HMAC);	REGISTER(CRYPTO_SHA1_HMAC);#undef REGISTER	return 0;}static voidixp_exit(void){	dprintk("%s()\n", __FUNCTION__);	crypto_unregister_all(ixp_id);	ixp_id = -1;}module_init(ixp_init);module_exit(ixp_exit);MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR("davidm@snapgear.com");MODULE_DESCRIPTION("ixp (OCF module for IXP4xx crypto)");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲影院久久精品| 欧美日韩免费高清一区色橹橹| 国产精品久久久久精k8| 9191久久久久久久久久久| 丰满白嫩尤物一区二区| 亚洲国产视频在线| 1000精品久久久久久久久| 日韩一区二区三区av| 欧美色欧美亚洲另类二区| 成人激情免费电影网址| 精品一区二区影视| 亚洲福利国产精品| 亚洲欧美日韩在线播放| 久久青草欧美一区二区三区| 欧美群妇大交群中文字幕| 91在线观看下载| 国产精品一区在线观看乱码| 日本精品视频一区二区三区| 精品一二线国产| 国产精品白丝在线| 久久综合久久久久88| 欧美精品乱人伦久久久久久| eeuss鲁片一区二区三区在线看| 国产在线精品视频| 美女视频黄 久久| 首页国产丝袜综合| 亚洲国产一区视频| 最新欧美精品一区二区三区| 国产欧美视频在线观看| xf在线a精品一区二区视频网站| 日韩一区二区在线观看| 8x8x8国产精品| 欧美日韩国产中文| 欧美精品丝袜久久久中文字幕| 欧美亚洲国产一区在线观看网站| 91亚洲男人天堂| 92国产精品观看| 99精品久久免费看蜜臀剧情介绍| 成人午夜在线视频| 成人午夜视频在线| 国产99一区视频免费| 国产成人精品影视| 成人免费黄色在线| 成人一区在线看| 99在线热播精品免费| 91麻豆视频网站| 色吧成人激情小说| 欧美少妇一区二区| 欧美一级高清片| 欧美xxxxxxxxx| 国产欧美精品一区| 国产精品的网站| 一区二区视频免费在线观看| 亚洲综合激情网| 天堂成人国产精品一区| 美女www一区二区| 国产一区二区三区四| 成人中文字幕电影| 在线亚洲人成电影网站色www| 欧美无乱码久久久免费午夜一区| 69堂亚洲精品首页| 精品久久久久99| 国产精品久久久久久久久搜平片| 亚洲欧美国产三级| 天堂资源在线中文精品| 狠狠色综合播放一区二区| 国产1区2区3区精品美女| 色婷婷综合中文久久一本| 欧美日韩精品系列| 久久婷婷久久一区二区三区| 中日韩av电影| 亚洲一二三区在线观看| 久久精品二区亚洲w码| 国产suv一区二区三区88区| 91色综合久久久久婷婷| 欧美一区二区三区思思人| 久久久久久久久伊人| 一区二区三区日韩欧美精品| 免费黄网站欧美| 不卡欧美aaaaa| 7799精品视频| 国产精品毛片高清在线完整版 | 91精品国产全国免费观看| 欧美xxxxx牲另类人与| 亚洲欧美日韩中文播放| 美国精品在线观看| 播五月开心婷婷综合| 91精品国产aⅴ一区二区| 国产欧美日本一区二区三区| 亚洲成人一区在线| 懂色av中文一区二区三区| 91精品免费在线观看| 国产精品人成在线观看免费| 日韩和的一区二区| 成人成人成人在线视频| 日韩三级在线观看| 亚洲精品久久嫩草网站秘色| 狠狠色综合播放一区二区| 欧美日韩国产美女| 国产精品欧美一区喷水| 久久精品国产澳门| 欧美日韩三级一区| 中文字幕在线视频一区| 韩国三级电影一区二区| 欧美午夜视频网站| 中文字幕视频一区| 精品一区二区三区在线观看 | 亚洲成人免费观看| 成人激情小说网站| 日韩区在线观看| 亚洲最快最全在线视频| av在线不卡观看免费观看| 精品国产电影一区二区| 日韩avvvv在线播放| 日本精品裸体写真集在线观看| 国产婷婷色一区二区三区四区| 欧美aaa在线| 欧美日韩一卡二卡三卡| 亚洲一区电影777| 91偷拍与自偷拍精品| 中文字幕av在线一区二区三区| 九色综合狠狠综合久久| 欧美一区二区三区免费在线看| 亚洲在线免费播放| 日本韩国一区二区三区| 亚洲欧美一区二区三区极速播放| 国产麻豆精品久久一二三| 欧美r级电影在线观看| 青青草91视频| 5858s免费视频成人| 亚洲综合精品久久| 在线视频综合导航| 午夜久久久久久久久久一区二区| 在线看国产一区二区| 亚洲夂夂婷婷色拍ww47| 在线观看不卡一区| 亚洲高清免费在线| 69堂成人精品免费视频| 美女一区二区视频| 日韩免费观看2025年上映的电影| 免费人成黄页网站在线一区二区 | 久久久一区二区三区捆绑**| 99热精品一区二区| 欧美一级高清大全免费观看| 亚洲日本乱码在线观看| 国产99久久久国产精品潘金网站| 久久人人爽人人爽| av亚洲精华国产精华精| 亚洲欧洲精品一区二区三区| 久久精品人人做人人综合 | 精品国产一区二区三区av性色| 日韩成人伦理电影在线观看| 欧美一二三区在线| 久久99精品久久久久久国产越南| 精品精品欲导航| 成人av小说网| 亚洲一区二区三区免费视频| 91精品在线观看入口| 久久99久久99小草精品免视看| www国产成人免费观看视频 深夜成人网| 久久69国产一区二区蜜臀| 欧美经典一区二区| 色播五月激情综合网| 蜜臂av日日欢夜夜爽一区| 久久久午夜精品| 色噜噜狠狠一区二区三区果冻| 日韩高清欧美激情| 久久久久国产免费免费| 高清免费成人av| 韩国女主播成人在线观看| 欧美一区二区三区影视| 国产一区二区三区在线观看免费| 欧美高清在线精品一区| 欧美伊人久久大香线蕉综合69 | 成人v精品蜜桃久久一区| 亚洲欧美日韩中文播放| 欧美一区二区三区四区高清| 成人h动漫精品| 日韩高清不卡在线| 中文字幕 久热精品 视频在线| 欧美手机在线视频| 国产成人高清视频| 三级在线观看一区二区| 国产女人aaa级久久久级| 欧美乱妇23p| aaa欧美大片| 麻豆成人91精品二区三区| 亚洲日本va午夜在线影院| 日韩欧美一区电影| 在线亚洲免费视频| 高清在线观看日韩| 久久精品国产**网站演员| 亚洲线精品一区二区三区| 久久久不卡网国产精品二区 | 国产精品国产馆在线真实露脸| 欧美久久高跟鞋激| 91在线高清观看| 国产乱国产乱300精品| 天天色图综合网| 亚洲一区二区三区四区在线观看 |