On Fri, May 19, 2017 at 09:03:18AM -0400, John Ferlan wrote:
In preparation for privatizing the virNetworkObj structure, move the
guts
of the Get/Set Autostart from the driver into virnetworkobj. Alter the driver
to make the calls to the networkobj code.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/virnetworkobj.c | 74 +++++++++++++++++++++++++++++++++++++++++++++
src/conf/virnetworkobj.h | 11 ++++++-
src/libvirt_private.syms | 2 ++
src/network/bridge_driver.c | 53 ++++----------------------------
src/test/test_driver.c | 6 ++--
5 files changed, 96 insertions(+), 50 deletions(-)
diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c
index 488fffd..a21aa26 100644
--- a/src/conf/virnetworkobj.c
+++ b/src/conf/virnetworkobj.c
@@ -121,6 +121,80 @@ virNetworkObjGetNewDef(virNetworkObjPtr obj)
}
+int
+virNetworkObjGetAutostart(virNetworkObjPtr obj)
+{
+ return obj->autostart;
+}
+
+
+int
+virNetworkObjSetAutostart(virNetworkObjPtr obj,
+ const char *configDir,
+ const char *autostartDir,
+ int autostart)
+{
+ virNetworkDefPtr def = obj->def;
+ char *configFile = NULL;
+ char *autostartLink = NULL;
+ int ret = -1;
+
+ if (!obj->persistent) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("cannot set autostart for transient network
'%s'"),
+ def->name);
+ return -1;
+ }
+
+ autostart = (autostart != 0);
+
+ if (obj->autostart != autostart) {
+ if (configDir && autostartDir) {
+ if (!(configFile = virNetworkConfigFile(configDir, def->name)))
+ goto cleanup;
+
+ if (!(autostartLink = virNetworkConfigFile(autostartDir,
+ def->name)))
+ goto cleanup;
+
+ if (autostart) {
+ if (virFileMakePath(autostartDir) < 0) {
+ virReportSystemError(errno,
+ _("cannot create autostart dir
'%s'"),
+ autostartDir);
+ goto cleanup;
+ }
+
+ if (symlink(configFile, autostartLink) < 0) {
+ virReportSystemError(errno,
+ _("failed to create symlink '%s'
"
+ "to '%s'"),
+ autostartLink, configFile);
+ goto cleanup;
+ }
+ } else {
+ if (unlink(autostartLink) < 0 &&
+ errno != ENOENT && errno != ENOTDIR) {
+ virReportSystemError(errno,
+ _("failed to delete symlink
'%s'"),
+ autostartLink);
+ goto cleanup;
+ }
+ }
+ }
+
+ obj->autostart = autostart;
+ }
+
+ ret = 0;
+
+ cleanup:
+ VIR_FREE(configFile);
+ VIR_FREE(autostartLink);
+ return ret;
+}
The same review as for [1], keep the file operations in driver code.
Pavel
[1] <
https://www.redhat.com/archives/libvir-list/2017-July/msg00359.html>