if (!(driver->ebtables = ebtablesContextNew("qemu"))) {
driver->macFilter = 0;
virReportSystemError(errno,
- _("failed to enable mac filter in in '%s'"),
+ _("failed to enable mac filter in '%s'"),
__FILE__);
}
*/
int
qemudPhysIfaceConnect(virConnectPtr conn,
+ struct qemud_driver *driver,
virDomainNetDefPtr net,
char *linkdev,
int brmode,
#if WITH_MACVTAP
char *res_ifname = NULL;
int vnet_hdr = 0;
+ int err;
if (qemuCmdFlags & QEMUD_CMD_FLAG_VNET_HDR &&
net->model && STREQ(net->model, "virtio"))
VIR_FREE(net->ifname);
net->ifname = res_ifname;
}
+
+ if (rc >=0 && driver->macFilter) {
+ if ((err = networkAllowMacOnPort(driver, net->ifname, net->mac))) {
+ virReportSystemError(err,
+ _("failed to add ebtables rule to allow MAC address on '%s'"),
+ net->ifname);
+ }
+ }
#else
(void)conn;
(void)net;
(void)linkdev;
(void)brmode;
(void)qemuCmdFlags;
+ (void)driver;
qemuReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("No support for macvtap device"));
rc = -1;
if (snprintf(tapfd_name, sizeof(tapfd_name), "%d", tapfd) >= sizeof(tapfd_name))
goto no_memory;
} else if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
- int tapfd = qemudPhysIfaceConnect(conn, net,
+ int tapfd = qemudPhysIfaceConnect(conn, driver, net,
net->data.direct.linkdev,
net->data.direct.mode,
qemuCmdFlags);
return -1;
}
- if ((tapfd = qemudPhysIfaceConnect(conn, net,
+ if ((tapfd = qemudPhysIfaceConnect(conn, driver, net,
net->data.direct.linkdev,
net->data.direct.mode,
qemuCmdFlags)) < 0)