summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNataliia Solomko <natalirs1985@gmail.com>2024-03-11 12:32:46 +0200
committerNataliia Solomko <natalirs1985@gmail.com>2024-03-11 12:32:46 +0200
commit0364d44b4ffbcde647807c31e42c3662cc87e2e3 (patch)
tree39f6fb3ac08d2f53ed523d1b50c0a7c02b616810
parent423a25a814ca92870399dab1c5e107732a16292d (diff)
downloadvyos-1x-0364d44b4ffbcde647807c31e42c3662cc87e2e3.tar.gz
vyos-1x-0364d44b4ffbcde647807c31e42c3662cc87e2e3.zip
snmp: T2998: SNMP v3 oid "exclude" option fix
-rw-r--r--data/templates/snmp/etc.snmpd.conf.tmpl5
-rw-r--r--interface-definitions/snmp.xml.in1
-rwxr-xr-xsmoketest/scripts/cli/test_service_snmp.py20
-rwxr-xr-xsrc/conf_mode/snmp.py4
4 files changed, 30 insertions, 0 deletions
diff --git a/data/templates/snmp/etc.snmpd.conf.tmpl b/data/templates/snmp/etc.snmpd.conf.tmpl
index 30806ce8a..ca9b4d617 100644
--- a/data/templates/snmp/etc.snmpd.conf.tmpl
+++ b/data/templates/snmp/etc.snmpd.conf.tmpl
@@ -91,6 +91,11 @@ trap2sink {{ trap.target }}{{ ":" + trap.port if trap.port is defined }} {{ trap
{% for view in v3_views %}
{% for oid in view.oids %}
view {{ view.name }} included .{{ oid.oid }}
+{% if oid.exclude %}
+{% for excl in oid.exclude %}
+view {{ view.name }} excluded .{{ excl }}
+{% endfor %}
+{% endif %}
{% endfor %}
{% endfor %}
diff --git a/interface-definitions/snmp.xml.in b/interface-definitions/snmp.xml.in
index 1067aa8a8..48aee7c9a 100644
--- a/interface-definitions/snmp.xml.in
+++ b/interface-definitions/snmp.xml.in
@@ -599,6 +599,7 @@
<leafNode name="exclude">
<properties>
<help>Exclude is an optional argument</help>
+ <multi/>
</properties>
</leafNode>
<leafNode name="mask">
diff --git a/smoketest/scripts/cli/test_service_snmp.py b/smoketest/scripts/cli/test_service_snmp.py
index 864097771..5066b7942 100755
--- a/smoketest/scripts/cli/test_service_snmp.py
+++ b/smoketest/scripts/cli/test_service_snmp.py
@@ -225,5 +225,25 @@ class TestSNMPService(VyOSUnitTestSHIM.TestCase):
# Check for running process
self.assertTrue(process_named_running(PROCESS_NAME))
+ def test_snmpv3_view_exclude(self):
+ snmpv3_group = 'default_group'
+ snmpv3_view = 'default_view'
+ snmpv3_view_oid = '1'
+ snmpv3_view_oid_exclude = ['1.3.6.1.2.1.4.21', '1.3.6.1.2.1.4.24']
+
+ self.cli_set(base_path + ['v3', 'group', snmpv3_group, 'view', snmpv3_view])
+ self.cli_set(base_path + ['v3', 'view', snmpv3_view, 'oid', snmpv3_view_oid])
+
+ for excluded in snmpv3_view_oid_exclude:
+ self.cli_set(base_path + ['v3', 'view', snmpv3_view, 'oid', snmpv3_view_oid, 'exclude', excluded])
+
+ self.cli_commit()
+
+ tmp = read_file(SNMPD_CONF)
+ # views
+ self.assertIn(f'view {snmpv3_view} included .{snmpv3_view_oid}', tmp)
+ for excluded in snmpv3_view_oid_exclude:
+ self.assertIn(f'view {snmpv3_view} excluded .{excluded}', tmp)
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/src/conf_mode/snmp.py b/src/conf_mode/snmp.py
index 0be0da3d1..b300961ff 100755
--- a/src/conf_mode/snmp.py
+++ b/src/conf_mode/snmp.py
@@ -383,6 +383,10 @@ def get_config():
oid_cfg = {
'oid': oid
}
+ if conf.exists('v3 view {0} oid {1} exclude'.format(view, oid)):
+ oid_cfg['exclude'] = []
+ for exclude in conf.return_values('v3 view {0} oid {1} exclude'.format(view, oid)):
+ oid_cfg['exclude'].append(exclude)
view_cfg['oids'].append(oid_cfg)
snmp['v3_views'].append(view_cfg)