On 09/19/2017 08:04 AM, Ján Tomko wrote:
Instead of checking for all possible constants that every
kernel header with devlink support should have (and defining
HAVE_DECL_DEVLINK as 1 if any of them is present due to the
way AC_CHECK_DECLS works), only check for DEVLINK_CMD_ESWITCH_GET.
This is the name of the constant since kernel 4.11. Between 4.8
and 4.11, the now deprecated spelling DEVLINK_CMD_ESWITCH_MODE_GET
was used.
---
Yet another version.
configure.ac | 9 +++------
src/util/virnetdev.c | 4 ++--
2 files changed, 5 insertions(+), 8 deletions(-)
The one drawback for this is that hosts with kernels between 4.8 and
4.11 won't be able to use the functionality only because the name
changes in 4.11. It's not that the command isn't available and the
other symbols aren't available, it's just a name change.
Still, I think this is a lot cleaner and avoids the name change
completely which I'm perfectly fine with; however, if the "claim" from
the committed patch is that this works as of kernel 4.8, then a
docs/news.xml update would also be necessary.
Unless of course the original author can come up with a better way to
add support between 4.8 and 4.10 inclusive.
John
diff --git a/configure.ac b/configure.ac
index c9509c7f9..f542359a6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -628,15 +628,12 @@ if test "$with_linux" = "yes"; then
fi
dnl
-dnl check for kernel headers required by devlink
+dnl check for DEVLINK_CMD_ESWITCH_GET, required for checking
+dnl the DEVLINK_ESWITCH_MODE_SWITCHDEV capability
dnl
if test "$with_linux" = "yes"; then
AC_CHECK_HEADERS([linux/devlink.h])
- AC_CHECK_DECLS([DEVLINK_GENL_VERSION, DEVLINK_GENL_NAME, DEVLINK_ATTR_MAX,
DEVLINK_CMD_ESWITCH_GET, DEVLINK_ATTR_BUS_NAME, DEVLINK_ATTR_DEV_NAME,
DEVLINK_ATTR_ESWITCH_MODE, DEVLINK_ESWITCH_MODE_SWITCHDEV],
- [AC_DEFINE([HAVE_DECL_DEVLINK],
- [1],
- [whether devlink declarations are available])],
- [],
+ AC_CHECK_DECLS([DEVLINK_CMD_ESWITCH_GET], [], [],
[[#include <linux/devlink.h>]])
fi
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
index 040693925..41a659732 100644
--- a/src/util/virnetdev.c
+++ b/src/util/virnetdev.c
@@ -59,7 +59,7 @@
# include <net/if_dl.h>
#endif
-#if HAVE_DECL_DEVLINK
+#if HAVE_LINUX_DEVLINK_H
# include <linux/devlink.h>
#endif
@@ -3120,7 +3120,7 @@ virNetDevGetEthtoolFeatures(virBitmapPtr bitmap,
}
-# if HAVE_DECL_DEVLINK
+# if HAVE_DECL_DEVLINK_CMD_ESWITCH_GET
/**
* virNetDevPutExtraHeader
* reserve and prepare room for an extra header