From 3ce08fab8477da2c76918329523a5e6a312cef06 Mon Sep 17 00:00:00 2001 From: Laine Stump Date: Mon, 31 Aug 2015 17:09:01 -0400 Subject: [PATCH] util: make virNetDev(Replace|Restore)MacAddress public functions These functions were made static as a part of commit cbfe38c since they were no longer called from outside virnetdev.c. We once again need to call them from another file, so this patch makes them once again public. --- src/libvirt_private.syms | 2 + src/util/virnetdev.c | 172 ++++++++++++++++++++------------------- src/util/virnetdev.h | 10 +++ 3 files changed, 99 insertions(+), 85 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a96c985df1..5b3da83ff7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1769,7 +1769,9 @@ virNetDevGetVirtualFunctions; virNetDevGetVLanID; virNetDevIsVirtualFunction; virNetDevLinkDump; +virNetDevReplaceMacAddress; virNetDevReplaceNetConfig; +virNetDevRestoreMacAddress; virNetDevRestoreNetConfig; virNetDevRxFilterFree; virNetDevRxFilterModeTypeFromString; diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c index 5fcf80535f..579ff3bd7c 100644 --- a/src/util/virnetdev.c +++ b/src/util/virnetdev.c @@ -360,6 +360,92 @@ int virNetDevGetMAC(const char *ifname, #endif +/** + * virNetDevReplaceMacAddress: + * @macaddress: new MAC address for interface + * @linkdev: name of interface + * @stateDir: directory to store old MAC address + * + * Returns 0 on success, -1 on failure + * + */ +int +virNetDevReplaceMacAddress(const char *linkdev, + const virMacAddr *macaddress, + const char *stateDir) +{ + virMacAddr oldmac; + char *path = NULL; + char macstr[VIR_MAC_STRING_BUFLEN]; + int ret = -1; + + if (virNetDevGetMAC(linkdev, &oldmac) < 0) + return -1; + + if (virAsprintf(&path, "%s/%s", + stateDir, + linkdev) < 0) + return -1; + virMacAddrFormat(&oldmac, macstr); + if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) { + virReportSystemError(errno, _("Unable to preserve mac for %s"), + linkdev); + goto cleanup; + } + + if (virNetDevSetMAC(linkdev, macaddress) < 0) + goto cleanup; + + ret = 0; + cleanup: + VIR_FREE(path); + return ret; +} + +/** + * virNetDevRestoreMacAddress: + * @linkdev: name of interface + * @stateDir: directory containing old MAC address + * + * Returns 0 on success, -errno on failure. + * + */ +int +virNetDevRestoreMacAddress(const char *linkdev, + const char *stateDir) +{ + int rc = -1; + char *oldmacname = NULL; + char *macstr = NULL; + char *path = NULL; + virMacAddr oldmac; + + if (virAsprintf(&path, "%s/%s", + stateDir, + linkdev) < 0) + return -1; + + if (virFileReadAll(path, VIR_MAC_STRING_BUFLEN, &macstr) < 0) + goto cleanup; + + if (virMacAddrParse(macstr, &oldmac) != 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Cannot parse MAC address from '%s'"), + oldmacname); + goto cleanup; + } + + /*reset mac and remove file-ignore results*/ + rc = virNetDevSetMAC(linkdev, &oldmac); + ignore_value(unlink(path)); + + cleanup: + VIR_FREE(macstr); + VIR_FREE(path); + return rc; +} + + #if defined(SIOCGIFMTU) && defined(HAVE_STRUCT_IFREQ) /** * virNetDevGetMTU: @@ -1838,94 +1924,10 @@ virNetDevSysfsFile(char **pf_sysfs_device_link ATTRIBUTE_UNUSED, return -1; } + #endif /* !__linux__ */ #if defined(__linux__) && defined(HAVE_LIBNL) && defined(IFLA_VF_MAX) -/** - * virNetDevReplaceMacAddress: - * @macaddress: new MAC address for interface - * @linkdev: name of interface - * @stateDir: directory to store old MAC address - * - * Returns 0 on success, -1 on failure - * - */ -static int -virNetDevReplaceMacAddress(const char *linkdev, - const virMacAddr *macaddress, - const char *stateDir) -{ - virMacAddr oldmac; - char *path = NULL; - char macstr[VIR_MAC_STRING_BUFLEN]; - int ret = -1; - - if (virNetDevGetMAC(linkdev, &oldmac) < 0) - return -1; - - if (virAsprintf(&path, "%s/%s", - stateDir, - linkdev) < 0) - return -1; - virMacAddrFormat(&oldmac, macstr); - if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) { - virReportSystemError(errno, _("Unable to preserve mac for %s"), - linkdev); - goto cleanup; - } - - if (virNetDevSetMAC(linkdev, macaddress) < 0) - goto cleanup; - - ret = 0; - cleanup: - VIR_FREE(path); - return ret; -} - -/** - * virNetDevRestoreMacAddress: - * @linkdev: name of interface - * @stateDir: directory containing old MAC address - * - * Returns 0 on success, -errno on failure. - * - */ -static int -virNetDevRestoreMacAddress(const char *linkdev, - const char *stateDir) -{ - int rc = -1; - char *oldmacname = NULL; - char *macstr = NULL; - char *path = NULL; - virMacAddr oldmac; - - if (virAsprintf(&path, "%s/%s", - stateDir, - linkdev) < 0) - return -1; - - if (virFileReadAll(path, VIR_MAC_STRING_BUFLEN, &macstr) < 0) - goto cleanup; - - if (virMacAddrParse(macstr, &oldmac) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Cannot parse MAC address from '%s'"), - oldmacname); - goto cleanup; - } - - /*reset mac and remove file-ignore results*/ - rc = virNetDevSetMAC(linkdev, &oldmac); - ignore_value(unlink(path)); - - cleanup: - VIR_FREE(macstr); - VIR_FREE(path); - return rc; -} - static struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = { [IFLA_VF_MAC] = { .type = NLA_UNSPEC, diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h index fff881ceec..a27504b8d9 100644 --- a/src/util/virnetdev.h +++ b/src/util/virnetdev.h @@ -114,6 +114,16 @@ int virNetDevGetMAC(const char *ifname, virMacAddrPtr macaddr) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; +int virNetDevReplaceMacAddress(const char *linkdev, + const virMacAddr *macaddress, + const char *stateDir) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) + ATTRIBUTE_RETURN_CHECK; + +int virNetDevRestoreMacAddress(const char *linkdev, + const char *stateDir) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; + int virNetDevSetMTU(const char *ifname, int mtu) ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; -- GitLab