diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2026-10-30 15:22:34 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-10-30 15:22:34 +0200 |
| commit | d658b1297eb482e5e995d56575eb4554acfe062c (patch) | |
| tree | aec7890a87026404f1a5a9d099b63c38daaec8aa /src | |
| parent | cc972e7de80aea6101e936bffde775c0ee86bbc4 (diff) | |
| parent | d5e67f48a76dfd7b48b5ce84f08246d2a6c48489 (diff) | |
| download | vyos-1x-d658b1297eb482e5e995d56575eb4554acfe062c.tar.gz vyos-1x-d658b1297eb482e5e995d56575eb4554acfe062c.zip | |
Merge pull request #5609 from natali-rs1985/T9536
nat64: T9536: Fix check for only one source rule
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/nat64.py | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/conf_mode/nat64.py b/src/conf_mode/nat64.py index 8afeeafe4..7bec596ee 100755 --- a/src/conf_mode/nat64.py +++ b/src/conf_mode/nat64.py @@ -77,11 +77,6 @@ def verify(nat64) -> None: rules[num] = {'deleted': True} continue - # If the user changes the mode, recreate the instance else Jool fails with: - # Jool error: Sorry; you can't change an instance's framework for now. - if config_diff.is_node_changed(base_rule + [f'instance-{num}', 'mode']): - rules[num]['recreate'] = True - # If the user changes the pool6, recreate the instance else Jool fails with: # Jool error: Sorry; you can't change a NAT64 instance's pool6 for now. if dict_search('source.prefix', rules[num]) and config_diff.is_node_changed( @@ -100,15 +95,16 @@ def verify(nat64) -> None: ephemeral_port_min, ephemeral_port_max = map(int, tmp.split()) if dict_search('source.rule', nat64): - # Ensure only 1 netfilter instance per namespace - nf_rules = filter( - lambda i: 'deleted' not in i and i.get('mode') == 'netfilter', - nat64['source']['rule'].values(), - ) - next(nf_rules, None) # Discard the first element - if next(nf_rules, None) is not None: + # https://nicmx.github.io/Jool/en/intro-jool.html + # Every instance uses the netfilter framework, and Jool supports only + # one of those per network namespace. Jool does not refuse a second + # instance, so the limit has to be enforced here. + active_rules = [ + r for r, i in nat64['source']['rule'].items() if 'deleted' not in i + ] + if len(active_rules) > 1: raise ConfigError( - 'Jool permits only 1 NAT64 netfilter instance (per network namespace)' + 'Jool supports only 1 NAT64 netfilter instance (per network namespace)' ) for rule, instance in nat64['source']['rule'].items(): |
