/[pengfork]/pengfork/src/tun/linux/tun.c
ViewVC logotype

Diff of /pengfork/src/tun/linux/tun.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by chupa, Wed Sep 11 15:39:32 2002 UTC revision 1.3 by chupa, Tue Nov 26 01:22:31 2002 UTC
# Line 53  tun_open_old () Line 53  tun_open_old ()
53    if (PARAM_INTERFACE_NAME)    if (PARAM_INTERFACE_NAME)
54      {      {
55        sprintf (tunname, "/dev/%s", PARAM_INTERFACE_NAME);        sprintf (tunname, "/dev/%s", PARAM_INTERFACE_NAME);
56        return open (tunname, O_RDWR);        tun_fd = open (tunname, O_RDWR);
57      }      }
58    
59    for (i = 0; i < 255; i++)    for (i = 0; i < 255; i++)
# Line 63  tun_open_old () Line 63  tun_open_old ()
63        if ((tun_fd = open (tunname, O_RDWR)) > 0)        if ((tun_fd = open (tunname, O_RDWR)) > 0)
64          {          {
65            sprintf (PARAM_INTERFACE_NAME, "tun%d", i);            sprintf (PARAM_INTERFACE_NAME, "tun%d", i);
66            break;
67          }          }
68      }      }
69    return tun_ready ();  
70      if(!tun_ready ())
71        {
72          if (PARAM_INTERFACE_NAME)
73            {      
74            log(LOG_ERR, "Unable to open tun device /dev/%s (using 2.2 kernel "
75                "method): %s(%d).\n", PARAM_INTERFACE_NAME, strerror(errno),
76                errno);
77            }
78          else
79            {
80            log(LOG_ERR, "Unable to open a valid tun device (using 2.2 kernel "
81                "method).\n");
82            }
83          return 0;
84        }
85    
86      return 1;
87  }  }
88    
89  #ifdef HAVE_LINUX_IF_TUN_H      /* New driver support */  #ifdef HAVE_LINUX_IF_TUN_H      /* New driver support */
# Line 84  tun_open () Line 102  tun_open ()
102    struct ifreq ifr;    struct ifreq ifr;
103    
104    if ((tun_fd = open ("/dev/net/tun", O_RDWR | O_NONBLOCK)) < 0)    if ((tun_fd = open ("/dev/net/tun", O_RDWR | O_NONBLOCK)) < 0)
105      return 0;      {
106    /* We will try old tuntap when new support is ok */        log(LOG_WARNING, "Unable to open /dev/net/tun: %s(%d).\n",
107    /* return tun_open_old (dev); */          strerror(errno), errno);
108          log(LOG_WARNING, "Assuming 2.2 kernel method.\n");
109          return tun_open_old ();
110        }
111    
112    memset (&ifr, 0, sizeof (ifr));    memset (&ifr, 0, sizeof (ifr));
113    ifr.ifr_flags = IFF_TUN | IFF_NO_PI;    ifr.ifr_flags = IFF_TUN | IFF_NO_PI;
# Line 100  tun_open () Line 121  tun_open ()
121            /* Try old ioctl */            /* Try old ioctl */
122            if (ioctl (tun_fd, OTUNSETIFF, (void *) &ifr) < 0)            if (ioctl (tun_fd, OTUNSETIFF, (void *) &ifr) < 0)
123              {              {
124                log(LOG_ERR, "Unable to open a valid tun device (using pre "
125                    "2.4.6 kernel method): %s(%d).\n", strerror(errno), errno);
126                tun_close ();                tun_close ();
127                return 0;                return 0;
128              }              }
129          }          }
130        else        else
131          {          {
132            log(LOG_ERR, "Unable to open a valid tun device (using post "
133                "2.4.6 kernel method): %s(%d).\n", strerror(errno), errno);
134            tun_close ();            tun_close ();
135            return 0;            return 0;
136          }          }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26