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

Signed-off-by: Peter Lieven <p...@kamp.de>
---
 net/tap-linux.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/tap-linux.c b/net/tap-linux.c
index a953189..2759b78 100644
--- a/net/tap-linux.c
+++ b/net/tap-linux.c
@@ -49,7 +49,7 @@ int tap_open(char *ifname, int ifname_size, int *vnet_hdr,
         return -1;
     }
     memset(&ifr, 0, sizeof(ifr));
-    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
+    ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;

     if (*vnet_hdr) {
         unsigned int features;
--
1.7.9.5


Reply via email to