Switch network objects to array instead of linked list

This commit is contained in:
Daniel P. Berrange 2008-10-10 14:50:26 +00:00
parent 4789154063
commit dd48e929c7
5 changed files with 151 additions and 158 deletions

View File

@ -1,3 +1,9 @@
Fri Oct 10 15:39:00 BST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/network_conf.c, src/network_conf.h, src/network_driver.c,
src/test.c: Switch to using array instead of linked list for
network objects
Fri Oct 10 15:19:00 BST 2008 Daniel P. Berrange <berrange@redhat.com> Fri Oct 10 15:19:00 BST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/domain_conf.c, src/domain_conf.h: Switch to using * src/domain_conf.c, src/domain_conf.h: Switch to using

View File

@ -52,28 +52,26 @@ VIR_ENUM_IMPL(virNetworkForward,
__virReportErrorHelper(conn, VIR_FROM_NETWORK, code, __FILE__, \ __virReportErrorHelper(conn, VIR_FROM_NETWORK, code, __FILE__, \
__FUNCTION__, __LINE__, fmt) __FUNCTION__, __LINE__, fmt)
virNetworkObjPtr virNetworkFindByUUID(const virNetworkObjPtr nets, virNetworkObjPtr virNetworkFindByUUID(const virNetworkObjListPtr nets,
const unsigned char *uuid) const unsigned char *uuid)
{ {
virNetworkObjPtr net = nets; unsigned int i;
while (net) {
if (!memcmp(net->def->uuid, uuid, VIR_UUID_BUFLEN)) for (i = 0 ; i < nets->count ; i++)
return net; if (!memcmp(nets->objs[i]->def->uuid, uuid, VIR_UUID_BUFLEN))
net = net->next; return nets->objs[i];
}
return NULL; return NULL;
} }
virNetworkObjPtr virNetworkFindByName(const virNetworkObjPtr nets, virNetworkObjPtr virNetworkFindByName(const virNetworkObjListPtr nets,
const char *name) const char *name)
{ {
virNetworkObjPtr net = nets; unsigned int i;
while (net) {
if (STREQ(net->def->name, name)) for (i = 0 ; i < nets->count ; i++)
return net; if (STREQ(nets->objs[i]->def->name, name))
net = net->next; return nets->objs[i];
}
return NULL; return NULL;
} }
@ -124,13 +122,24 @@ void virNetworkObjFree(virNetworkObjPtr net)
VIR_FREE(net); VIR_FREE(net);
} }
void virNetworkObjListFree(virNetworkObjListPtr nets)
{
unsigned int i;
for (i = 0 ; i < nets->count ; i++)
virNetworkObjFree(nets->objs[i]);
VIR_FREE(nets->objs);
nets->count = 0;
}
virNetworkObjPtr virNetworkAssignDef(virConnectPtr conn, virNetworkObjPtr virNetworkAssignDef(virConnectPtr conn,
virNetworkObjPtr *nets, virNetworkObjListPtr nets,
const virNetworkDefPtr def) const virNetworkDefPtr def)
{ {
virNetworkObjPtr network; virNetworkObjPtr network;
if ((network = virNetworkFindByName(*nets, def->name))) { if ((network = virNetworkFindByName(nets, def->name))) {
if (!virNetworkIsActive(network)) { if (!virNetworkIsActive(network)) {
virNetworkDefFree(network->def); virNetworkDefFree(network->def);
network->def = def; network->def = def;
@ -149,34 +158,41 @@ virNetworkObjPtr virNetworkAssignDef(virConnectPtr conn,
} }
network->def = def; network->def = def;
network->next = *nets;
*nets = network; if (VIR_REALLOC_N(nets->objs, nets->count + 1) < 0) {
virNetworkReportError(conn, VIR_ERR_NO_MEMORY, NULL);
VIR_FREE(network);
return NULL;
}
nets->objs[nets->count] = network;
nets->count++;
return network; return network;
} }
void virNetworkRemoveInactive(virNetworkObjPtr *nets, void virNetworkRemoveInactive(virNetworkObjListPtr nets,
const virNetworkObjPtr net) const virNetworkObjPtr net)
{ {
virNetworkObjPtr prev = NULL; unsigned int i;
virNetworkObjPtr curr = *nets;
while (curr && for (i = 0 ; i < nets->count ; i++) {
curr != net) { if (nets->objs[i] == net) {
prev = curr; virNetworkObjFree(nets->objs[i]);
curr = curr->next;
if (i < (nets->count - 1))
memmove(nets->objs + i, nets->objs + i + 1,
sizeof(*(nets->objs)) * (nets->count - (i + 1)));
if (VIR_REALLOC_N(nets->objs, nets->count - 1) < 0) {
; /* Failure to reduce memory allocation isn't fatal */
}
nets->count--;
break;
}
} }
if (curr) {
if (prev)
prev->next = curr->next;
else
*nets = curr->next;
}
virNetworkObjFree(net);
} }
@ -682,7 +698,7 @@ int virNetworkSaveConfig(virConnectPtr conn,
} }
virNetworkObjPtr virNetworkLoadConfig(virConnectPtr conn, virNetworkObjPtr virNetworkLoadConfig(virConnectPtr conn,
virNetworkObjPtr *nets, virNetworkObjListPtr nets,
const char *configDir, const char *configDir,
const char *autostartDir, const char *autostartDir,
const char *file) const char *file)
@ -736,7 +752,7 @@ error:
} }
int virNetworkLoadAllConfigs(virConnectPtr conn, int virNetworkLoadAllConfigs(virConnectPtr conn,
virNetworkObjPtr *nets, virNetworkObjListPtr nets,
const char *configDir, const char *configDir,
const char *autostartDir) const char *autostartDir)
{ {

View File

@ -88,8 +88,13 @@ struct _virNetworkObj {
virNetworkDefPtr def; /* The current definition */ virNetworkDefPtr def; /* The current definition */
virNetworkDefPtr newDef; /* New definition to activate at shutdown */ virNetworkDefPtr newDef; /* New definition to activate at shutdown */
};
virNetworkObjPtr next; typedef struct _virNetworkObjList virNetworkObjList;
typedef virNetworkObjList *virNetworkObjListPtr;
struct _virNetworkObjList {
unsigned int count;
virNetworkObjPtr *objs;
}; };
static inline int static inline int
@ -99,19 +104,20 @@ virNetworkIsActive(const virNetworkObjPtr net)
} }
virNetworkObjPtr virNetworkFindByUUID(const virNetworkObjPtr nets, virNetworkObjPtr virNetworkFindByUUID(const virNetworkObjListPtr nets,
const unsigned char *uuid); const unsigned char *uuid);
virNetworkObjPtr virNetworkFindByName(const virNetworkObjPtr nets, virNetworkObjPtr virNetworkFindByName(const virNetworkObjListPtr nets,
const char *name); const char *name);
void virNetworkDefFree(virNetworkDefPtr def); void virNetworkDefFree(virNetworkDefPtr def);
void virNetworkObjFree(virNetworkObjPtr net); void virNetworkObjFree(virNetworkObjPtr net);
void virNetworkObjListFree(virNetworkObjListPtr vms);
virNetworkObjPtr virNetworkAssignDef(virConnectPtr conn, virNetworkObjPtr virNetworkAssignDef(virConnectPtr conn,
virNetworkObjPtr *nets, virNetworkObjListPtr nets,
const virNetworkDefPtr def); const virNetworkDefPtr def);
void virNetworkRemoveInactive(virNetworkObjPtr *nets, void virNetworkRemoveInactive(virNetworkObjListPtr nets,
const virNetworkObjPtr net); const virNetworkObjPtr net);
virNetworkDefPtr virNetworkDefParseString(virConnectPtr conn, virNetworkDefPtr virNetworkDefParseString(virConnectPtr conn,
@ -132,13 +138,13 @@ int virNetworkSaveConfig(virConnectPtr conn,
virNetworkObjPtr net); virNetworkObjPtr net);
virNetworkObjPtr virNetworkLoadConfig(virConnectPtr conn, virNetworkObjPtr virNetworkLoadConfig(virConnectPtr conn,
virNetworkObjPtr *nets, virNetworkObjListPtr nets,
const char *configDir, const char *configDir,
const char *autostartDir, const char *autostartDir,
const char *file); const char *file);
int virNetworkLoadAllConfigs(virConnectPtr conn, int virNetworkLoadAllConfigs(virConnectPtr conn,
virNetworkObjPtr *nets, virNetworkObjListPtr nets,
const char *configDir, const char *configDir,
const char *autostartDir); const char *autostartDir);

View File

@ -58,7 +58,7 @@
/* Main driver state */ /* Main driver state */
struct network_driver { struct network_driver {
virNetworkObjPtr networks; virNetworkObjList networks;
iptablesContext *iptables; iptablesContext *iptables;
brControl *brctl; brControl *brctl;
@ -89,23 +89,18 @@ static int networkShutdownNetworkDaemon(virConnectPtr conn,
static struct network_driver *driverState = NULL; static struct network_driver *driverState = NULL;
static static void
void networkAutostartConfigs(struct network_driver *driver) { networkAutostartConfigs(struct network_driver *driver) {
virNetworkObjPtr network; unsigned int i;
network = driver->networks; for (i = 0 ; i < driver->networks.count ; i++) {
while (network != NULL) { if (driver->networks.objs[i]->autostart &&
virNetworkObjPtr next = network->next; !virNetworkIsActive(driver->networks.objs[i]) &&
networkStartNetworkDaemon(NULL, driver, driver->networks.objs[i]) < 0) {
if (network->autostart &&
!virNetworkIsActive(network) &&
networkStartNetworkDaemon(NULL, driver, network) < 0) {
virErrorPtr err = virGetLastError(); virErrorPtr err = virGetLastError();
networkLog(NETWORK_ERR, _("Failed to autostart network '%s': %s\n"), networkLog(NETWORK_ERR, _("Failed to autostart network '%s': %s\n"),
network->def->name, err->message); driver->networks.objs[i]->def->name, err->message);
} }
network = next;
} }
} }
@ -187,6 +182,9 @@ networkStartup(void) {
*/ */
static int static int
networkReload(void) { networkReload(void) {
if (!driverState)
return 0;
virNetworkLoadAllConfigs(NULL, virNetworkLoadAllConfigs(NULL,
&driverState->networks, &driverState->networks,
driverState->networkConfigDir, driverState->networkConfigDir,
@ -213,13 +211,14 @@ networkReload(void) {
*/ */
static int static int
networkActive(void) { networkActive(void) {
virNetworkObjPtr net = driverState->networks; unsigned int i;
while (net) { if (!driverState)
if (virNetworkIsActive(net)) return 0;
for (i = 0 ; i < driverState->networks.count ; i++)
if (virNetworkIsActive(driverState->networks.objs[i]))
return 1; return 1;
net = net->next;
}
/* Otherwise we're happy to deal with a shutdown */ /* Otherwise we're happy to deal with a shutdown */
return 0; return 0;
@ -232,28 +231,19 @@ networkActive(void) {
*/ */
static int static int
networkShutdown(void) { networkShutdown(void) {
virNetworkObjPtr network; unsigned int i;
if (!driverState) if (!driverState)
return -1; return -1;
/* shutdown active networks */ /* shutdown active networks */
network = driverState->networks; for (i = 0 ; i < driverState->networks.count ; i++)
while (network) { if (virNetworkIsActive(driverState->networks.objs[i]))
virNetworkObjPtr next = network->next; networkShutdownNetworkDaemon(NULL, driverState,
if (virNetworkIsActive(network)) driverState->networks.objs[i]);
networkShutdownNetworkDaemon(NULL, driverState, network);
network = next;
}
/* free inactive networks */ /* free inactive networks */
network = driverState->networks; virNetworkObjListFree(&driverState->networks);
while (network) {
virNetworkObjPtr next = network->next;
virNetworkObjFree(network);
network = next;
}
driverState->networks = NULL;
VIR_FREE(driverState->logDir); VIR_FREE(driverState->logDir);
VIR_FREE(driverState->networkConfigDir); VIR_FREE(driverState->networkConfigDir);
@ -815,7 +805,7 @@ static int networkShutdownNetworkDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
static virNetworkPtr networkLookupByUUID(virConnectPtr conn ATTRIBUTE_UNUSED, static virNetworkPtr networkLookupByUUID(virConnectPtr conn ATTRIBUTE_UNUSED,
const unsigned char *uuid) { const unsigned char *uuid) {
struct network_driver *driver = (struct network_driver *)conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)conn->networkPrivateData;
virNetworkObjPtr network = virNetworkFindByUUID(driver->networks, uuid); virNetworkObjPtr network = virNetworkFindByUUID(&driver->networks, uuid);
virNetworkPtr net; virNetworkPtr net;
if (!network) { if (!network) {
@ -830,7 +820,7 @@ static virNetworkPtr networkLookupByUUID(virConnectPtr conn ATTRIBUTE_UNUSED,
static virNetworkPtr networkLookupByName(virConnectPtr conn ATTRIBUTE_UNUSED, static virNetworkPtr networkLookupByName(virConnectPtr conn ATTRIBUTE_UNUSED,
const char *name) { const char *name) {
struct network_driver *driver = (struct network_driver *)conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)conn->networkPrivateData;
virNetworkObjPtr network = virNetworkFindByName(driver->networks, name); virNetworkObjPtr network = virNetworkFindByName(&driver->networks, name);
virNetworkPtr net; virNetworkPtr net;
if (!network) { if (!network) {
@ -860,31 +850,29 @@ static int networkCloseNetwork(virConnectPtr conn) {
} }
static int networkNumNetworks(virConnectPtr conn) { static int networkNumNetworks(virConnectPtr conn) {
int nactive = 0; int nactive = 0, i;
struct network_driver *driver = (struct network_driver *)conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)conn->networkPrivateData;
virNetworkObjPtr net = driver->networks;
while (net) { for (i = 0 ; i < driver->networks.count ; i++)
if (virNetworkIsActive(net)) if (virNetworkIsActive(driver->networks.objs[i]))
nactive++; nactive++;
net = net->next;
}
return nactive; return nactive;
} }
static int networkListNetworks(virConnectPtr conn, char **const names, int nnames) { static int networkListNetworks(virConnectPtr conn, char **const names, int nnames) {
struct network_driver *driver = (struct network_driver *)conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)conn->networkPrivateData;
virNetworkObjPtr network = driver->networks;
int got = 0, i; int got = 0, i;
while (network && got < nnames) {
if (virNetworkIsActive(network)) { for (i = 0 ; i < driver->networks.count && got < nnames ; i++) {
if (!(names[got] = strdup(network->def->name))) { if (virNetworkIsActive(driver->networks.objs[i])) {
if (!(names[got] = strdup(driver->networks.objs[i]->def->name))) {
networkReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, networkReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for VM name string")); "%s", _("failed to allocate space for VM name string"));
goto cleanup; goto cleanup;
} }
got++; got++;
} }
network = network->next;
} }
return got; return got;
@ -895,31 +883,29 @@ static int networkListNetworks(virConnectPtr conn, char **const names, int nname
} }
static int networkNumDefinedNetworks(virConnectPtr conn) { static int networkNumDefinedNetworks(virConnectPtr conn) {
int ninactive = 0; int ninactive = 0, i;
struct network_driver *driver = (struct network_driver *)conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)conn->networkPrivateData;
virNetworkObjPtr net = driver->networks;
while (net) { for (i = 0 ; i < driver->networks.count ; i++)
if (!virNetworkIsActive(net)) if (!virNetworkIsActive(driver->networks.objs[i]))
ninactive++; ninactive++;
net = net->next;
}
return ninactive; return ninactive;
} }
static int networkListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) { static int networkListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) {
struct network_driver *driver = (struct network_driver *)conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)conn->networkPrivateData;
virNetworkObjPtr network = driver->networks;
int got = 0, i; int got = 0, i;
while (network && got < nnames) {
if (!virNetworkIsActive(network)) { for (i = 0 ; i < driver->networks.count && got < nnames ; i++) {
if (!(names[got] = strdup(network->def->name))) { if (!virNetworkIsActive(driver->networks.objs[i])) {
if (!(names[got] = strdup(driver->networks.objs[i]->def->name))) {
networkReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, networkReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
"%s", _("failed to allocate space for VM name string")); "%s", _("failed to allocate space for VM name string"));
goto cleanup; goto cleanup;
} }
got++; got++;
} }
network = network->next;
} }
return got; return got;
@ -984,7 +970,7 @@ static virNetworkPtr networkDefine(virConnectPtr conn, const char *xml) {
static int networkUndefine(virNetworkPtr net) { static int networkUndefine(virNetworkPtr net) {
struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData;
virNetworkObjPtr network = virNetworkFindByUUID(driver->networks, net->uuid); virNetworkObjPtr network = virNetworkFindByUUID(&driver->networks, net->uuid);
if (!network) { if (!network) {
networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_DOMAIN, networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_DOMAIN,
@ -1009,7 +995,7 @@ static int networkUndefine(virNetworkPtr net) {
static int networkStart(virNetworkPtr net) { static int networkStart(virNetworkPtr net) {
struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData;
virNetworkObjPtr network = virNetworkFindByUUID(driver->networks, net->uuid); virNetworkObjPtr network = virNetworkFindByUUID(&driver->networks, net->uuid);
if (!network) { if (!network) {
networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK, networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK,
@ -1022,7 +1008,7 @@ static int networkStart(virNetworkPtr net) {
static int networkDestroy(virNetworkPtr net) { static int networkDestroy(virNetworkPtr net) {
struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData;
virNetworkObjPtr network = virNetworkFindByUUID(driver->networks, net->uuid); virNetworkObjPtr network = virNetworkFindByUUID(&driver->networks, net->uuid);
int ret; int ret;
if (!network) { if (!network) {
@ -1038,7 +1024,7 @@ static int networkDestroy(virNetworkPtr net) {
static char *networkDumpXML(virNetworkPtr net, int flags ATTRIBUTE_UNUSED) { static char *networkDumpXML(virNetworkPtr net, int flags ATTRIBUTE_UNUSED) {
struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData;
virNetworkObjPtr network = virNetworkFindByUUID(driver->networks, net->uuid); virNetworkObjPtr network = virNetworkFindByUUID(&driver->networks, net->uuid);
if (!network) { if (!network) {
networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK, networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK,
@ -1051,7 +1037,7 @@ static char *networkDumpXML(virNetworkPtr net, int flags ATTRIBUTE_UNUSED) {
static char *networkGetBridgeName(virNetworkPtr net) { static char *networkGetBridgeName(virNetworkPtr net) {
struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData;
virNetworkObjPtr network = virNetworkFindByUUID(driver->networks, net->uuid); virNetworkObjPtr network = virNetworkFindByUUID(&driver->networks, net->uuid);
char *bridge; char *bridge;
if (!network) { if (!network) {
networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK, networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK,
@ -1071,7 +1057,7 @@ static char *networkGetBridgeName(virNetworkPtr net) {
static int networkGetAutostart(virNetworkPtr net, static int networkGetAutostart(virNetworkPtr net,
int *autostart) { int *autostart) {
struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData;
virNetworkObjPtr network = virNetworkFindByUUID(driver->networks, net->uuid); virNetworkObjPtr network = virNetworkFindByUUID(&driver->networks, net->uuid);
if (!network) { if (!network) {
networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK, networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK,
@ -1087,7 +1073,7 @@ static int networkGetAutostart(virNetworkPtr net,
static int networkSetAutostart(virNetworkPtr net, static int networkSetAutostart(virNetworkPtr net,
int autostart) { int autostart) {
struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData; struct network_driver *driver = (struct network_driver *)net->conn->networkPrivateData;
virNetworkObjPtr network = virNetworkFindByUUID(driver->networks, net->uuid); virNetworkObjPtr network = virNetworkFindByUUID(&driver->networks, net->uuid);
if (!network) { if (!network) {
networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK, networkReportError(net->conn, NULL, net, VIR_ERR_INVALID_NETWORK,

View File

@ -58,7 +58,7 @@ struct _testConn {
virCapsPtr caps; virCapsPtr caps;
virNodeInfo nodeInfo; virNodeInfo nodeInfo;
virDomainObjList domains; virDomainObjList domains;
virNetworkObjPtr networks; virNetworkObjList networks;
int numCells; int numCells;
testCell cells[MAX_CELLS]; testCell cells[MAX_CELLS];
}; };
@ -100,7 +100,7 @@ static const virNodeInfo defaultNodeInfo = {
\ \
privconn = (testConnPtr)net->conn->privateData; \ privconn = (testConnPtr)net->conn->privateData; \
do { \ do { \
if ((privnet = virNetworkFindByName(privconn->networks, \ if ((privnet = virNetworkFindByName(&privconn->networks, \
(net)->name)) == NULL) { \ (net)->name)) == NULL) { \
testError((net)->conn, NULL, (net), VIR_ERR_INVALID_ARG, \ testError((net)->conn, NULL, (net), VIR_ERR_INVALID_ARG, \
__FUNCTION__); \ __FUNCTION__); \
@ -260,7 +260,7 @@ static int testOpenDefault(virConnectPtr conn) {
error: error:
virDomainObjListFree(&privconn->domains); virDomainObjListFree(&privconn->domains);
virNetworkObjFree(privconn->networks); virNetworkObjListFree(&privconn->networks);
virCapabilitiesFree(privconn->caps); virCapabilitiesFree(privconn->caps);
VIR_FREE(privconn); VIR_FREE(privconn);
return VIR_DRV_OPEN_ERROR; return VIR_DRV_OPEN_ERROR;
@ -495,12 +495,7 @@ static int testOpenFromFile(virConnectPtr conn,
if (fd != -1) if (fd != -1)
close(fd); close(fd);
virDomainObjListFree(&privconn->domains); virDomainObjListFree(&privconn->domains);
net = privconn->networks; virNetworkObjListFree(&privconn->networks);
while (net) {
virNetworkObjPtr tmp = net->next;
virNetworkObjFree(net);
net = tmp;
}
VIR_FREE(privconn); VIR_FREE(privconn);
conn->privateData = NULL; conn->privateData = NULL;
return VIR_DRV_OPEN_ERROR; return VIR_DRV_OPEN_ERROR;
@ -547,16 +542,12 @@ static int testOpen(virConnectPtr conn,
static int testClose(virConnectPtr conn) static int testClose(virConnectPtr conn)
{ {
virNetworkObjPtr net;
GET_CONNECTION(conn); GET_CONNECTION(conn);
virCapabilitiesFree(privconn->caps); virCapabilitiesFree(privconn->caps);
virDomainObjListFree(&privconn->domains); virDomainObjListFree(&privconn->domains);
net = privconn->networks; virNetworkObjListFree(&privconn->networks);
while (net) {
virNetworkObjPtr tmp = net->next;
virNetworkObjFree(net);
net = tmp;
}
VIR_FREE (privconn); VIR_FREE (privconn);
conn->privateData = conn; conn->privateData = conn;
return 0; return 0;
@ -1283,7 +1274,7 @@ static virNetworkPtr testLookupNetworkByUUID(virConnectPtr conn,
virNetworkObjPtr net = NULL; virNetworkObjPtr net = NULL;
GET_CONNECTION(conn); GET_CONNECTION(conn);
if ((net = virNetworkFindByUUID(privconn->networks, uuid)) == NULL) { if ((net = virNetworkFindByUUID(&privconn->networks, uuid)) == NULL) {
testError (conn, NULL, NULL, VIR_ERR_NO_NETWORK, NULL); testError (conn, NULL, NULL, VIR_ERR_NO_NETWORK, NULL);
return NULL; return NULL;
} }
@ -1297,7 +1288,7 @@ static virNetworkPtr testLookupNetworkByName(virConnectPtr conn,
virNetworkObjPtr net = NULL; virNetworkObjPtr net = NULL;
GET_CONNECTION(conn); GET_CONNECTION(conn);
if ((net = virNetworkFindByName(privconn->networks, name)) == NULL) { if ((net = virNetworkFindByName(&privconn->networks, name)) == NULL) {
testError (conn, NULL, NULL, VIR_ERR_NO_NETWORK, NULL); testError (conn, NULL, NULL, VIR_ERR_NO_NETWORK, NULL);
return NULL; return NULL;
} }
@ -1307,32 +1298,26 @@ static virNetworkPtr testLookupNetworkByName(virConnectPtr conn,
static int testNumNetworks(virConnectPtr conn) { static int testNumNetworks(virConnectPtr conn) {
int numActive = 0; int numActive = 0, i;
virNetworkObjPtr net;
GET_CONNECTION(conn); GET_CONNECTION(conn);
net = privconn->networks; for (i = 0 ; i < privconn->networks.count ; i++)
while (net) { if (virNetworkIsActive(privconn->networks.objs[i]))
if (virNetworkIsActive(net))
numActive++; numActive++;
net = net->next;
}
return numActive; return numActive;
} }
static int testListNetworks(virConnectPtr conn, char **const names, int nnames) { static int testListNetworks(virConnectPtr conn, char **const names, int nnames) {
int n = 0; int n = 0, i;
virNetworkObjPtr net;
GET_CONNECTION(conn); GET_CONNECTION(conn);
net = privconn->networks;
memset(names, 0, sizeof(*names)*nnames); memset(names, 0, sizeof(*names)*nnames);
while (net && n < nnames) { for (i = 0 ; i < privconn->networks.count && n < nnames ; i++)
if (virNetworkIsActive(net) && if (virNetworkIsActive(privconn->networks.objs[i]) &&
!(names[n++] = strdup(net->def->name))) !(names[n++] = strdup(privconn->networks.objs[i]->def->name)))
goto no_memory; goto no_memory;
net = net->next;
}
return n; return n;
no_memory: no_memory:
@ -1343,32 +1328,26 @@ no_memory:
} }
static int testNumDefinedNetworks(virConnectPtr conn) { static int testNumDefinedNetworks(virConnectPtr conn) {
int numInactive = 0; int numInactive = 0, i;
virNetworkObjPtr net;
GET_CONNECTION(conn); GET_CONNECTION(conn);
net = privconn->networks; for (i = 0 ; i < privconn->networks.count ; i++)
while (net) { if (!virNetworkIsActive(privconn->networks.objs[i]))
if (!virNetworkIsActive(net))
numInactive++; numInactive++;
net = net->next;
}
return numInactive; return numInactive;
} }
static int testListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) { static int testListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) {
int n = 0; int n = 0, i;
virNetworkObjPtr net;
GET_CONNECTION(conn); GET_CONNECTION(conn);
net = privconn->networks;
memset(names, 0, sizeof(*names)*nnames); memset(names, 0, sizeof(*names)*nnames);
while (net && n < nnames) { for (i = 0 ; i < privconn->networks.count && n < nnames ; i++)
if (!virNetworkIsActive(net) && if (!virNetworkIsActive(privconn->networks.objs[i]) &&
!(names[n++] = strdup(net->def->name))) !(names[n++] = strdup(privconn->networks.objs[i]->def->name)))
goto no_memory; goto no_memory;
net = net->next;
}
return n; return n;
no_memory: no_memory: