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

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

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

revision 1.5 by nes, Tue Aug 27 15:10:12 2002 UTC revision 1.6 by nes, Thu Aug 29 23:25:16 2002 UTC
# Line 84  tun_open () Line 84  tun_open ()
84    struct ifreq ifr;    struct ifreq ifr;
85    
86    if ((fd = open ("/dev/net/tun", O_RDWR)) < 0)    if ((fd = open ("/dev/net/tun", O_RDWR)) < 0)
87      return tun_open_old (dev);      return 0;
88      /* We will try old tuntap when new support is ok */
89      /* return tun_open_old (dev); */
90    
91    memset (&ifr, 0, sizeof (ifr));    memset (&ifr, 0, sizeof (ifr));
92    ifr.ifr_flags = IFF_TUN | IFF_NO_PI;    ifr.ifr_flags = IFF_TUN | IFF_NO_PI;
# Line 104  tun_open () Line 106  tun_open ()
106          }          }
107        else        else
108          {          {
109          tun_close ();            tun_close ();
110          return 0;            return 0;
111          }          }
112      }      }
113    
114    strcpy (PARAM_INTERFACE_NAME, ifr.ifr_name);    /*
115       * FIXME: total mess with allocation of parameters.
116       * Can't strcpy in a constant string, but we should not always strdup.
117       * And we don't know when to free old value (can be string constant).
118       */
119      PARAM_INTERFACE_NAME = strdup(ifr.ifr_name);
120    return 1;    return 1;
   
121  }  }
122    
123  #else /* !HAVE_LINUX_IF_TUN_H */  #else /* !HAVE_LINUX_IF_TUN_H */
# Line 143  tun_getfd () Line 149  tun_getfd ()
149  }  }
150    
151  int  int
152  tun_get(buffer, data, data_size)  tun_get (buffer, data, data_size)
153       buffer_t *buffer;       buffer_t *buffer;
154       char **data;       char **data;
155       size_t *data_size;       size_t *data_size;
156  {  {
157    struct iphdr *ip;    struct iphdr *ip;
158    
159    ip=(struct iphdr*) buffer_end(buffer);    ip = (struct iphdr*) buffer_end(buffer);
160    *data=NULL;    *data = NULL;
161    *data_size=0;    *data_size = 0;
162    if(buffer->used < sizeof(struct iphdr))    if (buffer->used < sizeof(struct iphdr))
163      return 0;      return 0;
164    if(buffer->used < ip->tot_len)    if (buffer->used < ip->tot_len)
165      return 0;      return 0;
166    
167    *data=(char*) ip;    *data = (char*) ip;
168    *data_size=ip->tot_len;    *data_size = ip->tot_len;
169    buffer_free(buffer,ip->tot_len);    buffer_free (buffer,ip->tot_len);
170    return 1;    return 1;
171  }  }
172    
173  int  int
174  tun_put(buffer, data, data_size)  tun_put (buffer, data, data_size)
175       buffer_t *buffer;       buffer_t *buffer;
176       char *data;       char *data;
177       size_t data_size;       size_t data_size;
178  {  {
179    char *p;    char *p;
180    
181    p=buffer_end(buffer);    p = buffer_end(buffer);
182    buffer_alloc(buffer,data_size);    buffer_alloc (buffer,data_size);
183    memcpy(p,data,data_size);    memcpy (p,data,data_size);
184    return 1;    return 1;
185  }  }
186    

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

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