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

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

?? tun.c

?? 一個開源的VPN原碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
tuncfg (const char *dev, const char *dev_type, const char *dev_node, bool ipv6, int persist_mode){  struct tuntap tt;  open_tun (dev, dev_type, dev_node, ipv6, &tt);  if (ioctl (tt.fd, TUNSETPERSIST, persist_mode) < 0)    msg (M_ERR, "Cannot ioctl TUNSETPERSIST(%d) %s", persist_mode, dev);  close_tun (&tt);  msg (M_INFO, "Persist state set to: %s", (persist_mode ? "ON" : "OFF"));}#endif /* TUNSETPERSIST */#elsevoidopen_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6,	  struct tuntap *tt){  open_tun_generic (dev, dev_node, ipv6, false, tt);}#endif /* HAVE_LINUX_IF_TUN_H */voidclose_tun (struct tuntap *tt){  close_tun_generic (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)voidopen_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;  clear_tuntap (tt);  ipv6_support (ipv6, false, tt);  if (!strcmp(dev, "null"))    {      open_null (tt);      return;    }  if (is_dev_type (dev, 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 (is_dev_type (dev, 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);  snprintf (tt->actual, sizeof (tt->actual), "%s%d", dev_tuntap_type, ppa);  CLEAR (ifr);  strncpynt (ifr.ifr_name, tt->actual, 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);}/* * Close TUN device.  */voidclose_tun (struct tuntap* tt){  if (tt->fd >= 0)    {      struct ifreq ifr;      CLEAR (ifr);      strncpynt (ifr.ifr_name, tt->actual, sizeof (ifr.ifr_name));     if (ioctl (tt->ip_fd, SIOCGIFFLAGS, &ifr) < 0)	msg (M_ERR, "Can't get iface flags");      if (ioctl (tt->ip_fd, SIOCGIFMUXID, &ifr) < 0)	msg (M_ERR, "Can't get multiplexor id");      if (ioctl (tt->ip_fd, I_PUNLINK, ifr.ifr_ip_muxid) < 0)	msg (M_ERR, "Can't unlink interface");      close (tt->ip_fd);      close (tt->fd);    }  clear_tuntap (tt);}intwrite_tun (struct tuntap* tt, uint8_t *buf, int len){  struct strbuf sbuf;  sbuf.len = len;  sbuf.buf = 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 = buf;  return getmsg (tt->fd, NULL, &sbuf, &f) >= 0 ? sbuf.len : -1;}#elif defined(TARGET_OPENBSD)voidopen_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6,	  struct tuntap *tt){  open_tun_generic (dev, dev_node, ipv6, false, tt);}voidclose_tun (struct tuntap* tt){  close_tun_generic (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){  u_int32_t type = htonl (AF_INET);  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 (writev (tt->fd, iv, 2));}intread_tun (struct tuntap* tt, uint8_t *buf, int len){  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));}#elif defined(TARGET_FREEBSD)voidopen_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6,	  struct tuntap *tt){  open_tun_generic (dev, dev_node, ipv6, false, tt);  if (tt->fd >= 0)    {      int i = 0;      /* Disable extended modes */      ioctl (tt->fd, TUNSLMODE, &i);      ioctl (tt->fd, TUNSIFHEAD, &i);    }}voidclose_tun (struct tuntap* tt){  close_tun_generic (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);}#else /* generic */voidopen_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6,	  struct tuntap *tt){  open_tun_generic (dev, dev_node, ipv6, false, tt);}voidclose_tun (struct tuntap* tt){  close_tun_generic (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);}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人h动漫精品一区二区| 欧美日韩一区二区三区免费看| 五月天亚洲精品| 久久99九九99精品| 欧美女孩性生活视频| 国产精品色呦呦| 精品一区二区av| 国产精品美女久久久久久2018| yourporn久久国产精品| 久久久久国产一区二区三区四区| 国产亚洲va综合人人澡精品 | 97精品国产露脸对白| 国产欧美一区二区精品性色超碰| 亚洲人成7777| 色综合中文字幕国产| 久久精品亚洲国产奇米99| 国产又黄又大久久| 亚洲精品一线二线三线| 国产一区二区视频在线| 国产亚洲午夜高清国产拍精品| 一区二区三区成人| 在线中文字幕不卡| 亚洲夂夂婷婷色拍ww47| 欧美日韩一区小说| 婷婷久久综合九色国产成人| 777午夜精品免费视频| 亚洲成人手机在线| 91精品国产91久久综合桃花| 日本中文字幕一区| 精品国产乱码久久久久久久久 | 久久午夜电影网| 国产在线精品一区二区不卡了| 日本道精品一区二区三区 | 91精品婷婷国产综合久久竹菊| 久久久久97国产精华液好用吗| 亚洲宅男天堂在线观看无病毒| 国产麻豆91精品| 久久精品视频在线看| 国产v日产∨综合v精品视频| 国产精品理论片| 色综合av在线| 天堂午夜影视日韩欧美一区二区| 成人av网站在线观看免费| 亚洲欧洲av在线| 一本大道av伊人久久综合| 亚洲第一会所有码转帖| 欧美一区二区三区四区五区| 激情成人综合网| 国产精品久久久久桃色tv| 色琪琪一区二区三区亚洲区| 日韩在线一区二区| 久久久蜜臀国产一区二区| 99精品视频在线观看免费| 亚洲成人免费看| 精品久久久久久无| av网站一区二区三区| 色综合 综合色| 精品美女在线播放| 不卡一区在线观看| 丝袜国产日韩另类美女| 精品国产乱码久久久久久久| 91丨porny丨蝌蚪视频| 日韩精品三区四区| 国产日韩影视精品| 欧美视频在线一区二区三区 | 亚洲国产欧美另类丝袜| 欧美成人福利视频| 94色蜜桃网一区二区三区| 调教+趴+乳夹+国产+精品| 久久久精品tv| 91在线观看污| 免费高清在线视频一区·| 国产精品乱码一区二三区小蝌蚪| 国产999精品久久久久久| 亚洲国产一区二区a毛片| 久久久综合激的五月天| 欧美在线综合视频| 国产精品99久| 五月天欧美精品| 国产精品不卡视频| 精品sm捆绑视频| 欧美性大战久久久| 成人午夜激情影院| 免费观看30秒视频久久| 一区二区视频在线看| 久久先锋资源网| 欧美日韩综合在线| 不卡视频一二三| 久久精品国产精品亚洲红杏| 亚洲精品国产一区二区三区四区在线 | 国产精品自拍三区| 一区二区三区在线视频免费 | 国产精品一二三四区| 亚洲国产日韩精品| 国产精品免费久久| 日韩欧美在线网站| 91福利资源站| 粉嫩13p一区二区三区| 日本午夜精品一区二区三区电影| 欧美丰满一区二区免费视频| 成人综合在线观看| 免费av成人在线| 亚洲亚洲人成综合网络| 中文字幕成人av| 亚洲精品在线观看视频| 欧美美女直播网站| 色噜噜狠狠成人中文综合| 国产精品1024| 久久精品国产色蜜蜜麻豆| 精品系列免费在线观看| 欧美激情综合在线| 久久影音资源网| 日韩免费性生活视频播放| 欧美久久久影院| 欧美日韩日本视频| 欧洲人成人精品| 色综合欧美在线| 成人激情图片网| 日本一区二区三区国色天香| 欧美日韩色综合| 在线看国产日韩| 99riav一区二区三区| 成人免费视频免费观看| 国产原创一区二区三区| 极品尤物av久久免费看| 蜜臀精品一区二区三区在线观看| 日韩亚洲电影在线| 欧美日韩亚洲另类| 欧美一a一片一级一片| 日本精品一区二区三区四区的功能| 五月天婷婷综合| 日韩高清在线不卡| 日韩中文字幕区一区有砖一区| 久久精品一区二区三区四区| 精品国产一区二区三区忘忧草| 波多野结衣在线一区| 成人avav在线| 懂色av中文字幕一区二区三区| 亚洲高清不卡在线| 香蕉久久一区二区不卡无毒影院 | 日韩激情一二三区| 日韩电影在线观看电影| 亚洲国产成人精品视频| 亚洲国产精品久久久久秋霞影院| 国产性做久久久久久| 中文字幕免费不卡在线| 国产精品丝袜久久久久久app| 欧美日韩免费观看一区二区三区 | 欧美日韩国产高清一区二区 | 日韩va亚洲va欧美va久久| 日韩国产在线观看| 蜜桃精品在线观看| 国内精品国产成人| 成人夜色视频网站在线观看| 成人免费观看男女羞羞视频| 93久久精品日日躁夜夜躁欧美| 蜜桃免费网站一区二区三区 | 精品国产3级a| 国产日韩精品一区| 国产精品欧美一区喷水| 亚洲欧美日韩一区| 亚洲丰满少妇videoshd| 午夜久久久久久久久久一区二区| 国产精品久久午夜| 日韩成人一级片| 婷婷综合在线观看| 久久成人免费网| 成人综合在线观看| 成人av午夜电影| 欧美图片一区二区三区| 制服丝袜亚洲播放| 久久久久国产成人精品亚洲午夜| 欧美精品国产精品| 精品国产亚洲在线| 国产精品国产三级国产a| 亚洲一区免费在线观看| 日韩国产高清在线| 国产福利视频一区二区三区| 99re6这里只有精品视频在线观看| 久久99国产精品久久| 成人高清在线视频| 在线精品亚洲一区二区不卡| 日韩一级完整毛片| 国产精品久久久久久户外露出| 国产视频在线观看一区二区三区 | 欧美色大人视频| 欧美精品一区视频| 中文字幕五月欧美| 日本欧美大码aⅴ在线播放| 国产成a人无v码亚洲福利| 欧美私模裸体表演在线观看| 久久久亚洲国产美女国产盗摄| 精品国产1区二区| 一区二区三区在线免费视频| 久久99深爱久久99精品| 色成年激情久久综合| 精品国产精品一区二区夜夜嗨| 亚洲精品一区二区三区香蕉| 国产精品国产自产拍高清av王其| 国产精品久久福利|