[libvirt] [PATCH 10/16] network: Introduce virNetworkObj{Get|Set}Autostart

Pavel Hrdina phrdina at redhat.com
Mon Jul 24 11:25:55 UTC 2017


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 at 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>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170724/ab33e54f/attachment-0001.sig>


More information about the libvir-list mailing list