}
+typedef struct _virNetworkObjPortListForEachData virNetworkObjPortListForEachData;
+struct _virNetworkObjPortListForEachData {
+ virNetworkPortListIter iter;
+ void *opaque;
+ bool err;
+};
+
+static int
+virNetworkObjPortForEachCallback(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *opaque)
+{
+ virNetworkObjPortListForEachData *data = opaque;
+
+ if (!data->iter(payload, data->opaque))
+ data->err = true;
+
+ return 0;
+}
+
+int
+virNetworkObjPortForEach(virNetworkObjPtr obj,
+ virNetworkPortListIter iter,
+ void *opaque)
+{
+ virNetworkObjPortListForEachData data = { iter, opaque, false };
+ virHashForEach(obj->ports, virNetworkObjPortForEachCallback, &data);
+ if (data.err)
+ return -1;
+ return 0;
+}
+
+
static int
virNetworkObjLoadAllPorts(virNetworkObjPtr net,
const char *stateDir)
virNetworkPortPtr **ports,
virNetworkPortListFilter filter);
+typedef bool
+(*virNetworkPortListIter)(virNetworkPortDefPtr portdef,
+ void *opaque);
+
+int
+virNetworkObjPortForEach(virNetworkObjPtr obj,
+ virNetworkPortListIter iter,
+ void *opaque);
+
int
virNetworkObjSaveStatus(const char *statusDir,
virNetworkObjPtr net,
virNetworkObjMacMgrAdd;
virNetworkObjMacMgrDel;
virNetworkObjNew;
+virNetworkObjPortForEach;
virNetworkObjPortListExport;
virNetworkObjRemoveInactive;
virNetworkObjReplacePersistentDef;
}
+static int
+networkNotifyPort(virNetworkObjPtr obj,
+ virNetworkPortDefPtr port);
+
+static bool
+networkUpdatePort(virNetworkPortDefPtr port,
+ void *opaque)
+{
+ virNetworkObjPtr obj = opaque;
+
+ networkNotifyPort(obj, port);
+
+ return false;
+}
+
static int
networkUpdateState(virNetworkObjPtr obj,
void *opaque)
goto cleanup;
}
+ virNetworkObjPortForEach(obj, networkUpdatePort, obj);
+
/* Try and read dnsmasq/radvd pids of active networks */
if (virNetworkObjIsActive(obj) && def->ips && (def->nips > 0)) {
pid_t radvdPid;