In preparation for having a private virNetworkObj - let's create/move some
API's that handle the obj->macmap. The API's will be renamed to have a
virNetworkObj prefix to follow conventions and the arguments slightly
modified to accept what's necessary to complete their task.
Signed-off-by: John Ferlan <jferlan@redhat.com>
---
src/conf/virnetworkobj.c | 97 ++++++++++++++++++++++++++++++++++++++++++
src/conf/virnetworkobj.h | 26 ++++++++++++
src/libvirt_private.syms | 6 +++
src/network/bridge_driver.c | 101 ++++++++------------------------------------
4 files changed, 147 insertions(+), 83 deletions(-)
diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c
index 88e42b5..562fb91 100644
--- a/src/conf/virnetworkobj.c
+++ b/src/conf/virnetworkobj.c
@@ -107,6 +107,103 @@ virNetworkObjEndAPI(virNetworkObjPtr *net)
}
+virMacMapPtr
+virNetworkObjGetMacMap(virNetworkObjPtr obj)
+{
+ return obj->macmap;
+}
+
+
+void
+virNetworkObjSetMacMap(virNetworkObjPtr obj,
+ virMacMapPtr macmap)
+{
+ obj->macmap = macmap;
+}
+
+
+void
+virNetworkObjUnrefMacMap(virNetworkObjPtr obj)
+{
+ if (!virObjectUnref(obj->macmap))
+ obj->macmap = NULL;
+}
+
+
+char *
+virNetworkObjMacMgrFileName(const char *dnsmasqStateDir,
+ const char *bridge)
+{
+ char *filename;
+
+ ignore_value(virAsprintf(&filename, "%s/%s.macs", dnsmasqStateDir, bridge));
+
+ return filename;
+}
+
+
+int
+virNetworkObjMacMgrAdd(virNetworkObjPtr obj,
+ const char *dnsmasqStateDir,
+ const char *domain,
+ const virMacAddr *mac)
+{
+ char macStr[VIR_MAC_STRING_BUFLEN];
+ char *file = NULL;
+ int ret = -1;
+
+ if (!obj->macmap)
+ return 0;
+
+ virMacAddrFormat(mac, macStr);
+
+ if (!(file = virNetworkObjMacMgrFileName(dnsmasqStateDir, obj->def->bridge)))
+ goto cleanup;
+
+ if (virMacMapAdd(obj->macmap, domain, macStr) < 0)
+ goto cleanup;
+
+ if (virMacMapWriteFile(obj->macmap, file) < 0)
+ goto cleanup;
+
+ ret = 0;
+ cleanup:
+ VIR_FREE(file);
+ return ret;
+}
+
+
+int
+virNetworkObjMacMgrDel(virNetworkObjPtr obj,
+ const char *dnsmasqStateDir,
+ const char *domain,
+ const virMacAddr *mac)
+{
+ char macStr[VIR_MAC_STRING_BUFLEN];
+ char *file = NULL;
+ int ret = -1;
+
+ if (!obj->macmap)
+ return 0;
+
+ virMacAddrFormat(mac, macStr);
+
+ if (!(file = virNetworkObjMacMgrFileName(dnsmasqStateDir, obj->def->bridge)))
+ goto cleanup;
+
+ if (virMacMapRemove(obj->macmap, domain, macStr) < 0)
+ goto cleanup;
+
+ if (virMacMapWriteFile(obj->macmap, file) < 0)
+ goto cleanup;
+
+ ret = 0;
+ cleanup:
+ VIR_FREE(file);
+ return ret;
+}
+
+
virNetworkObjListPtr
virNetworkObjListNew(void)
{
diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h
index 8090c2e..da12848 100644
--- a/src/conf/virnetworkobj.h
+++ b/src/conf/virnetworkobj.h
@@ -50,6 +50,32 @@ struct _virNetworkObj {
virNetworkObjPtr
virNetworkObjNew(void);
+virMacMapPtr
+virNetworkObjGetMacMap(virNetworkObjPtr obj);
+
+void
+virNetworkObjSetMacMap(virNetworkObjPtr obj,
+ virMacMapPtr macmap);
+
+void
+virNetworkObjUnrefMacMap(virNetworkObjPtr obj);
+
+char *
+virNetworkObjMacMgrFileName(const char *dnsmasqStateDir,
+ const char *bridge);
+
+int
+virNetworkObjMacMgrAdd(virNetworkObjPtr obj,
+ const char *dnsmasqStateDir,
+ const char *domain,
+ const virMacAddr *mac);
+
+int
+virNetworkObjMacMgrDel(virNetworkObjPtr obj,
+ const char *dnsmasqStateDir,
+ const char *domain,
+ const virMacAddr *mac);
+
void
virNetworkObjEndAPI(virNetworkObjPtr *net);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index d361454..1907afe 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -931,6 +931,7 @@ virNetworkObjFindByName;
virNetworkObjFindByNameLocked;
virNetworkObjFindByUUID;
virNetworkObjFindByUUIDLocked;
+virNetworkObjGetMacMap;
virNetworkObjGetPersistentDef;
virNetworkObjListExport;
virNetworkObjListForEach;
@@ -940,12 +941,17 @@ virNetworkObjListNumOfNetworks;
virNetworkObjListPrune;
virNetworkObjLoadAllConfigs;
virNetworkObjLoadAllState;
+virNetworkObjMacMgrAdd;
+virNetworkObjMacMgrDel;
+virNetworkObjMacMgrFileName;
virNetworkObjNew;
virNetworkObjRemoveInactive;
virNetworkObjReplacePersistentDef;
virNetworkObjSaveStatus;
virNetworkObjSetDefTransient;
+virNetworkObjSetMacMap;
virNetworkObjTaint;
+virNetworkObjUnrefMacMap;
virNetworkObjUnsetDefTransient;
virNetworkObjUpdate;
virNetworkObjUpdateAssignDef;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index d888391..d8d3782 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -322,18 +322,6 @@ networkRadvdConfigFileName(virNetworkDriverStatePtr driver,
}
-static char *
-networkMacMgrFileName(virNetworkDriverStatePtr driver,
- const char *bridge)
-{
- char *filename;
-
- ignore_value(virAsprintf(&filename, "%s/%s.macs",
- driver->dnsmasqStateDir, bridge));
- return filename;
-}
-
-
/* do needed cleanup steps and remove the network from the list */
static int
networkRemoveInactive(virNetworkDriverStatePtr driver,
@@ -375,7 +363,8 @@ networkRemoveInactive(virNetworkDriverStatePtr driver,
if (!(statusfile = virNetworkConfigFile(driver->stateDir, def->name)))
goto cleanup;
- if (!(macMapFile = networkMacMgrFileName(driver, def->bridge)))
+ if (!(macMapFile = virNetworkObjMacMgrFileName(driver->dnsmasqStateDir,
+ def->bridge)))
goto cleanup;
/* dnsmasq */
@@ -412,68 +401,6 @@ networkRemoveInactive(virNetworkDriverStatePtr driver,
}
-static int
-networkMacMgrAdd(virNetworkDriverStatePtr driver,
- virNetworkObjPtr obj,
- const char *domain,
- const virMacAddr *mac)
-{
- char macStr[VIR_MAC_STRING_BUFLEN];
- char *file = NULL;
- int ret = -1;
-
- if (!obj->macmap)
- return 0;
-
- virMacAddrFormat(mac, macStr);
-
- if (!(file = networkMacMgrFileName(driver, obj->def->bridge)))
- goto cleanup;
-
- if (virMacMapAdd(obj->macmap, domain, macStr) < 0)
- goto cleanup;
-
- if (virMacMapWriteFile(obj->macmap, file) < 0)
- goto cleanup;
-
- ret = 0;
- cleanup:
- VIR_FREE(file);
- return ret;
-}
-
-
-static int
-networkMacMgrDel(virNetworkDriverStatePtr driver,
- virNetworkObjPtr obj,
- const char *domain,
- const virMacAddr *mac)
-{
- char macStr[VIR_MAC_STRING_BUFLEN];
- char *file = NULL;
- int ret = -1;
-
- if (!obj->macmap)
- return 0;
-
- virMacAddrFormat(mac, macStr);
-
- if (!(file = networkMacMgrFileName(driver, obj->def->bridge)))
- goto cleanup;
-
- if (virMacMapRemove(obj->macmap, domain, macStr) < 0)
- goto cleanup;
-
- if (virMacMapWriteFile(obj->macmap, file) < 0)
- goto cleanup;
-
- ret = 0;
- cleanup:
- VIR_FREE(file);
- return ret;
-}
-
-
static char *
networkBridgeDummyNicName(const char *brname)
{
@@ -505,6 +432,7 @@ networkUpdateState(virNetworkObjPtr obj,
{
virNetworkDriverStatePtr driver = opaque;
dnsmasqCapsPtr dnsmasq_caps = networkGetDnsmasqCaps(driver);
+ virMacMapPtr macmap;
char *macMapFile = NULL;
int ret = -1;
@@ -523,12 +451,15 @@ networkUpdateState(virNetworkObjPtr obj,
if (!(obj->def->bridge && virNetDevExists(obj->def->bridge) == 1))
obj->active = 0;
- if (!(macMapFile = networkMacMgrFileName(driver, obj->def->bridge)))
+ if (!(macMapFile = virNetworkObjMacMgrFileName(driver->dnsmasqStateDir,
+ obj->def->bridge)))
goto cleanup;
- if (!(obj->macmap = virMacMapNew(macMapFile)))
+ if (!(macmap = virMacMapNew(macMapFile)))
goto cleanup;
+ virNetworkObjSetMacMap(obj, macmap);
+
break;
case VIR_NETWORK_FORWARD_BRIDGE:
@@ -2332,6 +2263,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver,
virNetworkIPDefPtr ipdef;
virNetDevIPRoutePtr routedef;
char *macTapIfName = NULL;
+ virMacMapPtr macmap;
char *macMapFile = NULL;
int tapfd = -1;
@@ -2380,10 +2312,13 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver,
}
}
- if (!(macMapFile = networkMacMgrFileName(driver, obj->def->bridge)) ||
- !(obj->macmap = virMacMapNew(macMapFile)))
+ if (!(macMapFile = virNetworkObjMacMgrFileName(driver->dnsmasqStateDir,
+ obj->def->bridge)) ||
+ !(macmap = virMacMapNew(macMapFile)))
goto err1;
+ virNetworkObjSetMacMap(obj, macmap);
+
/* Set bridge options */
/* delay is configured in seconds, but virNetDevBridgeSetSTPDelay
@@ -2546,8 +2481,7 @@ networkShutdownNetworkVirtual(virNetworkDriverStatePtr driver,
if (obj->def->bandwidth)
virNetDevBandwidthClear(obj->def->bridge);
- if (!virObjectUnref(obj->macmap))
- obj->macmap = NULL;
+ virNetworkObjUnrefMacMap(obj);
if (obj->radvdPid > 0) {
char *radvdpidbase;
@@ -4663,7 +4597,8 @@ networkAllocateActualDevice(virDomainDefPtr dom,
}
}
- if (networkMacMgrAdd(driver, obj, dom->name, &iface->mac) < 0)
+ if (virNetworkObjMacMgrAdd(obj, driver->dnsmasqStateDir,
+ dom->name, &iface->mac) < 0)
goto error;
if (virNetDevVPortProfileCheckComplete(virtport, true) < 0)
@@ -5085,7 +5020,7 @@ networkReleaseActualDevice(virDomainDefPtr dom,
}
success:
- networkMacMgrDel(driver, obj, dom->name, &iface->mac);
+ virNetworkObjMacMgrDel(obj, driver->dnsmasqStateDir, dom->name, &iface->mac);
if (iface->data.network.actual) {
netdef->connections--;
--
2.9.3
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Fri, May 19, 2017 at 09:03:13AM -0400, John Ferlan wrote:
> In preparation for having a private virNetworkObj - let's create/move some
> API's that handle the obj->macmap. The API's will be renamed to have a
> virNetworkObj prefix to follow conventions and the arguments slightly
> modified to accept what's necessary to complete their task.
>
> Signed-off-by: John Ferlan <jferlan@redhat.com>
> ---
> src/conf/virnetworkobj.c | 97 ++++++++++++++++++++++++++++++++++++++++++
> src/conf/virnetworkobj.h | 26 ++++++++++++
> src/libvirt_private.syms | 6 +++
> src/network/bridge_driver.c | 101 ++++++++------------------------------------
> 4 files changed, 147 insertions(+), 83 deletions(-)
>
> diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c
> index 88e42b5..562fb91 100644
> --- a/src/conf/virnetworkobj.c
> +++ b/src/conf/virnetworkobj.c
> @@ -107,6 +107,103 @@ virNetworkObjEndAPI(virNetworkObjPtr *net)
> }
>
>
> +virMacMapPtr
> +virNetworkObjGetMacMap(virNetworkObjPtr obj)
> +{
> + return obj->macmap;
> +}
> +
> +
> +void
> +virNetworkObjSetMacMap(virNetworkObjPtr obj,
> + virMacMapPtr macmap)
> +{
> + obj->macmap = macmap;
> +}
> +
> +
> +void
> +virNetworkObjUnrefMacMap(virNetworkObjPtr obj)
> +{
> + if (!virObjectUnref(obj->macmap))
> + obj->macmap = NULL;
> +}
You are just moving the code so it would be nice as a followup to fix
this function. It seems kind of wrong to set obj->macmap to NULL only
if it was the last reference. We should always set it to NULL because
the virNetworkObjDispose() would call virObjectUnref() again. Currently
it doesn't hit any issue, but if someone gets the macmap by using
virNetworkObjGetMacMap() and creates its own reference, the
virNetworkObjDispose() would remove the reference and possible free the
macmap which would lead to crash.
> +
> +
> +char *
> +virNetworkObjMacMgrFileName(const char *dnsmasqStateDir,
> + const char *bridge)
> +{
> + char *filename;
> +
> + ignore_value(virAsprintf(&filename, "%s/%s.macs", dnsmasqStateDir, bridge));
> +
> + return filename;
> +}
This function doesn't have anything in common with the virNetworkObj so
it should be moved into src/util/virmacmap.c since the output is used
only by virMacMap* functions from that module.
The rest of the patch seems to be correct.
Pavel
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
In preparation for having a private virNetworkObj - let's create/move some
API's that handle the obj->macmap. The API's will be renamed to have a
virNetworkObj prefix to follow conventions and the arguments slightly
modified to accept what's necessary to complete their task.
Signed-off-by: John Ferlan <jferlan@redhat.com>
---
NB: From review - this is the updated changes with the virMacMapFileName
already moved.
src/conf/virnetworkobj.c | 85 +++++++++++++++++++++++++++++++++++++++++++++
src/conf/virnetworkobj.h | 22 ++++++++++++
src/libvirt_private.syms | 5 +++
src/network/bridge_driver.c | 80 +++++++-----------------------------------
4 files changed, 124 insertions(+), 68 deletions(-)
diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c
index ccde72e..5578ac3 100644
--- a/src/conf/virnetworkobj.c
+++ b/src/conf/virnetworkobj.c
@@ -107,6 +107,91 @@ virNetworkObjEndAPI(virNetworkObjPtr *net)
}
+virMacMapPtr
+virNetworkObjGetMacMap(virNetworkObjPtr obj)
+{
+ return obj->macmap;
+}
+
+
+void
+virNetworkObjSetMacMap(virNetworkObjPtr obj,
+ virMacMapPtr macmap)
+{
+ obj->macmap = macmap;
+}
+
+
+void
+virNetworkObjUnrefMacMap(virNetworkObjPtr obj)
+{
+ if (!virObjectUnref(obj->macmap))
+ obj->macmap = NULL;
+}
+
+
+int
+virNetworkObjMacMgrAdd(virNetworkObjPtr obj,
+ const char *dnsmasqStateDir,
+ const char *domain,
+ const virMacAddr *mac)
+{
+ char macStr[VIR_MAC_STRING_BUFLEN];
+ char *file = NULL;
+ int ret = -1;
+
+ if (!obj->macmap)
+ return 0;
+
+ virMacAddrFormat(mac, macStr);
+
+ if (!(file = virMacMapFileName(dnsmasqStateDir, obj->def->bridge)))
+ goto cleanup;
+
+ if (virMacMapAdd(obj->macmap, domain, macStr) < 0)
+ goto cleanup;
+
+ if (virMacMapWriteFile(obj->macmap, file) < 0)
+ goto cleanup;
+
+ ret = 0;
+ cleanup:
+ VIR_FREE(file);
+ return ret;
+}
+
+
+int
+virNetworkObjMacMgrDel(virNetworkObjPtr obj,
+ const char *dnsmasqStateDir,
+ const char *domain,
+ const virMacAddr *mac)
+{
+ char macStr[VIR_MAC_STRING_BUFLEN];
+ char *file = NULL;
+ int ret = -1;
+
+ if (!obj->macmap)
+ return 0;
+
+ virMacAddrFormat(mac, macStr);
+
+ if (!(file = virMacMapFileName(dnsmasqStateDir, obj->def->bridge)))
+ goto cleanup;
+
+ if (virMacMapRemove(obj->macmap, domain, macStr) < 0)
+ goto cleanup;
+
+ if (virMacMapWriteFile(obj->macmap, file) < 0)
+ goto cleanup;
+
+ ret = 0;
+ cleanup:
+ VIR_FREE(file);
+ return ret;
+}
+
+
virNetworkObjListPtr
virNetworkObjListNew(void)
{
diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h
index 8090c2e..5c3d9a0 100644
--- a/src/conf/virnetworkobj.h
+++ b/src/conf/virnetworkobj.h
@@ -50,6 +50,28 @@ struct _virNetworkObj {
virNetworkObjPtr
virNetworkObjNew(void);
+virMacMapPtr
+virNetworkObjGetMacMap(virNetworkObjPtr obj);
+
+void
+virNetworkObjSetMacMap(virNetworkObjPtr obj,
+ virMacMapPtr macmap);
+
+void
+virNetworkObjUnrefMacMap(virNetworkObjPtr obj);
+
+int
+virNetworkObjMacMgrAdd(virNetworkObjPtr obj,
+ const char *dnsmasqStateDir,
+ const char *domain,
+ const virMacAddr *mac);
+
+int
+virNetworkObjMacMgrDel(virNetworkObjPtr obj,
+ const char *dnsmasqStateDir,
+ const char *domain,
+ const virMacAddr *mac);
+
void
virNetworkObjEndAPI(virNetworkObjPtr *net);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 6f4667f..0eb5749 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -943,6 +943,7 @@ virNetworkObjFindByName;
virNetworkObjFindByNameLocked;
virNetworkObjFindByUUID;
virNetworkObjFindByUUIDLocked;
+virNetworkObjGetMacMap;
virNetworkObjGetPersistentDef;
virNetworkObjListExport;
virNetworkObjListForEach;
@@ -952,12 +953,16 @@ virNetworkObjListNumOfNetworks;
virNetworkObjListPrune;
virNetworkObjLoadAllConfigs;
virNetworkObjLoadAllState;
+virNetworkObjMacMgrAdd;
+virNetworkObjMacMgrDel;
virNetworkObjNew;
virNetworkObjRemoveInactive;
virNetworkObjReplacePersistentDef;
virNetworkObjSaveStatus;
virNetworkObjSetDefTransient;
+virNetworkObjSetMacMap;
virNetworkObjTaint;
+virNetworkObjUnrefMacMap;
virNetworkObjUnsetDefTransient;
virNetworkObjUpdate;
virNetworkObjUpdateAssignDef;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index de2e83c..a730742 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -400,68 +400,6 @@ networkRemoveInactive(virNetworkDriverStatePtr driver,
}
-static int
-networkMacMgrAdd(virNetworkDriverStatePtr driver,
- virNetworkObjPtr obj,
- const char *domain,
- const virMacAddr *mac)
-{
- char macStr[VIR_MAC_STRING_BUFLEN];
- char *file = NULL;
- int ret = -1;
-
- if (!obj->macmap)
- return 0;
-
- virMacAddrFormat(mac, macStr);
-
- if (!(file = virMacMapFileName(driver->dnsmasqStateDir, obj->def->bridge)))
- goto cleanup;
-
- if (virMacMapAdd(obj->macmap, domain, macStr) < 0)
- goto cleanup;
-
- if (virMacMapWriteFile(obj->macmap, file) < 0)
- goto cleanup;
-
- ret = 0;
- cleanup:
- VIR_FREE(file);
- return ret;
-}
-
-
-static int
-networkMacMgrDel(virNetworkDriverStatePtr driver,
- virNetworkObjPtr obj,
- const char *domain,
- const virMacAddr *mac)
-{
- char macStr[VIR_MAC_STRING_BUFLEN];
- char *file = NULL;
- int ret = -1;
-
- if (!obj->macmap)
- return 0;
-
- virMacAddrFormat(mac, macStr);
-
- if (!(file = virMacMapFileName(driver->dnsmasqStateDir, obj->def->bridge)))
- goto cleanup;
-
- if (virMacMapRemove(obj->macmap, domain, macStr) < 0)
- goto cleanup;
-
- if (virMacMapWriteFile(obj->macmap, file) < 0)
- goto cleanup;
-
- ret = 0;
- cleanup:
- VIR_FREE(file);
- return ret;
-}
-
-
static char *
networkBridgeDummyNicName(const char *brname)
{
@@ -493,6 +431,7 @@ networkUpdateState(virNetworkObjPtr obj,
{
virNetworkDriverStatePtr driver = opaque;
dnsmasqCapsPtr dnsmasq_caps = networkGetDnsmasqCaps(driver);
+ virMacMapPtr macmap;
char *macMapFile = NULL;
int ret = -1;
@@ -515,9 +454,11 @@ networkUpdateState(virNetworkObjPtr obj,
obj->def->bridge)))
goto cleanup;
- if (!(obj->macmap = virMacMapNew(macMapFile)))
+ if (!(macmap = virMacMapNew(macMapFile)))
goto cleanup;
+ virNetworkObjSetMacMap(obj, macmap);
+
break;
case VIR_NETWORK_FORWARD_BRIDGE:
@@ -2321,6 +2262,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver,
virNetworkIPDefPtr ipdef;
virNetDevIPRoutePtr routedef;
char *macTapIfName = NULL;
+ virMacMapPtr macmap;
char *macMapFile = NULL;
int tapfd = -1;
@@ -2371,9 +2313,11 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver,
if (!(macMapFile = virMacMapFileName(driver->dnsmasqStateDir,
obj->def->bridge)) ||
- !(obj->macmap = virMacMapNew(macMapFile)))
+ !(macmap = virMacMapNew(macMapFile)))
goto err1;
+ virNetworkObjSetMacMap(obj, macmap);
+
/* Set bridge options */
/* delay is configured in seconds, but virNetDevBridgeSetSTPDelay
@@ -2536,8 +2480,7 @@ networkShutdownNetworkVirtual(virNetworkDriverStatePtr driver,
if (obj->def->bandwidth)
virNetDevBandwidthClear(obj->def->bridge);
- if (!virObjectUnref(obj->macmap))
- obj->macmap = NULL;
+ virNetworkObjUnrefMacMap(obj);
if (obj->radvdPid > 0) {
char *radvdpidbase;
@@ -4653,7 +4596,8 @@ networkAllocateActualDevice(virDomainDefPtr dom,
}
}
- if (networkMacMgrAdd(driver, obj, dom->name, &iface->mac) < 0)
+ if (virNetworkObjMacMgrAdd(obj, driver->dnsmasqStateDir,
+ dom->name, &iface->mac) < 0)
goto error;
if (virNetDevVPortProfileCheckComplete(virtport, true) < 0)
@@ -5075,7 +5019,7 @@ networkReleaseActualDevice(virDomainDefPtr dom,
}
success:
- networkMacMgrDel(driver, obj, dom->name, &iface->mac);
+ virNetworkObjMacMgrDel(obj, driver->dnsmasqStateDir, dom->name, &iface->mac);
if (iface->data.network.actual) {
netdef->connections--;
--
2.9.4
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Move networkMacMgrFileName into src/util/virmacmap.c and rename to
virMacMapFileName. We're about to move some more MacMgr processing
files into virnetworkobj and it doesn't make sense to have this helper
in the driver or in virnetworkobj.
Signed-off-by: John Ferlan <jferlan@redhat.com>
---
NB: From review - splitting patch 5 into 3 parts. This is just the
dealing with the file name patch.
src/libvirt_private.syms | 1 +
src/network/bridge_driver.c | 24 +++++++-----------------
src/util/virmacmap.c | 12 ++++++++++++
src/util/virmacmap.h | 4 ++++
4 files changed, 24 insertions(+), 17 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index d984176..6f4667f 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2057,6 +2057,7 @@ virMacAddrSetRaw;
# util/virmacmap.h
virMacMapAdd;
virMacMapDumpStr;
+virMacMapFileName;
virMacMapLookup;
virMacMapNew;
virMacMapRemove;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index fd0e6ca..de2e83c 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -322,18 +322,6 @@ networkRadvdConfigFileName(virNetworkDriverStatePtr driver,
}
-static char *
-networkMacMgrFileName(virNetworkDriverStatePtr driver,
- const char *bridge)
-{
- char *filename;
-
- ignore_value(virAsprintf(&filename, "%s/%s.macs",
- driver->dnsmasqStateDir, bridge));
- return filename;
-}
-
-
/* do needed cleanup steps and remove the network from the list */
static int
networkRemoveInactive(virNetworkDriverStatePtr driver,
@@ -375,7 +363,7 @@ networkRemoveInactive(virNetworkDriverStatePtr driver,
if (!(statusfile = virNetworkConfigFile(driver->stateDir, def->name)))
goto cleanup;
- if (!(macMapFile = networkMacMgrFileName(driver, def->bridge)))
+ if (!(macMapFile = virMacMapFileName(driver->dnsmasqStateDir, def->bridge)))
goto cleanup;
/* dnsmasq */
@@ -427,7 +415,7 @@ networkMacMgrAdd(virNetworkDriverStatePtr driver,
virMacAddrFormat(mac, macStr);
- if (!(file = networkMacMgrFileName(driver, obj->def->bridge)))
+ if (!(file = virMacMapFileName(driver->dnsmasqStateDir, obj->def->bridge)))
goto cleanup;
if (virMacMapAdd(obj->macmap, domain, macStr) < 0)
@@ -458,7 +446,7 @@ networkMacMgrDel(virNetworkDriverStatePtr driver,
virMacAddrFormat(mac, macStr);
- if (!(file = networkMacMgrFileName(driver, obj->def->bridge)))
+ if (!(file = virMacMapFileName(driver->dnsmasqStateDir, obj->def->bridge)))
goto cleanup;
if (virMacMapRemove(obj->macmap, domain, macStr) < 0)
@@ -523,7 +511,8 @@ networkUpdateState(virNetworkObjPtr obj,
if (!(obj->def->bridge && virNetDevExists(obj->def->bridge) == 1))
obj->active = 0;
- if (!(macMapFile = networkMacMgrFileName(driver, obj->def->bridge)))
+ if (!(macMapFile = virMacMapFileName(driver->dnsmasqStateDir,
+ obj->def->bridge)))
goto cleanup;
if (!(obj->macmap = virMacMapNew(macMapFile)))
@@ -2380,7 +2369,8 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver,
}
}
- if (!(macMapFile = networkMacMgrFileName(driver, obj->def->bridge)) ||
+ if (!(macMapFile = virMacMapFileName(driver->dnsmasqStateDir,
+ obj->def->bridge)) ||
!(obj->macmap = virMacMapNew(macMapFile)))
goto err1;
diff --git a/src/util/virmacmap.c b/src/util/virmacmap.c
index a9697e3..42890ba 100644
--- a/src/util/virmacmap.c
+++ b/src/util/virmacmap.c
@@ -294,6 +294,18 @@ virMacMapWriteFileLocked(virMacMapPtr mgr,
}
+char *
+virMacMapFileName(const char *dnsmasqStateDir,
+ const char *bridge)
+{
+ char *filename;
+
+ ignore_value(virAsprintf(&filename, "%s/%s.macs", dnsmasqStateDir, bridge));
+
+ return filename;
+}
+
+
#define VIR_MAC_HASH_TABLE_SIZE 10
virMacMapPtr
diff --git a/src/util/virmacmap.h b/src/util/virmacmap.h
index 82da833..e6f754e 100644
--- a/src/util/virmacmap.h
+++ b/src/util/virmacmap.h
@@ -27,6 +27,10 @@
typedef struct virMacMap virMacMap;
typedef virMacMap *virMacMapPtr;
+char *
+virMacMapFileName(const char *dnsmasqStateDir,
+ const char *bridge);
+
virMacMapPtr virMacMapNew(const char *file);
int virMacMapAdd(virMacMapPtr mgr,
--
2.9.4
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Since we can only ever have one reference to obj->macmap, rather
than only clearing obj->macmap during virNetworkObjUnrefMacMap
(e.g. virtual network from networkShutdownNetwork), let's just
unconditionally clear the obj->macmap to ensure that some future
change that created it's own reference to obj->macmap wouldn't
have that reference disappear if virNetworkObjDispose got called.
Signed-off-by: John Ferlan <jferlan@redhat.com>
---
src/conf/virnetworkobj.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c
index 5578ac3..bb7225c 100644
--- a/src/conf/virnetworkobj.c
+++ b/src/conf/virnetworkobj.c
@@ -125,8 +125,8 @@ virNetworkObjSetMacMap(virNetworkObjPtr obj,
void
virNetworkObjUnrefMacMap(virNetworkObjPtr obj)
{
- if (!virObjectUnref(obj->macmap))
- obj->macmap = NULL;
+ virObjectUnref(obj->macmap);
+ obj->macmap = NULL;
}
--
2.9.4
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2025 Red Hat, Inc.