diff options
author | Daniil Baturin <daniil@vyos.io> | 2022-10-27 13:55:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-27 13:55:11 +0100 |
commit | c65931f338f49866762b155784ee68afc5c6f2f3 (patch) | |
tree | 0de4d76950d08888fa8f45246c8495bb801bb55b | |
parent | a61e1a78fe116bb44fe55be3493de7c4dbe8db97 (diff) | |
parent | 28b312d687291cef1e3935b7f39dc28b9e7976ef (diff) | |
download | vyos-1x-c65931f338f49866762b155784ee68afc5c6f2f3.tar.gz vyos-1x-c65931f338f49866762b155784ee68afc5c6f2f3.zip |
Merge pull request #1606 from sever-sever/T4762
T4762: Add check for show nat if nat config does not exist
-rw-r--r-- | op-mode-definitions/nat.xml.in | 2 | ||||
-rwxr-xr-x | src/op_mode/nat.py | 22 |
2 files changed, 23 insertions, 1 deletions
diff --git a/op-mode-definitions/nat.xml.in b/op-mode-definitions/nat.xml.in index ce0544390..50abb1555 100644 --- a/op-mode-definitions/nat.xml.in +++ b/op-mode-definitions/nat.xml.in @@ -64,7 +64,7 @@ <properties> <help>Show statistics for configured destination NAT rules</help> </properties> - <command>${vyos_op_scripts_dir}/show_nat_statistics.py --destination</command> + <command>${vyos_op_scripts_dir}/nat.py show_statistics --direction destination --family inet</command> </node> <node name="translations"> <properties> diff --git a/src/op_mode/nat.py b/src/op_mode/nat.py index 845dbbb2c..f899eb3dc 100755 --- a/src/op_mode/nat.py +++ b/src/op_mode/nat.py @@ -22,12 +22,18 @@ import xmltodict from sys import exit from tabulate import tabulate +from vyos.configquery import ConfigTreeQuery + from vyos.util import cmd from vyos.util import dict_search import vyos.opmode +base = 'nat' +unconf_message = 'NAT is not configured' + + def _get_xml_translation(direction, family): """ Get conntrack XML output --src-nat|--dst-nat @@ -277,6 +283,20 @@ def _get_formatted_translation(dict_data, nat_direction, family): return output +def _verify(func): + """Decorator checks if NAT config exists""" + from functools import wraps + + @wraps(func) + def _wrapper(*args, **kwargs): + config = ConfigTreeQuery() + if not config.exists(base): + raise vyos.opmode.UnconfiguredSubsystem(unconf_message) + return func(*args, **kwargs) + return _wrapper + + +@_verify def show_rules(raw: bool, direction: str, family: str): nat_rules = _get_raw_data_rules(direction, family) if raw: @@ -285,6 +305,7 @@ def show_rules(raw: bool, direction: str, family: str): return _get_formatted_output_rules(nat_rules, direction, family) +@_verify def show_statistics(raw: bool, direction: str, family: str): nat_statistics = _get_raw_data_rules(direction, family) if raw: @@ -293,6 +314,7 @@ def show_statistics(raw: bool, direction: str, family: str): return _get_formatted_output_statistics(nat_statistics, direction) +@_verify def show_translations(raw: bool, direction: str, family: str): family = 'ipv6' if family == 'inet6' else 'ipv4' nat_translation = _get_raw_translation(direction, family) |