Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 May 2008 23:41:08 +0200 (CEST)
From:      Wojciech Puchar <wojtek@wojtek.tensor.gdynia.pl>
To:        Bob McConnell <rvm@CBORD.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Unable to talk to tap(4)
Message-ID:  <20080514234101.P2316@wojtek.tensor.gdynia.pl>
In-Reply-To: <FF8482A96323694490C194BABEAC24A002B83B78@Email.cbord.com>
References:  <FF8482A96323694490C194BABEAC24A002B83B78@Email.cbord.com>

next in thread | previous in thread | raw e-mail | index | archive | help
>
> The basic setup sequence is:
>
>  ifconfig tap0 create
>  ifconfig tap0 inet 10.3.4.254/24
>  route -v add 10.3.4.0/24 10.3.4.254

ifconfig tap0 up

?

>
> At this point, I can ping that address and my application can open
> either /dev/net/tap0 or /dev/tap0. But when I try to read() from those
> devices, I have problems.
>
> /dev/net/tap0 always returns with errno = 19 (ENODEV - Operation not
> supported?).
>
> /dev/tap0 returns errno = 14 (EFAULT - bad address). At this point,
> 'ifconfig' shows that the inet address is no longer attached and
> 'netstat -rn' shows the route I added above has been dropped.
>
> I have been searching for several days to find more information about
> this device, but have not found anything specific to FreeBSD. All of the
> examples and instructions are for Linux or tun(4), both of which are
> significantly different devices.
>
> My code so far:
>
> ----------------- tear along dotted line -----------------
>  tapFD = open ("/dev/tap0", O_RDWR);
>  if (tapFD < 0) {
>    fprintf (stderr, "Failed to open /dev/tap0: %d.\n", tapFD);
>    exit (2);
>  }
>
>  fprintf (stderr, "Successfully opened /dev/tap0.\n");
>
>  unsigned char * buffer = (unsigned char*)malloc(1514);
>  if (buffer = NULL) {
>    fprintf (stderr, "No memory available.\n");
>    close (tapFD);
>    exit(3);
>  }
>  int lenth = 0;
>
> again:
>  lenth = read(tapFD, buffer, 1514);
>  if (lenth < 0) {
>    int error = errno;
>    if (error == EINTR)
>      goto again;
>    fprintf (stderr, "tap read error: %d\n", error);
>  }
>  else {
>    int index;
>
>    fprintf (stdout, "%d bytes received.\n", lenth);
>    for (index = 0; index < lenth; ++index) {
>      fprintf (stdout, " %02x", buffer[index]);
>      if (index % 16 == 15)
>        fprintf (stdout, "\n");
>    }
>    fprintf (stdout, "\n");
>  }
>
>  close (tapFD);
> ----------------- tear along dotted line -----------------
>
> Just in the interest of full disclosure, I am running a stock
> installation of FreeBSD 7.0 in a VMWare 5.5.4 session on WinXP. There
> are also two virtual Ethernet cards, one connected to a host only
> subnet, the other bridged onto a real Ethernet segment. I am using IPFW
> with DummyNet to inject some measure of reality into this system.
>
> This is the beginnings of a test bench for several commercial
> applications. My goal, once I get this device working, is to write an
> application for tap(4) that will emulate a few hundred embedded devices,
> each opening a socket directly to a server, which currently resides in
> another VM session on the host only network. This setup, coupled with
> real devices on the external network should give us a much more
> realistic environment for stress testing our systems.
>
> Thank you,
>
> Bob McConnell
> Principal Communications Programmer
> The CBORD Group, Inc.
> 61 Brown Road
> Ithaca NY, 14850
> Phone 607 257-2410
> FAX 607 257-1902
> Email rvm@cbord.com
> Web www.cbord.com
> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org"
>
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080514234101.P2316>