
On 06/22/2011 04:31 PM, Eric Blake wrote:
On 06/21/2011 06:05 PM, Stefan Berger wrote:
In a second cleanup step this patch makes several interface functions from macvtap.c commonly available by moving them into interface.c and prefixing their names with 'iface'. --- src/libvirt_private.syms | 8 src/util/interface.c | 609 +++++++++++++++++++++++++++++++++++++++++++++++ src/util/interface.h | 37 ++ src/util/macvtap.c | 495 -------------------------------------- 4 files changed, 663 insertions(+), 486 deletions(-) Unfortunately, this breaks things when compiling on RHEL 5. There, macvtap.c was not compiled, but interface.c is compiled, and I'm now getting errors like this:
util/interface.c: In function 'ifaceMacvtapLinkAdd': util/interface.c:538: warning: assignment makes pointer from integer without a cast util/interface.c:557: error: 'IFLA_LINKINJFO' undeclared (first use in this function) ...
We need some preprocessor conditionals to filter out these functions when support is lacking.
My fault. We had it compiled conditionally before and I took it out of the #if WITH_MACVTAP. Does this patch here make it work? --- src/util/interface.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) Index: libvirt-acl/src/util/interface.c =================================================================== --- libvirt-acl.orig/src/util/interface.c +++ libvirt-acl/src/util/interface.c @@ -510,7 +510,7 @@ ifaceSetMacaddr(const char *ifname ATTRI * * Returns 0 on success, -1 on fatal error. */ -#if __linux__ +#if defined(__linux__) && defined(WITH_MACVTAP) int ifaceMacvtapLinkAdd(const char *type, const unsigned char *macaddress, int macaddrsize, @@ -649,8 +649,14 @@ ifaceMacvtapLinkAdd(const char *type ATT int *retry ATTRIBUTE_UNUSED) { ifaceError(VIR_ERR_INTERNAL_ERROR, "%s", +# if defined(__linux__) && !defined (WITH_MACVTAP) + _("ifaceMacvtapLinkAdd is not supported since include files " + "were too old")); +# else _("ifaceMacvtapLinkAdd is not supported on non-linux " "platforms")); +# endif + return -1; } @@ -758,7 +764,8 @@ ifaceLinkDel(const char *ifname ATTRIBUT #endif -#if __linux__ +#if defined(__linux__) && defined(IFLA_PORT_MAX) + static struct nla_policy ifla_policy[IFLA_MAX + 1] = { [IFLA_VF_PORTS] = { .type = NLA_NESTED }, @@ -894,8 +901,14 @@ ifaceMacvtapLinkDump(bool nltarget_kerne uint32_t (*getPidFunc)(void) ATTRIBUTE_UNUSED) { ifaceError(VIR_ERR_INTERNAL_ERROR, "%s", +# if defined(__linux__) && !defined(IFLA_PORT_MAX) + _("ifaceMacvtapLinkDump is not supported since include files " + "were too old")); +# else _("ifaceMacvtapLinkDump is not supported on non-linux " "platforms")); +# endif + return -1; } Stefan