summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/firewall.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/conf_mode/firewall.py b/src/conf_mode/firewall.py
index 4a4212a0f..a609e305c 100755
--- a/src/conf_mode/firewall.py
+++ b/src/conf_mode/firewall.py
@@ -154,12 +154,15 @@ def get_config(config=None):
continue
local_zone_conf['from_local'] = {}
+ local_zone_conf['default_local'] = {}
for zone, zone_conf in firewall['zone'].items():
- if zone == local_zone or 'from' not in zone_conf:
+ if zone == local_zone:
continue
- if local_zone in zone_conf['from']:
+ if 'from' in zone_conf and local_zone in zone_conf['from']:
local_zone_conf['from_local'][zone] = zone_conf['from'][local_zone]
+ elif 'default_firewall' in zone_conf:
+ local_zone_conf['default_local'][zone] = zone_conf['default_firewall']
set_dependents('conntrack', conf)
@@ -627,6 +630,18 @@ def verify(firewall):
if v6_name and not dict_search_args(firewall, 'ipv6', 'name', v6_name):
raise ConfigError(f'Firewall ipv6-name "{v6_name}" does not exist')
+ if 'default_firewall' in zone_conf:
+ v4_name = dict_search_args(zone_conf, 'default_firewall', 'name')
+ if v4_name and not dict_search_args(firewall, 'ipv4', 'name', v4_name):
+ raise ConfigError(f'Firewall name "{v4_name}" does not exist')
+
+ v6_name = dict_search_args(zone_conf, 'default_firewall', 'ipv6_name')
+ if v6_name and not dict_search_args(firewall, 'ipv6', 'name', v6_name):
+ raise ConfigError(f'Firewall ipv6-name "{v6_name}" does not exist')
+
+ if not v4_name and not v6_name:
+ raise ConfigError('No firewall names specified for default-firewall')
+
return None
def generate(firewall):