On 02/10/2014 07:42 PM, Eric Blake wrote:
On 02/10/2014 07:17 AM, Laine Stump wrote:
> In order to make a client-only build successful on RHEL4, commit
> 3ed2e54 modified src/util/virnetdev.c so that the functional version
I wonder if that was a typo in the 3ed2e54 commit message - we generally
only care about RHEL5, not RHEL4.
> of virNetDevGetVLanID() was only compiled if GET_VLAN_VID_CMD was
> defined. However, it is *never* defined, but is only an enum value, so
> the proper version was no longer compiled even on platforms that
> support it. This resulted in the vlan tag not being properly set for
> guest traffic on VEPA mode guest macvtap interfaces that were bound to
> a vlan interface (that's the only place that libvirt currently uses
> virNetDevGetVLanID)
>
> Since there is no way to compile conditionally based on the presence
> of an enum value, this patch modifies configure.ac to check for said
> enum value with AC_TRY_COMPILE(), and #defines HAVE_GET_VLAN_VID_CMD
> if it's successful compiling a test program that uses
> GET_VLAN_VID_CMD. We can then make the compilation of
> virNetDevGetVLanID() conditional on that #define instead.
> ---
> configure.ac | 10 ++++++++++
> src/util/virnetdev.c | 4 ++--
> 2 files changed, 12 insertions(+), 2 deletions(-)
>
> +AC_MSG_CHECKING([for GET_VLAN_VID_CMD in /usr/linux/if_vlan.h])
> +AC_TRY_COMPILE([ #include <linux/if_vlan.h> ],
> + [ int x = GET_VLAN_VID_CMD; ],
> + [ have_get_vlan_vid_cmd=yes ],
> + [ have_get_vlan_vid_cmd=no ])
Unusual style - most autoconf macro calls don't put spaces between the
[] quoting.
I wondered about the need for those spaces, but I was copying directly
from existing code in configure.ac, so...
Also, AC_TRY_COMPILE is marked deprecated in the autoconf
manual, with the recommendation to use AC_COMPILE_IFELSE. But see below...
> +if test "$have_get_vlan_vid_cmd" = "yes"; then
> + AC_DEFINE_UNQUOTED([HAVE_GET_VLAN_VID_CMD], 1,
> + [whether the kernel SIOCGIFVLAN ioctl supports
GET_VLAN_VID_CMD])
> +fi
> +AC_MSG_RESULT([$have_get_vlan_vid_cmd])
>
AC_CHECK_DECLS is more compact;
Yes! That's exactly what I was looking for earlier today when I found
AC_TRY_COMPILE() instead. I just sent (much simpler) V2.
for example, see how we probe for
MACVLAN_MODE_PASSTHRU, at which point the rest of the code can use
HAVE_DECL_MACVLAN_MODE_PASSTHRU.
Yes, so simple that I didn't recognize what it was doing :-)