#include "verify.h"
#include "bridge.h"
#include "logging.h"
+#include "domain_nwfilter.h"
#define VIR_FROM_THIS VIR_FROM_UML
static int
-umlConnectTapDevice(virDomainNetDefPtr net,
+umlConnectTapDevice(virConnectPtr conn,
+ virDomainNetDefPtr net,
const char *bridge)
{
brControl *brctl = NULL;
goto error;
}
+ if (net->filter) {
+ if (virDomainConfNWFilterInstantiate(conn, net)) {
+ if (template_ifname)
+ VIR_FREE(net->ifname);
+ goto error;
+ }
+ }
+
brShutdown(brctl);
return 0;
goto error;
}
- if (umlConnectTapDevice(def, bridge) < 0) {
+ if (umlConnectTapDevice(conn, def, bridge) < 0) {
VIR_FREE(bridge);
goto error;
}
}
case VIR_DOMAIN_NET_TYPE_BRIDGE:
- if (umlConnectTapDevice(def, def->data.bridge.brname) < 0)
+ if (umlConnectTapDevice(conn, def, def->data.bridge.brname) < 0)
goto error;
/* ethNNN=tuntap,tapname,macaddr,gateway */
#include "domain_conf.h"
#include "datatypes.h"
#include "logging.h"
+#include "domain_nwfilter.h"
#define VIR_FROM_THIS VIR_FROM_UML
if (umlBuildCommandLine(conn, driver, vm, &keepfd,
&argv, &progenv) < 0) {
close(logfd);
+ virDomainConfVMNWFilterTeardown(vm);
umlCleanupTapDevices(conn, vm);
return -1;
}
VIR_FREE(progenv[i]);
VIR_FREE(progenv);
- if (ret < 0)
+ if (ret < 0) {
+ virDomainConfVMNWFilterTeardown(vm);
umlCleanupTapDevices(conn, vm);
+ }
+
/* NB we don't mark it running here - we do that async
with inotify */
vm->def->id = -1;
vm->state = VIR_DOMAIN_SHUTOFF;
+ virDomainConfVMNWFilterTeardown(vm);
umlCleanupTapDevices(conn, vm);
if (vm->newDef) {