diff --git a/snmp/changelog.d/23498.fixed b/snmp/changelog.d/23498.fixed new file mode 100644 index 0000000000000..e30214357a9c2 --- /dev/null +++ b/snmp/changelog.d/23498.fixed @@ -0,0 +1 @@ +Cisco Catalyst and Cisco Small Business (cisco-sb): use ``entPhysicalSerialNum`` at entPhysical indexes ``67109120`` (Catalyst 1300 / CBS350) and ``1`` as ``serial_number`` fallbacks when the primary chassis serial source is absent. Adds new Catalyst 9200 (``1.3.6.1.4.1.9.1.3079``) and Catalyst 1300 (``1.3.6.1.4.1.9.1.3233``, ``1.3.6.1.4.1.9.1.3236``) sysobjectids to the cisco-catalyst profile so those devices match and report a serial. diff --git a/snmp/datadog_checks/snmp/data/default_profiles/_cisco-catalyst.yaml b/snmp/datadog_checks/snmp/data/default_profiles/_cisco-catalyst.yaml index fc0e189ef50c6..7ae2c03cb3393 100644 --- a/snmp/datadog_checks/snmp/data/default_profiles/_cisco-catalyst.yaml +++ b/snmp/datadog_checks/snmp/data/default_profiles/_cisco-catalyst.yaml @@ -9,15 +9,17 @@ metadata: device: fields: serial_number: - symbol: - # Cisco Catalyst devices are using CISCO-STACK-MIB - # Source1: http://www.circitor.fr/Mibs/Html/C/CISCO-STACK-MIB.php - # "This MIB provides configuration and runtime status for chassis, modules, ports, etc. on the Catalyst systems." - # Source2: chassisSerialNumberString is present for this device: + symbols: + # CISCO-STACK-MIB: chassisSerialNumberString — primary chassis serial on classic Catalyst. + # Source 1: https://circitor.fr/Mibs/Html/CISCO-STACK-MIB.php + # Source 2: chassisSerialNumberString is present for this device: # Cisco Systems WS-C6509.Cisco Catalyst Operating System Software, Version 5.5(8).Copyright (c) 1995-2001 by Cisco Systems. - MIB: CISCO-STACK-MIB - OID: 1.3.6.1.4.1.9.5.1.2.19.0 - name: chassisSerialNumberString + - OID: 1.3.6.1.4.1.9.5.1.2.19.0 + name: chassisSerialNumberString + # ENTITY-MIB: entPhysicalSerialNum at entPhysicalIndex 67109120 — Catalyst 1300 / CBS-derived chassis. + # Reference: https://www.cisco.com/c/en/us/support/docs/smb/switches/Cisco-Business-Switching/kmgmt3636-snmpv3-common-oids-cbs350.html + - OID: 1.3.6.1.2.1.47.1.1.1.1.11.67109120 + name: entPhysicalSerialNum metrics: - MIB: CISCO-ENTITY-SENSOR-MIB diff --git a/snmp/datadog_checks/snmp/data/default_profiles/cisco-catalyst.yaml b/snmp/datadog_checks/snmp/data/default_profiles/cisco-catalyst.yaml index 5f0f9cc6b4fe0..f4e652a936e0a 100644 --- a/snmp/datadog_checks/snmp/data/default_profiles/cisco-catalyst.yaml +++ b/snmp/datadog_checks/snmp/data/default_profiles/cisco-catalyst.yaml @@ -463,3 +463,6 @@ sysobjectid: - 1.3.6.1.4.1.9.1.3023 # ciscoC1000FE48T4GL - 1.3.6.1.4.1.9.1.3024 # ciscoC1000FE48P4GL - 1.3.6.1.4.1.9.1.3069 # ciscoC8500L8S4X + - 1.3.6.1.4.1.9.1.3079 # ciscoC9200CX12P2X2G + - 1.3.6.1.4.1.9.1.3233 # ciscoC130024P4G + - 1.3.6.1.4.1.9.1.3236 # ciscoSwitch1300 diff --git a/snmp/datadog_checks/snmp/data/default_profiles/cisco-sb.yaml b/snmp/datadog_checks/snmp/data/default_profiles/cisco-sb.yaml index 81d79ab64421f..0ccbf138f1b00 100644 --- a/snmp/datadog_checks/snmp/data/default_profiles/cisco-sb.yaml +++ b/snmp/datadog_checks/snmp/data/default_profiles/cisco-sb.yaml @@ -10,6 +10,16 @@ metadata: fields: vendor: value: "cisco" + serial_number: + symbols: + # ENTITY-MIB: entPhysicalSerialNum at entPhysicalIndex 67109120 — CBS350 / Cisco Small Business chassis. + # Reference: https://www.cisco.com/c/en/us/support/docs/smb/switches/Cisco-Business-Switching/kmgmt3636-snmpv3-common-oids-cbs350.html + - OID: 1.3.6.1.2.1.47.1.1.1.1.11.67109120 + name: entPhysicalSerialNum + # ENTITY-MIB: entPhysicalSerialNum at entPhysicalIndex 1 — common chassis index. + # Source: https://circitor.fr/Mibs/Html/ENTITY-MIB.php + - OID: 1.3.6.1.2.1.47.1.1.1.1.11.1 + name: entPhysicalSerialNum metrics: - MIB: CISCOSB-rndMng symbol: diff --git a/snmp/tests/compose/data/_generic-entity-sensor.snmprec b/snmp/tests/compose/data/_generic-entity-sensor.snmprec index de760e26e0a39..85b96fb5315fe 100644 --- a/snmp/tests/compose/data/_generic-entity-sensor.snmprec +++ b/snmp/tests/compose/data/_generic-entity-sensor.snmprec @@ -18,4 +18,4 @@ 1.3.6.1.6.3.10.2.1.1.0|4x|4a616465642062757420666f7277617264 1.3.6.1.6.3.10.2.1.2.0|2|31 1.3.6.1.6.3.10.2.1.3.0|2|31 -1.3.6.1.6.3.10.2.1.4.0|2|1234 \ No newline at end of file +1.3.6.1.6.3.10.2.1.4.0|2|1234 diff --git a/snmp/tests/compose/data/anue.snmprec b/snmp/tests/compose/data/anue.snmprec index 1d410cbc9e4b9..aaf4062d39ab3 100644 --- a/snmp/tests/compose/data/anue.snmprec +++ b/snmp/tests/compose/data/anue.snmprec @@ -1,4 +1,4 @@ 1.3.6.1.2.1.1.1.0|4|anue-packet-broker Device Description 1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.32620.1.1 1.3.6.1.2.1.1.5.0|4|anue-packet-broker.device.name -1.3.6.1.2.1.2.1.0|2|4 \ No newline at end of file +1.3.6.1.2.1.2.1.0|2|4 diff --git a/snmp/tests/compose/data/cisco-5500-wlc.snmprec b/snmp/tests/compose/data/cisco-5500-wlc.snmprec index 28192b5379a84..f9e305da60b6a 100644 --- a/snmp/tests/compose/data/cisco-5500-wlc.snmprec +++ b/snmp/tests/compose/data/cisco-5500-wlc.snmprec @@ -625,4 +625,4 @@ 1.3.6.1.4.1.14179.2.2.13.1.24.0.0.0.0.0.17.0|2|0 1.3.6.1.4.1.14179.2.2.13.1.24.0.0.0.0.0.17.1|2|0 1.3.6.1.4.1.14179.2.2.13.1.24.0.0.0.0.0.18.0|2|0 -1.3.6.1.4.1.14179.2.2.13.1.24.0.0.0.0.0.18.1|2|0 \ No newline at end of file +1.3.6.1.4.1.14179.2.2.13.1.24.0.0.0.0.0.18.1|2|0 diff --git a/snmp/tests/compose/data/cisco-asa-5525.snmprec b/snmp/tests/compose/data/cisco-asa-5525.snmprec index 8184c651523c9..8a81a7714c74b 100644 --- a/snmp/tests/compose/data/cisco-asa-5525.snmprec +++ b/snmp/tests/compose/data/cisco-asa-5525.snmprec @@ -1475,4 +1475,4 @@ 1.3.6.1.6.3.10.2.1.3.0|2|4 1.3.6.1.6.3.10.2.1.3.0|2|28 1.3.6.1.6.3.10.2.1.4.0|2|567 -1.3.6.1.6.3.10.2.1.4.0|2|763 \ No newline at end of file +1.3.6.1.6.3.10.2.1.4.0|2|763 diff --git a/snmp/tests/compose/data/cisco-catalyst-1300.snmprec b/snmp/tests/compose/data/cisco-catalyst-1300.snmprec new file mode 100644 index 0000000000000..e04715152644c --- /dev/null +++ b/snmp/tests/compose/data/cisco-catalyst-1300.snmprec @@ -0,0 +1,4 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.3233 +1.3.6.1.2.1.1.3.0|67|470854 +1.3.6.1.2.1.1.5.0|4|catalyst-1300.example +1.3.6.1.2.1.47.1.1.1.1.11.67109120|4|FOCXXXXXXXX diff --git a/snmp/tests/compose/data/generic-ups.snmprec b/snmp/tests/compose/data/generic-ups.snmprec index 6ad13b03cac0f..5e81778cc2e6a 100644 --- a/snmp/tests/compose/data/generic-ups.snmprec +++ b/snmp/tests/compose/data/generic-ups.snmprec @@ -1,4 +1,4 @@ 1.3.6.1.2.1.1.1.0|4|generic-ups Device Description 1.3.6.1.2.1.1.2.0|6|1.3.6.1.2.1.33 1.3.6.1.2.1.1.5.0|4|generic-ups.device.name -1.3.6.1.2.1.33.1.2.2.0|2|10 \ No newline at end of file +1.3.6.1.2.1.33.1.2.2.0|2|10 diff --git a/snmp/tests/compose/data/juniper-variation.snmprec b/snmp/tests/compose/data/juniper-variation.snmprec index ab67508b4dd95..5ae40d268756a 100644 --- a/snmp/tests/compose/data/juniper-variation.snmprec +++ b/snmp/tests/compose/data/juniper-variation.snmprec @@ -21,4 +21,4 @@ 1.3.6.1.2.1.25.3.3.1.1.10|2|10 1.3.6.1.2.1.25.3.3.1.1.21|2|21 1.3.6.1.2.1.25.3.3.1.2.10|2|31 -1.3.6.1.2.1.25.3.3.1.2.21|2|15 \ No newline at end of file +1.3.6.1.2.1.25.3.3.1.2.21|2|15 diff --git a/snmp/tests/compose/data/juniper.snmprec b/snmp/tests/compose/data/juniper.snmprec index bff8cb320bf63..f243fee4446a6 100644 --- a/snmp/tests/compose/data/juniper.snmprec +++ b/snmp/tests/compose/data/juniper.snmprec @@ -21,4 +21,4 @@ 1.3.6.1.2.1.25.3.3.1.1.10|2|10 1.3.6.1.2.1.25.3.3.1.1.21|2|21 1.3.6.1.2.1.25.3.3.1.2.10|2|31 -1.3.6.1.2.1.25.3.3.1.2.21|2|15 \ No newline at end of file +1.3.6.1.2.1.25.3.3.1.2.21|2|15 diff --git a/snmp/tests/compose/data/watchguard.snmprec b/snmp/tests/compose/data/watchguard.snmprec index a7e31acb4c611..c106ac3eb03d3 100644 --- a/snmp/tests/compose/data/watchguard.snmprec +++ b/snmp/tests/compose/data/watchguard.snmprec @@ -16,4 +16,4 @@ 1.3.6.1.2.1.25.3.3.1.1.10|2|10 1.3.6.1.2.1.25.3.3.1.1.21|2|21 1.3.6.1.2.1.25.3.3.1.2.10|2|31 -1.3.6.1.2.1.25.3.3.1.2.21|2|15 \ No newline at end of file +1.3.6.1.2.1.25.3.3.1.2.21|2|15 diff --git a/snmp/tests/test_e2e_core_metadata.py b/snmp/tests/test_e2e_core_metadata.py index 5e80a7a477cf1..6630d8e120b0e 100644 --- a/snmp/tests/test_e2e_core_metadata.py +++ b/snmp/tests/test_e2e_core_metadata.py @@ -308,6 +308,51 @@ def test_e2e_core_metadata_cisco_catalyst(dd_agent_check): assert_device_metadata(aggregator, device) +def test_e2e_core_metadata_cisco_catalyst_entity_serial_fallback(dd_agent_check): + config = common.generate_container_instance_config([]) + instance = config['instances'][0] + instance.update( + { + 'community_string': 'cisco-catalyst-1300', + 'loader': 'core', + } + ) + + aggregator = dd_agent_check(config, rate=False) + + device_ip = instance['ip_address'] + device_id = 'default:' + device_ip + + device = { + 'id': device_id, + 'id_tags': [ + 'device_namespace:default', + 'snmp_device:' + device_ip, + ], + 'ip_address': device_ip, + 'name': 'catalyst-1300.example', + 'profile': 'cisco-catalyst', + 'status': 1, + 'sys_object_id': '1.3.6.1.4.1.9.1.3233', + 'tags': [ + 'agent_host:' + common.get_agent_hostname(), + 'device_id:' + device_id, + 'device_ip:' + device_ip, + 'device_namespace:default', + 'device_vendor:cisco', + 'snmp_device:' + device_ip, + 'snmp_host:catalyst-1300.example', + 'device_hostname:catalyst-1300.example', + 'snmp_profile:cisco-catalyst', + ], + 'vendor': 'cisco', + 'serial_number': 'FOCXXXXXXXX', + 'device_type': 'switch', + 'integration': 'snmp', + } + assert_device_metadata(aggregator, device) + + def test_e2e_core_metadata_hp_ilo4(dd_agent_check): config = common.generate_container_instance_config([]) instance = config['instances'][0] diff --git a/snmp/tests/test_profiles.py b/snmp/tests/test_profiles.py index f68ea17337c47..7cf0795c5c0d4 100644 --- a/snmp/tests/test_profiles.py +++ b/snmp/tests/test_profiles.py @@ -2939,6 +2939,21 @@ def test_cisco_catalyst(aggregator): aggregator.assert_metrics_using_metadata(get_metadata_metrics(), check_submission_type=True) +@pytest.mark.usefixtures("dd_environment") +def test_cisco_catalyst_entity_serial_fallback(aggregator): + # Exercises the entPhysicalSerialNum fallback when chassisSerialNumberString is absent. + run_profile_check('cisco-catalyst-1300', 'cisco-catalyst') + common_tags = common.CHECK_TAGS + [ + 'snmp_host:catalyst-1300.example', + 'device_hostname:catalyst-1300.example', + 'snmp_profile:cisco-catalyst', + 'device_vendor:cisco', + ] + + aggregator.assert_metric('snmp.sysUpTimeInstance', count=1) + common.assert_common_metrics(aggregator, common_tags) + + @pytest.mark.parametrize("file", ["juniper-ex", "juniper-ex-variation"]) @pytest.mark.usefixtures("dd_environment") def test_juniper_ex(aggregator, file):