Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Sep 2005 13:49:52 +0100 (BST)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Stay d <dandee@volny.cz>
Cc:        freebsd-current@freebsd.org, brooks@FreeBSD.org
Subject:   Re: ifconfig tun(N) destroy does not work !
Message-ID:  <20050906134547.B51625@fledge.watson.org>
In-Reply-To: <20050905150129.414784E704@pipa.profix.cz>
References:  <20050905150129.414784E704@pipa.profix.cz>

next in thread | previous in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-772530284-1126010992=:51625
Content-Type: TEXT/PLAIN; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: QUOTED-PRINTABLE

On Mon, 5 Sep 2005, Stay d wrote:

> maybe I haven=B4t read something what I souhld read it, and if it is true=
=20
> I am sorry for anoying you.
>
> Let me ask you for tun devices.
>
> roztyly# ifconfig tun1 destroy
> ifconfig: SIOCIFDESTROY: Invalid argument
>
> I found out from manual page tun(4) that:
>
> "These network interfaces persist until the if_tun.ko module is unloaded=
=20
> (if tun is built into your kernel, the network interfaces cannot be=20
> removed)."
>
> Of course the generic kernel defines "device tun", so I commented the=20
> line and recompiled the kernel.
>
> After that, I tried again "destroy command" and with no changes.
>
> I tried "create command" and the same error message happens.

Your observation is correct: unlike most clonable network device drivers,=
=20
tun and tap interface cloning is driven by devfs events, and not by=20
network interface clone events controlled using ifconfig create/destroy.

I was actually bumping into this yesterday since I wanted to force the=20
garbage collection of a tap device in order to try to trigger a kernel bug=
=20
involving interface removal, and there is currently no explicit way to do=
=20
this.  devfs will reclaim the tap device node, if unused, when vnode=20
pressure requires that new vnodes become available.  I.e., when memory use=
=20
starts to go up, the unused tun and tap nodes will be recycled as needed.=
=20
Until that time, the device node and network interface will hang around in=
=20
case needed.  A tun/tap node and interface will be created as a result of=
=20
a lookup in /dev.  I.e., stat /dev/tun10.

In a number of ways, I prefer the explicit cloning behavior to implicit --=
=20
i.e., might prefer it if explicit "ifconfig create tap0" caused the device=
=20
node to appear.  On the other hand, one nice advantage to the devfs=20
cloning model is that you can make a /dev/tun automatically return the=20
first unused node, rather than requiring a sweep through node numbers and=
=20
explicit allocation and management of interface numbers, which is very=20
nice from the perspective of automated configuration.

Robert N M Watson

>
> roztyly# kldstat
> Id Refs Address    Size     Name
> 1    9 0xc0400000 5bb9fc   kernel
> 2   16 0xc09bc000 63f04    acpi.ko
> 3    1 0xc1848000 23000    nfsserver.ko
> 4    1 0xc18b0000 1a000    linux.ko
> 6    1 0xc2926000 5000     if_gif.ko
>
> roztyly# ifconfig tun10 create
> ifconfig: SIOCIFCREATE: Invalid argument
>
> roztyly# kldstat
> Id Refs Address    Size     Name
> 1   10 0xc0400000 5bb9fc   kernel
> 2   16 0xc09bc000 63f04    acpi.ko
> 3    1 0xc1848000 23000    nfsserver.ko
> 4    1 0xc18b0000 1a000    linux.ko
> 6    1 0xc2926000 5000     if_gif.ko
> 7    1 0xc2910000 5000     if_tun.ko
>
> It seems automatic loading if_tun.ko and if_gif.ko works well.
>
> Opposite to tun device is gif device which works fine:
>
> roztyly# kldstat
> Id Refs Address    Size     Name
> 1   10 0xc0400000 5bb9fc   kernel
> 2   16 0xc09bc000 63f04    acpi.ko
> 3    1 0xc1848000 23000    nfsserver.ko
> 4    1 0xc18b0000 1a000    linux.ko
> 6    1 0xc2926000 5000     if_gif.ko
> 7    1 0xc2910000 5000     if_tun.ko
>
> roztyly# kldunload -v -i 6
> Unloading if_gif.ko, id=3D6
>
> roztyly# kldunload -v -i 7
> Unloading if_tun.ko, id=3D7
>
> roztyly# kldstat
> Id Refs Address    Size     Name
> 1    8 0xc0400000 5bb9fc   kernel
> 2   16 0xc09bc000 63f04    acpi.ko
> 3    1 0xc1848000 23000    nfsserver.ko
> 4    1 0xc18b0000 1a000    linux.ko
>
> roztyly# ifconfig gif0 create
>
> roztyly# ifconfig gif0
> gif0: flags=3D8010<POINTOPOINT,MULTICAST> mtu 1280
>
> roztyly# ifconfig gif0 destroy
>
> roztyly# ifconfig gif0
> ifconfig: interface gif0 does not exist
>
> roztyly# kldstat
> Id Refs Address    Size     Name
> 1    9 0xc0400000 5bb9fc   kernel
> 2   16 0xc09bc000 63f04    acpi.ko
> 3    1 0xc1848000 23000    nfsserver.ko
> 4    1 0xc18b0000 1a000    linux.ko
> 7    1 0xc2910000 5000     if_gif.ko
>
> roztyly# ifconfig tun0 create
> ifconfig: SIOCIFCREATE: Invalid argument
>
> roztyly# kldstat
> Id Refs Address    Size     Name
> 1   10 0xc0400000 5bb9fc   kernel
> 2   16 0xc09bc000 63f04    acpi.ko
> 3    1 0xc1848000 23000    nfsserver.ko
> 4    1 0xc18b0000 1a000    linux.ko
> 7    1 0xc2910000 5000     if_gif.ko
> 8    1 0xc2926000 5000     if_tun.ko
>
> roztyly# ifconfig tun0 destroy
> ifconfig: interface tun0 does not exist
>
> roztyly# kldstat
> Id Refs Address    Size     Name
> 1   10 0xc0400000 5bb9fc   kernel
> 2   16 0xc09bc000 63f04    acpi.ko
> 3    1 0xc1848000 23000    nfsserver.ko
> 4    1 0xc18b0000 1a000    linux.ko
> 7    1 0xc2910000 5000     if_gif.ko
> 8    1 0xc2926000 5000     if_tun.ko
>
> roztyly#
>
> I use tspc2 (freenet6) port, and of course the starting/stopping scripts
> deos not work as you and me expect. :(
>
> Dan
>
> Bye
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org=
"
>
--0-772530284-1126010992=:51625--



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