Simplify GenerateName/ReserveName for netdevtap by using common
functions.
Signed-off-by: Shi Lei <shi_lei(a)massclouds.com>
---
src/libvirt_private.syms | 1 -
src/qemu/qemu_process.c | 2 +-
src/util/virnetdevtap.c | 100 ++-------------------------------------
src/util/virnetdevtap.h | 4 --
4 files changed, 5 insertions(+), 102 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index c0f50856..64ef01e1 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2689,7 +2689,6 @@ virNetDevTapGetName;
virNetDevTapGetRealDeviceName;
virNetDevTapInterfaceStats;
virNetDevTapReattachBridge;
-virNetDevTapReserveName;
# util/virnetdevveth.h
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 3b64caa6..1d54f201 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3395,7 +3395,7 @@ qemuProcessNotifyNets(virDomainDefPtr def)
case VIR_DOMAIN_NET_TYPE_BRIDGE:
case VIR_DOMAIN_NET_TYPE_NETWORK:
case VIR_DOMAIN_NET_TYPE_ETHERNET:
- virNetDevTapReserveName(net->ifname);
+ virNetDevReserveName(net->ifname);
break;
case VIR_DOMAIN_NET_TYPE_USER:
case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c
index 9354cc10..88ad3216 100644
--- a/src/util/virnetdevtap.c
+++ b/src/util/virnetdevtap.c
@@ -49,51 +49,11 @@
#if defined(WITH_GETIFADDRS) && defined(AF_LINK)
# include <ifaddrs.h>
#endif
-#include <math.h>
#define VIR_FROM_THIS VIR_FROM_NONE
VIR_LOG_INIT("util.netdevtap");
-virMutex virNetDevTapCreateMutex = VIR_MUTEX_INITIALIZER;
-static int virNetDevTapLastID = -1; /* not "unsigned" because callers use %d
*/
-
-
-/**
- * virNetDevTapReserveName:
- * @name: name of an existing tap device
- *
- * Set the value of virNetDevTapLastID to assure that any new tap
- * device created with an autogenerated name will use a number higher
- * than the number in the given tap device name.
- *
- * Returns nothing.
- */
-void
-virNetDevTapReserveName(const char *name)
-{
- unsigned int id;
- const char *idstr = NULL;
-
-
- if (STRPREFIX(name, VIR_NET_GENERATED_VNET_PREFIX)) {
-
- VIR_INFO("marking device in use: '%s'", name);
-
- idstr = name + strlen(VIR_NET_GENERATED_VNET_PREFIX);
-
- if (virStrToLong_ui(idstr, NULL, 10, &id) >= 0) {
- virMutexLock(&virNetDevTapCreateMutex);
-
- if (virNetDevTapLastID < (int)id)
- virNetDevTapLastID = id;
-
- virMutexUnlock(&virNetDevTapCreateMutex);
- }
- }
-}
-
-
/**
* virNetDevTapGetName:
* @tapfd: a tun/tap file descriptor
@@ -183,55 +143,6 @@ virNetDevTapGetRealDeviceName(char *ifname G_GNUC_UNUSED)
#ifdef TUNSETIFF
-/**
- * virNetDevTapGenerateName:
- * @ifname: pointer to pointer to string containing template
- *
- * generate a new (currently unused) name for a new tap device based
- * on the templace string in @ifname - replace %d with
- * ++virNetDevTapLastID, and keep trying new values until one is found
- * that doesn't already exist, or we've tried 10000 different
- * names. Once a usable name is found, replace the template with the
- * actual name.
- *
- * Returns 0 on success, -1 on failure.
- */
-static int
-virNetDevTapGenerateName(char **ifname)
-{
- int id;
- double maxIDd = pow(10, IFNAMSIZ - 1 - strlen(VIR_NET_GENERATED_VNET_PREFIX));
- int maxID = INT_MAX;
- int attempts = 0;
-
- if (maxIDd <= (double)INT_MAX)
- maxID = (int)maxIDd;
-
- do {
- g_autofree char *try = NULL;
-
- id = ++virNetDevTapLastID;
-
- /* reset before overflow */
- if (virNetDevTapLastID >= maxID)
- virNetDevTapLastID = -1;
-
- try = g_strdup_printf(*ifname, id);
-
- if (!virNetDevExists(try)) {
- g_free(*ifname);
- *ifname = g_steal_pointer(&try);
- return 0;
- }
- } while (++attempts < 10000);
-
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("no unused %s names available"),
- VIR_NET_GENERATED_VNET_PREFIX);
- return -1;
-}
-
-
/**
* virNetDevTapCreate:
* @ifname: the interface name
@@ -263,16 +174,14 @@ int virNetDevTapCreate(char **ifname,
int ret = -1;
int fd = -1;
- virMutexLock(&virNetDevTapCreateMutex);
-
/* if ifname is "vnet%d", then auto-generate a name for the new
* device (the kernel could do this for us, but has a bad habit of
* immediately re-using names that have just been released, which
* can lead to race conditions).
- */
- if (STREQ(*ifname, VIR_NET_GENERATED_VNET_PREFIX "%d") &&
- virNetDevTapGenerateName(ifname) < 0) {
- goto cleanup;
+ * if ifname is just a user-provided name, virNetDevGenerateName
+ * leaves it unchanged. */
+ if (virNetDevGenerateName(ifname, VIR_NET_DEV_GEN_NAME_VNET) < 0) {
+ return -1;
}
if (!tunpath)
@@ -333,7 +242,6 @@ int virNetDevTapCreate(char **ifname,
ret = 0;
cleanup:
- virMutexUnlock(&virNetDevTapCreateMutex);
if (ret < 0) {
VIR_FORCE_CLOSE(fd);
while (i--)
diff --git a/src/util/virnetdevtap.h b/src/util/virnetdevtap.h
index dea8aec3..c6bd9285 100644
--- a/src/util/virnetdevtap.h
+++ b/src/util/virnetdevtap.h
@@ -29,10 +29,6 @@
# define VIR_NETDEV_TAP_REQUIRE_MANUAL_CLEANUP 1
#endif
-void
-virNetDevTapReserveName(const char *name)
- ATTRIBUTE_NONNULL(1);
-
int virNetDevTapCreate(char **ifname,
const char *tunpath,
int *tapfd,
--
2.25.1