mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-04-01 20:05:19 +00:00
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.
This commit is contained in:
parent
e689300770
commit
3ce08fab84
@ -1769,7 +1769,9 @@ virNetDevGetVirtualFunctions;
|
||||
virNetDevGetVLanID;
|
||||
virNetDevIsVirtualFunction;
|
||||
virNetDevLinkDump;
|
||||
virNetDevReplaceMacAddress;
|
||||
virNetDevReplaceNetConfig;
|
||||
virNetDevRestoreMacAddress;
|
||||
virNetDevRestoreNetConfig;
|
||||
virNetDevRxFilterFree;
|
||||
virNetDevRxFilterModeTypeFromString;
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user