mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-27 02:51:16 +00:00
Switch network objects to array instead of linked list
This commit is contained in:
parent
4789154063
commit
dd48e929c7
@ -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
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
75
src/test.c
75
src/test.c
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user