diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index fc470b1b88..81d4b32ad9 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -129,6 +129,21 @@ virNetworkObjGetNewDef(virNetworkObjPtr obj) } +bool +virNetworkObjIsAutostart(virNetworkObjPtr obj) +{ + return obj->autostart; +} + + +void +virNetworkObjSetAutostart(virNetworkObjPtr obj, + bool autostart) +{ + obj->autostart = autostart; +} + + pid_t virNetworkObjGetDnsmasqPid(virNetworkObjPtr obj) { @@ -973,7 +988,7 @@ virNetworkLoadConfig(virNetworkObjListPtr nets, if (!(net = virNetworkObjAssignDef(nets, def, 0))) goto error; - net->autostart = autostart; + net->autostart = (autostart == 1); VIR_FREE(configFile); VIR_FREE(autostartLink); @@ -1064,7 +1079,7 @@ virNetworkObjDeleteConfig(const char *configDir, /* Not fatal if this doesn't work */ unlink(autostartLink); - net->autostart = 0; + net->autostart = false; if (unlink(configFile) < 0) { virReportSystemError(errno, diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h index 5bb9ff8314..d95cf1ef37 100644 --- a/src/conf/virnetworkobj.h +++ b/src/conf/virnetworkobj.h @@ -32,7 +32,7 @@ struct _virNetworkObj { pid_t dnsmasqPid; pid_t radvdPid; unsigned int active : 1; - unsigned int autostart : 1; + bool autostart; unsigned int persistent : 1; virNetworkDefPtr def; /* The current definition */ @@ -60,6 +60,13 @@ virNetworkObjSetDef(virNetworkObjPtr obj, virNetworkDefPtr virNetworkObjGetNewDef(virNetworkObjPtr obj); +bool +virNetworkObjIsAutostart(virNetworkObjPtr obj); + +void +virNetworkObjSetAutostart(virNetworkObjPtr obj, + bool autostart); + virMacMapPtr virNetworkObjGetMacMap(virNetworkObjPtr obj); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 635ba3afd7..5752062c4c 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -950,6 +950,7 @@ virNetworkObjGetMacMap; virNetworkObjGetNewDef; virNetworkObjGetPersistentDef; virNetworkObjGetRadvdPid; +virNetworkObjIsAutostart; virNetworkObjListExport; virNetworkObjListForEach; virNetworkObjListGetNames; @@ -964,6 +965,7 @@ virNetworkObjNew; virNetworkObjRemoveInactive; virNetworkObjReplacePersistentDef; virNetworkObjSaveStatus; +virNetworkObjSetAutostart; virNetworkObjSetDef; virNetworkObjSetDefTransient; virNetworkObjSetDnsmasqPid; diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index b0f2b10c17..c714e0af40 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -526,7 +526,7 @@ networkAutostartConfig(virNetworkObjPtr obj, int ret = -1; virObjectLock(obj); - if (obj->autostart && + if (virNetworkObjIsAutostart(obj) && !virNetworkObjIsActive(obj) && networkStartNetwork(driver, obj) < 0) goto cleanup; @@ -3969,7 +3969,7 @@ networkGetAutostart(virNetworkPtr net, if (virNetworkGetAutostartEnsureACL(net->conn, virNetworkObjGetDef(obj)) < 0) goto cleanup; - *autostart = obj->autostart; + *autostart = virNetworkObjIsAutostart(obj) ? 1 : 0; ret = 0; cleanup: @@ -3986,6 +3986,8 @@ networkSetAutostart(virNetworkPtr net, virNetworkObjPtr obj; virNetworkDefPtr def; char *configFile = NULL, *autostartLink = NULL; + bool new_autostart; + bool cur_autostart; int ret = -1; if (!(obj = networkObjFromNetwork(net))) @@ -4001,9 +4003,9 @@ networkSetAutostart(virNetworkPtr net, goto cleanup; } - autostart = (autostart != 0); - - if (obj->autostart != autostart) { + new_autostart = (autostart != 0); + cur_autostart = virNetworkObjIsAutostart(obj); + if (cur_autostart != new_autostart) { if ((configFile = virNetworkConfigFile(driver->networkConfigDir, def->name)) == NULL) goto cleanup; @@ -4011,7 +4013,7 @@ networkSetAutostart(virNetworkPtr net, def->name)) == NULL) goto cleanup; - if (autostart) { + if (new_autostart) { if (virFileMakePath(driver->networkAutostartDir) < 0) { virReportSystemError(errno, _("cannot create autostart directory '%s'"), @@ -4034,8 +4036,9 @@ networkSetAutostart(virNetworkPtr net, } } - obj->autostart = autostart; + virNetworkObjSetAutostart(obj, new_autostart); } + ret = 0; cleanup: diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 6357411589..02b7f8cafd 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -3647,7 +3647,7 @@ testNetworkGetAutostart(virNetworkPtr net, if (!(obj = testNetworkObjFindByName(privconn, net->name))) goto cleanup; - *autostart = obj->autostart; + *autostart = virNetworkObjIsAutostart(obj) ? 1 : 0; ret = 0; cleanup: @@ -3662,12 +3662,14 @@ testNetworkSetAutostart(virNetworkPtr net, { testDriverPtr privconn = net->conn->privateData; virNetworkObjPtr obj; + bool new_autostart = (autostart != 0); int ret = -1; if (!(obj = testNetworkObjFindByName(privconn, net->name))) goto cleanup; - obj->autostart = autostart ? 1 : 0; + virNetworkObjSetAutostart(obj, new_autostart); + ret = 0; cleanup: