- Netgear Plus: a failed logout on close() now logs at debug level (B110),
so a swallowed failure leaves a trace; the module gets its logger.
- nosec for the firmware CDN probe (B310): the URL is built on the fixed
https base _FW_CDN_BASE, model and version only fill its path, so no
file:// or custom scheme can reach urlopen.
- nosec for the empty password in get_users (B105): it is NAPALM's field,
the CLI never shows a password; a false positive.
- The v7 LLDP table in a docstring loses one leading space per line to fit
line length 100.
- tests: a second TestGetLldpNeighbors class shadowed the first, whose two
tests never ran; the v7 one is now TestGetLldpNeighborsV7 and both run
(and pass). raise ... from exc in the netmiko stand-in.
Mechanical: ruff format, and ruff check --fix with the rule set every NAPALM
driver uses (E, F, I, UP, B at line length 100, Python 3.10). What ruff
cannot fix comes in the next commit.
The Plus driver looked the newest firmware up in Netgear's download
catalogue and named firmware_update_available itself. It now reports
get_firmware_offer() (napalm-device-types 4.16 FirmwareOfferMixin): what
runs, the newest offered, whether that is newer by Netgear's versioning,
and the download link; netOrk names the warning (netOrk #1111). The Smart
driver's empty get_device_warnings goes too. Requires
napalm-device-types 4.16.0.
SwitchDriver and AccessPointDriver both declared get_dot1x_config, but they
meant different things and returned different shapes — Dot1XPortDict per port on
a switch, Dot1XConfigDict per SSID on an access point. A device that is both
could not satisfy both contracts.
napalm-device-types v1.0 names them apart. This is the switch side.
BREAKING CHANGE: get_dot1x_config is now get_dot1x_ports on NetgearPlusDriver.
get_device_warnings() now returns only {code, meta} — severity, title,
message, and action are resolved centrally by netork's
WARNING_CATALOG (netork/core/device_warnings.py), not by the driver.
Keeps this driver independent of netork and avoids per-vendor drift in
how the same warning code is presented.
NetgearPlus: get_snmp_config() returns None (SNMP not accessible via HTTP API).
NetgearSmart: get_snmp_config() reads current community, fix_snmp configures
'snmp-server community public ro' via CLI.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>