static int nwfilterUndefine(virNWFilterPtr obj) { virNWFilterDriverStatePtr driver = obj->conn->nwfilterPrivateData; virNWFilterObjPtr nwfilter; int ret = -1; nwfilterDriverLock(driver); virNWFilterCallbackDriversLock(); virNWFilterLockFilterUpdates(); nwfilter = virNWFilterObjFindByUUID(&driver->nwfilters, obj->uuid); if (!nwfilter) { virNWFilterReportError(VIR_ERR_NO_NWFILTER, "%s", _("no nwfilter with matching uuid")); goto cleanup; } if (virNWFilterTestUnassignDef(obj->conn, nwfilter)) { virNWFilterReportError(VIR_ERR_OPERATION_INVALID, "%s", _("nwfilter is in use")); goto cleanup; } if (virNWFilterObjDeleteDef(nwfilter) < 0) goto cleanup; VIR_FREE(nwfilter->configFile); virNWFilterObjRemove(&driver->nwfilters, nwfilter); nwfilter = NULL; ret = 0; cleanup: if (nwfilter) virNWFilterObjUnlock(nwfilter); virNWFilterUnlockFilterUpdates(); virNWFilterCallbackDriversUnlock(); nwfilterDriverUnlock(driver); return ret; }
int virNWFilterInstantiateFilterLate(virConnectPtr conn, const char *ifname, int ifindex, const char *linkdev, enum virDomainNetType nettype, const unsigned char *macaddr, const char *filtername, virNWFilterHashTablePtr filterparams, virNWFilterDriverStatePtr driver) { int rc; bool foundNewFilter = false; virNWFilterLockFilterUpdates(); rc = __virNWFilterInstantiateFilter(conn, 1, ifname, ifindex, linkdev, nettype, macaddr, filtername, filterparams, INSTANTIATE_ALWAYS, driver, true, &foundNewFilter); if (rc) { /* something went wrong... 'DOWN' the interface */ if (ifaceCheck(false, ifname, NULL, ifindex) != 0 || ifaceDown(ifname)) { /* assuming interface disappeared... */ _virNWFilterTeardownFilter(ifname); } } virNWFilterUnlockFilterUpdates(); return rc; }
static int _virNWFilterInstantiateFilter(virConnectPtr conn, const virDomainNetDefPtr net, bool teardownOld, enum instCase useNewFilter, bool *foundNewFilter) { const char *linkdev = (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) ? net->data.direct.linkdev : NULL; int ifindex; int rc; if (ifaceGetIndex(true, net->ifname, &ifindex)) return 1; virNWFilterLockFilterUpdates(); rc = __virNWFilterInstantiateFilter(conn, teardownOld, net->ifname, ifindex, linkdev, net->type, net->mac, net->filter, net->filterparams, useNewFilter, conn->nwfilterPrivateData, false, foundNewFilter); virNWFilterUnlockFilterUpdates(); return rc; }