diff --git a/suse-network.patch b/suse-network.patch deleted file mode 100644 index 92d7bbc..0000000 --- a/suse-network.patch +++ /dev/null @@ -1,256 +0,0 @@ -Index: libvirt-0.7.7/src/conf/network_conf.c -=================================================================== ---- libvirt-0.7.7.orig/src/conf/network_conf.c -+++ libvirt-0.7.7/src/conf/network_conf.c -@@ -845,6 +845,135 @@ error: - return NULL; - } - -+int virNetworkIsBridge(const char *name) -+{ -+ char *path = NULL; -+ int ret = 0; -+ struct stat s; -+ -+ if (asprintf(&path, "/sys/class/net/%s/bridge", name) < 0) -+ goto out; -+ -+ if (stat(path, &s) != 0) -+ goto out; -+ -+ if (S_ISDIR(s.st_mode)) -+ ret = 1; -+ -+out: -+ free(path); -+ return ret; -+ } -+ -+static unsigned long virNetworkDefSuseGetValue(const char *netName, const char *valName) -+{ -+ unsigned long ret = 0; -+ char *path = NULL; -+ FILE *f; -+ -+ if (asprintf(&path, "/sys/class/net/%s/bridge/%s", netName, valName) < 0) -+ return ret; -+ -+ if ((f = fopen(path, "r")) == NULL) -+ goto out; -+ -+ if (fscanf(f, "%lu", &ret) != 1) { -+ ret = 0; -+ goto out; -+ } -+ -+ out: -+ if (f != NULL) -+ fclose(f); -+ free(path); -+ return ret; -+} -+ -+static virNetworkObjPtr virNetworkLoadSuseNet(virNetworkObjListPtr nets, -+ const char *name) -+{ -+ virNetworkDefPtr def; -+ virNetworkObjPtr network; -+ int err; -+ -+ if ((network = virNetworkFindByName(nets, name))) { -+ virNetworkObjUnlock(network); -+ return network; -+ } -+ -+ if (VIR_ALLOC(network) < 0) { -+ virNetworkReportError(VIR_ERR_NO_MEMORY, NULL); -+ return NULL; -+ } -+ -+ network->autostart = 1; -+ network->active = 1; -+ network->suse = 1; -+ -+ if (VIR_ALLOC(def) < 0) { -+ virNetworkReportError(VIR_ERR_NO_MEMORY, NULL); -+ goto error; -+ } -+ -+ network->def = def; -+ -+ /* name */ -+ def->name = strdup(name); -+ if (def->name == NULL) { -+ virNetworkReportError(VIR_ERR_NO_MEMORY, NULL); -+ goto error; -+ } -+ -+ /* uuid */ -+ if ((err = virUUIDGenerate(def->uuid))) { -+ virNetworkReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Failed to generate UUID: %s"), strerror(err)); -+ goto error; -+ } -+ -+ /* bridge information */ -+ def->bridge = strdup(name); -+ if (def->bridge == NULL) { -+ virNetworkReportError(VIR_ERR_NO_MEMORY, NULL); -+ goto error; -+ } -+ def->stp = (int)virNetworkDefSuseGetValue(name, "stp_state"); -+ def->delay = virNetworkDefSuseGetValue(name, "forward_delay"); -+ -+ /* Add network to the list */ -+ if (VIR_REALLOC_N(nets->objs, nets->count + 1) < 0) { -+ virNetworkReportError(VIR_ERR_NO_MEMORY, NULL); -+ VIR_FREE(network); -+ return NULL; -+ } -+ -+ nets->objs[nets->count] = network; -+ nets->count++; -+ -+ return network; -+ -+error: -+ virNetworkObjFree(network); -+ return NULL; -+} -+ -+void virNetworkLoadSuseNetworks(virNetworkObjListPtr nets) -+{ -+ DIR *dir = NULL; -+ struct dirent *de; -+ -+ dir = opendir("/sys/class/net"); -+ if (dir == NULL) -+ return; -+ -+ while ((de = readdir(dir))) { -+ if (virNetworkIsBridge(de->d_name)) { -+ virNetworkLoadSuseNet(nets, de->d_name); -+ } -+ } -+ closedir(dir); -+} -+ - int virNetworkLoadAllConfigs(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir) -@@ -882,6 +1011,7 @@ int virNetworkLoadAllConfigs(virNetworkO - - closedir(dir); - -+ virNetworkLoadSuseNetworks(nets); - return 0; - } - -Index: libvirt-0.7.7/src/conf/network_conf.h -=================================================================== ---- libvirt-0.7.7.orig/src/conf/network_conf.h -+++ libvirt-0.7.7/src/conf/network_conf.h -@@ -94,6 +94,7 @@ struct _virNetworkObj { - unsigned int active : 1; - unsigned int autostart : 1; - unsigned int persistent : 1; -+ unsigned int suse : 1; - - virNetworkDefPtr def; /* The current definition */ - virNetworkDefPtr newDef; /* New definition to activate at shutdown */ -@@ -172,4 +173,7 @@ int virNetworkSetBridgeName(const virNet - void virNetworkObjLock(virNetworkObjPtr obj); - void virNetworkObjUnlock(virNetworkObjPtr obj); - -+int virNetworkIsBridge(const char *name); -+void virNetworkLoadSuseNetworks(virNetworkObjListPtr nets); -+ - #endif /* __NETWORK_CONF_H__ */ -Index: libvirt-0.7.7/src/network/bridge_driver.c -=================================================================== ---- libvirt-0.7.7.orig/src/network/bridge_driver.c -+++ libvirt-0.7.7/src/network/bridge_driver.c -@@ -811,7 +811,8 @@ networkReloadIptablesRules(struct networ - for (i = 0 ; i < driver->networks.count ; i++) { - virNetworkObjLock(driver->networks.objs[i]); - -- if (virNetworkObjIsActive(driver->networks.objs[i])) { -+ if (virNetworkObjIsActive(driver->networks.objs[i]) && -+ !(driver->networks.objs[i]->suse)) { - networkRemoveIptablesRules(driver, driver->networks.objs[i]); - if (!networkAddIptablesRules(driver, driver->networks.objs[i])) { - /* failed to add but already logged */ -@@ -1003,6 +1004,12 @@ static int networkShutdownNetworkDaemon( - unlink(stateFile); - VIR_FREE(stateFile); - -+ if (network->suse) { -+ VIR_WARN("Network '%s' is not under libvirt control and will not be " -+ "shutdown\n", network->def->name); -+ return -1; -+ } -+ - if (network->dnsmasqPid > 0) - kill(network->dnsmasqPid, SIGTERM); - -@@ -1098,11 +1105,25 @@ static int networkCloseNetwork(virConnec - return 0; - } - -+static void networkDriverSuseRefresh(struct network_driver *driver) { -+ int i = 0; -+ virNetworkObjPtr netObj; -+ -+ virNetworkLoadSuseNetworks(&driver->networks); -+ while (i < driver->networks.count) { -+ netObj = driver->networks.objs[i]; -+ if (netObj->suse && !virNetworkIsBridge(netObj->def->name)) -+ virNetworkRemoveInactive(&driver->networks, netObj); -+ i++; -+ } -+} -+ - static int networkNumNetworks(virConnectPtr conn) { - int nactive = 0, i; - struct network_driver *driver = conn->networkPrivateData; - - networkDriverLock(driver); -+ networkDriverSuseRefresh(driver); - for (i = 0 ; i < driver->networks.count ; i++) { - virNetworkObjLock(driver->networks.objs[i]); - if (virNetworkObjIsActive(driver->networks.objs[i])) -@@ -1119,6 +1140,7 @@ static int networkListNetworks(virConnec - int got = 0, i; - - networkDriverLock(driver); -+ networkDriverSuseRefresh(driver); - for (i = 0 ; i < driver->networks.count && got < nnames ; i++) { - virNetworkObjLock(driver->networks.objs[i]); - if (virNetworkObjIsActive(driver->networks.objs[i])) { -@@ -1499,6 +1521,13 @@ static int networkSetAutostart(virNetwor - goto cleanup; - } - -+ if (network->suse) { -+ networkReportError(VIR_ERR_INTERNAL_ERROR, -+ ": Network '%s' is not under libvirt control", -+ network->def->name); -+ return -1; -+ } -+ - autostart = (autostart != 0); - - if (network->autostart != autostart) { -Index: libvirt-0.7.7/src/libvirt_private.syms -=================================================================== ---- libvirt-0.7.7.orig/src/libvirt_private.syms -+++ libvirt-0.7.7/src/libvirt_private.syms -@@ -411,6 +411,8 @@ virNetworkSaveConfig; - virNetworkSetBridgeName; - virNetworkObjLock; - virNetworkObjUnlock; -+virNetworkLoadSuseNetworks; -+virNetworkIsBridge; - - - # nodeinfo.h