virFirewallDGetVersion;
virFirewallDGetZones;
virFirewallDInterfaceSetZone;
+virFirewallDInterfaceUnsetZone;
virFirewallDIsRegistered;
virFirewallDPolicyExists;
virFirewallDSynchronize;
def->forward.type != VIR_NETWORK_FORWARD_OPEN)
networkRemoveFirewallRules(obj);
+ networkUnsetBridgeZone(def);
+
virNetworkObjUnrefMacMap(obj);
ignore_value(virNetDevBridgeDelete(def->bridge));
if (def->forward.type != VIR_NETWORK_FORWARD_OPEN)
networkRemoveFirewallRules(obj);
+ networkUnsetBridgeZone(def);
+
ignore_value(virNetDevBridgeDelete(def->bridge));
/* See if its still alive and really really kill it */
}
+void
+networkUnsetBridgeZone(virNetworkDef *def)
+{
+ /* If there is a libvirt-managed bridge device remove it from any
+ * zone it had been placed in as a part of deleting the bridge.
+ * DO NOT CALL THIS FOR 'bridge' forward mode, since that
+ * bridge is not managed by libvirt.
+ */
+ if (def->bridge && def->forward.type != VIR_NETWORK_FORWARD_BRIDGE
+ && virFirewallDIsRegistered() == 0) {
+ virFirewallDInterfaceUnsetZone(def->bridge);
+ }
+}
+
int
networkAddFirewallRules(virNetworkDef *def,
virFirewallBackend firewallBackend,
}
+void
+networkUnsetBridgeZone(virNetworkDef *def G_GNUC_UNUSED)
+{
+}
+
+
int networkAddFirewallRules(virNetworkDef *def G_GNUC_UNUSED,
virFirewallBackend firewallBackend,
virFirewall **fwRemoval G_GNUC_UNUSED)
virFirewallBackend firewallBackend,
virFirewall **fwRemoval);
+void networkUnsetBridgeZone(virNetworkDef *def);
+
void networkRemoveFirewallRules(virNetworkObj *obj);
}
+int
+virFirewallDInterfaceUnsetZone(const char *iface)
+{
+ GDBusConnection *sysbus = virGDBusGetSystemBus();
+ g_autoptr(GVariant) message = NULL;
+
+ if (!sysbus)
+ return -1;
+
+ message = g_variant_new("(ss)", "", iface);
+
+ return virGDBusCallMethod(sysbus,
+ NULL,
+ NULL,
+ NULL,
+ VIR_FIREWALL_FIREWALLD_SERVICE,
+ "/org/fedoraproject/FirewallD1",
+ "org.fedoraproject.FirewallD1.zone",
+ "removeInterface",
+ message);
+}
+
+
void
virFirewallDSynchronize(void)
{
int virFirewallDInterfaceSetZone(const char *iface,
const char *zone);
+int virFirewallDInterfaceUnsetZone(const char *iface);
+
void virFirewallDSynchronize(void);