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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? irnet_ppp.c

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
      break;    default:      sprintf(event, "Bug\n");    }  /* Increment our event index */  ap->event_index = (ap->event_index + 1) % IRNET_MAX_EVENTS;  DEBUG(CTRL_INFO, "Event is :%s", event);  /* Copy it to the user */  if(copy_to_user(buf, event, strlen(event)))    {      DERROR(CTRL_ERROR, "Invalid user space pointer.\n");      return -EFAULT;    }  DEXIT(CTRL_TRACE, "\n");  return(strlen(event));}/*------------------------------------------------------------------*//* * Poll : called when someone do a select on /dev/irnet. * Just check if there are new events... */static inline unsigned intirnet_ctrl_poll(irnet_socket *	ap,		struct file *	file,		poll_table *	wait){  unsigned int mask;  DENTER(CTRL_TRACE, "(ap=0x%p)\n", ap);  poll_wait(file, &irnet_events.rwait, wait);  mask = POLLOUT | POLLWRNORM;  /* If there is unread events */  if(ap->event_index != irnet_events.index)    mask |= POLLIN | POLLRDNORM;#ifdef INITIAL_DISCOVERY  if(ap->disco_number != -1)    mask |= POLLIN | POLLRDNORM;#endif /* INITIAL_DISCOVERY */  DEXIT(CTRL_TRACE, " - mask=0x%X\n", mask);  return mask;}/*********************** FILESYSTEM CALLBACKS ***********************//* * Implement the usual open, read, write functions that will be called * by the file system when some action is performed on /dev/irnet. * Most of those actions will in fact be performed by "pppd" or * the control channel, we just act as a redirector... *//*------------------------------------------------------------------*//* * Open : when somebody open /dev/irnet * We basically create a new instance of irnet and initialise it. */static intdev_irnet_open(struct inode *	inode,	       struct file *	file){  struct irnet_socket *	ap;  int			err;  DENTER(FS_TRACE, "(file=0x%p)\n", file);#ifdef SECURE_DEVIRNET  /* This could (should?) be enforced by the permissions on /dev/irnet. */  if(!capable(CAP_NET_ADMIN))    return -EPERM;#endif /* SECURE_DEVIRNET */  /* Allocate a private structure for this IrNET instance */  ap = kmalloc(sizeof(*ap), GFP_KERNEL);  DABORT(ap == NULL, -ENOMEM, FS_ERROR, "Can't allocate struct irnet...\n");  /* initialize the irnet structure */  memset(ap, 0, sizeof(*ap));  ap->file = file;  /* PPP channel setup */  ap->ppp_open = 0;  ap->chan.private = ap;  ap->chan.ops = &irnet_ppp_ops;  ap->chan.mtu = (2048 - TTP_MAX_HEADER - 2 - PPP_HDRLEN);  ap->chan.hdrlen = 2 + TTP_MAX_HEADER;		/* for A/C + Max IrDA hdr */  /* PPP parameters */  ap->mru = (2048 - TTP_MAX_HEADER - 2 - PPP_HDRLEN);  ap->xaccm[0] = ~0U;  ap->xaccm[3] = 0x60000000U;  ap->raccm = ~0U;  /* Setup the IrDA part... */  err = irda_irnet_create(ap);  if(err)    {      DERROR(FS_ERROR, "Can't setup IrDA link...\n");      kfree(ap);      return err;    }  /* For the control channel */  ap->event_index = irnet_events.index;	/* Cancel all past events */  /* Put our stuff where we will be able to find it later */  file->private_data = ap;  DEXIT(FS_TRACE, " - ap=0x%p\n", ap);  return 0;}/*------------------------------------------------------------------*//* * Close : when somebody close /dev/irnet * Destroy the instance of /dev/irnet */static intdev_irnet_close(struct inode *	inode,		struct file *	file){  irnet_socket *	ap = (struct irnet_socket *) file->private_data;  DENTER(FS_TRACE, "(file=0x%p, ap=0x%p)\n",	 file, ap);  DABORT(ap == NULL, 0, FS_ERROR, "ap is NULL !!!\n");  /* Detach ourselves */  file->private_data = NULL;  /* Close IrDA stuff */  irda_irnet_destroy(ap);  /* Disconnect from the generic PPP layer if not already done */  if(ap->ppp_open)    {      DERROR(FS_ERROR, "Channel still registered - deregistering !\n");      ap->ppp_open = 0;      ppp_unregister_channel(&ap->chan);    }  kfree(ap);  DEXIT(FS_TRACE, "\n");  return 0;}/*------------------------------------------------------------------*//* * Write does nothing. * (we receive packet from ppp_generic through ppp_irnet_send()) */static ssize_tdev_irnet_write(struct file *	file,		const char __user *buf,		size_t		count,		loff_t *	ppos){  irnet_socket *	ap = (struct irnet_socket *) file->private_data;  DPASS(FS_TRACE, "(file=0x%p, ap=0x%p, count=%Zd)\n",	file, ap, count);  DABORT(ap == NULL, -ENXIO, FS_ERROR, "ap is NULL !!!\n");  /* If we are connected to ppp_generic, let it handle the job */  if(ap->ppp_open)    return -EAGAIN;  else    return irnet_ctrl_write(ap, buf, count);}/*------------------------------------------------------------------*//* * Read doesn't do much either. * (pppd poll us, but ultimately reads through /dev/ppp) */static ssize_tdev_irnet_read(struct file *	file,	       char __user *	buf,	       size_t		count,	       loff_t *		ppos){  irnet_socket *	ap = (struct irnet_socket *) file->private_data;  DPASS(FS_TRACE, "(file=0x%p, ap=0x%p, count=%Zd)\n",	file, ap, count);  DABORT(ap == NULL, -ENXIO, FS_ERROR, "ap is NULL !!!\n");  /* If we are connected to ppp_generic, let it handle the job */  if(ap->ppp_open)    return -EAGAIN;  else    return irnet_ctrl_read(ap, file, buf, count);}/*------------------------------------------------------------------*//* * Poll : called when someone do a select on /dev/irnet */static unsigned intdev_irnet_poll(struct file *	file,	       poll_table *	wait){  irnet_socket *	ap = (struct irnet_socket *) file->private_data;  unsigned int		mask;  DENTER(FS_TRACE, "(file=0x%p, ap=0x%p)\n",	 file, ap);  mask = POLLOUT | POLLWRNORM;  DABORT(ap == NULL, mask, FS_ERROR, "ap is NULL !!!\n");  /* If we are connected to ppp_generic, let it handle the job */  if(!ap->ppp_open)    mask |= irnet_ctrl_poll(ap, file, wait);  DEXIT(FS_TRACE, " - mask=0x%X\n", mask);  return(mask);}/*------------------------------------------------------------------*//* * IOCtl : Called when someone does some ioctls on /dev/irnet * This is the way pppd configure us and control us while the PPP * instance is active. */static intdev_irnet_ioctl(struct inode *	inode,		struct file *	file,		unsigned int	cmd,		unsigned long	arg){  irnet_socket *	ap = (struct irnet_socket *) file->private_data;  int			err;  int			val;  void __user *argp = (void __user *)arg;  DENTER(FS_TRACE, "(file=0x%p, ap=0x%p, cmd=0x%X)\n",	 file, ap, cmd);  /* Basic checks... */  DASSERT(ap != NULL, -ENXIO, PPP_ERROR, "ap is NULL...\n");#ifdef SECURE_DEVIRNET  if(!capable(CAP_NET_ADMIN))    return -EPERM;#endif /* SECURE_DEVIRNET */  err = -EFAULT;  switch(cmd)    {      /* Set discipline (should be N_SYNC_PPP or N_TTY) */    case TIOCSETD:      if(get_user(val, (int __user *)argp))	break;      if((val == N_SYNC_PPP) || (val == N_PPP))	{	  DEBUG(FS_INFO, "Entering PPP discipline.\n");	  /* PPP channel setup (ap->chan in configued in dev_irnet_open())*/	  err = ppp_register_channel(&ap->chan);	  if(err == 0)	    {	      /* Our ppp side is active */	      ap->ppp_open = 1;	      DEBUG(FS_INFO, "Trying to establish a connection.\n");	      /* Setup the IrDA link now - may fail... */	      irda_irnet_connect(ap);	    }	  else	    DERROR(FS_ERROR, "Can't setup PPP channel...\n");	}      else	{	  /* In theory, should be N_TTY */	  DEBUG(FS_INFO, "Exiting PPP discipline.\n");	  /* Disconnect from the generic PPP layer */	  if(ap->ppp_open)	    {	      ap->ppp_open = 0;	      ppp_unregister_channel(&ap->chan);	    }	  else	    DERROR(FS_ERROR, "Channel not registered !\n");	  err = 0;	}      break;      /* Query PPP channel and unit number */    case PPPIOCGCHAN:      if(!ap->ppp_open)	break;      if(put_user(ppp_channel_index(&ap->chan), (int __user *)argp))	break;      DEBUG(FS_INFO, "Query channel.\n");      err = 0;      break;    case PPPIOCGUNIT:      if(!ap->ppp_open)	break;      if(put_user(ppp_unit_number(&ap->chan), (int __user *)argp))	break;      DEBUG(FS_INFO, "Query unit number.\n");      err = 0;      break;      /* All these ioctls can be passed both directly and from ppp_generic,       * so we just deal with them in one place...       */    case PPPIOCGFLAGS:    case PPPIOCSFLAGS:    case PPPIOCGASYNCMAP:    case PPPIOCSASYNCMAP:    case PPPIOCGRASYNCMAP:    case PPPIOCSRASYNCMAP:    case PPPIOCGXASYNCMAP:    case PPPIOCSXASYNCMAP:    case PPPIOCGMRU:    case PPPIOCSMRU:      DEBUG(FS_INFO, "Standard PPP ioctl.\n");      if(!capable(CAP_NET_ADMIN))	err = -EPERM;      else	err = ppp_irnet_ioctl(&ap->chan, cmd, arg);      break;      /* TTY IOCTLs : Pretend that we are a tty, to keep pppd happy */      /* Get termios */    case TCGETS:      DEBUG(FS_INFO, "Get termios.\n");      if(kernel_termios_to_user_termios((struct termios __user *)argp, &ap->termios))	break;      err = 0;      break;      /* Set termios */    case TCSETSF:      DEBUG(FS_INFO, "Set termios.\n");      if(user_termios_to_kernel_termios(&ap->termios, (struct termios __user *)argp))	break;      err = 0;      break;      /* Set DTR/RTS */    case TIOCMBIS:     case TIOCMBIC:      /* Set exclusive/non-exclusive mode */    case TIOCEXCL:    case TIOCNXCL:      DEBUG(FS_INFO, "TTY compatibility.\n");      err = 0;      break;    case TCGETA:      DEBUG(FS_INFO, "TCGETA\n");      break;    case TCFLSH:      DEBUG(FS_INFO, "TCFLSH\n");      /* Note : this will flush buffers in PPP, so it *must* be done       * We should also worry that we don't accept junk here and that       * we get rid of our own buffers */#ifdef FLUSH_TO_PPP      ppp_output_wakeup(&ap->chan);#endif /* FLUSH_TO_PPP */      err = 0;      break;    case FIONREAD:

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品在线一区二区三区| 一区二区三区四区在线播放| 色噜噜狠狠色综合欧洲selulu| 粉嫩欧美一区二区三区高清影视 | av亚洲精华国产精华精| 国产一区二区福利视频| 国产成人免费在线视频| 欧美mv日韩mv亚洲| 欧美色倩网站大全免费| 成人动漫一区二区三区| 精久久久久久久久久久| 成人免费看黄yyy456| 337p粉嫩大胆噜噜噜噜噜91av| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲欧美一区二区三区孕妇| 91精品在线免费观看| 欧美日韩一区二区三区高清| 国产麻豆一精品一av一免费| 亚洲欧美在线另类| 久久免费偷拍视频| 亚洲欧美视频在线观看| 中文字幕在线观看一区| 久久这里只有精品视频网| 午夜成人免费视频| 成人91在线观看| 精品国产髙清在线看国产毛片| 欧美一级xxx| 欧美一区二区三区视频在线观看| 中文字幕在线观看不卡视频| 亚洲成人tv网| 麻豆成人av在线| 日产欧产美韩系列久久99| 国产一区二区视频在线播放| 国产传媒欧美日韩成人| 91污在线观看| 欧美日韩大陆一区二区| 日韩一区二区精品葵司在线 | 国产亚洲综合在线| 精品国免费一区二区三区| 久久亚洲一区二区三区明星换脸 | 国产成人午夜99999| 精品制服美女丁香| 国产自产v一区二区三区c| 99国产精品国产精品毛片| 91国偷自产一区二区三区观看 | 天天综合色天天综合色h| 国内外成人在线| 色视频成人在线观看免| 欧美日韩视频专区在线播放| 欧美嫩在线观看| 99久久夜色精品国产网站| 国产精品影音先锋| 99精品久久99久久久久| 午夜av一区二区| 一区二区国产视频| 亚洲一区二区三区四区中文字幕| 看电视剧不卡顿的网站| 欧亚一区二区三区| 久久嫩草精品久久久精品一| 视频一区免费在线观看| www.日韩精品| 欧美刺激脚交jootjob| 亚洲综合视频在线观看| 色av一区二区| 国产精品欧美久久久久一区二区| 精品影视av免费| 日韩一区二区三区三四区视频在线观看 | 丝袜亚洲另类欧美综合| 色94色欧美sute亚洲线路二 | 欧美日韩综合色| 日韩欧美综合在线| 日韩精品免费专区| 中文字幕一区二区三区在线观看| 精品成人免费观看| 色吊一区二区三区| 91一区二区三区在线播放| 久久久久一区二区三区四区| 美腿丝袜亚洲三区| 欧美一区二区视频免费观看| 日本一区二区三区国色天香 | 91麻豆免费视频| 久久久.com| 2023国产精华国产精品| 狠狠网亚洲精品| 国产亚洲污的网站| 岛国av在线一区| 亚洲成人av在线电影| 日韩一区二区三区高清免费看看| 亚洲国产日韩一区二区| 欧美在线免费播放| 久久国产精品色| 亚洲日本一区二区| 亚洲国产精品久久久久婷婷884 | 国产尤物一区二区| 在线影视一区二区三区| 激情综合网最新| 波多野结衣精品在线| 91久久精品网| 久久亚洲一区二区三区四区| 国产精品久久久久久久岛一牛影视 | 蜜桃av一区二区在线观看| 国产福利一区在线| 欧美日韩亚洲综合一区| 久久久久久一二三区| 亚洲综合一二三区| 国产精品1024| 欧美久久久久久蜜桃| 国产精品美女一区二区三区| 五月激情综合色| 成人福利在线看| 日韩精品一区二区三区swag| 国产精品福利在线播放| 老司机精品视频导航| 在线视频观看一区| 国产精品五月天| 韩国av一区二区三区四区| 色婷婷久久久亚洲一区二区三区 | 91色porny在线视频| 激情六月婷婷综合| 91一区二区在线| 972aa.com艺术欧美| 日韩视频一区在线观看| 国产成人欧美日韩在线电影| 一区二区三区蜜桃网| 欧美一区二区三区精品| 成人福利视频在线| 人妖欧美一区二区| 综合激情成人伊人| 精品嫩草影院久久| 在线视频你懂得一区| 国产精品18久久久久久vr| 亚洲人成网站在线| 精品少妇一区二区三区日产乱码| 99精品久久免费看蜜臀剧情介绍| 青青草国产成人av片免费| 综合自拍亚洲综合图不卡区| 日韩精品一区二区三区在线观看| 91视频在线观看| 国产在线观看免费一区| 午夜影院在线观看欧美| 中文无字幕一区二区三区| 日韩三级在线免费观看| 色天使色偷偷av一区二区| 国产裸体歌舞团一区二区| 亚洲va韩国va欧美va精品| 中文字幕在线视频一区| 精品国精品自拍自在线| 欧美综合天天夜夜久久| 成人免费视频播放| 久久av资源网| 国产一区二区美女| 国产精品国产三级国产三级人妇| 欧美巨大另类极品videosbest | 欧美一区二区三区人| 色婷婷综合久久久久中文一区二区| 国产一区不卡视频| 久久国产精品色婷婷| 日韩国产欧美在线播放| 亚洲午夜国产一区99re久久| 中文字幕一区二区三区不卡在线| 久久先锋影音av鲁色资源| 欧美一区二区视频在线观看2020| 欧洲一区二区三区免费视频| 成人久久18免费网站麻豆| 国产一区二区三区美女| 韩国女主播一区| 奇米色一区二区| 日韩福利电影在线| 亚洲va韩国va欧美va| 亚洲国产美女搞黄色| 一区二区三区四区精品在线视频| 国产精品国产精品国产专区不蜜| 久久五月婷婷丁香社区| 欧美tickling网站挠脚心| 欧美一区二区精品在线| 欧美一卡二卡三卡| 欧美一区二区播放| 在线91免费看| 91精品国产综合久久精品app | 日本欧美加勒比视频| 亚洲线精品一区二区三区八戒| 亚洲黄网站在线观看| 亚洲另类春色国产| 亚洲午夜私人影院| 亚洲v日本v欧美v久久精品| 午夜婷婷国产麻豆精品| 亚洲va欧美va人人爽| 日韩精品一区第一页| 奇米精品一区二区三区四区| 日韩电影在线免费| 免费不卡在线视频| 精品一区二区在线视频| 国内精品国产三级国产a久久| 精品一区二区三区免费视频| 精品综合免费视频观看| 国产酒店精品激情| 岛国精品在线观看| 91极品视觉盛宴| 欧美日韩免费不卡视频一区二区三区| 欧美日韩一区二区在线视频|