[uClinux-dev] TUN/TAP in 2.6 kernel is hanging on read.. Please help.
jfuerst at freewave.com
Mon Oct 24 19:47:23 EDT 2005
I am trying to utilize the TUN/TAP driver in kernel 2.6 in the latest
uClinux dist (2005).
I followed the /documentation/network/tuntap.txt document to a 'T' (I
think) and still no luck. I use the below code to open the
'/dev/net/tun' node and issue the ioctl. Everything goes along smoothly
until I try to read from tun/tap.
When I read from the driver the program just blocks indefinitely. It
never returns unless I ctrl+c the program away.
Any ideas on what I am doing wrong? I have beed screwing with this for a
couple of weeks now and have not gotten anywhere with this.
* I do indeed have a tun node in /dev/net
* The permissions are set to 777 (until I get this working)
* The node was added as tun,c,10,200 (as found in tuntap.txt)
* I am using kernel 2.6
All help is greatly appreciated.
#include <linux/fcntl.h> //for O_RDWR
int tun_alloc(char *dev); //declare that there will be such a function
int main(int argc, char **argv)
char *buf, dev="tun0\0";
int fd, len;
fd = tun_alloc(dev);
len = read(fd,buf,sizeof(buf)); //locks up here
printf("\r\nreceived %d Bytes",len);
int tun_alloc(char *dev)
struct ifreq ifr;
int fd, err ,r;
if( (fd = open("/dev/net/tun", O_RDWR)) < 0 )
printf("\r\n Error opening tun device\r\n");
printf("\r\n Successfully opened TUN device.\r\n");
memset(&ifr, 0, sizeof(ifr));
/* Flags: IFF_TUN - TUN device (no Ethernet headers)
* IFF_TAP - TAP device
* IFF_NO_PI - Do not provide packet information
ifr.ifr_flags = IFF_TAP;
if( *dev )
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
if((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 )
printf("\r\n Errot ioctl tun device\r\n");
printf("\r\n ioctl successful\r\n");
More information about the uClinux-dev