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

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

?? slip.c

?? 主要內容為linux內核代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * slip.c	This module implements the SLIP protocol for kernel-based
 *		devices like TTY.  It interfaces between a raw TTY, and the
 *		kernel's INET protocol layers (via DDI).
 *
 * Version:	@(#)slip.c	0.7.6	05/25/93
 *
 * Authors:	Laurence Culhane, <loz@holmes.demon.co.uk>
 *		Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
 *
 * Fixes:
 *		Alan Cox	: 	Sanity checks and avoid tx overruns.
 *					Has a new sl->mtu field.
 *		Alan Cox	: 	Found cause of overrun. ifconfig sl0 mtu upwards.
 *					Driver now spots this and grows/shrinks its buffers(hack!).
 *					Memory leak if you run out of memory setting up a slip driver fixed.
 *		Matt Dillon	:	Printable slip (borrowed from NET2E)
 *	Pauline Middelink	:	Slip driver fixes.
 *		Alan Cox	:	Honours the old SL_COMPRESSED flag
 *		Alan Cox	:	KISS AX.25 and AXUI IP support
 *		Michael Riepe	:	Automatic CSLIP recognition added
 *		Charles Hedrick :	CSLIP header length problem fix.
 *		Alan Cox	:	Corrected non-IP cases of the above.
 */
 
#include <asm/segment.h>
#include <asm/system.h>

#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/socket.h>
#include <linux/sockios.h>
#include <linux/interrupt.h>
#include <linux/tty.h>
#include <linux/errno.h>
#include <linux/stat.h>
#include <linux/in.h>
#include "inet.h"
#include "dev.h"
#ifdef CONFIG_AX25
#include "ax25.h"
#endif
#include "eth.h"
#include "ip.h"
#include "route.h"
#include "protocol.h"
#include "tcp.h"
#include "skbuff.h"
#include "sock.h"
#include "arp.h"
#include "slip.h"
#include "slhc.h"

#define	SLIP_VERSION	"0.7.5"

/* Define some IP layer stuff.  Not all systems have it. */
#ifdef SL_DUMP
#   define	IP_VERSION	4	/* version# of our IP software	*/
#   define	IPF_F_OFFSET	0x1fff	/* Offset field			*/
#   define	IPF_DF		0x4000	/* Don't fragment flag		*/
#   define	IPF_MF		0x2000	/* More Fragments flag		*/
#   define	IP_OF_COPIED	0x80	/* Copied-on-fragmentation flag	*/
#   define	IP_OF_CLASS	0x60	/* Option class			*/
#   define	IP_OF_NUMBER	0x1f	/* Option number		*/
#endif


static struct slip	sl_ctrl[SL_NRUNIT];
static struct tty_ldisc	sl_ldisc;
static int		already = 0;


/* Dump the contents of an IP datagram. */
static void
ip_dump(unsigned char *ptr, int len)
{
#ifdef SL_DUMP
  struct iphdr *ip;
  struct tcphdr *th;
  int dlen, doff;

  if (inet_debug != DBG_SLIP) return;

  ip = (struct iphdr *) ptr;
  th = (struct tcphdr *) (ptr + ip->ihl * 4);
  printk("\r%s -> %s seq %lx ack %lx len %d\n",
	 in_ntoa(ip->saddr), in_ntoa(ip->daddr), 
	 ntohl(th->seq), ntohl(th->ack_seq), ntohs(ip->tot_len));
  return;

  printk("\r*****\n");
  printk("%p %d\n", ptr, len);
  ip = (struct iphdr *) ptr;
  dlen = ntohs(ip->tot_len);
  doff = ((ntohs(ip->frag_off) & IPF_F_OFFSET) << 3);


  printk("SLIP: %s->", in_ntoa(ip->saddr));
  printk("%s\n", in_ntoa(ip->daddr));
  printk(" len %u ihl %u ver %u ttl %u prot %u",
	dlen, ip->ihl, ip->version, ip->ttl, ip->protocol);

  if (ip->tos != 0) printk(" tos %u", ip->tos);
  if (doff != 0 || (ntohs(ip->frag_off) & IPF_MF))
	printk(" id %u offs %u", ntohs(ip->id), doff);

  if (ntohs(ip->frag_off) & IPF_DF) printk(" DF");
  if (ntohs(ip->frag_off) & IPF_MF) printk(" MF");
  printk("\n*****\n");
#endif
}

#if 0
void clh_dump(unsigned char *cp, int len)
{
  if (len > 60)
    len = 60;
  printk("%d:", len);
  while (len > 0) {
    printk(" %x", *cp++);
    len--;
  }
  printk("\n\n");
}
#endif

/* Initialize a SLIP control block for use. */
static void
sl_initialize(struct slip *sl, struct device *dev)
{
  sl->inuse		= 0;
  sl->sending		= 0;
  sl->escape		= 0;
  sl->flags		= 0;
#ifdef SL_ADAPTIVE
  sl->mode		= SL_MODE_ADAPTIVE;	/* automatic CSLIP recognition */
#else
#ifdef SL_COMPRESSED
  sl->mode		= SL_MODE_CSLIP | SL_MODE_ADAPTIVE;	/* Default */
#else
  sl->mode		= SL_MODE_SLIP;		/* Default for non compressors */
#endif
#endif  

  sl->line		= dev->base_addr;
  sl->tty		= NULL;
  sl->dev		= dev;
  sl->slcomp		= NULL;

  /* Clear all pointers. */
  sl->rbuff		= NULL;
  sl->xbuff		= NULL;
  sl->cbuff		= NULL;

  sl->rhead		= NULL;
  sl->rend		= NULL;
  dev->rmem_end		= (unsigned long) NULL;
  dev->rmem_start	= (unsigned long) NULL;
  dev->mem_end		= (unsigned long) NULL;
  dev->mem_start	= (unsigned long) NULL;
}


/* Find a SLIP channel from its `tty' link. */
static struct slip *
sl_find(struct tty_struct *tty)
{
  struct slip *sl;
  int i;

  if (tty == NULL) return(NULL);
  for (i = 0; i < SL_NRUNIT; i++) {
	sl = &sl_ctrl[i];
	if (sl->tty == tty) return(sl);
  }
  return(NULL);
}


/* Find a free SLIP channel, and link in this `tty' line. */
static inline struct slip *
sl_alloc(void)
{
  unsigned long flags;
  struct slip *sl;
  int i;

  save_flags (flags);
  cli();
  for (i = 0; i < SL_NRUNIT; i++) {
	sl = &sl_ctrl[i];
	if (sl->inuse == 0) {
		sl->inuse = 1;
		sl->tty = NULL;
		restore_flags(flags);
		return(sl);
	}
  }
  restore_flags(flags);
  return(NULL);
}


/* Free a SLIP channel. */
static inline void
sl_free(struct slip *sl)
{
  unsigned long flags;

  if (sl->inuse) {
  	save_flags(flags);
  	cli();
	sl->inuse = 0;
	sl->tty = NULL;
	restore_flags(flags);
  }
}

/* MTU has been changed by the IP layer. Unfortunately we are not told about this, but
   we spot it ourselves and fix things up. We could be in an upcall from the tty
   driver, or in an ip packet queue. */
   
static void sl_changedmtu(struct slip *sl)
{
	struct device *dev=sl->dev;
	unsigned char *tb,*rb,*cb,*tf,*rf,*cf;
	int l;
	int omtu=sl->mtu;
	
	sl->mtu=dev->mtu;
	l=(dev->mtu *2);
/*
 * allow for arrival of larger UDP packets, even if we say not to
 * also fixes a bug in which SunOS sends 512-byte packets even with
 * an MSS of 128
 */
	if (l < (576 * 2))
	  l = 576 * 2;
	
	DPRINTF((DBG_SLIP,"SLIP: mtu changed!\n"));
	
	tb= (unsigned char *) kmalloc(l + 4, GFP_ATOMIC);
	rb= (unsigned char *) kmalloc(l + 4, GFP_ATOMIC);
	cb= (unsigned char *) kmalloc(l + 4, GFP_ATOMIC);
	
	if(tb==NULL || rb==NULL || cb==NULL)
	{
		printk("Unable to grow slip buffers. MTU change cancelled.\n");
		sl->mtu=omtu;
		dev->mtu=omtu;
		if(tb!=NULL)
			kfree(tb);
		if(rb!=NULL)
			kfree(rb);
		if(cb!=NULL)
			kfree(cb);
		return;
	}
	
	cli();
	
	tf=(unsigned char *)sl->dev->mem_start;
	sl->dev->mem_start=(unsigned long)tb;
	sl->dev->mem_end=(unsigned long) (sl->dev->mem_start + l);
	rf=(unsigned char *)sl->dev->rmem_start;
	sl->dev->rmem_start=(unsigned long)rb;
	sl->dev->rmem_end=(unsigned long) (sl->dev->rmem_start + l);
	
	sl->xbuff = (unsigned char *) sl->dev->mem_start;
	sl->rbuff = (unsigned char *) sl->dev->rmem_start;
	sl->rend  = (unsigned char *) sl->dev->rmem_end;
	sl->rhead = sl->rbuff;
	
	cf=sl->cbuff;
	sl->cbuff=cb;
	
	sl->escape=0;
	sl->sending=0;
	sl->rcount=0;

	sti();	
	
	if(rf!=NULL)
		kfree(rf);
	if(tf!=NULL)
		kfree(tf);
	if(cf!=NULL)
		kfree(cf);
}


/* Stuff one byte into a SLIP receiver buffer. */
static inline void
sl_enqueue(struct slip *sl, unsigned char c)
{
  unsigned long flags;

  save_flags(flags);
  cli();
  if (sl->rhead < sl->rend) {
	*sl->rhead = c;
	sl->rhead++;
	sl->rcount++;
  } else sl->roverrun++;
  restore_flags(flags);
}

/* Release 'i' bytes from a SLIP receiver buffer. */
static inline void
sl_dequeue(struct slip *sl, int i)
{
  unsigned long flags;

  save_flags(flags);
  cli();
  if (sl->rhead > sl->rbuff) {
	sl->rhead -= i;
	sl->rcount -= i;
  }
  restore_flags(flags);
}


/* Set the "sending" flag.  This must be atomic, hence the ASM. */
static inline void
sl_lock(struct slip *sl)
{
  unsigned long flags;

  save_flags(flags);
  cli();
  sl->sending = 1;
  sl->dev->tbusy = 1;
  restore_flags(flags);
}


/* Clear the "sending" flag.  This must be atomic, hence the ASM. */
static inline void
sl_unlock(struct slip *sl)
{
  unsigned long flags;

  save_flags(flags);
  cli();
  sl->sending = 0;
  sl->dev->tbusy = 0;
  restore_flags(flags);
}


/* Send one completely decapsulated IP datagram to the IP layer. */
static void
sl_bump(struct slip *sl)
{
  int done;
  unsigned char c;
  unsigned long flags;
  int count;

  count = sl->rcount;
  if (sl->mode & (SL_MODE_ADAPTIVE | SL_MODE_CSLIP)) {
    if ((c = sl->rbuff[0]) & SL_TYPE_COMPRESSED_TCP) {
#if 1
      /* ignore compressed packets when CSLIP is off */
      if (!(sl->mode & SL_MODE_CSLIP)) {
	printk("SLIP: compressed packet ignored\n");
	return;
      }
#endif
      /* make sure we've reserved enough space for uncompress to use */
      save_flags(flags);
      cli();
      if ((sl->rhead + 80) < sl->rend) {
	sl->rhead += 80;
	sl->rcount += 80;
	done = 1;
      } else {
	sl->roverrun++;
	done = 0;
      }
      restore_flags(flags);
      if (! done)  /* not enough space available */
	return;

      count = slhc_uncompress(sl->slcomp, sl->rbuff, count);
      if (count <= 0) {
	sl->errors++;
	return;
      }
    } else if (c >= SL_TYPE_UNCOMPRESSED_TCP) {
      if (!(sl->mode & SL_MODE_CSLIP)) {
	/* turn on header compression */
	sl->mode |= SL_MODE_CSLIP;
	printk("SLIP: header compression turned on\n");
      }
      sl->rbuff[0] &= 0x4f;
      if (slhc_remember(sl->slcomp, sl->rbuff, count) <= 0) {
	sl->errors++;
	return;
      }
    }
  }

  DPRINTF((DBG_SLIP, "<< \"%s\" recv:\r\n", sl->dev->name));
  ip_dump(sl->rbuff, sl->rcount);

  /* Bump the datagram to the upper layers... */
  do {
	DPRINTF((DBG_SLIP, "SLIP: packet is %d at 0x%X\n",
					sl->rcount, sl->rbuff));
	/* clh_dump(sl->rbuff, count); */
	done = dev_rint(sl->rbuff, count, 0, sl->dev);
	if (done == 0 || done == 1) break;
  } while(1);

  sl->rpacket++;
}


/* TTY finished sending a datagram, so clean up. */
static void
sl_next(struct slip *sl)
{
  DPRINTF((DBG_SLIP, "SLIP: sl_next(0x%X) called!\n", sl));
  sl_unlock(sl);
  dev_tint(sl->dev);
}


/* Encapsulate one IP datagram and stuff into a TTY queue. */
static void
sl_encaps(struct slip *sl, unsigned char *icp, int len)
{
  unsigned char *bp, *p;
  int count;

  DPRINTF((DBG_SLIP, "SLIP: sl_encaps(0x%X, %d) called\n", icp, len));
  DPRINTF((DBG_SLIP, ">> \"%s\" sent:\r\n", sl->dev->name));
  
  ip_dump(icp, len);
  
  if(sl->mtu != sl->dev->mtu)	/* Someone has been ifconfigging */
  	sl_changedmtu(sl);
  
  if(len>sl->mtu)		/* Sigh, shouldn't occur BUT ... */
  {
  	len=sl->mtu;
  	printk("slip: truncating oversized transmit packet!\n");
  }

  p = icp;
  if(sl->mode & SL_MODE_CSLIP)
	  len = slhc_compress(sl->slcomp, p, len, sl->cbuff, &p, 1);

#ifdef OLD  
  /*
   * Send an initial END character to flush out any
   * data that may have accumulated in the receiver
   * due to line noise.
   */
  bp = sl->xbuff;
  *bp++ = END;
  count = 1;

  /*
   * For each byte in the packet, send the appropriate
   * character sequence, according to the SLIP protocol.
   */
  while(len-- > 0) {
	c = *p++;
	switch(c) {
		case END:
			*bp++ = ESC;
			*bp++ = ESC_END;
			count += 2;
                       	break;
		case ESC:
			*bp++ = ESC;
			*bp++ = ESC_ESC;
			count += 2;
                       	break;
		default:
			*bp++ = c;
			count++;
	}
  }
  *bp++ = END;  
  count++;
#else
  if(sl->mode & SL_MODE_SLIP6)
  	count=slip_esc6(p, (unsigned char *)sl->xbuff,len);
  else
  	count=slip_esc(p, (unsigned char *)sl->xbuff,len);
#endif  	  
  sl->spacket++;
  bp = sl->xbuff;

  /* Tell TTY to send it on its way. */
  DPRINTF((DBG_SLIP, "SLIP: kicking TTY for %d bytes at 0x%X\n", count, bp));
  if (tty_write_data(sl->tty, (char *) bp, count,
	     (void (*)(void *))sl_next, (void *) sl) == 0) {
	DPRINTF((DBG_SLIP, "SLIP: TTY already done with %d bytes!\n", count));
	sl_next(sl);
  }
}

/*static void sl_hex_dump(unsigned char *x,int l)
{
	int n=0;
	printk("sl_xmit: (%d bytes)\n",l);
	while(l)
	{
		printk("%2X ",(int)*x++);
		l--;
		n++;
		if(n%32==0)
			printk("\n");
	}
	if(n%32)
		printk("\n");
}*/

/* Encapsulate an IP datagram and kick it into a TTY queue. */
static int
sl_xmit(struct sk_buff *skb, struct device *dev)
{
  struct tty_struct *tty;
  struct slip *sl;
  int size;

  /* Find the correct SLIP channel to use. */
  sl = &sl_ctrl[dev->base_addr];
  tty = sl->tty;
  DPRINTF((DBG_SLIP, "SLIP: sl_xmit(\"%s\") skb=0x%X busy=%d\n",
				dev->name, skb, sl->sending));

  /*
   * If we are busy already- too bad.  We ought to be able
   * to queue things at this point, to allow for a little
   * frame buffer.  Oh well...
   */
  if (sl->sending) {
	DPRINTF((DBG_SLIP, "SLIP: sl_xmit: BUSY\r\n"));
	sl->sbusy++;
	return(1);
  }

  /* We were not, so we are now... :-) */
  if (skb != NULL) {
#ifdef CONFIG_AX25  
	if(sl->mode & SL_MODE_AX25)
	{
		if(!skb->arp && dev->rebuild_header(skb->data,dev))
		{
			skb->dev=dev;
			arp_queue(skb);
			return 0;
		}
		skb->arp=1;
	}
#endif  	
	sl_lock(sl);
	size = skb->len;
	if (!(sl->mode & SL_MODE_AX25)) {
		if (size < sizeof(struct iphdr)) {
			printk("Runt IP frame fed to slip!\n");
		} else {
			size = ((struct iphdr *)(skb->data))->tot_len;
			size = ntohs(size);
		}
	}
	/*	sl_hex_dump(skb->data,skb->len);*/
	sl_encaps(sl, skb->data, size);
	if (skb->free)
		kfree_skb(skb, FREE_WRITE);
  }
  return(0);
}

/* Return the frame type ID.  This is normally IP but maybe be AX.25. */
static unsigned short
sl_type_trans (struct sk_buff *skb, struct device *dev)
{
#ifdef CONFIG_AX25
	struct slip *sl=&sl_ctrl[dev->base_addr];
	if(sl->mode&SL_MODE_AX25)
		return(NET16(ETH_P_AX25));
#endif
  return(NET16(ETH_P_IP));
}


/* Fill in the MAC-level header. Not used by SLIP. */
static int
sl_header(unsigned char *buff, struct device *dev, unsigned short type,
	  unsigned long daddr, unsigned long saddr, unsigned len)
{
#ifdef CONFIG_AX25
  struct slip *sl=&sl_ctrl[dev->base_addr];
  if((sl->mode&SL_MODE_AX25) && type!=NET16(ETH_P_AX25))
  	return ax25_encapsulate_ip(buff,dev,type,daddr,saddr,len);
#endif  

  return(0);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲小说春色综合另类电影| eeuss国产一区二区三区| 国产精品18久久久久久久久| 成人网在线播放| 日韩精品一区二区三区视频播放| 中文字幕日韩av资源站| 美女在线观看视频一区二区| 日本韩国精品在线| 国产精品久久久久精k8| 九九国产精品视频| 在线播放一区二区三区| 亚洲日本va午夜在线电影| 国产在线乱码一区二区三区| 欧美高清视频不卡网| 亚洲免费大片在线观看| 国产凹凸在线观看一区二区| 日韩一区二区电影网| 亚洲va天堂va国产va久| 色94色欧美sute亚洲线路二| 中文字幕第一区综合| 国内成人自拍视频| 日韩一区二区在线播放| 午夜电影网亚洲视频| 欧美日韩国产一级片| 亚洲国产视频一区二区| 日本乱人伦一区| 亚洲黄色在线视频| 一本大道久久a久久精品综合| 国产精品美女久久久久高潮| 国产一区二区三区蝌蚪| 久久久久久日产精品| 麻豆精品久久精品色综合| 5566中文字幕一区二区电影| 亚洲国产视频a| 欧美精品免费视频| 老司机免费视频一区二区| 欧美日韩在线电影| 日韩中文欧美在线| 欧美v国产在线一区二区三区| 秋霞午夜鲁丝一区二区老狼| 欧美一区二区啪啪| 国产一区二区三区久久久 | 玖玖九九国产精品| 欧美成人精品二区三区99精品| 日本不卡视频在线| 久久香蕉国产线看观看99| 国产一区二区三区免费看 | 欧美精品一区二区三区蜜桃| 国产一区二区在线影院| 国产农村妇女毛片精品久久麻豆| 成人黄色在线视频| 一区二区三区在线观看国产| 欧美精品亚洲二区| 国产伦精品一区二区三区免费迷| 国产区在线观看成人精品| 99天天综合性| 亚洲成在线观看| 精品盗摄一区二区三区| 国产成人av一区二区三区在线观看| 国产精品欧美一级免费| 欧美蜜桃一区二区三区| 国产精品一区三区| 亚洲女人****多毛耸耸8| 制服丝袜在线91| 国产v日产∨综合v精品视频| 亚洲小说欧美激情另类| 欧美精品一区二区三区高清aⅴ| 成人性生交大片免费看中文网站| 亚洲男女一区二区三区| 日韩西西人体444www| 国产乱子伦视频一区二区三区| 亚洲乱码国产乱码精品精的特点| 欧美一区二区三区四区视频| 国产成人激情av| 午夜精品久久久久久久| 欧美韩国日本不卡| 欧美电影一区二区| 91亚洲精品久久久蜜桃网站| 日本不卡一区二区三区高清视频| 国产精品久久久久影院老司| 欧美美女喷水视频| 不卡电影一区二区三区| 久久黄色级2电影| 亚洲一线二线三线久久久| 国产欧美一二三区| 日韩午夜精品电影| 欧美日韩一区国产| 97精品视频在线观看自产线路二| 蜜桃视频免费观看一区| 一区二区三区波多野结衣在线观看| 欧美一级久久久| 欧美影院午夜播放| 成人的网站免费观看| caoporn国产精品| 日韩电影在线观看一区| 一区二区三区在线影院| 国产日韩欧美一区二区三区综合| 91精品国产高清一区二区三区蜜臀 | yourporn久久国产精品| 蜜桃av一区二区在线观看| 亚洲黄色免费电影| 国产精品久久久久久久久久久免费看 | 久久天堂av综合合色蜜桃网| 一本久道中文字幕精品亚洲嫩| 国产精品亚洲午夜一区二区三区| 日本欧美肥老太交大片| 丝袜亚洲另类欧美综合| 午夜精品123| 亚洲成人av一区二区| 亚洲综合色噜噜狠狠| 亚洲欧美综合网| 亚洲日本韩国一区| 樱桃视频在线观看一区| ●精品国产综合乱码久久久久| 国产日韩欧美精品一区| 亚洲国产精品成人综合| 国产精品入口麻豆九色| 国产精品蜜臀在线观看| √…a在线天堂一区| 中文字幕第一区二区| 中文字幕一区二区三区蜜月 | 一区二区三区**美女毛片| 亚洲欧美偷拍卡通变态| 亚洲精品欧美专区| 亚洲国产一二三| 免费精品视频最新在线| 极品销魂美女一区二区三区| 国产一区二区三区高清播放| 国产一区不卡精品| 成人动漫一区二区在线| 色av成人天堂桃色av| 欧美日韩国产影片| 亚洲精品在线电影| 中文字幕不卡一区| 一区二区视频在线| 日日夜夜免费精品视频| 久久99国内精品| youjizz久久| 51精品秘密在线观看| 久久综合久久综合久久| 国产精品嫩草影院com| 一区二区三区波多野结衣在线观看| 婷婷中文字幕一区三区| 狠狠久久亚洲欧美| k8久久久一区二区三区| 欧美视频你懂的| 久久亚区不卡日本| 亚洲五码中文字幕| 国产一区二区三区综合| 91麻豆免费看| 精品久久久久久无| 亚洲精品国产精品乱码不99| 久久99这里只有精品| 处破女av一区二区| 91精品国产综合久久福利软件| 久久一区二区三区四区| 一区二区三区中文字幕| 精品一区二区三区在线播放 | 91麻豆精品国产91久久久| 精品少妇一区二区三区| 亚洲男同1069视频| 精品亚洲aⅴ乱码一区二区三区| proumb性欧美在线观看| 日韩片之四级片| 亚洲欧美另类综合偷拍| 国产一区二区三区日韩| 在线观看免费成人| 国产精品丝袜久久久久久app| 亚洲成av人片在线| 99re8在线精品视频免费播放| 日韩一区二区三区精品视频| 亚洲手机成人高清视频| 国产精品1区二区.| 欧美一级艳片视频免费观看| 亚洲男人的天堂一区二区| 床上的激情91.| wwww国产精品欧美| 日韩精品亚洲专区| 91黄视频在线| 国产精品美女久久久久aⅴ国产馆| 老司机一区二区| 欧美一区二区三区免费观看视频| 日韩美女精品在线| 成人午夜av在线| 国产人伦精品一区二区| 激情五月婷婷综合| 欧美一级黄色大片| 奇米一区二区三区| 欧美群妇大交群中文字幕| 一区二区三区精品视频在线| 成人听书哪个软件好| 国产欧美一区二区精品忘忧草| 久久97超碰国产精品超碰| 欧美一区在线视频| 天堂资源在线中文精品| 欧美乱妇23p| 亚洲线精品一区二区三区八戒| 在线看国产日韩| 亚洲高清免费观看 | 99精品桃花视频在线观看|