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

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

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

revision 1.1 by chupa, Thu Sep 5 23:09:37 2002 UTC revision 1.2 by chupa, Fri Sep 6 23:03:55 2002 UTC
# Line 45  extern int tun_fd; Line 45  extern int tun_fd;
45   * Allocate TUN device   * Allocate TUN device
46   */   */
47  int  int
48  tun_open()  tun_open ()
49  {  {
50    char tunname[14];    char tunname[14];
51    int i;    int i;
52      
53    if (PARAM_INTERFACE_NAME) {    if (PARAM_INTERFACE_NAME)
54      sprintf(tunname, "/dev/%s", PARAM_INTERFACE_NAME);      {
55      tun_fd = open(tunname, O_RDWR | O_NONBLOCK);        sprintf (tunname, "/dev/%s", PARAM_INTERFACE_NAME);
56    } else {        tun_fd = open (tunname, O_RDWR | O_NONBLOCK);
57      for (i = 0; i < 255; i++) {      }
58        sprintf(tunname, "/dev/tun%d", i);    else
59        /* Open device */      {
60        if ((tun_fd = open(tunname, O_RDWR| O_NONBLOCK)) > 0) {        for (i = 0; i < 255; i++)
61          sprintf(PARAM_INTERFACE_NAME, "tun%d", i);          {
62          break;            sprintf (tunname, "/dev/tun%d", i);
63        }            /* Open device */
64              if ((tun_fd = open (tunname, O_RDWR | O_NONBLOCK)) > 0)
65                {
66                  sprintf (PARAM_INTERFACE_NAME, "tun%d", i);
67                  break;
68                }
69            }
70        }
71      if (fd > -1)
72        {
73          i = 0;
74          /* Disable extended modes */
75          ioctl (tun_fd, TUNSLMODE, &i);
76          ioctl (tun_fd, TUNSIFHEAD, &i);
77      }      }
78    }    return tun_ready ();
   if (fd > -1) {  
     i = 0;  
     /* Disable extended modes */  
     ioctl(tun_fd, TUNSLMODE, &i);  
     ioctl(tun_fd, TUNSIFHEAD, &i);  
   }  
   return tun_ready();  
79  }  }
80    
81  int  int
82  tun_close()  tun_close ()
83  {  {
84    close(tun_fd);    close (tun_fd);
85    tun_fd = -1;    tun_fd = -1;
86    return 1;    return 1;
87  }  }
# Line 87  tun_ready () Line 93  tun_ready ()
93  }  }
94    
95  int  int
96  tun_get(buffer, data, data_size)  tun_get (buffer, data, data_size)
97       buffer_t *buffer;       buffer_t *buffer;
98       char **data;       char **data;
99       size_t *data_size;       size_t *data_size;
100  {  {
101    struct ip *ip;    struct ip *ip;
102    
103    ip=buffer_start(buffer);    ip = buffer_start (buffer);
104    *data=NULL;    *data = NULL;
105    *data_size=0;    *data_size = 0;
106    if(buffer->used < sizeof(struct ip))    if (buffer->used < sizeof (struct ip))
107      return 0;      return 0;
108    if(buffer->used < ip->ip_len)    if (buffer->used < ip->ip_len)
109      return 0;      return 0;
110    
111    *data=ip;    *data = ip;
112    *data_size=ip->ip_len;    *data_size = ip->ip_len;
113    buffer_free(buffer,ip->ip_len);    buffer_free (buffer, ip->ip_len);
114    return 1;    return 1;
115  }  }
116    
117  int  int
118  tun_put(buffer, data, data_size)  tun_put (buffer, data, data_size)
119       buffer_t *buffer;       buffer_t *buffer;
120       char *data;       char *data;
121       size_t data_size;       size_t data_size;
122  {  {
123    char *p;    char *p;
124    
125    p=buffer_end(buffer);    p = buffer_end (buffer);
126    buffer_alloc(buffer,data_size);    buffer_alloc (buffer, data_size);
127    memcpy(p,data,data_size);    memcpy (p, data, data_size);
128    return 1;    return 1;
129  }  }

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

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