On Fri, Feb 15, 2013 at 10:32:31AM +0100, Peter Lieven wrote:
> historically the kernel queues packets two times. once
> at the device and second in qdisc. this is believed to cause
> interface stalls if one of these queues overruns.
> 
> setting IFF_ONE_QUEUE is the default in kernels >= 3.8. the
> flag is ignored since then. see kernel commit
> 5d097109257c03a71845729f8db6b5770c4bbedc
> 
> v2:
>  - do only set the flag on linux as it breaks macvtap
>  - define IFF_ONE_QUEUE in tap-linux.h
> 
> Signed-off-by: Peter Lieven <p...@kamp.de>
> ---
>  net/tap-linux.c |    4 ++++
>  net/tap-linux.h |    1 +
>  2 files changed, 5 insertions(+)
> 
> diff --git a/net/tap-linux.c b/net/tap-linux.c
> index a953189..d49f2fd 100644
> --- a/net/tap-linux.c
> +++ b/net/tap-linux.c
> @@ -51,6 +51,10 @@ int tap_open(char *ifname, int ifname_size, int *vnet_hdr,
>      memset(&ifr, 0, sizeof(ifr));
>      ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
> 
> +#ifdef __linux__
> +    ifr.ifr_flags |= IFF_ONE_QUEUE;
> +#endif

tap-linux.c  <--- notice the filename

Perhaps the solution is to try with IFF_ONE_QUEUE.  If the result is
-EINVAL, try without.

Stefan

Reply via email to