From 51e677492a22e4bf2b5c2d01b0b9847096eedf58 Mon Sep 17 00:00:00 2001 From: Christian Manivong Date: Wed, 24 Jun 2026 15:41:45 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20OUI=5FPREFIXES=20auf=20DeviceTypeDriver?= =?UTF-8?q?=20f=C3=BCr=20MAC-basiertes=20Fingerprinting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- napalm_device_types/base.py | 3 +++ tests/test_fingerprint_base.py | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/napalm_device_types/base.py b/napalm_device_types/base.py index ffeff66..e3fb2c2 100644 --- a/napalm_device_types/base.py +++ b/napalm_device_types/base.py @@ -75,3 +75,6 @@ class DeviceTypeDriver(NetworkDriver): SNMP_FINGERPRINT: list[FingerprintRule] = [] SSH_FINGERPRINT: list[FingerprintRule] = [] HTTP_FINGERPRINT: list[FingerprintRule] = [] + OUI_PREFIXES: list[str] = [] + # Format: "AA:BB:CC" — first 3 octets of MAC, uppercase, colon-separated. + # A match contributes fixed weight 6.0 to the fingerprint score. diff --git a/tests/test_fingerprint_base.py b/tests/test_fingerprint_base.py index c060307..ea83a62 100644 --- a/tests/test_fingerprint_base.py +++ b/tests/test_fingerprint_base.py @@ -56,6 +56,7 @@ def test_defaults_on_device_type_driver(): assert DeviceTypeDriver.SNMP_FINGERPRINT == [] assert DeviceTypeDriver.SSH_FINGERPRINT == [] assert DeviceTypeDriver.HTTP_FINGERPRINT == [] + assert DeviceTypeDriver.OUI_PREFIXES == [] @pytest.mark.parametrize("cls", TYPE_DRIVERS) @@ -65,6 +66,7 @@ def test_fingerprint_attributes_inherited(cls): assert hasattr(cls, "SSH_FINGERPRINT") assert hasattr(cls, "PORT_SPECS") assert hasattr(cls, "SNMP_OBJECT_ID_PREFIX") + assert hasattr(cls, "OUI_PREFIXES") # ── FingerprintRule ─────────────────────────────────────────────────────────── @@ -125,13 +127,16 @@ def test_concrete_driver_overrides_fingerprint(): DRIVER_NAME = "acme" HTTP_FINGERPRINT = [FingerprintRule("acme portal", weight=9.0, mandatory=True)] PORT_SPECS = [PortSpec("https", 9443, weight=7.0)] + OUI_PREFIXES = ["AA:BB:CC"] assert MyDriver.VENDOR == "Acme" assert MyDriver.HTTP_FINGERPRINT[0].pattern == "acme portal" assert MyDriver.PORT_SPECS[0].port == 9443 + assert MyDriver.OUI_PREFIXES == ["AA:BB:CC"] # base class unaffected assert FirewallDriver.HTTP_FINGERPRINT == [] assert FirewallDriver.PORT_SPECS is None + assert FirewallDriver.OUI_PREFIXES == [] def test_type_label_unaffected_by_refactor():