diff options
| author | Christian Breunig <christian@breunig.cc> | 2023-08-23 18:19:19 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-23 18:19:19 +0200 | 
| commit | b88b11ee73601155a485956be80971a697a7f4d6 (patch) | |
| tree | 92ca66f39d8a56fad5d834cdaa839311f82643ca /python | |
| parent | 8c7fbec24f8bfe064d8ad804951f5ae59b54748f (diff) | |
| parent | 524b517c53d18b0b50e7ddc83da4baec63172bb8 (diff) | |
| download | vyos-1x-b88b11ee73601155a485956be80971a697a7f4d6.tar.gz vyos-1x-b88b11ee73601155a485956be80971a697a7f4d6.zip | |
Merge pull request #2142 from nicolas-fort/T5450
T5450: allow inverted matcher for interface and interface-group
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/firewall.py | 22 | 
1 files changed, 18 insertions, 4 deletions
| diff --git a/python/vyos/firewall.py b/python/vyos/firewall.py index 4aa509fe2..53ff8259e 100644 --- a/python/vyos/firewall.py +++ b/python/vyos/firewall.py @@ -272,20 +272,34 @@ def parse_rule(rule_conf, hook, fw_name, rule_id, ip_name):                  output.append(f'ip6 hoplimit {operator} {value}')      if 'inbound_interface' in rule_conf: +        operator = ''          if 'interface_name' in rule_conf['inbound_interface']:              iiface = rule_conf['inbound_interface']['interface_name'] -            output.append(f'iifname {{{iiface}}}') +            if iiface[0] == '!': +                operator = '!=' +                iiface = iiface[1:] +            output.append(f'iifname {operator} {{{iiface}}}')          else:              iiface = rule_conf['inbound_interface']['interface_group'] -            output.append(f'iifname @I_{iiface}') +            if iiface[0] == '!': +                operator = '!=' +                iiface = iiface[1:] +            output.append(f'iifname {operator} @I_{iiface}')      if 'outbound_interface' in rule_conf: +        operator = ''          if 'interface_name' in rule_conf['outbound_interface']:              oiface = rule_conf['outbound_interface']['interface_name'] -            output.append(f'oifname {{{oiface}}}') +            if oiface[0] == '!': +                operator = '!=' +                oiface = oiface[1:] +            output.append(f'oifname {operator} {{{oiface}}}')          else:              oiface = rule_conf['outbound_interface']['interface_group'] -            output.append(f'oifname @I_{oiface}') +            if oiface[0] == '!': +                operator = '!=' +                oiface = oiface[1:] +            output.append(f'oifname {operator} @I_{oiface}')      if 'ttl' in rule_conf:          operators = {'eq': '==', 'gt': '>', 'lt': '<'} | 
