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

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

?? tun.c

?? OpenVPN is a robust and highly flexible tunneling application that uses all of the encryption, authe
?? C
?? 第 1 頁 / 共 5 頁
字號:
#endif /* TUNSETPERSIST */voidclose_tun (struct tuntap *tt){  if (tt)    {      close_tun_generic (tt);      free (tt);    }}intwrite_tun (struct tuntap* tt, uint8_t *buf, int len){#if LINUX_IPV6  if (tt->ipv6)    {      struct tun_pi pi;      struct iphdr *iph;      struct iovec vect[2];      int ret;      iph = (struct iphdr *)buf;      pi.flags = 0;      if(iph->version == 6)	pi.proto = htons(ETH_P_IPV6);      else	pi.proto = htons(ETH_P_IP);      vect[0].iov_len = sizeof(pi);      vect[0].iov_base = &pi;      vect[1].iov_len = len;      vect[1].iov_base = buf;      ret = writev(tt->fd, vect, 2);      return(ret - sizeof(pi));    }  else#endif    return write (tt->fd, buf, len);}intread_tun (struct tuntap* tt, uint8_t *buf, int len){#if LINUX_IPV6  if (tt->ipv6)    {      struct iovec vect[2];      struct tun_pi pi;      int ret;      vect[0].iov_len = sizeof(pi);      vect[0].iov_base = &pi;      vect[1].iov_len = len;      vect[1].iov_base = buf;      ret = readv(tt->fd, vect, 2);      return(ret - sizeof(pi));    }  else#endif    return read (tt->fd, buf, len);}#elif defined(TARGET_SOLARIS)#ifndef TUNNEWPPA#error I need the symbol TUNNEWPPA from net/if_tun.h#endifvoidopen_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6, struct tuntap *tt){  int if_fd, muxid, ppa = -1;  struct ifreq ifr;  const char *ptr;  const char *ip_node;  const char *dev_tuntap_type;  int link_type;  bool is_tun;  ipv6_support (ipv6, false, tt);  if (tt->type == DEV_TYPE_NULL)    {      open_null (tt);      return;    }  if (tt->type == DEV_TYPE_TUN)    {      ip_node = "/dev/udp";      if (!dev_node)	dev_node = "/dev/tun";      dev_tuntap_type = "tun";      link_type = I_PLINK;      is_tun = true;    }  else if (tt->type == DEV_TYPE_TAP)    {      ip_node = "/dev/ip";      if (!dev_node)	dev_node = "/dev/tap";      dev_tuntap_type = "tap";      link_type = I_PLINK; /* was: I_LINK */      is_tun = false;    }  else    {      msg (M_FATAL, "I don't recognize device %s as a tun or tap device",	   dev);    }    /* get unit number */  if (*dev)    {      ptr = dev;      while (*ptr && !isdigit ((int) *ptr))	ptr++;      ppa = atoi (ptr);    }  if ((tt->ip_fd = open (ip_node, O_RDWR, 0)) < 0)    msg (M_ERR, "Can't open %s", ip_node);  if ((tt->fd = open (dev_node, O_RDWR, 0)) < 0)    msg (M_ERR, "Can't open %s", dev_node);  /* Assign a new PPA and get its unit number. */  if ((ppa = ioctl (tt->fd, TUNNEWPPA, ppa)) < 0)    msg (M_ERR, "Can't assign new interface");  if ((if_fd = open (dev_node, O_RDWR, 0)) < 0)    msg (M_ERR, "Can't open %s (2)", dev_node);  if (ioctl (if_fd, I_PUSH, "ip") < 0)    msg (M_ERR, "Can't push IP module");  /* Assign ppa according to the unit number returned by tun device */  if (ioctl (if_fd, IF_UNITSEL, (char *) &ppa) < 0)    msg (M_ERR, "Can't set PPA %d", ppa);  if ((muxid = ioctl (tt->ip_fd, link_type, if_fd)) < 0)    msg (M_ERR, "Can't link %s device to IP", dev_tuntap_type);  close (if_fd);  tt->actual_name = (char *) malloc (32);  CHECK_MALLOC_RETURN (tt->actual_name);  openvpn_snprintf (tt->actual_name, 32, "%s%d", dev_tuntap_type, ppa);  CLEAR (ifr);  strncpynt (ifr.ifr_name, tt->actual_name, sizeof (ifr.ifr_name));  ifr.ifr_ip_muxid = muxid;  if (ioctl (tt->ip_fd, SIOCSIFMUXID, &ifr) < 0)    {      ioctl (tt->ip_fd, I_PUNLINK, muxid);      msg (M_ERR, "Can't set multiplexor id");    }  set_nonblock (tt->fd);  set_cloexec (tt->fd);  set_cloexec (tt->ip_fd);  msg (M_INFO, "TUN/TAP device %s opened", tt->actual_name);}/* * Close TUN device.  */voidclose_tun (struct tuntap *tt){  if (tt && tt->fd >= 0)    {      struct ifreq ifr;      CLEAR (ifr);      strncpynt (ifr.ifr_name, tt->actual_name, sizeof (ifr.ifr_name));     if (ioctl (tt->ip_fd, SIOCGIFFLAGS, &ifr) < 0)	msg (M_WARN | M_ERRNO, "Can't get iface flags");      if (ioctl (tt->ip_fd, SIOCGIFMUXID, &ifr) < 0)	msg (M_WARN | M_ERRNO, "Can't get multiplexor id");      if (ioctl (tt->ip_fd, I_PUNLINK, ifr.ifr_ip_muxid) < 0)	msg (M_WARN | M_ERRNO, "Can't unlink interface");      close (tt->ip_fd);      close (tt->fd);    }  if (tt)    {      clear_tuntap (tt);      free (tt);    }}intwrite_tun (struct tuntap* tt, uint8_t *buf, int len){  struct strbuf sbuf;  sbuf.len = len;  sbuf.buf = (char *)buf;  return putmsg (tt->fd, NULL, &sbuf, 0) >= 0 ? sbuf.len : -1;}intread_tun (struct tuntap* tt, uint8_t *buf, int len){  struct strbuf sbuf;  int f = 0;  sbuf.maxlen = len;  sbuf.buf = (char *)buf;  return getmsg (tt->fd, NULL, &sbuf, &f) >= 0 ? sbuf.len : -1;}#elif defined(TARGET_OPENBSD)#if !defined(HAVE_READV) || !defined(HAVE_WRITEV)#error openbsd build requires readv & writev library functions#endif/* * OpenBSD has a slightly incompatible TUN device from * the rest of the world, in that it prepends a * uint32 to the beginning of the IP header * to designate the protocol (why not just * look at the version field in the IP header to * determine v4 or v6?). * * We strip off this field on reads and * put it back on writes. * * I have not tested TAP devices on OpenBSD, * but I have conditionalized the special * TUN handling code described above to * go away for TAP devices. */voidopen_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6, struct tuntap *tt){  open_tun_generic (dev, dev_type, dev_node, ipv6, true, true, tt);  /* Enable multicast on the interface */  if (tt->fd >= 0)    {      struct tuninfo info;      if (ioctl (tt->fd, TUNGIFINFO, &info) < 0) {	msg (M_WARN | M_ERRNO, "Can't get interface info: %s",	  strerror(errno));      }      info.flags |= IFF_MULTICAST;      if (ioctl (tt->fd, TUNSIFINFO, &info) < 0) {	msg (M_WARN | M_ERRNO, "Can't set interface info: %s",	  strerror(errno));      }    }}voidclose_tun (struct tuntap* tt){  if (tt)    {      close_tun_generic (tt);      free (tt);    }}static inline intopenbsd_modify_read_write_return (int len){ if (len > 0)    return len > sizeof (u_int32_t) ? len - sizeof (u_int32_t) : 0;  else    return len;}intwrite_tun (struct tuntap* tt, uint8_t *buf, int len){  if (tt->type == DEV_TYPE_TUN)    {      u_int32_t type;      struct iovec iv[2];      struct ip *iph;      iph = (struct ip *) buf;      if (tt->ipv6 && iph->ip_v == 6)	type = htonl (AF_INET6);      else 	type = htonl (AF_INET);      iv[0].iov_base = &type;      iv[0].iov_len = sizeof (type);      iv[1].iov_base = buf;      iv[1].iov_len = len;      return openbsd_modify_read_write_return (writev (tt->fd, iv, 2));    }  else    return write (tt->fd, buf, len);}intread_tun (struct tuntap* tt, uint8_t *buf, int len){  if (tt->type == DEV_TYPE_TUN)    {      u_int32_t type;      struct iovec iv[2];      iv[0].iov_base = &type;      iv[0].iov_len = sizeof (type);      iv[1].iov_base = buf;      iv[1].iov_len = len;      return openbsd_modify_read_write_return (readv (tt->fd, iv, 2));    }  else    return read (tt->fd, buf, len);}#elif defined(TARGET_NETBSD)/* * NetBSD does not support IPv6 on tun out of the box, * but there exists a patch. When this patch is applied, * only two things are left to openvpn: * 1. Activate multicasting (this has already been done *    before by the kernel, but we make sure that nobody *    has deactivated multicasting inbetween. * 2. Deactivate "link layer mode" (otherwise NetBSD  *    prepends the address family to the packet, and we *    would run into the same trouble as with OpenBSD. */voidopen_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6, struct tuntap *tt){    open_tun_generic (dev, dev_type, dev_node, ipv6, true, true, tt);    if (tt->fd >= 0)      {        int i = IFF_POINTOPOINT|IFF_MULTICAST;        ioctl (tt->fd, TUNSIFMODE, &i);  /* multicast on */        i = 0;        ioctl (tt->fd, TUNSLMODE, &i);   /* link layer mode off */      }}voidclose_tun (struct tuntap *tt){  if (tt)    {      close_tun_generic (tt);      free (tt);    }}intwrite_tun (struct tuntap* tt, uint8_t *buf, int len){    return write (tt->fd, buf, len);}intread_tun (struct tuntap* tt, uint8_t *buf, int len){    return read (tt->fd, buf, len);}#elif defined(TARGET_FREEBSD)static inline intfreebsd_modify_read_write_return (int len){  if (len > 0)    return len > sizeof (u_int32_t) ? len - sizeof (u_int32_t) : 0;  else    return len;}voidopen_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6, struct tuntap *tt){  open_tun_generic (dev, dev_type, dev_node, ipv6, true, true, tt);  if (tt->fd >= 0)    {      int i = 0;      /* Disable extended modes */      ioctl (tt->fd, TUNSLMODE, &i);      i = 1;      ioctl (tt->fd, TUNSIFHEAD, &i);    }}voidclose_tun (struct tuntap *tt){  if (tt)    {      close_tun_generic (tt);      free (tt);    }}intwrite_tun (struct tuntap* tt, uint8_t *buf, int len){  if (tt->type == DEV_TYPE_TUN)    {      u_int32_t type;      struct iovec iv[2];      struct ip *iph;      iph = (struct ip *) buf;      if (tt->ipv6 && iph->ip_v == 6)        type = htonl (AF_INET6);      else         type = htonl (AF_INET);      iv[0].iov_base = (char *)&type;      iv[0].iov_len = sizeof (type);      iv[1].iov_base = buf;      iv[1].iov_len = len;      return freebsd_modify_read_write_return (writev (tt->fd, iv, 2));    }  else    return write (tt->fd, buf, len);}intread_tun (struct tuntap* tt, uint8_t *buf, int len){  if (tt->type == DEV_TYPE_TUN)    {      u_int32_t type;      struct iovec iv[2];      iv[0].iov_base = (char *)&type;      iv[0].iov_len = sizeof (type);      iv[1].iov_base = buf;      iv[1].iov_len = len;      return freebsd_modify_read_write_return (readv (tt->fd, iv, 2));    }  else    return read (tt->fd, buf, len);}#elif defined(WIN32)inttun_read_queue (struct tuntap *tt, int maxsize){  if (tt->reads.iostate == IOSTATE_INITIAL)    {      DWORD len;      BOOL status;      int err;      /* reset buf to its initial state */      tt->reads.buf = tt->reads.buf_init;      len = maxsize ? maxsize : BLEN (&tt->reads.buf);      ASSERT (len <= BLEN (&tt->reads.buf));      /* the overlapped read will signal this event on I/O completion */      ASSERT (ResetEvent (tt->reads.overlapped.hEvent));      status = ReadFile(		      tt->hand,		      BPTR (&tt->reads.buf),		      len,		      &tt->reads.size,		      &tt->reads.overlapped		      );      if (status) /* operation completed immediately? */	{	  /* since we got an immediate return, we must signal the event object ourselves */	  ASSERT (SetEvent (tt->reads.overlapped.hEvent));	  tt->reads.iostate = IOSTATE_IMMEDIATE_RETURN;	  tt->reads.status = 0;	  msg (D_WIN32_IO, "WIN32 I/O: TAP Read immediate return [%d,%d]",	       (int) len,	       (int) tt->reads.size);	       	}      else	{	  err = GetLastError (); 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久中文综合久久97| 性做久久久久久免费观看| 亚洲二区视频在线| 亚洲欧美偷拍卡通变态| 中文字幕av一区二区三区| 久久亚洲一级片| 国产精品污www在线观看| 国产精品色哟哟| 日本强好片久久久久久aaa| 国产呦精品一区二区三区网站| 另类小说图片综合网| 成人在线视频首页| 色国产精品一区在线观看| 欧美专区在线观看一区| 91精品国产综合久久精品性色| 欧美日韩精品电影| 欧美一区二区精品| 国产片一区二区三区| 综合久久给合久久狠狠狠97色| 欧美韩国日本综合| 另类小说一区二区三区| 欧美一区二区三区免费大片| 一个色综合av| 久草精品在线观看| 99在线精品视频| 4hu四虎永久在线影院成人| 亚洲男人天堂av| 色婷婷av一区二区三区软件| 日本一区二区三区免费乱视频| 美国av一区二区| 99久久精品一区| 欧美天堂一区二区三区| 日韩美女一区二区三区| 色视频欧美一区二区三区| 亚洲欧美在线观看| 亚洲成av人片www| 91九色02白丝porn| 一区二区三区日韩| 欧洲国内综合视频| 亚洲一区二区三区四区在线免费观看| 日本午夜一本久久久综合| 欧美日韩精品一区二区三区四区| 亚洲曰韩产成在线| 欧美精品99久久久**| 日本一区二区三区视频视频| 成人综合激情网| 国产精品视频麻豆| 91丨porny丨国产| 精品sm捆绑视频| 亚洲福中文字幕伊人影院| 91精品国产综合久久精品麻豆| 日本vs亚洲vs韩国一区三区二区| 91老师国产黑色丝袜在线| 亚洲黄色录像片| 成人av电影在线播放| 精品免费一区二区三区| 伊人婷婷欧美激情| 欧美日韩精品欧美日韩精品| 日韩av不卡一区二区| 欧美精品一区男女天堂| fc2成人免费人成在线观看播放| 中文字幕一区二区三区色视频| 色屁屁一区二区| 裸体健美xxxx欧美裸体表演| 久久一留热品黄| 91久久一区二区| 免播放器亚洲一区| 亚洲欧美怡红院| 欧美一区二区三区播放老司机| 国产精品99精品久久免费| 欧美一区二区免费观在线| 国内偷窥港台综合视频在线播放| 欧美日韩在线播| 亚洲一区二区av在线| 制服丝袜av成人在线看| 高清不卡一区二区| 精品国产91九色蝌蚪| 色网站国产精品| 久久精品国产77777蜜臀| 综合久久久久综合| 精品国产99国产精品| 在线观看日韩电影| 国产精品99久久久久久似苏梦涵| 亚洲一区欧美一区| 国产精品系列在线| 久久伊人蜜桃av一区二区| 欧美日韩高清在线| 色综合色综合色综合| 国产米奇在线777精品观看| 亚洲国产另类av| 国产精品久久久久久久久免费桃花 | 国产精品天天看| 欧美一区二区播放| 色av一区二区| 成人免费精品视频| 久久不见久久见免费视频1| 亚洲影院在线观看| 国产精品久久久久久久久搜平片| 日韩精品一区二区三区视频播放 | 久久久久国产精品麻豆| 粉嫩av一区二区三区粉嫩| 亚洲国产欧美另类丝袜| 亚洲视频小说图片| 国产欧美一区二区三区在线老狼| 欧美一区二区三区不卡| 日本韩国一区二区三区视频| 丁香五精品蜜臀久久久久99网站| 日产精品久久久久久久性色| 亚洲免费观看高清在线观看| 中文av一区二区| 国产日韩精品久久久| 精品欧美久久久| 日韩精品一区二区三区在线 | 国产精品女同一区二区三区| 精品久久久三级丝袜| 欧美一级高清片| 成人免费精品视频| 国产不卡免费视频| 福利一区在线观看| 成人激情校园春色| 成a人片亚洲日本久久| 成人自拍视频在线| 成人黄色小视频| 91丨九色丨国产丨porny| 不卡欧美aaaaa| 91在线视频观看| 在线观看日韩高清av| 欧美美女网站色| 欧美一级高清片在线观看| 精品剧情在线观看| 久久这里只有精品视频网| 久久蜜臀中文字幕| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品欧美经典| 亚洲老司机在线| 日韩中文字幕一区二区三区| 国产精品电影一区二区| 亚洲日本va在线观看| 亚洲人成人一区二区在线观看| 亚洲精选视频免费看| 亚洲成在人线免费| 麻豆国产精品官网| 国产精品456露脸| 99re热视频精品| 6080亚洲精品一区二区| 精品国产91乱码一区二区三区 | 日韩av电影一区| 国产福利精品一区| 国内精品视频一区二区三区八戒| 国产精品1024| 欧美午夜精品免费| 欧美成人r级一区二区三区| 中文字幕 久热精品 视频在线| 亚洲精品视频在线看| 蜜桃一区二区三区在线观看| 国产91精品欧美| 欧美挠脚心视频网站| 久久网站热最新地址| 亚洲三级电影网站| 美女脱光内衣内裤视频久久网站| 成人综合在线视频| 欧美精品vⅰdeose4hd| 中文字幕巨乱亚洲| 日韩在线一二三区| av不卡免费在线观看| 日韩三级视频在线看| 亚洲精品欧美综合四区| 精品一区二区日韩| 欧美专区亚洲专区| 中文一区二区在线观看| 日本一不卡视频| 一本久久a久久免费精品不卡| 精品三级在线看| 亚洲一区二区三区在线看| 国产成人免费视频网站 | 国产欧美视频一区二区三区| 亚洲国产日产av| 91蝌蚪国产九色| 国产精品久久久久久久第一福利 | 久久电影国产免费久久电影| 91九色最新地址| 国产精品二三区| 国产精品18久久久久久久网站| 4hu四虎永久在线影院成人| 亚洲综合清纯丝袜自拍| 成人免费va视频| 国产欧美精品一区二区三区四区| 七七婷婷婷婷精品国产| 欧美日韩一区二区三区高清| 国产精品色眯眯| 风间由美性色一区二区三区| 精品成人一区二区三区四区| 久久精品久久久精品美女| 日韩午夜在线影院| 久久99精品视频| 久久午夜老司机| 精品在线一区二区| 日韩一级精品视频在线观看| 青青草伊人久久| 日韩一卡二卡三卡四卡|