net/tap: fix build with old kernels
authorKeith Wiles <keith.wiles@intel.com>
Fri, 20 Jan 2017 14:30:25 +0000 (08:30 -0600)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 20 Jan 2017 17:37:22 +0000 (18:37 +0100)
IFF_MULTI_QUEUE does not exist in older kernels:
drivers/net/tap/rte_eth_tap.c:143:19: error: ‘IFF_MULTI_QUEUE’ undeclared

Signed-off-by: Keith Wiles <keith.wiles@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
drivers/net/tap/rte_eth_tap.c

index 976f2d9..c0afc2d 100644 (file)
@@ -140,6 +140,7 @@ tun_alloc(char *name)
        }
        RTE_LOG(DEBUG, PMD, "TUN/TAP Features %08x\n", features);
 
+#ifdef IFF_MULTI_QUEUE
        if (!(features & IFF_MULTI_QUEUE) && (RTE_PMD_TAP_MAX_QUEUES > 1)) {
                RTE_LOG(DEBUG, PMD, "TUN/TAP device only one queue\n");
                goto error;
@@ -152,6 +153,15 @@ tun_alloc(char *name)
                RTE_LOG(DEBUG, PMD, "Multi-queue support for %d queues\n",
                        RTE_PMD_TAP_MAX_QUEUES);
        }
+#else
+       if (RTE_PMD_TAP_MAX_QUEUES > 1) {
+               RTE_LOG(DEBUG, PMD, "TUN/TAP device only one queue\n");
+               goto error;
+       } else {
+               ifr.ifr_flags |= IFF_ONE_QUEUE;
+               RTE_LOG(DEBUG, PMD, "Single queue only support\n");
+       }
+#endif
 
        /* Set the TUN/TAP configuration and get the name if needed */
        if (ioctl(fd, TUNSETIFF, (void *)&ifr) < 0) {